summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulius Goryavsky <julius.goryavsky@mariadb.com>2020-03-11 12:07:06 +0100
committerJulius Goryavsky <julius.goryavsky@mariadb.com>2020-03-11 12:07:06 +0100
commit19ef6bb73823bb213591deb7dff1b211fa59920e (patch)
treef59cc56ffd57ca7aa3694e5160e752d7bde90706
parente9765e6d594d98ae52acf0c1278857cc6c7061cc (diff)
parent9d7ed94f6a526748eff29dae2939a3fd341f118b (diff)
downloadmariadb-git-bb-10.5-MDEV-13362.tar.gz
Merge branch '10.5' of https://github.com/MariaDB/server into bb-10.5-MDEV-13362bb-10.5-MDEV-13362
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt5
-rw-r--r--client/CMakeLists.txt4
-rw-r--r--client/client_metadata.h57
-rw-r--r--client/completion_hash.cc6
-rw-r--r--client/mysql.cc52
-rw-r--r--client/mysql_plugin.c42
-rw-r--r--client/mysql_upgrade.c61
-rw-r--r--client/mysqladmin.cc8
-rw-r--r--client/mysqlbinlog.cc21
-rw-r--r--client/mysqlcheck.c29
-rw-r--r--client/mysqldump.c46
-rw-r--r--client/mysqlimport.c7
-rw-r--r--client/mysqlshow.c2
-rw-r--r--client/mysqlslap.c72
-rw-r--r--client/mysqltest.cc120
-rw-r--r--client/readline.cc18
-rw-r--r--client/sql_string.cc.dontuse836
-rw-r--r--client/sql_string.h.dontuse366
-rw-r--r--cmake/create_initial_db.cmake9
-rw-r--r--cmake/os/Linux.cmake1
-rw-r--r--cmake/os/Windows.cmake6
-rw-r--r--cmake/pcre.cmake7
-rw-r--r--config.h.cmake1
-rwxr-xr-xdebian/autobake-deb.sh12
-rw-r--r--debian/control5
-rw-r--r--debian/mariadb-backup.install1
-rw-r--r--debian/mariadb-client-10.5.install3
-rw-r--r--debian/mariadb-plugin-rocksdb.install2
-rw-r--r--debian/mariadb-server-10.5.install8
-rw-r--r--debian/mariadb-server-core-10.5.install8
-rw-r--r--debian/not-installed1
-rw-r--r--extra/comp_err.c36
-rw-r--r--extra/mariabackup/backup_mysql.cc8
-rw-r--r--extra/mariabackup/crc/crc_glue.c4
-rw-r--r--extra/mariabackup/ds_buffer.cc11
-rw-r--r--extra/mariabackup/ds_compress.cc21
-rw-r--r--extra/mariabackup/ds_local.cc6
-rw-r--r--extra/mariabackup/ds_stdout.cc10
-rw-r--r--extra/mariabackup/ds_tmpfile.cc15
-rw-r--r--extra/mariabackup/ds_xbstream.cc9
-rw-r--r--extra/mariabackup/innobackupex.cc3
-rw-r--r--extra/mariabackup/xbstream.cc10
-rw-r--r--extra/mariabackup/xbstream_read.cc4
-rw-r--r--extra/mariabackup/xbstream_write.cc4
-rw-r--r--extra/mariabackup/xtrabackup.cc14
-rw-r--r--extra/my_print_defaults.c3
-rw-r--r--extra/replace.c49
-rw-r--r--extra/resolve_stack_dump.c4
-rw-r--r--include/hash.h17
-rw-r--r--include/heap.h1
-rw-r--r--include/my_alloc.h6
-rw-r--r--include/my_bit.h48
-rw-r--r--include/my_compiler.h8
-rw-r--r--include/my_cpu.h1
-rw-r--r--include/my_pthread.h13
-rw-r--r--include/my_stack_alloc.h4
-rw-r--r--include/my_sys.h44
-rw-r--r--include/mysql.h11
-rw-r--r--include/mysql.h.pp18
-rw-r--r--include/mysql/psi/mysql_file.h481
-rw-r--r--include/mysql/psi/mysql_idle.h6
-rw-r--r--include/mysql/psi/mysql_mdl.h143
-rw-r--r--include/mysql/psi/mysql_memory.h79
-rw-r--r--include/mysql/psi/mysql_ps.h108
-rw-r--r--include/mysql/psi/mysql_socket.h116
-rw-r--r--include/mysql/psi/mysql_sp.h104
-rw-r--r--include/mysql/psi/mysql_stage.h134
-rw-r--r--include/mysql/psi/mysql_statement.h25
-rw-r--r--include/mysql/psi/mysql_table.h91
-rw-r--r--include/mysql/psi/mysql_thread.h72
-rw-r--r--include/mysql/psi/mysql_transaction.h220
-rw-r--r--include/mysql/psi/psi.h899
-rw-r--r--include/mysql/psi/psi_abi_v0.h2
-rw-r--r--include/mysql/psi/psi_abi_v0.h.pp53
-rw-r--r--include/mysql/psi/psi_abi_v1.h.pp283
-rw-r--r--include/mysql/psi/psi_abi_v2.h2
-rw-r--r--include/mysql/psi/psi_abi_v2.h.pp91
-rw-r--r--include/mysql/psi/psi_base.h33
-rw-r--r--include/mysql/psi/psi_memory.h18
-rw-r--r--include/mysql_com.h20
-rw-r--r--include/pfs_file_provider.h92
-rw-r--r--include/pfs_idle_provider.h48
-rw-r--r--include/pfs_memory_provider.h57
-rw-r--r--include/pfs_metadata_provider.h67
-rw-r--r--include/pfs_socket_provider.h71
-rw-r--r--include/pfs_stage_provider.h52
-rw-r--r--include/pfs_statement_provider.h118
-rw-r--r--include/pfs_table_provider.h83
-rw-r--r--include/pfs_thread_provider.h170
-rw-r--r--include/pfs_transaction_provider.h79
-rw-r--r--include/thread_pool_priv.h6
-rw-r--r--include/violite.h5
-rw-r--r--libmysqld/CMakeLists.txt6
-rw-r--r--libmysqld/emb_qcache.cc3
-rw-r--r--libmysqld/embedded_priv.h7
-rw-r--r--libmysqld/lib_sql.cc60
-rw-r--r--libmysqld/libmysql.c49
-rw-r--r--libmysqld/libmysqld.c4
-rw-r--r--man/CMakeLists.txt14
-rw-r--r--man/mariadb-conv.1104
-rw-r--r--man/myrocks_hotbackup.182
-rw-r--r--man/mysql-test-run.pl.114
-rw-r--r--man/mytop.17
-rw-r--r--mysql-test/include/default_mysqld.cnf12
-rw-r--r--mysql-test/include/maybe_pool_of_threads.combinations5
-rw-r--r--mysql-test/include/maybe_pool_of_threads.inc1
-rw-r--r--mysql-test/include/not_threadpool.inc3
-rw-r--r--mysql-test/include/wait_for_sql_thread_read_all.inc2
-rw-r--r--mysql-test/main/alter_table,aria.rdiff22
-rw-r--r--mysql-test/main/alter_table,heap.rdiff59
-rw-r--r--mysql-test/main/alter_table.combinations5
-rw-r--r--mysql-test/main/alter_table.result681
-rw-r--r--mysql-test/main/alter_table.test380
-rw-r--r--mysql-test/main/alter_user.result38
-rw-r--r--mysql-test/main/alter_user.test29
-rw-r--r--mysql-test/main/analyze_format_json.result6
-rw-r--r--mysql-test/main/analyze_stmt_orderby.result7
-rw-r--r--mysql-test/main/brackets.result6
-rw-r--r--mysql-test/main/cte_cycle.result156
-rw-r--r--mysql-test/main/cte_cycle.test143
-rw-r--r--mysql-test/main/cte_nonrecursive.result4
-rw-r--r--mysql-test/main/cte_recursive.result6
-rw-r--r--mysql-test/main/events_bugs.result4
-rw-r--r--mysql-test/main/func_misc.result91
-rw-r--r--mysql-test/main/func_misc.test59
-rw-r--r--mysql-test/main/gis.result206
-rw-r--r--mysql-test/main/gis.test121
-rw-r--r--mysql-test/main/grant.result11
-rw-r--r--mysql-test/main/grant_kill.result76
-rw-r--r--mysql-test/main/grant_kill.test88
-rw-r--r--mysql-test/main/grant_master_admin.result36
-rw-r--r--mysql-test/main/grant_master_admin.test47
-rw-r--r--mysql-test/main/grant_read_only.result73
-rw-r--r--mysql-test/main/grant_read_only.test83
-rw-r--r--mysql-test/main/grant_server.result61
-rw-r--r--mysql-test/main/grant_server.test75
-rw-r--r--mysql-test/main/grant_slave_admin.result96
-rw-r--r--mysql-test/main/grant_slave_admin.test129
-rw-r--r--mysql-test/main/information_schema_all_engines.result8
-rw-r--r--mysql-test/main/information_schema_db.result2
-rw-r--r--mysql-test/main/mysql-metadata.result87
-rw-r--r--mysql-test/main/mysql-metadata.test22
-rw-r--r--mysql-test/main/mysqld--help.result80
-rw-r--r--mysql-test/main/mysqldump.result4
-rw-r--r--mysql-test/main/order_by.result305
-rw-r--r--mysql-test/main/order_by.test81
-rw-r--r--mysql-test/main/order_by_pack_big.result171
-rw-r--r--mysql-test/main/order_by_pack_big.test52
-rw-r--r--mysql-test/main/rpl_mysql_upgrade_slave_repo_check.result33
-rw-r--r--mysql-test/main/rpl_mysql_upgrade_slave_repo_check.test127
-rw-r--r--mysql-test/main/sp-security.result6
-rw-r--r--mysql-test/main/sp-security.test2
-rw-r--r--mysql-test/main/system_mysql_db_error_log-master.opt1
-rw-r--r--mysql-test/main/system_mysql_db_error_log.result114
-rw-r--r--mysql-test/main/system_mysql_db_error_log.test113
-rw-r--r--mysql-test/main/table_value_constr.result2
-rw-r--r--mysql-test/main/trigger_notembedded.result4
-rw-r--r--mysql-test/main/trigger_notembedded.test2
-rw-r--r--mysql-test/main/type_json.result30
-rw-r--r--mysql-test/main/type_json.test27
-rw-r--r--mysql-test/main/view_grant.result31
-rw-r--r--mysql-test/main/view_grant.test19
-rw-r--r--mysql-test/main/xa.result57
-rw-r--r--mysql-test/main/xa.test67
-rw-r--r--mysql-test/std_data/wl5766_data.txt100000
-rw-r--r--mysql-test/suite/binlog/r/binlog_grant.result85
-rw-r--r--mysql-test/suite/binlog/t/binlog_grant.test103
-rw-r--r--mysql-test/suite/encryption/r/innodb-scrub-log.result3
-rw-r--r--mysql-test/suite/encryption/t/innodb-scrub-log.opt1
-rw-r--r--mysql-test/suite/encryption/t/innodb-scrub-log.test13
-rw-r--r--mysql-test/suite/federated/federated_server.result8
-rw-r--r--mysql-test/suite/federated/federatedx_create_handlers.result22
-rw-r--r--mysql-test/suite/federated/federatedx_create_handlers.test21
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_trig_03.result10
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_trig_03e.result8
-rw-r--r--mysql-test/suite/funcs_1/r/is_user_privileges.result33
-rw-r--r--mysql-test/suite/funcs_1/r/memory_trig_03.result10
-rw-r--r--mysql-test/suite/funcs_1/r/memory_trig_03e.result8
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_trig_03.result10
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_trig_03e.result8
-rw-r--r--mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result24
-rw-r--r--mysql-test/suite/funcs_1/r/processlist_priv_ps.result24
-rw-r--r--mysql-test/suite/funcs_1/r/processlist_val_no_prot.result10
-rw-r--r--mysql-test/suite/funcs_1/r/processlist_val_ps.result10
-rw-r--r--mysql-test/suite/funcs_1/t/is_user_privileges.test26
-rw-r--r--mysql-test/suite/innodb/r/alter_rename_existing.result2
-rw-r--r--mysql-test/suite/innodb/r/alter_rename_files.result19
-rw-r--r--mysql-test/suite/innodb/r/alter_table.result10
-rw-r--r--mysql-test/suite/innodb/r/foreign_key.result4
-rw-r--r--mysql-test/suite/innodb/r/information_schema_grants.result9
-rw-r--r--mysql-test/suite/innodb/r/innodb-alter-debug.result9
-rw-r--r--mysql-test/suite/innodb/r/innodb_rename_index.result989
-rw-r--r--mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result6
-rw-r--r--mysql-test/suite/innodb/r/monitor.result111
-rw-r--r--mysql-test/suite/innodb/t/alter_rename_existing.test2
-rw-r--r--mysql-test/suite/innodb/t/alter_rename_files.test31
-rw-r--r--mysql-test/suite/innodb/t/alter_table.test11
-rw-r--r--mysql-test/suite/innodb/t/information_schema_grants.opt1
-rw-r--r--mysql-test/suite/innodb/t/information_schema_grants.test9
-rw-r--r--mysql-test/suite/innodb/t/innodb-alter-debug.test12
-rw-r--r--mysql-test/suite/innodb/t/innodb_rename_index.test538
-rw-r--r--mysql-test/suite/innodb/t/innodb_skip_innodb_is_tables.test1
-rw-r--r--mysql-test/suite/innodb/t/monitor.test92
-rw-r--r--mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.opt1
-rw-r--r--mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.result13
-rw-r--r--mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.test3
-rw-r--r--mysql-test/suite/innodb_zip/r/innochecksum_3.result4
-rw-r--r--mysql-test/suite/innodb_zip/r/recover.result17
-rw-r--r--mysql-test/suite/innodb_zip/t/recover.test16
-rw-r--r--mysql-test/suite/multi_source/info_logs.result8
-rw-r--r--mysql-test/suite/multi_source/multi_source_slave_alias_replica.result8
-rw-r--r--mysql-test/suite/multi_source/simple.result8
-rw-r--r--mysql-test/suite/perfschema/disabled.def31
-rw-r--r--mysql-test/suite/perfschema/include/binlog_edge_common.inc8
-rw-r--r--mysql-test/suite/perfschema/include/event_aggregate_cleanup.inc7
-rw-r--r--mysql-test/suite/perfschema/include/event_aggregate_load.inc341
-rw-r--r--mysql-test/suite/perfschema/include/event_aggregate_setup.inc109
-rw-r--r--mysql-test/suite/perfschema/include/memory_aggregate_cleanup.inc45
-rw-r--r--mysql-test/suite/perfschema/include/memory_aggregate_load.inc506
-rw-r--r--mysql-test/suite/perfschema/include/memory_aggregate_setup.inc208
-rw-r--r--mysql-test/suite/perfschema/include/prepared_stmts_deallocation.inc11
-rw-r--r--mysql-test/suite/perfschema/include/prepared_stmts_execution.inc18
-rw-r--r--mysql-test/suite/perfschema/include/prepared_stmts_setup.inc20
-rw-r--r--mysql-test/suite/perfschema/include/program_cleanup.inc31
-rw-r--r--mysql-test/suite/perfschema/include/program_execution.inc54
-rw-r--r--mysql-test/suite/perfschema/include/program_nested_cleanup.inc21
-rw-r--r--mysql-test/suite/perfschema/include/program_nested_execution.inc22
-rw-r--r--mysql-test/suite/perfschema/include/program_nested_setup.inc88
-rw-r--r--mysql-test/suite/perfschema/include/program_setup.inc136
-rw-r--r--mysql-test/suite/perfschema/include/reset_transaction_gtid.inc20
-rw-r--r--mysql-test/suite/perfschema/include/schema.inc15
-rw-r--r--mysql-test/suite/perfschema/include/show_aggregate.inc125
-rw-r--r--mysql-test/suite/perfschema/include/show_plugin_verifier.inc29
-rw-r--r--mysql-test/suite/perfschema/include/show_transaction_gtid.inc29
-rw-r--r--mysql-test/suite/perfschema/include/sizing_auto.inc24
-rw-r--r--mysql-test/suite/perfschema/include/start_server_common.inc45
-rw-r--r--mysql-test/suite/perfschema/include/table_aggregate_load.inc63
-rw-r--r--mysql-test/suite/perfschema/include/table_aggregate_setup.inc6
-rw-r--r--mysql-test/suite/perfschema/include/table_io_result_helper.inc3
-rw-r--r--mysql-test/suite/perfschema/include/transaction_cleanup.inc12
-rw-r--r--mysql-test/suite/perfschema/include/transaction_nested_events_verifier.inc144
-rw-r--r--mysql-test/suite/perfschema/include/transaction_setup.inc231
-rw-r--r--mysql-test/suite/perfschema/include/upgrade_check.inc1
-rw-r--r--mysql-test/suite/perfschema/include/wait_for_pfs_thread_count.inc2
-rw-r--r--mysql-test/suite/perfschema/r/all_tests.result3
-rw-r--r--mysql-test/suite/perfschema/r/alter_table_progress.result100
-rw-r--r--mysql-test/suite/perfschema/r/bad_option.result8
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_1.result4
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_2.result3
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_3.result4
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_4.result4
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_5.result4
-rw-r--r--mysql-test/suite/perfschema/r/batch_table_io_func.result195
-rw-r--r--mysql-test/suite/perfschema/r/binlog_edge_mix.result8
-rw-r--r--mysql-test/suite/perfschema/r/binlog_edge_row.result8
-rw-r--r--mysql-test/suite/perfschema/r/binlog_edge_stmt.result8
-rw-r--r--mysql-test/suite/perfschema/r/binlog_ok_mix.result8
-rw-r--r--mysql-test/suite/perfschema/r/binlog_ok_row.result8
-rw-r--r--mysql-test/suite/perfschema/r/binlog_ok_stmt.result8
-rw-r--r--mysql-test/suite/perfschema/r/checksum.result16
-rw-r--r--mysql-test/suite/perfschema/r/cnf_option.result4
-rw-r--r--mysql-test/suite/perfschema/r/connect_attrs.result4
-rw-r--r--mysql-test/suite/perfschema/r/connection_type_notwin.result82
-rw-r--r--mysql-test/suite/perfschema/r/connection_type_win.result81
-rw-r--r--mysql-test/suite/perfschema/r/csv_table_io.result92
-rw-r--r--mysql-test/suite/perfschema/r/ddl_esms_by_program.result9
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ets_by_account_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ets_by_host_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ets_by_thread_by_event_name.result9
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ets_by_user_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ets_global_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_stages_current.result3
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_stages_history.result3
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_stages_history_long.result3
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_transactions_current.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_transactions_history.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_transactions_history_long.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_global_status.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_global_variables.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_mems_by_account_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_mems_by_host_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_mems_by_thread_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_mems_by_user_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_mems_global_by_event_name.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_metadata_locks.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_prepared_statements_instances.result9
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_applier_configuration.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_applier_status.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_coordinator.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_worker.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_connection_configuration.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_connection_status.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_group_member_stats.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_replication_group_members.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_session_status.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_session_variables.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_setup_actors.result2
-rw-r--r--mysql-test/suite/perfschema/r/ddl_status_by_account.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_status_by_host.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_status_by_thread.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_status_by_user.result10
-rw-r--r--mysql-test/suite/perfschema/r/ddl_table_handles.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_uvar_by_thread.result11
-rw-r--r--mysql-test/suite/perfschema/r/ddl_variables_by_thread.result11
-rw-r--r--mysql-test/suite/perfschema/r/digest_table_full.result2
-rw-r--r--mysql-test/suite/perfschema/r/dml_esms_by_program.result27
-rw-r--r--mysql-test/suite/perfschema/r/dml_ets_by_account_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_ets_by_host_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_ets_by_thread_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_ets_by_user_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_ets_global_by_event_name.result25
-rw-r--r--mysql-test/suite/perfschema/r/dml_events_transactions_current.result25
-rw-r--r--mysql-test/suite/perfschema/r/dml_events_transactions_history.result29
-rw-r--r--mysql-test/suite/perfschema/r/dml_events_transactions_history_long.result29
-rw-r--r--mysql-test/suite/perfschema/r/dml_file_instances.result59
-rw-r--r--mysql-test/suite/perfschema/r/dml_global_status.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_global_variables.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_handler.result156
-rw-r--r--mysql-test/suite/perfschema/r/dml_mems_by_account_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_mems_by_host_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_mems_by_thread_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_mems_by_user_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_mems_global_by_event_name.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_metadata_locks.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_prepared_statements_instances.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_applier_configuration.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_applier_status.result24
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_applier_status_by_coordinator.result25
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_applier_status_by_worker.result25
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_connection_configuration.result25
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_connection_status.result25
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_group_member_stats.result26
-rw-r--r--mysql-test/suite/perfschema/r/dml_replication_group_members.result24
-rw-r--r--mysql-test/suite/perfschema/r/dml_session_status.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_session_variables.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_actors.result78
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_consumers.result6
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_instruments.result7
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_objects.result2
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_timers.result41
-rw-r--r--mysql-test/suite/perfschema/r/dml_status_by_account.result24
-rw-r--r--mysql-test/suite/perfschema/r/dml_status_by_host.result24
-rw-r--r--mysql-test/suite/perfschema/r/dml_status_by_thread.result24
-rw-r--r--mysql-test/suite/perfschema/r/dml_status_by_user.result24
-rw-r--r--mysql-test/suite/perfschema/r/dml_table_handles.result21
-rw-r--r--mysql-test/suite/perfschema/r/dml_uvar_by_thread.result30
-rw-r--r--mysql-test/suite/perfschema/r/dml_variables_by_thread.result24
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate.result5725
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_a.result4048
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_a_no_h.result3523
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u.result2303
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u_no_h.result1778
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_h.result5200
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_u.result3980
-rw-r--r--mysql-test/suite/perfschema/r/event_aggregate_no_u_no_h.result3455
-rw-r--r--mysql-test/suite/perfschema/r/file_misc.result1
-rw-r--r--mysql-test/suite/perfschema/r/func_file_io.result9
-rw-r--r--mysql-test/suite/perfschema/r/func_mutex.result11
-rw-r--r--mysql-test/suite/perfschema/r/global_objects.result33
-rw-r--r--mysql-test/suite/perfschema/r/global_read_lock.result2
-rw-r--r--mysql-test/suite/perfschema/r/indexed_table_io.result47
-rw-r--r--mysql-test/suite/perfschema/r/information_schema.result450
-rw-r--r--mysql-test/suite/perfschema/r/innodb_table_io.result92
-rw-r--r--mysql-test/suite/perfschema/r/io_cache.result96
-rw-r--r--mysql-test/suite/perfschema/r/max_program_zero.result313
-rw-r--r--mysql-test/suite/perfschema/r/mdl_func.result920
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate.result5602
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_32bit.result5602
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_a.result4014
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_h.result3464
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u.result2442
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u_no_h.result1892
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_h.result5052
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_u.result4030
-rw-r--r--mysql-test/suite/perfschema/r/memory_aggregate_no_u_no_h.result3480
-rw-r--r--mysql-test/suite/perfschema/r/memory_table_io.result94
-rw-r--r--mysql-test/suite/perfschema/r/merge_table_io.result104
-rw-r--r--mysql-test/suite/perfschema/r/misc.result14
-rw-r--r--mysql-test/suite/perfschema/r/multi_table_io.result58
-rw-r--r--mysql-test/suite/perfschema/r/myisam_file_io.result53
-rw-r--r--mysql-test/suite/perfschema/r/myisam_table_io.result92
-rw-r--r--mysql-test/suite/perfschema/r/nesting.result65
-rw-r--r--mysql-test/suite/perfschema/r/no_threads.result17
-rw-r--r--mysql-test/suite/perfschema/r/one_thread_per_con.result8
-rw-r--r--mysql-test/suite/perfschema/r/ortho_iter.result855
-rw-r--r--mysql-test/suite/perfschema/r/part_table_io.result90
-rw-r--r--mysql-test/suite/perfschema/r/prepared_statements.result672
-rw-r--r--mysql-test/suite/perfschema/r/prepared_stmts_by_stored_programs.result126
-rw-r--r--mysql-test/suite/perfschema/r/privilege.result16
-rw-r--r--mysql-test/suite/perfschema/r/privilege_table_io.result88
-rw-r--r--mysql-test/suite/perfschema/r/query_cache.result28
-rw-r--r--mysql-test/suite/perfschema/r/read_only.result5
-rw-r--r--mysql-test/suite/perfschema/r/relaylog.result8
-rw-r--r--mysql-test/suite/perfschema/r/rollback_table_io.result42
-rw-r--r--mysql-test/suite/perfschema/r/rpl_group_member_stats.result8
-rw-r--r--mysql-test/suite/perfschema/r/rpl_group_members.result5
-rw-r--r--mysql-test/suite/perfschema/r/rpl_gtid_func.result50
-rw-r--r--mysql-test/suite/perfschema/r/rpl_statements.result6
-rw-r--r--mysql-test/suite/perfschema/r/rpl_threads.result61
-rw-r--r--mysql-test/suite/perfschema/r/schema.result381
-rw-r--r--mysql-test/suite/perfschema/r/server_init.result49
-rw-r--r--mysql-test/suite/perfschema/r/setup_actors.result48
-rw-r--r--mysql-test/suite/perfschema/r/setup_actors_enabled.result136
-rw-r--r--mysql-test/suite/perfschema/r/setup_actors_history.result138
-rw-r--r--mysql-test/suite/perfschema/r/setup_consumers_defaults.result5
-rw-r--r--mysql-test/suite/perfschema/r/setup_instruments_defaults.result21
-rw-r--r--mysql-test/suite/perfschema/r/setup_object_table_lock_io.result91
-rw-r--r--mysql-test/suite/perfschema/r/setup_objects.result4
-rw-r--r--mysql-test/suite/perfschema/r/short_option_1.result12
-rw-r--r--mysql-test/suite/perfschema/r/short_option_2.result2
-rw-r--r--mysql-test/suite/perfschema/r/show_aggregate.result530
-rw-r--r--mysql-test/suite/perfschema/r/show_coverage.result142
-rw-r--r--mysql-test/suite/perfschema/r/show_misc.result74
-rw-r--r--mysql-test/suite/perfschema/r/show_plugin.result626
-rw-r--r--mysql-test/suite/perfschema/r/show_sanity.result853
-rw-r--r--mysql-test/suite/perfschema/r/sizing_default.result69
-rw-r--r--mysql-test/suite/perfschema/r/sizing_growth.result255
-rw-r--r--mysql-test/suite/perfschema/r/sizing_high.result69
-rw-r--r--mysql-test/suite/perfschema/r/sizing_low.result70
-rw-r--r--mysql-test/suite/perfschema/r/sizing_med.result69
-rw-r--r--mysql-test/suite/perfschema/r/sizing_off.result60
-rw-r--r--mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result10
-rw-r--r--mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result26
-rw-r--r--mysql-test/suite/perfschema/r/stage_mdl_function.result12
-rw-r--r--mysql-test/suite/perfschema/r/stage_mdl_global.result12
-rw-r--r--mysql-test/suite/perfschema/r/stage_mdl_procedure.result12
-rw-r--r--mysql-test/suite/perfschema/r/stage_mdl_table.result14
-rw-r--r--mysql-test/suite/perfschema/r/start_server_disable_idle.result138
-rw-r--r--mysql-test/suite/perfschema/r/start_server_disable_stages.result138
-rw-r--r--mysql-test/suite/perfschema/r/start_server_disable_statements.result138
-rw-r--r--mysql-test/suite/perfschema/r/start_server_disable_transactions.result167
-rw-r--r--mysql-test/suite/perfschema/r/start_server_disable_waits.result138
-rw-r--r--mysql-test/suite/perfschema/r/start_server_innodb.result147
-rw-r--r--mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result12
-rw-r--r--mysql-test/suite/perfschema/r/start_server_low_index.result280
-rw-r--r--mysql-test/suite/perfschema/r/start_server_low_table_lock.result237
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_account.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_cond_class.result142
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_cond_inst.result144
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_digests.result2
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_file_class.result142
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_file_inst.result146
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_host.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_index.result185
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_mdl.result161
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_memory_class.result235
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_mutex_class.result142
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result146
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result212
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result142
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result146
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_setup_actors.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_setup_objects.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_socket_class.result142
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_socket_inst.result144
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_stage_class.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_stages_history.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_statement_class.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_statements_history.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_table_hdl.result144
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_table_inst.result144
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_table_lock.result177
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_thread_class.result142
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_thread_inst.result144
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_transactions_history.result156
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result156
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_user.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_waits_history.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result140
-rw-r--r--mysql-test/suite/perfschema/r/start_server_nothing.result278
-rw-r--r--mysql-test/suite/perfschema/r/start_server_off.result217
-rw-r--r--mysql-test/suite/perfschema/r/start_server_on.result147
-rw-r--r--mysql-test/suite/perfschema/r/start_server_variables.result154
-rw-r--r--mysql-test/suite/perfschema/r/start_server_zero_digest_sql_length.result12
-rw-r--r--mysql-test/suite/perfschema/r/statement_digest.result2
-rw-r--r--mysql-test/suite/perfschema/r/statement_digest_consumers.result3
-rw-r--r--mysql-test/suite/perfschema/r/statement_digest_consumers2.result3
-rw-r--r--mysql-test/suite/perfschema/r/statement_digest_long_query.result4
-rw-r--r--mysql-test/suite/perfschema/r/statement_program_concurrency.result117
-rw-r--r--mysql-test/suite/perfschema/r/statement_program_lost_inst.result335
-rw-r--r--mysql-test/suite/perfschema/r/statement_program_nested.result2333
-rw-r--r--mysql-test/suite/perfschema/r/statement_program_nesting_event_check.result1514
-rw-r--r--mysql-test/suite/perfschema/r/statement_program_non_nested.result706
-rw-r--r--mysql-test/suite/perfschema/r/status_reprepare.result42
-rw-r--r--mysql-test/suite/perfschema/r/sxlock_func.result65
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_global_2u_2t.result664
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_global_2u_3t.result732
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_global_4u_2t.result668
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_global_4u_3t.result736
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_hist_2u_2t.result898
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_hist_2u_3t.result1006
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_hist_4u_2t.result1046
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_hist_4u_3t.result1154
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_off.result338
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_thread_2u_2t.result826
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_thread_2u_3t.result894
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_thread_4u_2t.result970
-rw-r--r--mysql-test/suite/perfschema/r/table_aggregate_thread_4u_3t.result1038
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_2t.result664
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_3t.result732
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_2t.result668
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_3t.result736
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_2t.result896
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_3t.result1003
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_2t.result1044
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_3t.result1151
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_2t.result826
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_3t.result894
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_2t.result970
-rw-r--r--mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_3t.result1038
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_2t.result392
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_3t.result334
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_2t.result396
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_3t.result338
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_2t.result394
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_3t.result337
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_2t.result398
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_3t.result341
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_2t.result392
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_3t.result334
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_2t.result396
-rw-r--r--mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_3t.result338
-rw-r--r--mysql-test/suite/perfschema/r/table_name.result33
-rw-r--r--mysql-test/suite/perfschema/r/table_schema.result437
-rw-r--r--mysql-test/suite/perfschema/r/temp_table_io.result46
-rw-r--r--mysql-test/suite/perfschema/r/thread_cache.result6
-rw-r--r--mysql-test/suite/perfschema/r/thread_misc.result1
-rw-r--r--mysql-test/suite/perfschema/r/threads_history.result700
-rw-r--r--mysql-test/suite/perfschema/r/threads_mysql_freebsd.result3
-rw-r--r--mysql-test/suite/perfschema/r/threads_mysql_linux.result3
-rw-r--r--mysql-test/suite/perfschema/r/threads_mysql_windows.result3
-rw-r--r--mysql-test/suite/perfschema/r/transaction.result680
-rw-r--r--mysql-test/suite/perfschema/r/transaction_gtid.result171
-rw-r--r--mysql-test/suite/perfschema/r/transaction_nested_events.result1258
-rw-r--r--mysql-test/suite/perfschema/r/trigger_table_io.result178
-rw-r--r--mysql-test/suite/perfschema/r/user_var_func.result91
-rw-r--r--mysql-test/suite/perfschema/r/view_table_io.result96
-rw-r--r--mysql-test/suite/perfschema/t/all_tests.test3
-rw-r--r--mysql-test/suite/perfschema/t/alter_table_progress.test145
-rw-r--r--mysql-test/suite/perfschema/t/bad_option.test74
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_1.test39
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_2.test21
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_3.test39
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_4.test39
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_5.test42
-rw-r--r--mysql-test/suite/perfschema/t/batch_table_io_func.test148
-rw-r--r--mysql-test/suite/perfschema/t/checksum.test16
-rw-r--r--mysql-test/suite/perfschema/t/cnf_option.test4
-rw-r--r--mysql-test/suite/perfschema/t/connect_attrs.test2
-rw-r--r--mysql-test/suite/perfschema/t/connection_type_notwin.test98
-rw-r--r--mysql-test/suite/perfschema/t/connection_type_win.test96
-rw-r--r--mysql-test/suite/perfschema/t/ddl_esms_by_program.test21
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ets_by_account_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ets_by_host_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ets_by_thread_by_event_name.test18
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ets_by_user_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ets_global_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_stages_current.test5
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_stages_history.test5
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_stages_history_long.test5
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_transactions_current.test16
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_transactions_history.test16
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_transactions_history_long.test16
-rw-r--r--mysql-test/suite/perfschema/t/ddl_global_status.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_global_variables.test20
-rw-r--r--mysql-test/suite/perfschema/t/ddl_mems_by_account_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_mems_by_host_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_mems_by_thread_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_mems_by_user_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_mems_global_by_event_name.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_metadata_locks.test17
-rw-r--r--mysql-test/suite/perfschema/t/ddl_prepared_statements_instances.test21
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_applier_configuration.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_applier_status.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_coordinator.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_worker.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_connection_configuration.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_connection_status.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_group_member_stats.test21
-rw-r--r--mysql-test/suite/perfschema/t/ddl_replication_group_members.test22
-rw-r--r--mysql-test/suite/perfschema/t/ddl_session_status.test20
-rw-r--r--mysql-test/suite/perfschema/t/ddl_session_variables.test20
-rw-r--r--mysql-test/suite/perfschema/t/ddl_setup_actors.test2
-rw-r--r--mysql-test/suite/perfschema/t/ddl_status_by_account.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_status_by_host.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_status_by_thread.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_status_by_user.test19
-rw-r--r--mysql-test/suite/perfschema/t/ddl_table_handles.test17
-rw-r--r--mysql-test/suite/perfschema/t/ddl_uvar_by_thread.test20
-rw-r--r--mysql-test/suite/perfschema/t/ddl_variables_by_thread.test20
-rw-r--r--mysql-test/suite/perfschema/t/digest_table_full.test2
-rw-r--r--mysql-test/suite/perfschema/t/disabled.def1
-rw-r--r--mysql-test/suite/perfschema/t/dml_esms_by_program.test44
-rw-r--r--mysql-test/suite/perfschema/t/dml_ets_by_account_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_ets_by_host_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_ets_by_thread_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_ets_by_user_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_ets_global_by_event_name.test41
-rw-r--r--mysql-test/suite/perfschema/t/dml_events_transactions_current.test41
-rw-r--r--mysql-test/suite/perfschema/t/dml_events_transactions_history.test47
-rw-r--r--mysql-test/suite/perfschema/t/dml_events_transactions_history_long.test47
-rw-r--r--mysql-test/suite/perfschema/t/dml_file_instances.test60
-rw-r--r--mysql-test/suite/perfschema/t/dml_global_status.test36
-rw-r--r--mysql-test/suite/perfschema/t/dml_global_variables.test36
-rw-r--r--mysql-test/suite/perfschema/t/dml_mems_by_account_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_mems_by_host_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_mems_by_thread_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_mems_by_user_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_mems_global_by_event_name.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_metadata_locks.test35
-rw-r--r--mysql-test/suite/perfschema/t/dml_prepared_statements_instances.test43
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_applier_configuration.test38
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_applier_status.test42
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_applier_status_by_coordinator.test43
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_applier_status_by_worker.test43
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_connection_configuration.test43
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_connection_status.test43
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_group_member_stats.test38
-rw-r--r--mysql-test/suite/perfschema/t/dml_replication_group_members.test40
-rw-r--r--mysql-test/suite/perfschema/t/dml_session_status.test36
-rw-r--r--mysql-test/suite/perfschema/t/dml_session_variables.test36
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_actors.test69
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_instruments.test15
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_objects.test4
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_timers.test4
-rw-r--r--mysql-test/suite/perfschema/t/dml_status_by_account.test40
-rw-r--r--mysql-test/suite/perfschema/t/dml_status_by_host.test40
-rw-r--r--mysql-test/suite/perfschema/t/dml_status_by_thread.test40
-rw-r--r--mysql-test/suite/perfschema/t/dml_status_by_user.test40
-rw-r--r--mysql-test/suite/perfschema/t/dml_table_handles.test35
-rw-r--r--mysql-test/suite/perfschema/t/dml_uvar_by_thread.test48
-rw-r--r--mysql-test/suite/perfschema/t/dml_variables_by_thread.test40
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_a.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_a_no_h.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u_no_h.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_h.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_u.test1
-rw-r--r--mysql-test/suite/perfschema/t/event_aggregate_no_u_no_h.test1
-rw-r--r--mysql-test/suite/perfschema/t/file_misc-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/file_misc.test11
-rw-r--r--mysql-test/suite/perfschema/t/func_file_io.test2
-rw-r--r--mysql-test/suite/perfschema/t/func_mutex.test4
-rw-r--r--mysql-test/suite/perfschema/t/global_objects-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/global_objects.test29
-rw-r--r--mysql-test/suite/perfschema/t/indexed_table_io.test4
-rw-r--r--mysql-test/suite/perfschema/t/information_schema.test23
-rw-r--r--mysql-test/suite/perfschema/t/io_cache-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/io_cache.test121
-rw-r--r--mysql-test/suite/perfschema/t/max_program_zero-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/max_program_zero.test48
-rw-r--r--mysql-test/suite/perfschema/t/mdl_func.test479
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_32bit-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_32bit.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h-master.opt4
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_h-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_h.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_u-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_u.test7
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h.test7
-rw-r--r--mysql-test/suite/perfschema/t/misc.test19
-rw-r--r--mysql-test/suite/perfschema/t/myisam_file_io.test2
-rw-r--r--mysql-test/suite/perfschema/t/nesting.test8
-rw-r--r--mysql-test/suite/perfschema/t/no_threads-master.opt6
-rw-r--r--mysql-test/suite/perfschema/t/no_threads.test9
-rw-r--r--mysql-test/suite/perfschema/t/one_thread_per_con.test2
-rw-r--r--mysql-test/suite/perfschema/t/ortho_iter.test207
-rw-r--r--mysql-test/suite/perfschema/t/pfs_upgrade_event-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/pfs_upgrade_func-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/pfs_upgrade_proc-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/pfs_upgrade_table-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/pfs_upgrade_view-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/pool_of_threads-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/prepared_statements.test210
-rw-r--r--mysql-test/suite/perfschema/t/prepared_stmts_by_stored_programs.test151
-rw-r--r--mysql-test/suite/perfschema/t/privilege.test12
-rw-r--r--mysql-test/suite/perfschema/t/privilege_table_io.test6
-rw-r--r--mysql-test/suite/perfschema/t/query_cache.test24
-rw-r--r--mysql-test/suite/perfschema/t/read_only.test4
-rw-r--r--mysql-test/suite/perfschema/t/rpl_group_member_stats.test48
-rw-r--r--mysql-test/suite/perfschema/t/rpl_group_members.test33
-rw-r--r--mysql-test/suite/perfschema/t/rpl_gtid_func.test2
-rw-r--r--mysql-test/suite/perfschema/t/rpl_statements.test4
-rw-r--r--mysql-test/suite/perfschema/t/rpl_threads.test79
-rw-r--r--mysql-test/suite/perfschema/t/server_init.test29
-rw-r--r--mysql-test/suite/perfschema/t/setup_actors.test26
-rw-r--r--mysql-test/suite/perfschema/t/setup_actors_enabled.test219
-rw-r--r--mysql-test/suite/perfschema/t/setup_actors_history.test177
-rw-r--r--mysql-test/suite/perfschema/t/setup_consumers_defaults-master.opt7
-rw-r--r--mysql-test/suite/perfschema/t/setup_consumers_defaults.test2
-rw-r--r--mysql-test/suite/perfschema/t/setup_instruments_defaults-master.opt7
-rw-r--r--mysql-test/suite/perfschema/t/setup_instruments_defaults.test19
-rw-r--r--mysql-test/suite/perfschema/t/setup_object_table_lock_io.test107
-rw-r--r--mysql-test/suite/perfschema/t/setup_objects.test6
-rw-r--r--mysql-test/suite/perfschema/t/short_option_1-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/short_option_1.test10
-rw-r--r--mysql-test/suite/perfschema/t/short_option_2-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/short_option_2.test4
-rw-r--r--mysql-test/suite/perfschema/t/show_aggregate.test306
-rw-r--r--mysql-test/suite/perfschema/t/show_coverage.test186
-rw-r--r--mysql-test/suite/perfschema/t/show_misc.test64
-rw-r--r--mysql-test/suite/perfschema/t/show_plugin.test321
-rw-r--r--mysql-test/suite/perfschema/t/show_sanity.test1863
-rw-r--r--mysql-test/suite/perfschema/t/sizing_default.cnf37
-rw-r--r--mysql-test/suite/perfschema/t/sizing_default.test31
-rw-r--r--mysql-test/suite/perfschema/t/sizing_growth-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/sizing_growth.test478
-rw-r--r--mysql-test/suite/perfschema/t/sizing_high.cnf56
-rw-r--r--mysql-test/suite/perfschema/t/sizing_high.test9
-rw-r--r--mysql-test/suite/perfschema/t/sizing_low.cnf33
-rw-r--r--mysql-test/suite/perfschema/t/sizing_low.test10
-rw-r--r--mysql-test/suite/perfschema/t/sizing_med.cnf33
-rw-r--r--mysql-test/suite/perfschema/t/sizing_med.test9
-rw-r--r--mysql-test/suite/perfschema/t/sizing_off.cnf38
-rw-r--r--mysql-test/suite/perfschema/t/sizing_off.test8
-rw-r--r--mysql-test/suite/perfschema/t/socket_summary_by_event_name_func.test4
-rw-r--r--mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test11
-rw-r--r--mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test12
-rw-r--r--mysql-test/suite/perfschema/t/start_server_disable_transactions-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_disable_transactions.test28
-rw-r--r--mysql-test/suite/perfschema/t/start_server_innodb.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_low_digest_sql_length-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/start_server_low_digest_sql_length.test22
-rw-r--r--mysql-test/suite/perfschema/t/start_server_low_index-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_low_index.test181
-rw-r--r--mysql-test/suite/perfschema/t/start_server_low_table_lock-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_low_table_lock.test130
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_account.test4
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_cond_class.test6
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_cond_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_digests.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_file_class.test6
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_file_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_host.test4
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_index-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_index.test64
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mdl-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mdl.test23
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_memory_class-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_memory_class.test26
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mutex_class.test6
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances.test43
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test6
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_setup_actors.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_setup_objects.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_socket_class.test6
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_socket_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_stage_class.test4
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_stages_history.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_stages_history_long.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_statement_class.test4
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_statements_history.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_statements_history_long.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_table_hdl.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_table_inst-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_table_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_table_lock-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_table_lock.test54
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_thread_class.test6
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_thread_inst.test8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_transactions_history-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_transactions_history.test14
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_transactions_history_long-master.opt2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_transactions_history_long.test14
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_user.test4
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_waits_history.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_waits_history_long.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_nothing-master.opt8
-rw-r--r--mysql-test/suite/perfschema/t/start_server_nothing.test18
-rw-r--r--mysql-test/suite/perfschema/t/start_server_off.test11
-rw-r--r--mysql-test/suite/perfschema/t/start_server_on.test2
-rw-r--r--mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length.test20
-rw-r--r--mysql-test/suite/perfschema/t/statement_digest.test2
-rw-r--r--mysql-test/suite/perfschema/t/statement_digest_long_query.test12
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_concurrency-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_concurrency.test130
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_lost_inst-master.opt3
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_lost_inst.test72
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_nested-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_nested.test73
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_nesting_event_check-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_nesting_event_check.test44
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_non_nested-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/statement_program_non_nested.test144
-rw-r--r--mysql-test/suite/perfschema/t/status_reprepare.test61
-rw-r--r--mysql-test/suite/perfschema/t/sxlock_func.test80
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_2t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_3t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_2t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_3t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_2t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_3t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_2t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_3t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_2t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_3t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_2t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_3t.test3
-rw-r--r--mysql-test/suite/perfschema/t/table_name.test33
-rw-r--r--mysql-test/suite/perfschema/t/table_schema.test16
-rw-r--r--mysql-test/suite/perfschema/t/thread_cache.test7
-rw-r--r--mysql-test/suite/perfschema/t/thread_misc-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/thread_misc.test11
-rw-r--r--mysql-test/suite/perfschema/t/threads_history.test727
-rw-r--r--mysql-test/suite/perfschema/t/threads_innodb.test3
-rw-r--r--mysql-test/suite/perfschema/t/threads_insert_delayed.test40
-rw-r--r--mysql-test/suite/perfschema/t/threads_mysql_freebsd.test22
-rw-r--r--mysql-test/suite/perfschema/t/threads_mysql_linux.test22
-rw-r--r--mysql-test/suite/perfschema/t/threads_mysql_windows.test22
-rw-r--r--mysql-test/suite/perfschema/t/transaction-master.opt4
-rw-r--r--mysql-test/suite/perfschema/t/transaction.test734
-rw-r--r--mysql-test/suite/perfschema/t/transaction_gtid.test194
-rw-r--r--mysql-test/suite/perfschema/t/transaction_nested_events-master.opt19
-rw-r--r--mysql-test/suite/perfschema/t/transaction_nested_events.test387
-rw-r--r--mysql-test/suite/perfschema/t/user_var_func.test101
-rw-r--r--mysql-test/suite/perfschema/t/view_table_io.test3
-rw-r--r--mysql-test/suite/perfschema_stress/t/modify.test5
-rw-r--r--mysql-test/suite/perfschema_stress/t/read.test5
-rw-r--r--mysql-test/suite/perfschema_stress/t/setup.test5
-rw-r--r--mysql-test/suite/perfschema_stress/t/work.test5
-rw-r--r--mysql-test/suite/plugins/r/multiauth.result1
-rw-r--r--mysql-test/suite/plugins/t/multiauth.test6
-rw-r--r--mysql-test/suite/roles/admin.result4
-rw-r--r--mysql-test/suite/roles/definer.result2
-rw-r--r--mysql-test/suite/rpl/include/rpl_stm_relay_ign_space.inc2
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_triggers.result132
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_triggers.test116
-rw-r--r--mysql-test/suite/sql_sequence/rebuild.result145
-rw-r--r--mysql-test/suite/sql_sequence/rebuild.test2
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result42
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result12
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result24
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result12
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result50
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result6
-rw-r--r--mysql-test/suite/sys_vars/r/local_infile_func.result2
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff9
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb.result46
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff178
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_embedded.result108
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff178
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result112
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test42
-rw-r--r--mysql-test/suite/sys_vars/t/local_infile_func.test2
-rw-r--r--mysql-test/valgrind.supp283
-rw-r--r--mysys/array.c25
-rw-r--r--mysys/charset.c6
-rw-r--r--mysys/file_logger.c3
-rw-r--r--mysys/get_password.c4
-rw-r--r--mysys/hash.c12
-rw-r--r--mysys/lf_alloc-pin.c6
-rw-r--r--mysys/lf_dynarray.c14
-rw-r--r--mysys/lf_hash.c6
-rw-r--r--mysys/list.c2
-rw-r--r--mysys/ma_dyncol.c43
-rw-r--r--mysys/mf_iocache.c31
-rw-r--r--mysys/mf_keycache.c18
-rw-r--r--mysys/mf_sort.c3
-rw-r--r--mysys/mf_tempdir.c5
-rw-r--r--mysys/mulalloc.c8
-rw-r--r--mysys/my_alloc.c44
-rw-r--r--mysys/my_bitmap.c3
-rw-r--r--mysys/my_compress.c13
-rw-r--r--mysys/my_default.c7
-rw-r--r--mysys/my_error.c3
-rw-r--r--mysys/my_file.c3
-rw-r--r--mysys/my_fopen.c7
-rw-r--r--mysys/my_getopt.c8
-rw-r--r--mysys/my_lib.c18
-rw-r--r--mysys/my_likely.c7
-rw-r--r--mysys/my_malloc.c176
-rw-r--r--mysys/my_open.c2
-rw-r--r--mysys/my_pthread.c2
-rw-r--r--mysys/my_safehash.c7
-rw-r--r--mysys/my_static.c32
-rw-r--r--mysys/my_thr_init.c20
-rw-r--r--mysys/my_windac.c4
-rw-r--r--mysys/mysys_priv.h30
-rw-r--r--mysys/psi_noop.c309
-rw-r--r--mysys/queues.c5
-rw-r--r--mysys/stacktrace.c4
-rw-r--r--mysys/string.c12
-rw-r--r--mysys/thr_alarm.c32
-rw-r--r--mysys/thr_mutex.c20
-rw-r--r--mysys/tree.c4
-rw-r--r--mysys/waiting_threads.c6
-rw-r--r--plugin/auth_socket/CMakeLists.txt27
-rw-r--r--plugin/auth_socket/auth_socket.c19
-rw-r--r--plugin/daemon_example/daemon_example.cc2
-rw-r--r--plugin/feedback/feedback.cc2
-rw-r--r--plugin/feedback/url_base.cc6
-rw-r--r--plugin/feedback/url_http.cc6
-rw-r--r--plugin/handler_socket/handlersocket/database.cpp4
-rw-r--r--plugin/server_audit/server_audit.c2
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6.result4
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.result26
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.test2
-rw-r--r--plugin/type_inet/sql_type_inet.cc41
-rw-r--r--plugin/type_inet/sql_type_inet.h15
-rw-r--r--plugin/userstat/client_stats.cc2
-rw-r--r--plugin/userstat/user_stats.cc2
-rw-r--r--sql-common/client.c140
-rw-r--r--sql-common/client_plugin.c41
-rw-r--r--sql/CMakeLists.txt26
-rw-r--r--sql/backup.cc3
-rw-r--r--sql/bounded_queue.h8
-rw-r--r--sql/create_options.cc2
-rw-r--r--sql/datadict.cc2
-rw-r--r--sql/debug_sync.cc30
-rw-r--r--sql/derror.cc8
-rw-r--r--sql/discover.cc3
-rw-r--r--sql/event_data_objects.cc47
-rw-r--r--sql/event_data_objects.h13
-rw-r--r--sql/event_db_repository.cc3
-rw-r--r--sql/event_queue.cc6
-rw-r--r--sql/event_scheduler.cc21
-rw-r--r--sql/events.cc28
-rw-r--r--sql/events.h2
-rw-r--r--sql/field.cc122
-rw-r--r--sql/field.h80
-rw-r--r--sql/filesort.cc1043
-rw-r--r--sql/filesort.h15
-rw-r--r--sql/filesort_utils.cc19
-rw-r--r--sql/filesort_utils.h4
-rw-r--r--sql/gcalc_slicescan.cc2
-rw-r--r--sql/gstream.cc4
-rw-r--r--sql/ha_partition.cc87
-rw-r--r--sql/handle_connections_win.cc2
-rw-r--r--sql/handler.cc171
-rw-r--r--sql/handler.h138
-rw-r--r--sql/hash_filo.h29
-rw-r--r--sql/hostname.cc13
-rw-r--r--sql/item.cc14
-rw-r--r--sql/item.h22
-rw-r--r--sql/item_cmpfunc.cc15
-rw-r--r--sql/item_cmpfunc.h1
-rw-r--r--sql/item_create.cc47
-rw-r--r--sql/item_func.cc50
-rw-r--r--sql/item_func.h66
-rw-r--r--sql/item_jsonfunc.h11
-rw-r--r--sql/item_strfunc.cc3
-rw-r--r--sql/item_subselect.cc15
-rw-r--r--sql/keycaches.cc10
-rw-r--r--sql/lex.h2
-rw-r--r--sql/lock.cc31
-rw-r--r--sql/log.cc58
-rw-r--r--sql/log.h16
-rw-r--r--sql/log_event.cc61
-rw-r--r--sql/log_event.h14
-rw-r--r--sql/log_event_client.cc20
-rw-r--r--sql/log_event_old.cc18
-rw-r--r--sql/log_event_server.cc55
-rw-r--r--sql/mdl.cc75
-rw-r--r--sql/mdl.h36
-rw-r--r--sql/mysqld.cc394
-rw-r--r--sql/mysqld.h140
-rw-r--r--sql/net_serv.cc25
-rw-r--r--sql/opt_range.cc51
-rw-r--r--sql/opt_split.cc12
-rw-r--r--sql/opt_subselect.cc4
-rw-r--r--sql/opt_trace.cc2
-rw-r--r--sql/partition_info.cc3
-rw-r--r--sql/privilege.h201
-rw-r--r--sql/protocol.cc51
-rw-r--r--sql/proxy_protocol.cc3
-rw-r--r--sql/records.cc38
-rw-r--r--sql/repl_failsafe.cc7
-rw-r--r--sql/rpl_filter.cc23
-rw-r--r--sql/rpl_gtid.cc60
-rw-r--r--sql/rpl_gtid.h2
-rw-r--r--sql/rpl_injector.cc3
-rw-r--r--sql/rpl_mi.cc16
-rw-r--r--sql/rpl_parallel.cc10
-rw-r--r--sql/rpl_rli.cc18
-rw-r--r--sql/rpl_tblmap.cc13
-rw-r--r--sql/rpl_utility.cc3
-rw-r--r--sql/rpl_utility_server.cc2
-rw-r--r--sql/scheduler.h11
-rw-r--r--sql/select_handler.cc26
-rw-r--r--sql/semisync_master.cc4
-rw-r--r--sql/semisync_master.h2
-rw-r--r--sql/semisync_master_ack_receiver.cc2
-rw-r--r--sql/session_tracker.cc10
-rw-r--r--sql/session_tracker.h14
-rw-r--r--sql/set_var.cc38
-rw-r--r--sql/set_var.h2
-rw-r--r--sql/share/errmsg-utf8.txt5
-rw-r--r--sql/signal_handler.cc18
-rw-r--r--sql/slave.cc21
-rw-r--r--sql/sp.cc68
-rw-r--r--sql/sp.h46
-rw-r--r--sql/sp_cache.cc2
-rw-r--r--sql/sp_head.cc210
-rw-r--r--sql/sp_head.h98
-rw-r--r--sql/sp_pcontext.cc6
-rw-r--r--sql/sp_rcontext.cc1
-rw-r--r--sql/sql_acl.cc267
-rw-r--r--sql/sql_acl.h2
-rw-r--r--sql/sql_admin.cc17
-rw-r--r--sql/sql_alter.cc2
-rw-r--r--sql/sql_alter.h4
-rw-r--r--sql/sql_analyze_stmt.cc23
-rw-r--r--sql/sql_analyze_stmt.h20
-rw-r--r--sql/sql_array.h24
-rw-r--r--sql/sql_audit.cc2
-rw-r--r--sql/sql_base.cc40
-rw-r--r--sql/sql_binlog.cc7
-rw-r--r--sql/sql_cache.cc16
-rw-r--r--sql/sql_class.cc78
-rw-r--r--sql/sql_class.h201
-rw-r--r--sql/sql_cmd.h2
-rw-r--r--sql/sql_connect.cc52
-rw-r--r--sql/sql_const.h2
-rw-r--r--sql/sql_cte.cc136
-rw-r--r--sql/sql_cte.h11
-rw-r--r--sql/sql_db.cc23
-rw-r--r--sql/sql_delete.cc1
-rw-r--r--sql/sql_derived.cc4
-rw-r--r--sql/sql_error.cc2
-rw-r--r--sql/sql_explain.h2
-rw-r--r--sql/sql_handler.cc17
-rw-r--r--sql/sql_hset.h11
-rw-r--r--sql/sql_insert.cc18
-rw-r--r--sql/sql_join_cache.cc20
-rw-r--r--sql/sql_lex.cc93
-rw-r--r--sql/sql_lex.h12
-rw-r--r--sql/sql_list.h3
-rw-r--r--sql/sql_manager.cc3
-rw-r--r--sql/sql_parse.cc126
-rw-r--r--sql/sql_partition.cc7
-rw-r--r--sql/sql_partition.h1
-rw-r--r--sql/sql_plugin.cc72
-rw-r--r--sql/sql_prepare.cc56
-rw-r--r--sql/sql_profile.cc5
-rw-r--r--sql/sql_profile.h4
-rw-r--r--sql/sql_repl.cc18
-rw-r--r--sql/sql_select.cc260
-rw-r--r--sql/sql_select.h10
-rw-r--r--sql/sql_sequence.cc7
-rw-r--r--sql/sql_servers.cc16
-rw-r--r--sql/sql_show.cc175
-rw-r--r--sql/sql_show.h7
-rw-r--r--sql/sql_sort.h350
-rw-r--r--sql/sql_statistics.cc2
-rw-r--r--sql/sql_string.cc30
-rw-r--r--sql/sql_string.h31
-rw-r--r--sql/sql_table.cc155
-rw-r--r--sql/sql_test.cc3
-rw-r--r--sql/sql_time.cc3
-rw-r--r--sql/sql_trigger.cc28
-rw-r--r--sql/sql_type.h175
-rw-r--r--sql/sql_type_geom.cc8
-rw-r--r--sql/sql_type_geom.h10
-rw-r--r--sql/sql_udf.cc15
-rw-r--r--sql/sql_union.cc4
-rw-r--r--sql/sql_update.cc1
-rw-r--r--sql/sql_view.cc11
-rw-r--r--sql/sql_window.cc6
-rw-r--r--sql/sql_yacc.yy77
-rw-r--r--sql/sys_vars.cc202
-rw-r--r--sql/sys_vars.ic3
-rw-r--r--sql/table.cc38
-rw-r--r--sql/table.h17
-rw-r--r--sql/table_cache.cc8
-rw-r--r--sql/temporary_tables.cc9
-rw-r--r--sql/thr_malloc.cc7
-rw-r--r--sql/thr_malloc.h4
-rw-r--r--sql/threadpool_common.cc18
-rw-r--r--sql/threadpool_generic.cc3
-rw-r--r--sql/transaction.cc49
-rw-r--r--sql/tztime.cc26
-rw-r--r--sql/uniques.cc18
-rw-r--r--sql/unireg.cc4
-rw-r--r--sql/wsrep_binlog.cc2
-rw-r--r--sql/wsrep_mysqld.cc6
-rw-r--r--sql/wsrep_sst.cc14
-rw-r--r--sql/wsrep_var.cc30
-rw-r--r--sql/xa.cc63
-rw-r--r--storage/archive/ha_archive.cc16
-rw-r--r--storage/blackhole/ha_blackhole.cc8
-rw-r--r--storage/cassandra/ha_cassandra.cc12
-rw-r--r--storage/connect/inihandl.cpp2
-rw-r--r--storage/connect/myconn.cpp8
-rw-r--r--storage/connect/odbconn.cpp1
-rw-r--r--storage/csv/ha_tina.cc54
-rw-r--r--storage/csv/transparent_file.cc5
-rw-r--r--storage/csv/transparent_file.h1
-rw-r--r--storage/federated/ha_federated.cc8
-rw-r--r--storage/federatedx/federatedx_io_mysql.cc2
-rw-r--r--storage/federatedx/federatedx_pushdown.cc15
-rw-r--r--storage/federatedx/ha_federatedx.cc18
-rw-r--r--storage/heap/ha_heap.cc3
-rw-r--r--storage/heap/heapdef.h6
-rw-r--r--storage/heap/hp_block.c2
-rw-r--r--storage/heap/hp_create.c8
-rw-r--r--storage/heap/hp_open.c4
-rw-r--r--storage/heap/hp_rename.c3
-rw-r--r--storage/heap/hp_static.c21
-rw-r--r--storage/innobase/CMakeLists.txt2
-rw-r--r--storage/innobase/btr/btr0btr.cc4
-rw-r--r--storage/innobase/btr/btr0bulk.cc6
-rw-r--r--storage/innobase/btr/btr0cur.cc33
-rw-r--r--storage/innobase/btr/btr0defragment.cc5
-rw-r--r--storage/innobase/btr/btr0scrub.cc909
-rw-r--r--storage/innobase/btr/btr0sea.cc5
-rw-r--r--storage/innobase/buf/buf0buf.cc205
-rw-r--r--storage/innobase/buf/buf0dump.cc24
-rw-r--r--storage/innobase/buf/buf0flu.cc190
-rw-r--r--storage/innobase/dict/dict0dict.cc10
-rw-r--r--storage/innobase/dict/dict0mem.cc15
-rw-r--r--storage/innobase/fil/fil0crypt.cc236
-rw-r--r--storage/innobase/fil/fil0fil.cc177
-rw-r--r--storage/innobase/fil/fil0pagecompress.cc15
-rw-r--r--storage/innobase/fsp/fsp0fsp.cc67
-rw-r--r--storage/innobase/fsp/fsp0sysspace.cc2
-rw-r--r--storage/innobase/fts/fts0ast.cc2
-rw-r--r--storage/innobase/fts/fts0fts.cc9
-rw-r--r--storage/innobase/fts/fts0que.cc5
-rw-r--r--storage/innobase/gis/gis0rtree.cc3
-rw-r--r--storage/innobase/handler/ha_innodb.cc392
-rw-r--r--storage/innobase/handler/handler0alter.cc223
-rw-r--r--storage/innobase/handler/i_s.cc229
-rw-r--r--storage/innobase/ibuf/ibuf0ibuf.cc6
-rw-r--r--storage/innobase/include/btr0btr.h2
-rw-r--r--storage/innobase/include/btr0scrub.h157
-rw-r--r--storage/innobase/include/buf0buf.h61
-rw-r--r--storage/innobase/include/data0type.h10
-rw-r--r--storage/innobase/include/data0type.ic34
-rw-r--r--storage/innobase/include/dict0crea.h4
-rw-r--r--storage/innobase/include/dict0dict.h40
-rw-r--r--storage/innobase/include/dict0dict.ic54
-rw-r--r--storage/innobase/include/dict0mem.h13
-rw-r--r--storage/innobase/include/dyn0buf.h16
-rw-r--r--storage/innobase/include/fil0crypt.h34
-rw-r--r--storage/innobase/include/fil0fil.h29
-rw-r--r--storage/innobase/include/ha_prototypes.h22
-rw-r--r--storage/innobase/include/lock0lock.h16
-rw-r--r--storage/innobase/include/lock0lock.ic2
-rw-r--r--storage/innobase/include/lock0prdt.h8
-rw-r--r--storage/innobase/include/log0crypt.h17
-rw-r--r--storage/innobase/include/log0log.h165
-rw-r--r--storage/innobase/include/log0log.ic105
-rw-r--r--storage/innobase/include/log0recv.h32
-rw-r--r--storage/innobase/include/mtr0log.h25
-rw-r--r--storage/innobase/include/mtr0mtr.h53
-rw-r--r--storage/innobase/include/mtr0types.h16
-rw-r--r--storage/innobase/include/os0file.h45
-rw-r--r--storage/innobase/include/os0file.ic4
-rw-r--r--storage/innobase/include/page0cur.h43
-rw-r--r--storage/innobase/include/page0page.h9
-rw-r--r--storage/innobase/include/page0page.ic17
-rw-r--r--storage/innobase/include/row0merge.h16
-rw-r--r--storage/innobase/include/row0mysql.h4
-rw-r--r--storage/innobase/include/row0sel.h2
-rw-r--r--storage/innobase/include/srv0srv.h35
-rw-r--r--storage/innobase/include/srv0start.h2
-rw-r--r--storage/innobase/include/sync0rw.ic7
-rw-r--r--storage/innobase/include/trx0rec.h12
-rw-r--r--storage/innobase/include/univ.i5
-rw-r--r--storage/innobase/include/ut0crc32.h31
-rw-r--r--storage/innobase/include/ut0new.h65
-rw-r--r--storage/innobase/include/ut0stage.h31
-rw-r--r--storage/innobase/lock/lock0lock.cc63
-rw-r--r--storage/innobase/lock/lock0prdt.cc24
-rw-r--r--storage/innobase/log/log0crypt.cc138
-rw-r--r--storage/innobase/log/log0log.cc572
-rw-r--r--storage/innobase/log/log0recv.cc468
-rw-r--r--storage/innobase/log/log0sync.cc306
-rw-r--r--storage/innobase/log/log0sync.h81
-rw-r--r--storage/innobase/mtr/mtr0mtr.cc27
-rw-r--r--storage/innobase/os/os0file.cc32
-rw-r--r--storage/innobase/page/page0cur.cc1135
-rw-r--r--storage/innobase/page/page0zip.cc3
-rw-r--r--storage/innobase/rem/rem0cmp.cc3
-rw-r--r--storage/innobase/rem/rem0rec.cc9
-rw-r--r--storage/innobase/row/row0ftsort.cc4
-rw-r--r--storage/innobase/row/row0import.cc13
-rw-r--r--storage/innobase/row/row0ins.cc13
-rw-r--r--storage/innobase/row/row0log.cc2
-rw-r--r--storage/innobase/row/row0merge.cc163
-rw-r--r--storage/innobase/row/row0mysql.cc15
-rw-r--r--storage/innobase/row/row0purge.cc2
-rw-r--r--storage/innobase/row/row0sel.cc32
-rw-r--r--storage/innobase/row/row0uins.cc4
-rw-r--r--storage/innobase/row/row0umod.cc2
-rw-r--r--storage/innobase/row/row0undo.cc2
-rw-r--r--storage/innobase/row/row0upd.cc11
-rw-r--r--storage/innobase/srv/srv0conc.cc3
-rw-r--r--storage/innobase/srv/srv0mon.cc19
-rw-r--r--storage/innobase/srv/srv0srv.cc93
-rw-r--r--storage/innobase/srv/srv0start.cc53
-rw-r--r--storage/innobase/sync/sync0arr.cc3
-rw-r--r--storage/innobase/sync/sync0sync.cc22
-rw-r--r--storage/innobase/trx/trx0i_s.cc2
-rw-r--r--storage/innobase/trx/trx0purge.cc7
-rw-r--r--storage/innobase/trx/trx0rec.cc55
-rw-r--r--storage/innobase/trx/trx0undo.cc7
-rw-r--r--storage/innobase/ut/ut0crc32.cc166
-rw-r--r--storage/maria/ha_maria.cc2
-rw-r--r--storage/maria/lockman.c2
-rw-r--r--storage/maria/ma_backup.c2
-rw-r--r--storage/maria/ma_bitmap.c4
-rw-r--r--storage/maria/ma_blockrec.c21
-rw-r--r--storage/maria/ma_check.c30
-rw-r--r--storage/maria/ma_checkpoint.c12
-rw-r--r--storage/maria/ma_close.c2
-rw-r--r--storage/maria/ma_create.c9
-rw-r--r--storage/maria/ma_crypt.c10
-rw-r--r--storage/maria/ma_ft_boolean_search.c4
-rw-r--r--storage/maria/ma_ft_nlq_search.c2
-rw-r--r--storage/maria/ma_ft_parser.c4
-rw-r--r--storage/maria/ma_init.c7
-rw-r--r--storage/maria/ma_loghandler.c18
-rw-r--r--storage/maria/ma_open.c15
-rw-r--r--storage/maria/ma_packrec.c8
-rw-r--r--storage/maria/ma_pagecache.c16
-rw-r--r--storage/maria/ma_preload.c2
-rw-r--r--storage/maria/ma_recovery.c14
-rw-r--r--storage/maria/ma_rt_index.c2
-rw-r--r--storage/maria/ma_sort.c12
-rw-r--r--storage/maria/ma_state.c7
-rw-r--r--storage/maria/ma_test2.c2
-rw-r--r--storage/maria/ma_write.c7
-rw-r--r--storage/maria/maria_chk.c4
-rw-r--r--storage/maria/maria_pack.c36
-rw-r--r--storage/maria/maria_read_log.c2
-rw-r--r--storage/maria/test_ma_backup.c2
-rw-r--r--storage/maria/trnman.c8
-rw-r--r--storage/maria/unittest/ma_pagecache_single.c8
-rw-r--r--storage/maria/unittest/sequence_storage.c3
-rw-r--r--storage/maria/unittest/test_file.c2
-rw-r--r--storage/maria/unittest/trnman-t.c2
-rw-r--r--storage/mroonga/ha_mroonga.cpp2
-rw-r--r--storage/mroonga/mrn_mysql_compat.h79
-rw-r--r--storage/mroonga/mrn_variables.hpp2
-rw-r--r--storage/myisam/ft_boolean_search.c4
-rw-r--r--storage/myisam/ft_nlq_search.c2
-rw-r--r--storage/myisam/ft_parser.c7
-rw-r--r--storage/myisam/ft_stopwords.c9
-rw-r--r--storage/myisam/ha_myisam.cc4
-rw-r--r--storage/myisam/mi_check.c21
-rw-r--r--storage/myisam/mi_create.c3
-rw-r--r--storage/myisam/mi_dynrec.c2
-rw-r--r--storage/myisam/mi_open.c9
-rw-r--r--storage/myisam/mi_packrec.c12
-rw-r--r--storage/myisam/mi_preload.c3
-rw-r--r--storage/myisam/mi_static.c50
-rw-r--r--storage/myisam/mi_test2.c2
-rw-r--r--storage/myisam/mi_write.c9
-rw-r--r--storage/myisam/myisamchk.c2
-rw-r--r--storage/myisam/myisamdef.h22
-rw-r--r--storage/myisam/myisamlog.c8
-rw-r--r--storage/myisam/myisampack.c20
-rw-r--r--storage/myisam/rt_index.c7
-rw-r--r--storage/myisam/sort.c18
-rw-r--r--storage/myisammrg/ha_myisammrg.cc2
-rw-r--r--storage/myisammrg/myrg_def.h5
-rw-r--r--storage/myisammrg/myrg_open.c12
-rw-r--r--storage/myisammrg/myrg_static.c12
-rw-r--r--storage/oqgraph/ha_oqgraph.cc2
-rw-r--r--storage/perfschema/CMakeLists.txt176
-rw-r--r--storage/perfschema/cursor_by_account.cc33
-rw-r--r--storage/perfschema/cursor_by_account.h4
-rw-r--r--storage/perfschema/cursor_by_host.cc35
-rw-r--r--storage/perfschema/cursor_by_host.h4
-rw-r--r--storage/perfschema/cursor_by_thread.cc32
-rw-r--r--storage/perfschema/cursor_by_thread.h4
-rw-r--r--storage/perfschema/cursor_by_thread_connect_attr.cc40
-rw-r--r--storage/perfschema/cursor_by_thread_connect_attr.h13
-rw-r--r--storage/perfschema/cursor_by_user.cc33
-rw-r--r--storage/perfschema/cursor_by_user.h4
-rw-r--r--storage/perfschema/gen_pfs_lex_token.cc358
-rw-r--r--storage/perfschema/ha_perfschema.cc67
-rw-r--r--storage/perfschema/ha_perfschema.h2
-rw-r--r--storage/perfschema/my_thread.h111
-rw-r--r--storage/perfschema/mysqld_thd_manager.cc39
-rw-r--r--storage/perfschema/mysqld_thd_manager.h29
-rw-r--r--storage/perfschema/pfs.cc2868
-rw-r--r--storage/perfschema/pfs.h24
-rw-r--r--storage/perfschema/pfs_account.cc551
-rw-r--r--storage/perfschema/pfs_account.h31
-rw-r--r--storage/perfschema/pfs_atomic.h36
-rw-r--r--storage/perfschema/pfs_autosize.cc390
-rw-r--r--storage/perfschema/pfs_buffer_container.cc883
-rw-r--r--storage/perfschema/pfs_buffer_container.h1626
-rw-r--r--storage/perfschema/pfs_builtin_memory.cc382
-rw-r--r--storage/perfschema/pfs_builtin_memory.h143
-rw-r--r--storage/perfschema/pfs_column_types.h225
-rw-r--r--storage/perfschema/pfs_column_values.cc16
-rw-r--r--storage/perfschema/pfs_column_values.h11
-rw-r--r--storage/perfschema/pfs_con_slice.cc78
-rw-r--r--storage/perfschema/pfs_con_slice.h197
-rw-r--r--storage/perfschema/pfs_config.h.cmake4
-rw-r--r--storage/perfschema/pfs_defaults.cc89
-rw-r--r--storage/perfschema/pfs_digest.cc59
-rw-r--r--storage/perfschema/pfs_digest.h3
-rw-r--r--storage/perfschema/pfs_engine_table.cc987
-rw-r--r--storage/perfschema/pfs_engine_table.h153
-rw-r--r--storage/perfschema/pfs_events.h16
-rw-r--r--storage/perfschema/pfs_events_stages.cc137
-rw-r--r--storage/perfschema/pfs_events_stages.h6
-rw-r--r--storage/perfschema/pfs_events_statements.cc206
-rw-r--r--storage/perfschema/pfs_events_statements.h24
-rw-r--r--storage/perfschema/pfs_events_transactions.cc267
-rw-r--r--storage/perfschema/pfs_events_transactions.h132
-rw-r--r--storage/perfschema/pfs_events_waits.cc220
-rw-r--r--storage/perfschema/pfs_events_waits.h45
-rw-r--r--storage/perfschema/pfs_global.cc118
-rw-r--r--storage/perfschema/pfs_global.h62
-rw-r--r--storage/perfschema/pfs_host.cc274
-rw-r--r--storage/perfschema/pfs_host.h22
-rw-r--r--storage/perfschema/pfs_instr.cc2221
-rw-r--r--storage/perfschema/pfs_instr.h313
-rw-r--r--storage/perfschema/pfs_instr_class.cc987
-rw-r--r--storage/perfschema/pfs_instr_class.h164
-rw-r--r--storage/perfschema/pfs_lock.h116
-rw-r--r--storage/perfschema/pfs_memory.cc98
-rw-r--r--storage/perfschema/pfs_memory.h38
-rw-r--r--storage/perfschema/pfs_prepared_stmt.cc145
-rw-r--r--storage/perfschema/pfs_prepared_stmt.h95
-rw-r--r--storage/perfschema/pfs_program.cc322
-rw-r--r--storage/perfschema/pfs_program.h103
-rw-r--r--storage/perfschema/pfs_server.cc295
-rw-r--r--storage/perfschema/pfs_server.h88
-rw-r--r--storage/perfschema/pfs_setup_actor.cc162
-rw-r--r--storage/perfschema/pfs_setup_actor.h28
-rw-r--r--storage/perfschema/pfs_setup_object.cc130
-rw-r--r--storage/perfschema/pfs_setup_object.h15
-rw-r--r--storage/perfschema/pfs_stat.h772
-rw-r--r--storage/perfschema/pfs_status.cc166
-rw-r--r--storage/perfschema/pfs_status.h51
-rw-r--r--storage/perfschema/pfs_timer.cc6
-rw-r--r--storage/perfschema/pfs_timer.h7
-rw-r--r--storage/perfschema/pfs_user.cc244
-rw-r--r--storage/perfschema/pfs_user.h22
-rw-r--r--storage/perfschema/pfs_variable.cc1294
-rw-r--r--storage/perfschema/pfs_variable.h716
-rw-r--r--storage/perfschema/pfs_visitor.cc925
-rw-r--r--storage/perfschema/pfs_visitor.h116
-rw-r--r--storage/perfschema/rpl_gtid.h17
-rw-r--r--storage/perfschema/table_accounts.cc30
-rw-r--r--storage/perfschema/table_accounts.h2
-rw-r--r--storage/perfschema/table_all_instr.cc70
-rw-r--r--storage/perfschema/table_all_instr.h4
-rw-r--r--storage/perfschema/table_esgs_by_account_by_event_name.cc51
-rw-r--r--storage/perfschema/table_esgs_by_account_by_event_name.h8
-rw-r--r--storage/perfschema/table_esgs_by_host_by_event_name.cc50
-rw-r--r--storage/perfschema/table_esgs_by_host_by_event_name.h6
-rw-r--r--storage/perfschema/table_esgs_by_thread_by_event_name.cc49
-rw-r--r--storage/perfschema/table_esgs_by_thread_by_event_name.h6
-rw-r--r--storage/perfschema/table_esgs_by_user_by_event_name.cc53
-rw-r--r--storage/perfschema/table_esgs_by_user_by_event_name.h6
-rw-r--r--storage/perfschema/table_esgs_global_by_event_name.cc24
-rw-r--r--storage/perfschema/table_esgs_global_by_event_name.h3
-rw-r--r--storage/perfschema/table_esms_by_account_by_event_name.cc51
-rw-r--r--storage/perfschema/table_esms_by_account_by_event_name.h8
-rw-r--r--storage/perfschema/table_esms_by_digest.cc17
-rw-r--r--storage/perfschema/table_esms_by_digest.h3
-rw-r--r--storage/perfschema/table_esms_by_host_by_event_name.cc50
-rw-r--r--storage/perfschema/table_esms_by_host_by_event_name.h6
-rw-r--r--storage/perfschema/table_esms_by_program.cc245
-rw-r--r--storage/perfschema/table_esms_by_program.h113
-rw-r--r--storage/perfschema/table_esms_by_thread_by_event_name.cc49
-rw-r--r--storage/perfschema/table_esms_by_thread_by_event_name.h6
-rw-r--r--storage/perfschema/table_esms_by_user_by_event_name.cc53
-rw-r--r--storage/perfschema/table_esms_by_user_by_event_name.h6
-rw-r--r--storage/perfschema/table_esms_global_by_event_name.cc24
-rw-r--r--storage/perfschema/table_esms_global_by_event_name.h3
-rw-r--r--storage/perfschema/table_ets_by_account_by_event_name.cc225
-rw-r--r--storage/perfschema/table_ets_by_account_by_event_name.h134
-rw-r--r--storage/perfschema/table_ets_by_host_by_event_name.cc226
-rw-r--r--storage/perfschema/table_ets_by_host_by_event_name.h134
-rw-r--r--storage/perfschema/table_ets_by_thread_by_event_name.cc218
-rw-r--r--storage/perfschema/table_ets_by_thread_by_event_name.h138
-rw-r--r--storage/perfschema/table_ets_by_user_by_event_name.cc225
-rw-r--r--storage/perfschema/table_ets_by_user_by_event_name.h134
-rw-r--r--storage/perfschema/table_ets_global_by_event_name.cc200
-rw-r--r--storage/perfschema/table_ets_global_by_event_name.h105
-rw-r--r--storage/perfschema/table_events_stages.cc212
-rw-r--r--storage/perfschema/table_events_stages.h10
-rw-r--r--storage/perfschema/table_events_statements.cc303
-rw-r--r--storage/perfschema/table_events_statements.h19
-rw-r--r--storage/perfschema/table_events_transactions.cc718
-rw-r--r--storage/perfschema/table_events_transactions.h254
-rw-r--r--storage/perfschema/table_events_waits.cc533
-rw-r--r--storage/perfschema/table_events_waits.h19
-rw-r--r--storage/perfschema/table_events_waits_summary.cc17
-rw-r--r--storage/perfschema/table_events_waits_summary.h2
-rw-r--r--storage/perfschema/table_ews_by_account_by_event_name.cc45
-rw-r--r--storage/perfschema/table_ews_by_account_by_event_name.h8
-rw-r--r--storage/perfschema/table_ews_by_host_by_event_name.cc44
-rw-r--r--storage/perfschema/table_ews_by_host_by_event_name.h6
-rw-r--r--storage/perfschema/table_ews_by_thread_by_event_name.cc114
-rw-r--r--storage/perfschema/table_ews_by_thread_by_event_name.h6
-rw-r--r--storage/perfschema/table_ews_by_user_by_event_name.cc47
-rw-r--r--storage/perfschema/table_ews_by_user_by_event_name.h6
-rw-r--r--storage/perfschema/table_ews_global_by_event_name.cc62
-rw-r--r--storage/perfschema/table_ews_global_by_event_name.h4
-rw-r--r--storage/perfschema/table_file_instances.cc52
-rw-r--r--storage/perfschema/table_file_instances.h3
-rw-r--r--storage/perfschema/table_file_summary_by_event_name.cc25
-rw-r--r--storage/perfschema/table_file_summary_by_event_name.h3
-rw-r--r--storage/perfschema/table_file_summary_by_instance.cc54
-rw-r--r--storage/perfschema/table_file_summary_by_instance.h3
-rw-r--r--storage/perfschema/table_global_status.cc190
-rw-r--r--storage/perfschema/table_global_status.h118
-rw-r--r--storage/perfschema/table_global_variables.cc184
-rw-r--r--storage/perfschema/table_global_variables.h117
-rw-r--r--storage/perfschema/table_helper.cc543
-rw-r--r--storage/perfschema/table_helper.h241
-rw-r--r--storage/perfschema/table_host_cache.cc24
-rw-r--r--storage/perfschema/table_host_cache.h3
-rw-r--r--storage/perfschema/table_hosts.cc32
-rw-r--r--storage/perfschema/table_hosts.h2
-rw-r--r--storage/perfschema/table_md_locks.cc207
-rw-r--r--storage/perfschema/table_md_locks.h106
-rw-r--r--storage/perfschema/table_mems_by_account_by_event_name.cc221
-rw-r--r--storage/perfschema/table_mems_by_account_by_event_name.h129
-rw-r--r--storage/perfschema/table_mems_by_host_by_event_name.cc221
-rw-r--r--storage/perfschema/table_mems_by_host_by_event_name.h129
-rw-r--r--storage/perfschema/table_mems_by_thread_by_event_name.cc214
-rw-r--r--storage/perfschema/table_mems_by_thread_by_event_name.h129
-rw-r--r--storage/perfschema/table_mems_by_user_by_event_name.cc221
-rw-r--r--storage/perfschema/table_mems_by_user_by_event_name.h129
-rw-r--r--storage/perfschema/table_mems_global_by_event_name.cc241
-rw-r--r--storage/perfschema/table_mems_global_by_event_name.h132
-rw-r--r--storage/perfschema/table_os_global_by_type.cc136
-rw-r--r--storage/perfschema/table_os_global_by_type.h20
-rw-r--r--storage/perfschema/table_performance_timers.cc19
-rw-r--r--storage/perfschema/table_performance_timers.h3
-rw-r--r--storage/perfschema/table_prepared_stmt_instances.cc294
-rw-r--r--storage/perfschema/table_prepared_stmt_instances.h132
-rw-r--r--storage/perfschema/table_replication_applier_configuration.cc194
-rw-r--r--storage/perfschema/table_replication_applier_configuration.h107
-rw-r--r--storage/perfschema/table_replication_applier_status.cc222
-rw-r--r--storage/perfschema/table_replication_applier_status.h118
-rw-r--r--storage/perfschema/table_replication_applier_status_by_coordinator.cc249
-rw-r--r--storage/perfschema/table_replication_applier_status_by_coordinator.h124
-rw-r--r--storage/perfschema/table_replication_applier_status_by_worker.cc412
-rw-r--r--storage/perfschema/table_replication_applier_status_by_worker.h182
-rw-r--r--storage/perfschema/table_replication_connection_configuration.cc333
-rw-r--r--storage/perfschema/table_replication_connection_configuration.h152
-rw-r--r--storage/perfschema/table_replication_connection_status.cc440
-rw-r--r--storage/perfschema/table_replication_connection_status.h150
-rw-r--r--storage/perfschema/table_replication_group_member_stats.cc372
-rw-r--r--storage/perfschema/table_replication_group_member_stats.h116
-rw-r--r--storage/perfschema/table_replication_group_members.cc281
-rw-r--r--storage/perfschema/table_replication_group_members.h108
-rw-r--r--storage/perfschema/table_session_account_connect_attrs.cc12
-rw-r--r--storage/perfschema/table_session_account_connect_attrs.h2
-rw-r--r--storage/perfschema/table_session_connect.cc9
-rw-r--r--storage/perfschema/table_session_connect.h3
-rw-r--r--storage/perfschema/table_session_connect_attrs.cc10
-rw-r--r--storage/perfschema/table_session_connect_attrs.h2
-rw-r--r--storage/perfschema/table_session_status.cc185
-rw-r--r--storage/perfschema/table_session_status.h119
-rw-r--r--storage/perfschema/table_session_variables.cc187
-rw-r--r--storage/perfschema/table_session_variables.h117
-rw-r--r--storage/perfschema/table_setup_actors.cc91
-rw-r--r--storage/perfschema/table_setup_actors.h6
-rw-r--r--storage/perfschema/table_setup_consumers.cc69
-rw-r--r--storage/perfschema/table_setup_consumers.h9
-rw-r--r--storage/perfschema/table_setup_instruments.cc106
-rw-r--r--storage/perfschema/table_setup_instruments.h19
-rw-r--r--storage/perfschema/table_setup_objects.cc43
-rw-r--r--storage/perfschema/table_setup_objects.h2
-rw-r--r--storage/perfschema/table_setup_timers.cc33
-rw-r--r--storage/perfschema/table_setup_timers.h3
-rw-r--r--storage/perfschema/table_socket_instances.cc52
-rw-r--r--storage/perfschema/table_socket_instances.h3
-rw-r--r--storage/perfschema/table_socket_summary_by_event_name.cc21
-rw-r--r--storage/perfschema/table_socket_summary_by_event_name.h3
-rw-r--r--storage/perfschema/table_socket_summary_by_instance.cc52
-rw-r--r--storage/perfschema/table_socket_summary_by_instance.h3
-rw-r--r--storage/perfschema/table_status_by_account.cc246
-rw-r--r--storage/perfschema/table_status_by_account.h156
-rw-r--r--storage/perfschema/table_status_by_host.cc245
-rw-r--r--storage/perfschema/table_status_by_host.h154
-rw-r--r--storage/perfschema/table_status_by_thread.cc239
-rw-r--r--storage/perfschema/table_status_by_thread.h151
-rw-r--r--storage/perfschema/table_status_by_user.cc246
-rw-r--r--storage/perfschema/table_status_by_user.h153
-rw-r--r--storage/perfschema/table_sync_instances.cc117
-rw-r--r--storage/perfschema/table_sync_instances.h5
-rw-r--r--storage/perfschema/table_table_handles.cc214
-rw-r--r--storage/perfschema/table_table_handles.h108
-rw-r--r--storage/perfschema/table_threads.cc82
-rw-r--r--storage/perfschema/table_threads.h14
-rw-r--r--storage/perfschema/table_tiws_by_index_usage.cc108
-rw-r--r--storage/perfschema/table_tiws_by_index_usage.h10
-rw-r--r--storage/perfschema/table_tiws_by_table.cc56
-rw-r--r--storage/perfschema/table_tiws_by_table.h3
-rw-r--r--storage/perfschema/table_tlws_by_table.cc56
-rw-r--r--storage/perfschema/table_tlws_by_table.h3
-rw-r--r--storage/perfschema/table_users.cc34
-rw-r--r--storage/perfschema/table_users.h2
-rw-r--r--storage/perfschema/table_uvar_by_thread.cc329
-rw-r--r--storage/perfschema/table_uvar_by_thread.h195
-rw-r--r--storage/perfschema/table_variables_by_thread.cc229
-rw-r--r--storage/perfschema/table_variables_by_thread.h151
-rw-r--r--storage/perfschema/unittest/CMakeLists.txt3
-rw-r--r--storage/perfschema/unittest/pfs-t.cc383
-rw-r--r--storage/perfschema/unittest/pfs_account-oom-t.cc180
-rw-r--r--storage/perfschema/unittest/pfs_connect_attr-t.cc4
-rw-r--r--storage/perfschema/unittest/pfs_host-oom-t.cc80
-rw-r--r--storage/perfschema/unittest/pfs_instr-oom-t.cc858
-rw-r--r--storage/perfschema/unittest/pfs_instr-t.cc173
-rw-r--r--storage/perfschema/unittest/pfs_instr_class-oom-t.cc46
-rw-r--r--storage/perfschema/unittest/pfs_instr_class-t.cc73
-rw-r--r--storage/perfschema/unittest/pfs_misc-t.cc26
-rw-r--r--storage/perfschema/unittest/pfs_noop-t.cc242
-rw-r--r--storage/perfschema/unittest/pfs_server_stubs.cc13
-rw-r--r--storage/perfschema/unittest/pfs_timer-t.cc1
-rw-r--r--storage/perfschema/unittest/pfs_user-oom-t.cc77
-rw-r--r--storage/perfschema/unittest/stub_global_status_var.h31
-rw-r--r--storage/perfschema/unittest/stub_pfs_global.h19
-rw-r--r--storage/perfschema/unittest/stub_print_error.h16
-rw-r--r--storage/rocksdb/ha_rocksdb.cc39
-rw-r--r--storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result2
-rw-r--r--storage/rocksdb/rdb_converter.cc2
-rw-r--r--storage/rocksdb/rdb_datadic.cc10
-rw-r--r--storage/sphinx/ha_sphinx.cc7
-rw-r--r--storage/spider/ha_spider.cc2
-rw-r--r--storage/spider/hs_client/config.cpp4
-rw-r--r--storage/spider/hs_client/hs_compat.h7
-rw-r--r--storage/spider/spd_conn.cc7
-rw-r--r--storage/spider/spd_copy_tables.cc2
-rw-r--r--storage/spider/spd_db_mysql.cc2
-rw-r--r--storage/spider/spd_direct_sql.cc2
-rw-r--r--storage/spider/spd_malloc.cc4
-rw-r--r--storage/spider/spd_table.cc27
-rw-r--r--storage/spider/spd_trx.cc28
-rw-r--r--strings/ctype-tis620.c4
-rw-r--r--strings/my_vsnprintf.c2
-rw-r--r--strings/xml.c4
-rw-r--r--tests/async_queries.c6
-rw-r--r--tests/mysql_client_fw.c4
-rw-r--r--tests/mysql_client_test.c4
-rw-r--r--unittest/mysys/my_malloc-t.c6
-rw-r--r--vio/vio.c29
-rw-r--r--vio/vio_priv.h4
-rw-r--r--vio/viosocket.c20
-rw-r--r--vio/viosslfactories.c3
1561 files changed, 262470 insertions, 43513 deletions
diff --git a/.gitignore b/.gitignore
index d92073c0af4..3535f8cc0eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -221,6 +221,7 @@ storage/myisam/myisamlog
storage/myisam/myisampack
storage/myisam/rt_test
storage/myisam/sp_test
+storage/perfschema/pfs_config.h
storage/rocksdb/ldb
storage/rocksdb/myrocks_hotbackup
storage/rocksdb/mysql_ldb
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf8b42d0430..b1adbce5565 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -260,6 +260,11 @@ IF (ENABLE_GCOV)
MY_CHECK_AND_SET_COMPILER_FLAG("-fprofile-arcs -ftest-coverage -lgcov" DEBUG)
ENDIF()
+OPTION(WITHOUT_PACKED_SORT_KEYS "disable packed sort keys" OFF)
+IF(WITHOUT_PACKED_SORT_KEYS)
+ ADD_DEFINITIONS(-DWITHOUT_PACKED_SORT_KEYS)
+ENDIF()
+
MY_CHECK_AND_SET_COMPILER_FLAG(-ggdb3 DEBUG)
SET(ENABLED_LOCAL_INFILE "AUTO" CACHE STRING "If we should should enable LOAD DATA LOCAL by default (OFF/ON/AUTO)")
diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt
index dfa805fc7e8..0f63f58e5da 100644
--- a/client/CMakeLists.txt
+++ b/client/CMakeLists.txt
@@ -44,7 +44,9 @@ IF(UNIX)
SET_TARGET_PROPERTIES(mysql PROPERTIES ENABLE_EXPORTS TRUE)
ENDIF(UNIX)
-MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc COMPONENT Test)
+MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc
+ ${CMAKE_SOURCE_DIR}/sql/sql_string.cc
+ COMPONENT Test)
SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS ${PCRE2_DEBIAN_HACK}")
TARGET_LINK_LIBRARIES(mysqltest ${CLIENT_LIB} pcre2-posix pcre2-8)
SET_TARGET_PROPERTIES(mysqltest PROPERTIES ENABLE_EXPORTS TRUE)
diff --git a/client/client_metadata.h b/client/client_metadata.h
new file mode 100644
index 00000000000..49921f01885
--- /dev/null
+++ b/client/client_metadata.h
@@ -0,0 +1,57 @@
+#ifndef SQL_CLIENT_METADATA_INCLUDED
+#define SQL_CLIENT_METADATA_INCLUDED
+/*
+ Copyright (c) 2020, MariaDB Corporation.
+
+ 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
+
+#include "sql_string.h"
+
+
+/*
+ Print MYSQL_FIELD metadata in human readable format
+*/
+class Client_field_metadata
+{
+ const MYSQL_FIELD *m_field;
+public:
+ Client_field_metadata(MYSQL_FIELD *field)
+ :m_field(field)
+ { }
+ void print_attr(Binary_string *to,
+ const LEX_CSTRING &name,
+ mariadb_field_attr_t attr,
+ uint orig_to_length) const
+ {
+ MARIADB_CONST_STRING tmp;
+ if (!mariadb_field_attr(&tmp, m_field, attr) && tmp.length)
+ {
+ if (to->length() != orig_to_length)
+ to->append(" ", 1);
+ to->append(name);
+ to->append(tmp.str, tmp.length);
+ }
+ }
+ void print_data_type_related_attributes(Binary_string *to) const
+ {
+ static const LEX_CSTRING type= {C_STRING_WITH_LEN("type=")};
+ static const LEX_CSTRING format= {C_STRING_WITH_LEN("format=")};
+ uint to_length_orig= to->length();
+ print_attr(to, type, MARIADB_FIELD_ATTR_DATA_TYPE_NAME, to_length_orig);
+ print_attr(to, format, MARIADB_FIELD_ATTR_FORMAT_NAME, to_length_orig);
+ }
+};
+
+
+#endif // SQL_CLIENT_METADATA_INCLUDED
diff --git a/client/completion_hash.cc b/client/completion_hash.cc
index 0d88aa9b15e..0bfb4e879e4 100644
--- a/client/completion_hash.cc
+++ b/client/completion_hash.cc
@@ -41,15 +41,15 @@ uint hashpjw(const char *arKey, uint nKeyLength)
int completion_hash_init(HashTable *ht, uint nSize)
{
- ht->arBuckets = (Bucket **) my_malloc(nSize* sizeof(Bucket *),
- MYF(MY_ZEROFILL | MY_WME));
+ ht->arBuckets = (Bucket **) my_malloc(PSI_NOT_INSTRUMENTED,
+ nSize* sizeof(Bucket *), MYF(MY_ZEROFILL | MY_WME));
if (!ht->arBuckets)
{
ht->initialized = 0;
return FAILURE;
}
- init_alloc_root(&ht->mem_root, "completion_hash", 8192, 0, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &ht->mem_root, 8192, 0, MYF(0));
ht->pHashFunction = hashpjw;
ht->nTableSize = nSize;
ht->initialized = 1;
diff --git a/client/mysql.cc b/client/mysql.cc
index 2c7f0a500b9..f3c936e3028 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -58,6 +58,7 @@ static char *server_version= NULL;
#define MAX_SERVER_ARGS 64
#include "sql_string.h"
+#include "client_metadata.h"
extern "C" {
#if defined(HAVE_CURSES_H) && defined(HAVE_TERM_H)
@@ -1132,10 +1133,10 @@ int main(int argc,char *argv[])
charset_index= get_command_index('C');
delimiter_index= get_command_index('d');
delimiter_str= delimiter;
- default_prompt = my_strdup(getenv("MYSQL_PS1") ?
+ default_prompt = my_strdup(PSI_NOT_INSTRUMENTED, getenv("MYSQL_PS1") ?
getenv("MYSQL_PS1") :
"\\N [\\d]> ",MYF(MY_WME));
- current_prompt = my_strdup(default_prompt,MYF(MY_WME));
+ current_prompt = my_strdup(PSI_NOT_INSTRUMENTED, default_prompt,MYF(MY_WME));
prompt_counter=0;
aborted= 0;
sf_leaking_memory= 1; /* no memory leak reports yet */
@@ -1203,7 +1204,7 @@ int main(int argc,char *argv[])
sf_leaking_memory= 0;
glob_buffer.realloc(512);
completion_hash_init(&ht, 128);
- init_alloc_root(&hash_mem_root, "hash", 16384, 0, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &hash_mem_root, 16384, 0, MYF(0));
if (sql_connect(current_host,current_db,current_user,opt_password,
opt_silent))
{
@@ -1245,12 +1246,11 @@ int main(int argc,char *argv[])
{
/* read-history from file, default ~/.mysql_history*/
if (getenv("MYSQL_HISTFILE"))
- histfile=my_strdup(getenv("MYSQL_HISTFILE"),MYF(MY_WME));
+ histfile=my_strdup(PSI_NOT_INSTRUMENTED, getenv("MYSQL_HISTFILE"),MYF(MY_WME));
else if (getenv("HOME"))
{
- histfile=(char*) my_malloc((uint) strlen(getenv("HOME"))
- + (uint) strlen("/.mysql_history")+2,
- MYF(MY_WME));
+ histfile=(char*) my_malloc(PSI_NOT_INSTRUMENTED,
+ strlen(getenv("HOME")) + strlen("/.mysql_history")+2, MYF(MY_WME));
if (histfile)
sprintf(histfile,"%s/.mysql_history",getenv("HOME"));
char link_name[FN_REFLEN];
@@ -1272,8 +1272,8 @@ int main(int argc,char *argv[])
if (verbose)
tee_fprintf(stdout, "Reading history-file %s\n",histfile);
read_history(histfile);
- if (!(histfile_tmp= (char*) my_malloc((uint) strlen(histfile) + 5,
- MYF(MY_WME))))
+ if (!(histfile_tmp= (char*) my_malloc(PSI_NOT_INSTRUMENTED,
+ strlen(histfile) + 5, MYF(MY_WME))))
{
fprintf(stderr, "Couldn't allocate memory for temp histfile!\n");
exit(1);
@@ -1809,7 +1809,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
}
if (embedded_server_arg_count == MAX_SERVER_ARGS-1 ||
!(embedded_server_args[embedded_server_arg_count++]=
- my_strdup(argument, MYF(MY_FAE))))
+ my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE))))
{
put_info("Can't use server argument", INFO_ERROR);
return 0;
@@ -1845,7 +1845,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
{
char *start= argument;
my_free(opt_password);
- opt_password= my_strdup(argument, MYF(MY_FAE));
+ opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; // Destroy argument
if (*start)
start[1]=0 ;
@@ -1908,7 +1908,7 @@ static int get_options(int argc, char **argv)
tmp= (char *) getenv("MYSQL_HOST");
if (tmp)
- current_host= my_strdup(tmp, MYF(MY_WME));
+ current_host= my_strdup(PSI_NOT_INSTRUMENTED, tmp, MYF(MY_WME));
pagpoint= getenv("PAGER");
if (!((char*) (pagpoint)))
@@ -1950,7 +1950,7 @@ static int get_options(int argc, char **argv)
{
skip_updates= 0;
my_free(current_db);
- current_db= my_strdup(*argv, MYF(MY_WME));
+ current_db= my_strdup(PSI_NOT_INSTRUMENTED, *argv, MYF(MY_WME));
}
if (tty_password)
opt_password= get_tty_password(NullS);
@@ -2974,7 +2974,7 @@ static void get_current_db()
{
MYSQL_ROW row= mysql_fetch_row(res);
if (row && row[0])
- current_db= my_strdup(row[0], MYF(MY_WME));
+ current_db= my_strdup(PSI_NOT_INSTRUMENTED, row[0], MYF(MY_WME));
mysql_free_result(res);
}
}
@@ -3513,12 +3513,15 @@ print_field_types(MYSQL_RES *result)
while ((field = mysql_fetch_field(result)))
{
+ Client_field_metadata metadata(field);
+ BinaryStringBuffer<128> data_type_metadata_str;
+ metadata.print_data_type_related_attributes(&data_type_metadata_str);
tee_fprintf(PAGER, "Field %3u: `%s`\n"
"Catalog: `%s`\n"
"Database: `%s`\n"
"Table: `%s`\n"
"Org_table: `%s`\n"
- "Type: %s\n"
+ "Type: %s%s%.*s%s\n"
"Collation: %s (%u)\n"
"Length: %lu\n"
"Max_length: %lu\n"
@@ -3527,6 +3530,9 @@ print_field_types(MYSQL_RES *result)
++i,
field->name, field->catalog, field->db, field->table,
field->org_table, fieldtype2str(field->type),
+ data_type_metadata_str.length() ? " (" : "",
+ data_type_metadata_str.length(), data_type_metadata_str.ptr(),
+ data_type_metadata_str.length() ? ")" : "",
get_charset_name(field->charsetnr), field->charsetnr,
field->length, field->max_length, field->decimals,
fieldflags2str(field->flags));
@@ -4324,12 +4330,12 @@ com_connect(String *buffer, char *line)
if (tmp && *tmp)
{
my_free(current_db);
- current_db= my_strdup(tmp, MYF(MY_WME));
+ current_db= my_strdup(PSI_NOT_INSTRUMENTED, tmp, MYF(MY_WME));
tmp= get_arg(buff, GET_NEXT);
if (tmp)
{
my_free(current_host);
- current_host=my_strdup(tmp,MYF(MY_WME));
+ current_host=my_strdup(PSI_NOT_INSTRUMENTED, tmp,MYF(MY_WME));
}
}
else
@@ -4514,7 +4520,7 @@ com_use(String *buffer __attribute__((unused)), char *line)
return put_error(&mysql);
}
my_free(current_db);
- current_db=my_strdup(tmp,MYF(MY_WME));
+ current_db=my_strdup(PSI_NOT_INSTRUMENTED, tmp,MYF(MY_WME));
#ifdef HAVE_READLINE
if (select_db > 1)
build_completion_hash(opt_rehash, 1);
@@ -4922,7 +4928,7 @@ server_version_string(MYSQL *con)
/* version, space, comment, \0 */
size_t len= strlen(mysql_get_server_info(con)) + strlen(cur[0]) + 2;
- if ((server_version= (char *) my_malloc(len, MYF(MY_WME))))
+ if ((server_version= (char *) my_malloc(PSI_NOT_INSTRUMENTED, len, MYF(MY_WME))))
{
char *bufp;
bufp = strmov(server_version, mysql_get_server_info(con));
@@ -4939,7 +4945,7 @@ server_version_string(MYSQL *con)
*/
if (server_version == NULL)
- server_version= my_strdup(mysql_get_server_info(con), MYF(MY_WME));
+ server_version= my_strdup(PSI_NOT_INSTRUMENTED, mysql_get_server_info(con), MYF(MY_WME));
}
return server_version ? server_version : "";
@@ -5341,8 +5347,8 @@ static void init_username()
(result=mysql_use_result(&mysql)))
{
MYSQL_ROW cur=mysql_fetch_row(result);
- full_username=my_strdup(cur[0],MYF(MY_WME));
- part_username=my_strdup(strtok(cur[0],"@"),MYF(MY_WME));
+ full_username=my_strdup(PSI_NOT_INSTRUMENTED, cur[0],MYF(MY_WME));
+ part_username=my_strdup(PSI_NOT_INSTRUMENTED, strtok(cur[0],"@"),MYF(MY_WME));
(void) mysql_fetch_row(result); // Read eof
}
}
@@ -5353,7 +5359,7 @@ static int com_prompt(String *buffer __attribute__((unused)),
char *ptr=strchr(line, ' ');
prompt_counter = 0;
my_free(current_prompt);
- current_prompt=my_strdup(ptr ? ptr+1 : default_prompt,MYF(MY_WME));
+ current_prompt=my_strdup(PSI_NOT_INSTRUMENTED, ptr ? ptr+1 : default_prompt,MYF(MY_WME));
if (!ptr)
tee_fprintf(stdout, "Returning to default PROMPT of %s\n", default_prompt);
else
diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c
index 998524ac1f1..15bbc71183d 100644
--- a/client/mysql_plugin.c
+++ b/client/mysql_plugin.c
@@ -191,7 +191,7 @@ static char *get_value(char *line, const char *item)
char *s= 0;
s = line + item_len + 1;
- destination= my_strndup(s, line_len - start, MYF(MY_FAE));
+ destination= my_strndup(PSI_NOT_INSTRUMENTED, s, line_len - start, MYF(MY_FAE));
destination[line_len - item_len - 2]= 0;
}
return destination;
@@ -259,7 +259,7 @@ static int has_spaces(const char *path)
static char *convert_path(const char *argument)
{
/* Convert / to \\ to make Windows paths */
- char *winfilename= my_strdup(argument, MYF(MY_FAE));
+ char *winfilename= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
char *pos, *end;
size_t length= strlen(argument);
@@ -291,7 +291,7 @@ static char *add_quotes(const char *path)
else
snprintf(windows_cmd_friendly, sizeof(windows_cmd_friendly),
"%s", path);
- return my_strdup(windows_cmd_friendly, MYF(MY_FAE));
+ return my_strdup(PSI_NOT_INSTRUMENTED, windows_cmd_friendly, MYF(MY_FAE));
}
#endif
@@ -376,19 +376,19 @@ static int get_default_values()
if ((opt_datadir == 0) && ((value= get_value(line, "--datadir"))))
{
- opt_datadir= my_strdup(value, MYF(MY_FAE));
+ opt_datadir= my_strdup(PSI_NOT_INSTRUMENTED, value, MYF(MY_FAE));
}
if ((opt_basedir == 0) && ((value= get_value(line, "--basedir"))))
{
- opt_basedir= my_strdup(value, MYF(MY_FAE));
+ opt_basedir= my_strdup(PSI_NOT_INSTRUMENTED, value, MYF(MY_FAE));
}
if ((opt_plugin_dir == 0) && ((value= get_value(line, "--plugin_dir"))))
{
- opt_plugin_dir= my_strdup(value, MYF(MY_FAE));
+ opt_plugin_dir= my_strdup(PSI_NOT_INSTRUMENTED, value, MYF(MY_FAE));
}
if ((opt_plugin_ini == 0) && ((value= get_value(line, "--plugin_ini"))))
{
- opt_plugin_ini= my_strdup(value, MYF(MY_FAE));
+ opt_plugin_ini= my_strdup(PSI_NOT_INSTRUMENTED, value, MYF(MY_FAE));
}
}
}
@@ -497,22 +497,22 @@ get_one_option(const struct my_option *opt,
usage();
exit(0);
case 'd':
- opt_datadir= my_strdup(argument, MYF(MY_FAE));
+ opt_datadir= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
break;
case 'b':
- opt_basedir= my_strdup(argument, MYF(MY_FAE));
+ opt_basedir= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
break;
case 'p':
- opt_plugin_dir= my_strdup(argument, MYF(MY_FAE));
+ opt_plugin_dir= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
break;
case 'i':
- opt_plugin_ini= my_strdup(argument, MYF(MY_FAE));
+ opt_plugin_ini= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
break;
case 'm':
- opt_mysqld= my_strdup(argument, MYF(MY_FAE));
+ opt_mysqld= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
break;
case 'f':
- opt_my_print_defaults= my_strdup(argument, MYF(MY_FAE));
+ opt_my_print_defaults= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
break;
}
return 0;
@@ -620,7 +620,7 @@ static int load_plugin_data(char *plugin_name, char *config_file)
if (opt_plugin_ini == 0)
{
fn_format(path, config_file, opt_plugin_dir, "", MYF(0));
- opt_plugin_ini= my_strdup(path, MYF(MY_FAE));
+ opt_plugin_ini= my_strdup(PSI_NOT_INSTRUMENTED, path, MYF(MY_FAE));
}
if (!file_exists(opt_plugin_ini))
{
@@ -636,7 +636,7 @@ static int load_plugin_data(char *plugin_name, char *config_file)
}
/* save name */
- plugin_data.name= my_strdup(plugin_name, MYF(MY_WME));
+ plugin_data.name= my_strdup(PSI_NOT_INSTRUMENTED, plugin_name, MYF(MY_WME));
/* Read plugin components */
while (i < 16)
@@ -666,14 +666,14 @@ static int load_plugin_data(char *plugin_name, char *config_file)
/* Add proper file extension for soname */
strcat(line, FN_SOEXT);
/* save so_name */
- plugin_data.so_name= my_strdup(line, MYF(MY_WME|MY_ZEROFILL));
+ plugin_data.so_name= my_strdup(PSI_NOT_INSTRUMENTED, line, MYF(MY_WME|MY_ZEROFILL));
i++;
}
else
{
if (strlen(line) > 0)
{
- plugin_data.components[i]= my_strdup(line, MYF(MY_WME));
+ plugin_data.components[i]= my_strdup(PSI_NOT_INSTRUMENTED, line, MYF(MY_WME));
i++;
}
else
@@ -739,21 +739,21 @@ static int check_options(int argc, char **argv, char *operation)
else if ((strncasecmp(argv[i], basedir_prefix, basedir_len) == 0) &&
!opt_basedir)
{
- opt_basedir= my_strndup(argv[i]+basedir_len,
+ opt_basedir= my_strndup(PSI_NOT_INSTRUMENTED, argv[i]+basedir_len,
strlen(argv[i])-basedir_len, MYF(MY_FAE));
num_found++;
}
else if ((strncasecmp(argv[i], datadir_prefix, datadir_len) == 0) &&
!opt_datadir)
{
- opt_datadir= my_strndup(argv[i]+datadir_len,
+ opt_datadir= my_strndup(PSI_NOT_INSTRUMENTED, argv[i]+datadir_len,
strlen(argv[i])-datadir_len, MYF(MY_FAE));
num_found++;
}
else if ((strncasecmp(argv[i], plugin_dir_prefix, plugin_dir_len) == 0) &&
!opt_plugin_dir)
{
- opt_plugin_dir= my_strndup(argv[i]+plugin_dir_len,
+ opt_plugin_dir= my_strndup(PSI_NOT_INSTRUMENTED, argv[i]+plugin_dir_len,
strlen(argv[i])-plugin_dir_len, MYF(MY_FAE));
num_found++;
}
@@ -866,7 +866,7 @@ static int process_options(int argc, char *argv[], char *operation)
#endif
buff[sizeof(buff) - 1]= 0;
my_free(opt_basedir);
- opt_basedir= my_strdup(buff, MYF(MY_FAE));
+ opt_basedir= my_strdup(PSI_NOT_INSTRUMENTED, buff, MYF(MY_FAE));
}
}
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c
index 4e17089593f..bea82c2a112 100644
--- a/client/mysql_upgrade.c
+++ b/client/mysql_upgrade.c
@@ -1014,6 +1014,64 @@ static int install_used_engines(void)
return 0;
}
+static int check_slave_repositories(void)
+{
+ DYNAMIC_STRING ds_result;
+ int row_count= 0;
+ int error= 0;
+ const char *query = "SELECT COUNT(*) AS c1 FROM mysql.slave_master_info";
+
+ if (init_dynamic_string(&ds_result, "", 512, 512))
+ die("Out of memory");
+
+ run_query(query, &ds_result, TRUE);
+
+ if (ds_result.length)
+ {
+ row_count= atoi((char *)ds_result.str);
+ if (row_count)
+ {
+ fprintf(stderr,"Slave info repository compatibility check:"
+ " Found data in `mysql`.`slave_master_info` table.\n");
+ fprintf(stderr,"Warning: Content of `mysql`.`slave_master_info` table"
+ " will be ignored as MariaDB supports file based info "
+ "repository.\n");
+ error= 1;
+ }
+ }
+ dynstr_free(&ds_result);
+
+ query = "SELECT COUNT(*) AS c1 FROM mysql.slave_relay_log_info";
+
+ if (init_dynamic_string(&ds_result, "", 512, 512))
+ die("Out of memory");
+
+ run_query(query, &ds_result, TRUE);
+
+ if (ds_result.length)
+ {
+ row_count= atoi((char *)ds_result.str);
+ if (row_count)
+ {
+ fprintf(stderr, "Slave info repository compatibility check:"
+ " Found data in `mysql`.`slave_relay_log_info` table.\n");
+ fprintf(stderr, "Warning: Content of `mysql`.`slave_relay_log_info` "
+ "table will be ignored as MariaDB supports file based "
+ "repository.\n");
+ error= 1;
+ }
+ }
+ dynstr_free(&ds_result);
+ if (error)
+ {
+ fprintf(stderr,"Slave server may not possess the correct replication "
+ "metadata.\n");
+ fprintf(stderr, "Execution of CHANGE MASTER as per "
+ "`mysql`.`slave_master_info` and `mysql`.`slave_relay_log_info` "
+ "table content is recommended.\n");
+ }
+ return 0;
+}
/*
Update all system tables in MySQL Server to current
@@ -1225,7 +1283,8 @@ int main(int argc, char **argv)
run_mysqlcheck_views() ||
run_sql_fix_privilege_tables() ||
run_mysqlcheck_fixnames() ||
- run_mysqlcheck_upgrade(FALSE))
+ run_mysqlcheck_upgrade(FALSE) ||
+ check_slave_repositories())
die("Upgrade failed" );
verbose("Phase %d/%d: Running 'FLUSH PRIVILEGES'", ++phase, phases_total);
diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc
index bc1403b283a..1a128e61533 100644
--- a/client/mysqladmin.cc
+++ b/client/mysqladmin.cc
@@ -254,7 +254,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
{
char *start=argument;
my_free(opt_password);
- opt_password=my_strdup(argument,MYF(MY_FAE));
+ opt_password=my_strdup(PSI_NOT_INSTRUMENTED, argument,MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]=0; /* Cut length of argument */
@@ -1357,11 +1357,11 @@ static char **mask_password(int argc, char ***argv)
if (!argc)
return NULL;
- temp_argv= (char **)(my_malloc(sizeof(char *) * argc, MYF(MY_WME)));
+ temp_argv= (char **)(my_malloc(PSI_NOT_INSTRUMENTED, sizeof(char *) * argc, MYF(MY_WME)));
argc--;
while (argc > 0)
{
- temp_argv[argc]= my_strdup((*argv)[argc], MYF(MY_FAE));
+ temp_argv[argc]= my_strdup(PSI_NOT_INSTRUMENTED, (*argv)[argc], MYF(MY_FAE));
if (find_type((*argv)[argc - 1],&command_typelib, FIND_TYPE_BASIC) == ADMIN_PASSWORD ||
find_type((*argv)[argc - 1],&command_typelib, FIND_TYPE_BASIC) == ADMIN_OLD_PASSWORD)
{
@@ -1374,7 +1374,7 @@ static char **mask_password(int argc, char ***argv)
}
argc--;
}
- temp_argv[argc]= my_strdup((*argv)[argc], MYF(MY_FAE));
+ temp_argv[argc]= my_strdup(PSI_NOT_INSTRUMENTED, (*argv)[argc], MYF(MY_FAE));
return(temp_argv);
}
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 47a7f9e01b2..eb50eff5a1d 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -61,6 +61,9 @@
extern "C" unsigned char *mysql_net_store_length(unsigned char *packet, size_t length);
#define net_store_length mysql_net_store_length
+#define key_memory_TABLE_RULE_ENT 0
+#define key_memory_rpl_filter 0
+
Rpl_filter *binlog_filter= 0;
#define BIN_LOG_HEADER_SIZE 4
@@ -196,7 +199,7 @@ Log_event* read_remote_annotate_event(uchar* net_buf, ulong event_len,
uchar *event_buf;
Log_event* event;
- if (!(event_buf= (uchar*) my_malloc(event_len + 1, MYF(MY_WME))))
+ if (!(event_buf= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED, event_len + 1, MYF(MY_WME))))
{
error("Out of memory");
return 0;
@@ -308,7 +311,7 @@ public:
int init()
{
- return my_init_dynamic_array(&file_names, sizeof(File_name_record),
+ return my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &file_names, sizeof(File_name_record),
100, 100, MYF(0));
}
@@ -543,7 +546,7 @@ Exit_status Load_log_processor::process_first_event(const char *bname,
File_name_record rec;
DBUG_ENTER("Load_log_processor::process_first_event");
- if (!(fname= (char*) my_malloc(full_len,MYF(MY_WME))))
+ if (!(fname= (char*) my_malloc(PSI_NOT_INSTRUMENTED, full_len,MYF(MY_WME))))
{
error("Out of memory.");
delete ce;
@@ -1958,7 +1961,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
{
my_free(pass);
char *start=argument;
- pass= my_strdup(argument,MYF(MY_FAE));
+ pass= my_strdup(PSI_NOT_INSTRUMENTED, argument,MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]=0; /* Cut length of argument */
@@ -3044,10 +3047,10 @@ int main(int argc, char** argv)
if (opt_flashback)
{
- my_init_dynamic_array(&binlog_events, sizeof(LEX_STRING), 1024, 1024,
- MYF(0));
- my_init_dynamic_array(&events_in_stmt, sizeof(Rows_log_event*), 1024, 1024,
- MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &binlog_events,
+ sizeof(LEX_STRING), 1024, 1024, MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &events_in_stmt,
+ sizeof(Rows_log_event*), 1024, 1024, MYF(0));
}
if (opt_stop_never)
to_last_remote_log= TRUE;
@@ -3095,7 +3098,7 @@ int main(int argc, char** argv)
retval= ERROR_STOP;
goto err;
}
- dirname_for_local_load= my_strdup(my_tmpdir(&tmpdir), MY_WME);
+ dirname_for_local_load= my_strdup(PSI_NOT_INSTRUMENTED, my_tmpdir(&tmpdir), MY_WME);
}
if (load_processor.init())
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c
index e949c8059bf..d7eeec6198b 100644
--- a/client/mysqlcheck.c
+++ b/client/mysqlcheck.c
@@ -326,7 +326,7 @@ get_one_option(const struct my_option *opt,
{
char *start = argument;
my_free(opt_password);
- opt_password = my_strdup(argument, MYF(MY_FAE));
+ opt_password = my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1] = 0; /* Cut length of argument */
@@ -567,7 +567,7 @@ static int process_selected_tables(char *db, char **table_names, int tables)
tot_length+= fixed_name_length(*(table_names + i)) + 2;
if (!(table_names_comma_sep = (char *)
- my_malloc((sizeof(char) * tot_length) + 4, MYF(MY_WME))))
+ my_malloc(PSI_NOT_INSTRUMENTED, tot_length + 4, MYF(MY_WME))))
DBUG_RETURN(1);
for (end = table_names_comma_sep + 1; tables > 0;
@@ -678,12 +678,12 @@ static int process_all_tables_in_db(char *database)
}
mysql_data_seek(res, 0);
- if (!(tables=(char *) my_malloc(sizeof(char)*tot_length+4, MYF(MY_WME))))
+ if (!(tables=(char *) my_malloc(PSI_NOT_INSTRUMENTED, tot_length+4, MYF(MY_WME))))
{
mysql_free_result(res);
DBUG_RETURN(1);
}
- if (!(views=(char *) my_malloc(sizeof(char)*tot_views_length+4, MYF(MY_WME))))
+ if (!(views=(char *) my_malloc(PSI_NOT_INSTRUMENTED, tot_views_length+4, MYF(MY_WME))))
{
my_free(tables);
mysql_free_result(res);
@@ -799,8 +799,7 @@ static int rebuild_table(char *name)
int rc= 0;
DBUG_ENTER("rebuild_table");
- query= (char*)my_malloc(sizeof(char) * (12 + strlen(name) + 6 + 1),
- MYF(MY_WME));
+ query= (char*)my_malloc(PSI_NOT_INSTRUMENTED, 12+strlen(name)+6+1, MYF(MY_WME));
if (!query)
DBUG_RETURN(1);
ptr= strxmov(query, "ALTER TABLE ", name, " FORCE", NullS);
@@ -938,7 +937,7 @@ static int handle_request_for_tables(char *tables, size_t length,
DBUG_RETURN(fix_table_storage_name(tables));
}
- if (!(query =(char *) my_malloc(query_size, MYF(MY_WME))))
+ if (!(query =(char *) my_malloc(PSI_NOT_INSTRUMENTED, query_size, MYF(MY_WME))))
DBUG_RETURN(1);
if (dont_quote)
{
@@ -1195,14 +1194,14 @@ int main(int argc, char **argv)
}
if (opt_auto_repair &&
- (my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,
- 64, MYF(0)) ||
- my_init_dynamic_array(&views4repair, sizeof(char)*(NAME_LEN*2+2),16,
- 64, MYF(0)) ||
- my_init_dynamic_array(&tables4rebuild, sizeof(char)*(NAME_LEN*2+2),16,
- 64, MYF(0)) ||
- my_init_dynamic_array(&alter_table_cmds, MAX_ALTER_STR_SIZE, 0, 1,
- MYF(0))))
+ (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &tables4repair,
+ NAME_LEN*2+2, 16, 64, MYF(0)) ||
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &views4repair,
+ NAME_LEN*2+2, 16, 64, MYF(0)) ||
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &tables4rebuild,
+ NAME_LEN*2+2, 16, 64, MYF(0)) ||
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &alter_table_cmds,
+ MAX_ALTER_STR_SIZE, 0, 1, MYF(0))))
goto end;
if (opt_alldbs)
diff --git a/client/mysqldump.c b/client/mysqldump.c
index f932420aef0..263b6ffbf38 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -826,7 +826,7 @@ get_one_option(const struct my_option *opt,
{
char *start=argument;
my_free(opt_password);
- opt_password=my_strdup(argument,MYF(MY_FAE));
+ opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]=0; /* Cut length of argument */
@@ -908,7 +908,8 @@ get_one_option(const struct my_option *opt,
opt_databases=0;
break;
case (int) OPT_IGNORE_DATABASE:
- if (my_hash_insert(&ignore_database, (uchar*) my_strdup(argument, MYF(0))))
+ if (my_hash_insert(&ignore_database,
+ (uchar*) my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(0))))
exit(EX_EOM);
break;
case (int) OPT_IGNORE_TABLE:
@@ -918,7 +919,8 @@ get_one_option(const struct my_option *opt,
fprintf(stderr, "Illegal use of option --ignore-table=<database>.<table>\n");
exit(1);
}
- if (my_hash_insert(&ignore_table, (uchar*)my_strdup(argument, MYF(0))))
+ if (my_hash_insert(&ignore_table,
+ (uchar*)my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(0))))
exit(EX_EOM);
break;
}
@@ -999,23 +1001,23 @@ static int get_options(int *argc, char ***argv)
load_defaults_or_exit("my", load_default_groups, argc, argv);
defaults_argv= *argv;
- if (my_hash_init(&ignore_database, charset_info, 16, 0, 0,
- (my_hash_get_key) get_table_key, my_free, 0))
+ if (my_hash_init(PSI_NOT_INSTRUMENTED, &ignore_database, charset_info, 16, 0, 0,
+ (my_hash_get_key) get_table_key, my_free, 0))
return(EX_EOM);
- if (my_hash_init(&ignore_table, charset_info, 16, 0, 0,
- (my_hash_get_key) get_table_key, my_free, 0))
+ if (my_hash_init(PSI_NOT_INSTRUMENTED, &ignore_table, charset_info, 16, 0, 0,
+ (my_hash_get_key) get_table_key, my_free, 0))
return(EX_EOM);
/* Don't copy internal log tables */
- if (my_hash_insert(&ignore_table,
- (uchar*) my_strdup("mysql.apply_status", MYF(MY_WME))) ||
- my_hash_insert(&ignore_table,
- (uchar*) my_strdup("mysql.schema", MYF(MY_WME))) ||
- my_hash_insert(&ignore_table,
- (uchar*) my_strdup("mysql.general_log", MYF(MY_WME))) ||
- my_hash_insert(&ignore_table,
- (uchar*) my_strdup("mysql.slow_log", MYF(MY_WME))) ||
- my_hash_insert(&ignore_table,
- (uchar*) my_strdup("mysql.transaction_registry", MYF(MY_WME))))
+ if (my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED,
+ "mysql.apply_status", MYF(MY_WME))) ||
+ my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED,
+ "mysql.schema", MYF(MY_WME))) ||
+ my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED,
+ "mysql.general_log", MYF(MY_WME))) ||
+ my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED,
+ "mysql.slow_log", MYF(MY_WME))) ||
+ my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED,
+ "mysql.transaction_registry", MYF(MY_WME))))
return(EX_EOM);
if ((ho_error= handle_options(argc, argv, my_long_options, get_one_option)))
@@ -1793,7 +1795,7 @@ static void unescape(FILE *file,char *pos, size_t length)
{
char *tmp;
DBUG_ENTER("unescape");
- if (!(tmp=(char*) my_malloc(length*2+1, MYF(MY_WME))))
+ if (!(tmp=(char*) my_malloc(PSI_NOT_INSTRUMENTED, length*2+1, MYF(MY_WME))))
die(EX_MYSQLERR, "Couldn't allocate memory");
mysql_real_escape_string(&mysql_connection, tmp, pos, (ulong)length);
@@ -2876,7 +2878,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
/* save "show create" statement for later */
if ((row= mysql_fetch_row(result)) && (scv_buff=row[1]))
- scv_buff= my_strdup(scv_buff, MYF(0));
+ scv_buff= my_strdup(PSI_NOT_INSTRUMENTED, scv_buff, MYF(0));
mysql_free_result(result);
@@ -3677,7 +3679,7 @@ static char *alloc_query_str(size_t size)
{
char *query;
- if (!(query= (char*) my_malloc(size, MYF(MY_WME))))
+ if (!(query= (char*) my_malloc(PSI_NOT_INSTRUMENTED, size, MYF(MY_WME))))
die(EX_MYSQLERR, "Couldn't allocate a query string.");
return query;
@@ -5067,7 +5069,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
if (init_dumping(db, init_dumping_tables))
DBUG_RETURN(1);
- init_alloc_root(&glob_root, "glob_root", 8192, 0, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &glob_root, 8192, 0, MYF(0));
if (!(dump_tables= pos= (char**) alloc_root(&glob_root,
tables * sizeof(char *))))
die(EX_EOM, "alloc_root failure.");
@@ -5819,7 +5821,7 @@ static char *primary_key_fields(const char *table_name)
{
char *end;
/* result (terminating \0 is already in result_length) */
- result= my_malloc(result_length + 10, MYF(MY_WME));
+ result= my_malloc(PSI_NOT_INSTRUMENTED, result_length + 10, MYF(MY_WME));
if (!result)
{
fprintf(stderr, "Error: Not enough memory to store ORDER BY clause\n");
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index 76923e036b5..9e197e4e199 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -232,7 +232,7 @@ get_one_option(const struct my_option *opt, char *argument,
{
char *start=argument;
my_free(opt_password);
- opt_password=my_strdup(argument,MYF(MY_FAE));
+ opt_password=my_strdup(PSI_NOT_INSTRUMENTED, argument,MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]=0; /* Cut length of argument */
@@ -672,9 +672,8 @@ int main(int argc, char **argv)
table_count++;
argv= save_argv;
- if (!(worker_threads= (pthread_t*) my_malloc(table_count *
- sizeof(*worker_threads),
- MYF(0))))
+ if (!(worker_threads= (pthread_t*) my_malloc(PSI_NOT_INSTRUMENTED,
+ table_count * sizeof(*worker_threads), MYF(0))))
return -2;
for (; *argv != NULL; argv++) /* Loop through tables */
diff --git a/client/mysqlshow.c b/client/mysqlshow.c
index d71a8aa5132..2b0cae6dc98 100644
--- a/client/mysqlshow.c
+++ b/client/mysqlshow.c
@@ -303,7 +303,7 @@ get_one_option(const struct my_option *opt, char *argument,
{
char *start=argument;
my_free(opt_password);
- opt_password=my_strdup(argument,MYF(MY_FAE));
+ opt_password=my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]=0; /* Cut length of argument */
diff --git a/client/mysqlslap.c b/client/mysqlslap.c
index 996f9bb79c6..7d3c5747b18 100644
--- a/client/mysqlslap.c
+++ b/client/mysqlslap.c
@@ -433,8 +433,8 @@ void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
unsigned long long client_limit;
int sysret;
- head_sptr= (stats *)my_malloc(sizeof(stats) * iterations,
- MYF(MY_ZEROFILL|MY_FAE|MY_WME));
+ head_sptr= (stats *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(stats) * iterations, MYF(MY_ZEROFILL|MY_FAE|MY_WME));
bzero(&conclusion, sizeof(conclusions));
@@ -741,7 +741,7 @@ get_one_option(const struct my_option *opt, char *argument,
{
char *start= argument;
my_free(opt_password);
- opt_password= my_strdup(argument,MYF(MY_FAE));
+ opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument,MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]= 0; /* Cut length of argument */
@@ -918,9 +918,9 @@ build_table_string(void)
}
dynstr_append(&table_string, ")");
- ptr= (statement *)my_malloc(sizeof(statement),
+ ptr= (statement *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(statement),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
- ptr->string = (char *)my_malloc(table_string.length+1,
+ ptr->string = (char *)my_malloc(PSI_NOT_INSTRUMENTED, table_string.length+1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
ptr->length= table_string.length+1;
ptr->type= CREATE_TABLE_TYPE;
@@ -986,10 +986,10 @@ build_update_string(void)
dynstr_append(&update_string, " WHERE id = ");
- ptr= (statement *)my_malloc(sizeof(statement),
+ ptr= (statement *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(statement),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
- ptr->string= (char *)my_malloc(update_string.length + 1,
+ ptr->string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, update_string.length + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
ptr->length= update_string.length+1;
if (auto_generate_sql_autoincrement || auto_generate_sql_guid_primary)
@@ -1082,9 +1082,9 @@ build_insert_string(void)
dynstr_append_mem(&insert_string, ")", 1);
- ptr= (statement *)my_malloc(sizeof(statement),
+ ptr= (statement *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(statement),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
- ptr->string= (char *)my_malloc(insert_string.length + 1,
+ ptr->string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, insert_string.length + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
ptr->length= insert_string.length+1;
ptr->type= INSERT_TYPE;
@@ -1146,9 +1146,9 @@ build_select_string(my_bool key)
(auto_generate_sql_autoincrement || auto_generate_sql_guid_primary))
dynstr_append(&query_string, " WHERE id = ");
- ptr= (statement *)my_malloc(sizeof(statement),
+ ptr= (statement *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(statement),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
- ptr->string= (char *)my_malloc(query_string.length + 1,
+ ptr->string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, query_string.length + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
ptr->length= query_string.length+1;
if ((key) &&
@@ -1405,7 +1405,7 @@ get_options(int *argc,char ***argv)
fprintf(stderr,"%s: Could not open create file\n", my_progname);
exit(1);
}
- tmp_string= (char *)my_malloc((size_t)sbuf.st_size + 1,
+ tmp_string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, (size_t)sbuf.st_size + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
my_read(data_file, (uchar*) tmp_string, (size_t)sbuf.st_size, MYF(0));
tmp_string[sbuf.st_size]= '\0';
@@ -1432,7 +1432,7 @@ get_options(int *argc,char ***argv)
fprintf(stderr,"%s: Could not open query supplied file\n", my_progname);
exit(1);
}
- tmp_string= (char *)my_malloc((size_t)sbuf.st_size + 1,
+ tmp_string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, (size_t)sbuf.st_size + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
my_read(data_file, (uchar*) tmp_string, (size_t)sbuf.st_size, MYF(0));
tmp_string[sbuf.st_size]= '\0';
@@ -1463,7 +1463,7 @@ get_options(int *argc,char ***argv)
fprintf(stderr,"%s: Could not open query supplied file\n", my_progname);
exit(1);
}
- tmp_string= (char *)my_malloc((size_t)sbuf.st_size + 1,
+ tmp_string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, (size_t)sbuf.st_size + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
my_read(data_file, (uchar*) tmp_string, (size_t)sbuf.st_size, MYF(0));
tmp_string[sbuf.st_size]= '\0';
@@ -1494,7 +1494,7 @@ get_options(int *argc,char ***argv)
fprintf(stderr,"%s: Could not open query supplied file\n", my_progname);
exit(1);
}
- tmp_string= (char *)my_malloc((size_t)sbuf.st_size + 1,
+ tmp_string= (char *)my_malloc(PSI_NOT_INSTRUMENTED, (size_t)sbuf.st_size + 1,
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
my_read(data_file, (uchar*) tmp_string, (size_t)sbuf.st_size, MYF(0));
tmp_string[sbuf.st_size]= '\0';
@@ -1560,11 +1560,11 @@ generate_primary_key_list(MYSQL *mysql, option_string *engine_stmt)
strstr(engine_stmt->string, "blackhole")))
{
primary_keys_number_of= 1;
- primary_keys= (char **)my_malloc((uint)(sizeof(char *) *
- primary_keys_number_of),
- MYF(MY_ZEROFILL|MY_FAE|MY_WME));
+ primary_keys= (char **)my_malloc(PSI_NOT_INSTRUMENTED,
+ (size_t)(sizeof(char *) * primary_keys_number_of),
+ MYF(MY_ZEROFILL|MY_FAE|MY_WME));
/* Yes, we strdup a const string to simplify the interface */
- primary_keys[0]= my_strdup("796c4422-1d94-102a-9d6d-00e0812d", MYF(0));
+ primary_keys[0]= my_strdup(PSI_NOT_INSTRUMENTED, "796c4422-1d94-102a-9d6d-00e0812d", MYF(0));
}
else
{
@@ -1589,13 +1589,13 @@ generate_primary_key_list(MYSQL *mysql, option_string *engine_stmt)
/*
We create the structure and loop and create the items.
*/
- primary_keys= (char **)my_malloc((uint)(sizeof(char *) *
- primary_keys_number_of),
- MYF(MY_ZEROFILL|MY_FAE|MY_WME));
+ primary_keys= (char **)my_malloc(PSI_NOT_INSTRUMENTED,
+ (size_t)(sizeof(char *) * primary_keys_number_of),
+ MYF(MY_ZEROFILL|MY_FAE|MY_WME));
row= mysql_fetch_row(result);
for (counter= 0; counter < primary_keys_number_of;
counter++, row= mysql_fetch_row(result))
- primary_keys[counter]= my_strdup(row[0], MYF(0));
+ primary_keys[counter]= my_strdup(PSI_NOT_INSTRUMENTED, row[0], MYF(0));
}
mysql_free_result(result);
@@ -2006,10 +2006,10 @@ parse_option(const char *origin, option_string **stmt, char delm)
size_t length= strlen(origin);
uint count= 0; /* We know that there is always one */
- for (tmp= *sptr= (option_string *)my_malloc(sizeof(option_string),
+ for (tmp= *sptr= (option_string *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(option_string),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
(retstr= strchr(ptr, delm));
- tmp->next= (option_string *)my_malloc(sizeof(option_string),
+ tmp->next= (option_string *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(option_string),
MYF(MY_ZEROFILL|MY_FAE|MY_WME)),
tmp= tmp->next)
{
@@ -2040,18 +2040,18 @@ parse_option(const char *origin, option_string **stmt, char delm)
char *option_ptr;
tmp->length= (size_t)(buffer_ptr - buffer);
- tmp->string= my_strndup(ptr, (uint)tmp->length, MYF(MY_FAE));
+ tmp->string= my_strndup(PSI_NOT_INSTRUMENTED, ptr, (uint)tmp->length, MYF(MY_FAE));
option_ptr= ptr + 1 + tmp->length;
/* Move past the : and the first string */
tmp->option_length= (size_t)(retstr - option_ptr);
- tmp->option= my_strndup(option_ptr, (uint)tmp->option_length,
+ tmp->option= my_strndup(PSI_NOT_INSTRUMENTED, option_ptr, (uint)tmp->option_length,
MYF(MY_FAE));
}
else
{
- tmp->string= my_strndup(ptr, (size_t)(retstr - ptr), MYF(MY_FAE));
+ tmp->string= my_strndup(PSI_NOT_INSTRUMENTED, ptr, (size_t)(retstr - ptr), MYF(MY_FAE));
tmp->length= (size_t)(retstr - ptr);
}
@@ -2079,19 +2079,19 @@ parse_option(const char *origin, option_string **stmt, char delm)
char *option_ptr;
tmp->length= (size_t)(origin_ptr - ptr);
- tmp->string= my_strndup(ptr, tmp->length, MYF(MY_FAE));
+ tmp->string= my_strndup(PSI_NOT_INSTRUMENTED, ptr, tmp->length, MYF(MY_FAE));
option_ptr= (char *)ptr + 1 + tmp->length;
/* Move past the : and the first string */
tmp->option_length= strlen(option_ptr);
- tmp->option= my_strndup(option_ptr, tmp->option_length,
+ tmp->option= my_strndup(PSI_NOT_INSTRUMENTED, option_ptr, tmp->option_length,
MYF(MY_FAE));
}
else
{
tmp->length= strlen(ptr);
- tmp->string= my_strndup(ptr, tmp->length, MYF(MY_FAE));
+ tmp->string= my_strndup(PSI_NOT_INSTRUMENTED, ptr, tmp->length, MYF(MY_FAE));
}
count++;
@@ -2111,15 +2111,15 @@ parse_delimiter(const char *script, statement **stmt, char delm)
size_t length= strlen(script);
uint count= 0; /* We know that there is always one */
- for (tmp= *sptr= (statement *)my_malloc(sizeof(statement),
+ for (tmp= *sptr= (statement *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(statement),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
(retstr= strchr(ptr, delm));
- tmp->next= (statement *)my_malloc(sizeof(statement),
+ tmp->next= (statement *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(statement),
MYF(MY_ZEROFILL|MY_FAE|MY_WME)),
tmp= tmp->next)
{
count++;
- tmp->string= my_strndup(ptr, (uint)(retstr - ptr), MYF(MY_FAE));
+ tmp->string= my_strndup(PSI_NOT_INSTRUMENTED, ptr, (uint)(retstr - ptr), MYF(MY_FAE));
tmp->length= (size_t)(retstr - ptr);
ptr+= retstr - ptr + 1;
if (isspace(*ptr))
@@ -2128,7 +2128,7 @@ parse_delimiter(const char *script, statement **stmt, char delm)
if (ptr != script+length)
{
- tmp->string= my_strndup(ptr, (uint)((script + length) - ptr),
+ tmp->string= my_strndup(PSI_NOT_INSTRUMENTED, ptr, (uint)((script + length) - ptr),
MYF(MY_FAE));
tmp->length= (size_t)((script + length) - ptr);
count++;
@@ -2150,7 +2150,7 @@ parse_comma(const char *string, uint **range)
if (*ptr == ',') count++;
/* One extra spot for the NULL */
- nptr= *range= (uint *)my_malloc(sizeof(uint) * (count + 1),
+ nptr= *range= (uint *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(uint) * (count + 1),
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
ptr= (char *)string;
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index 3988fa7475f..543b7f45b90 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -40,6 +40,7 @@
#include <mysqld_error.h>
#include <sql_common.h>
#include <m_ctype.h>
+#include "client_metadata.h"
#include <my_dir.h>
#include <hash.h>
#include <stdarg.h>
@@ -1769,7 +1770,7 @@ int cat_file(DYNAMIC_STRING* ds, const char* filename)
len= (size_t) my_seek(fd, 0, SEEK_END, MYF(0));
my_seek(fd, 0, SEEK_SET, MYF(0));
if (len == (size_t)MY_FILEPOS_ERROR ||
- !(buff= (char*)my_malloc(len + 1, MYF(0))))
+ !(buff= (char*)my_malloc(PSI_NOT_INSTRUMENTED, len + 1, MYF(0))))
{
my_close(fd, MYF(0));
return 1;
@@ -2427,7 +2428,7 @@ VAR *var_init(VAR *v, const char *name, size_t name_len, const char *val, size_t
if (!val)
val_len= 0;
val_alloc_len = val_len + 16; /* room to grow */
- if (!(tmp_var=v) && !(tmp_var = (VAR*)my_malloc(sizeof(*tmp_var)
+ if (!(tmp_var=v) && !(tmp_var = (VAR*)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*tmp_var)
+ name_len+2, MYF(MY_WME))))
die("Out of memory");
@@ -2442,7 +2443,7 @@ VAR *var_init(VAR *v, const char *name, size_t name_len, const char *val, size_t
tmp_var->alloced = (v == 0);
- if (!(tmp_var->str_val = (char*)my_malloc(val_alloc_len+1, MYF(MY_WME))))
+ if (!(tmp_var->str_val = (char*)my_malloc(PSI_NOT_INSTRUMENTED, val_alloc_len+1, MYF(MY_WME))))
die("Out of memory");
if (val)
@@ -2990,8 +2991,8 @@ void var_copy(VAR *dest, VAR *src)
/* Alloc/realloc data for str_val in dest */
if (dest->alloced_len < src->alloced_len &&
!(dest->str_val= dest->str_val
- ? (char*)my_realloc(dest->str_val, src->alloced_len, MYF(MY_WME))
- : (char*)my_malloc(src->alloced_len, MYF(MY_WME))))
+ ? (char*)my_realloc(PSI_NOT_INSTRUMENTED, dest->str_val, src->alloced_len, MYF(MY_WME))
+ : (char*)my_malloc(PSI_NOT_INSTRUMENTED, src->alloced_len, MYF(MY_WME))))
die("Out of memory");
else
dest->alloced_len= src->alloced_len;
@@ -3068,8 +3069,8 @@ void eval_expr(VAR *v, const char *p, const char **p_end,
MIN_VAR_ALLOC : new_val_len + 1;
if (!(v->str_val =
v->str_val ?
- (char*)my_realloc(v->str_val, v->alloced_len+1, MYF(MY_WME)) :
- (char*)my_malloc(v->alloced_len+1, MYF(MY_WME))))
+ (char*)my_realloc(PSI_NOT_INSTRUMENTED, v->str_val, v->alloced_len+1, MYF(MY_WME)) :
+ (char*)my_malloc(PSI_NOT_INSTRUMENTED, v->alloced_len+1, MYF(MY_WME))))
die("Out of memory");
}
v->str_val_len = new_val_len;
@@ -3090,7 +3091,7 @@ bool open_and_set_current(const char *name)
cur_file++;
cur_file->file= opened;
- cur_file->file_name= my_strdup(name, MYF(MY_FAE));
+ cur_file->file_name= my_strdup(PSI_NOT_INSTRUMENTED, name, MYF(MY_FAE));
cur_file->lineno=1;
return true;
}
@@ -4845,7 +4846,7 @@ void do_sync_with_master(struct st_command *command)
p++;
while (*p && my_isspace(charset_info, *p))
p++;
- start= buff= (char*)my_malloc(strlen(p)+1,MYF(MY_WME | MY_FAE));
+ start= buff= (char*)my_malloc(PSI_NOT_INSTRUMENTED, strlen(p)+1,MYF(MY_WME | MY_FAE));
get_string(&buff, &p, command);
}
command->last_argument= p;
@@ -5650,7 +5651,7 @@ void do_close_connection(struct st_command *command)
When the connection is closed set name to "-closed_connection-"
to make it possible to reuse the connection name.
*/
- if (!(con->name = my_strdup("-closed_connection-", MYF(MY_WME))))
+ if (!(con->name = my_strdup(PSI_NOT_INSTRUMENTED, "-closed_connection-", MYF(MY_WME))))
die("Out of memory");
if (con == cur_con)
@@ -6143,7 +6144,7 @@ void do_connect(struct st_command *command)
{
DBUG_PRINT("info", ("Inserting connection %s in connection pool",
ds_connection_name.str));
- if (!(con_slot->name= my_strdup(ds_connection_name.str, MYF(MY_WME))))
+ if (!(con_slot->name= my_strdup(PSI_NOT_INSTRUMENTED, ds_connection_name.str, MYF(MY_WME))))
die("Out of memory");
con_slot->name_len= strlen(con_slot->name);
set_current_connection(con_slot);
@@ -6594,7 +6595,7 @@ int read_line()
if (p >= buf_end)
{
my_ptrdiff_t off= p - read_command_buf;
- read_command_buf= (char*)my_realloc(read_command_buf,
+ read_command_buf= (char*)my_realloc(PSI_NOT_INSTRUMENTED, read_command_buf,
read_command_buflen*2, MYF(MY_FAE));
p= read_command_buf + off;
read_command_buflen*= 2;
@@ -6941,7 +6942,7 @@ int read_command(struct st_command** command_ptr)
DBUG_RETURN(0);
}
if (!(*command_ptr= command=
- (struct st_command*) my_malloc(sizeof(*command),
+ (struct st_command*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*command),
MYF(MY_WME|MY_ZEROFILL))) ||
insert_dynamic(&q_lines, &command))
die("Out of memory");
@@ -6976,7 +6977,7 @@ int read_command(struct st_command** command_ptr)
while (*p && my_isspace(charset_info, *p))
p++;
- if (!(command->query_buf= command->query= my_strdup(p, MYF(MY_WME))))
+ if (!(command->query_buf= command->query= my_strdup(PSI_NOT_INSTRUMENTED, p, MYF(MY_WME))))
die("Out of memory");
/*
@@ -7189,7 +7190,7 @@ void read_embedded_server_arguments(const char *name)
{
*(strend(str)-1)=0; /* Remove end newline */
if (!(embedded_server_args[embedded_server_arg_count]=
- my_strdup(str, MYF(MY_WME))))
+ my_strdup(PSI_NOT_INSTRUMENTED, str, MYF(MY_WME))))
{
my_fclose(file,MYF(0));
die("Out of memory");
@@ -7232,7 +7233,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
if (!(cur_file->file=
fopen(buff, "rb")))
die("Could not open '%s' for reading, errno: %d", buff, errno);
- cur_file->file_name= my_strdup(buff, MYF(MY_FAE));
+ cur_file->file_name= my_strdup(PSI_NOT_INSTRUMENTED, buff, MYF(MY_FAE));
cur_file->lineno= 1;
break;
}
@@ -7255,7 +7256,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
if (argument)
{
my_free(opt_pass);
- opt_pass= my_strdup(argument, MYF(MY_FAE));
+ opt_pass= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
tty_password= 0;
}
@@ -7274,7 +7275,7 @@ get_one_option(const struct my_option *opt, char *argument, const char *)
}
if (embedded_server_arg_count == MAX_EMBEDDED_SERVER_ARGS-1 ||
!(embedded_server_args[embedded_server_arg_count++]=
- my_strdup(argument, MYF(MY_FAE))))
+ my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE))))
{
die("Can't use server argument");
}
@@ -7448,7 +7449,7 @@ void init_win_path_patterns()
DBUG_ENTER("init_win_path_patterns");
- my_init_dynamic_array(&patterns, sizeof(const char*), 16, 16, MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &patterns, sizeof(const char*), 16, 16, MYF(0));
/* Loop through all paths in the array */
for (i= 0; i < num_paths; i++)
@@ -7457,10 +7458,10 @@ void init_win_path_patterns()
if (*(paths[i]) == '$')
{
v= var_get(paths[i], 0, 0, 0);
- p= my_strdup(v->str_val, MYF(MY_FAE));
+ p= my_strdup(PSI_NOT_INSTRUMENTED, v->str_val, MYF(MY_FAE));
}
else
- p= my_strdup(paths[i], MYF(MY_FAE));
+ p= my_strdup(PSI_NOT_INSTRUMENTED, paths[i], MYF(MY_FAE));
/* Don't insert zero length strings in patterns array */
if (strlen(p) == 0)
@@ -7644,11 +7645,11 @@ void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
int error;
/* Allocate array with bind structs, lengths and NULL flags */
- my_bind= (MYSQL_BIND*) my_malloc(num_fields * sizeof(MYSQL_BIND),
+ my_bind= (MYSQL_BIND*) my_malloc(PSI_NOT_INSTRUMENTED, num_fields * sizeof(MYSQL_BIND),
MYF(MY_WME | MY_FAE | MY_ZEROFILL));
- length= (ulong*) my_malloc(num_fields * sizeof(ulong),
+ length= (ulong*) my_malloc(PSI_NOT_INSTRUMENTED, num_fields * sizeof(ulong),
MYF(MY_WME | MY_FAE));
- is_null= (my_bool*) my_malloc(num_fields * sizeof(my_bool),
+ is_null= (my_bool*) my_malloc(PSI_NOT_INSTRUMENTED, num_fields * sizeof(my_bool),
MYF(MY_WME | MY_FAE));
/* Allocate data for the result of each field */
@@ -7656,7 +7657,7 @@ void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
{
uint max_length= fields[i].max_length + 1;
my_bind[i].buffer_type= MYSQL_TYPE_STRING;
- my_bind[i].buffer= my_malloc(max_length, MYF(MY_WME | MY_FAE));
+ my_bind[i].buffer= my_malloc(PSI_NOT_INSTRUMENTED, max_length, MYF(MY_WME | MY_FAE));
my_bind[i].buffer_length= max_length;
my_bind[i].is_null= &is_null[i];
my_bind[i].length= &length[i];
@@ -7731,6 +7732,17 @@ void append_metadata(DYNAMIC_STRING *ds,
dynstr_append_mem(ds, field->name, field->name_length);
dynstr_append_mem(ds, "\t", 1);
replace_dynstr_append_uint(ds, field->type);
+
+ Client_field_metadata metadata(field);
+ BinaryStringBuffer<128> data_type_metadata_str;
+ metadata.print_data_type_related_attributes(&data_type_metadata_str);
+ if (data_type_metadata_str.length())
+ {
+ dynstr_append_mem(ds, " (", 2);
+ dynstr_append_mem(ds, data_type_metadata_str.ptr(),
+ data_type_metadata_str.length());
+ dynstr_append_mem(ds, ")", 1);
+ }
dynstr_append_mem(ds, "\t", 1);
replace_dynstr_append_uint(ds, field->length);
dynstr_append_mem(ds, "\t", 1);
@@ -9195,10 +9207,10 @@ int main(int argc, char **argv)
cur_block->ok= TRUE; /* Outer block should always be executed */
cur_block->cmd= cmd_none;
- my_init_dynamic_array(&q_lines, sizeof(struct st_command*), 1024, 1024, MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &q_lines, sizeof(struct st_command*), 1024, 1024, MYF(0));
- if (my_hash_init2(&var_hash, 64, charset_info,
- 128, 0, 0, get_var_key, 0, var_free, MYF(0)))
+ if (my_hash_init2(PSI_NOT_INSTRUMENTED, &var_hash, 64, charset_info, 128, 0,
+ 0, get_var_key, 0, var_free, MYF(0)))
die("Variable hash initialization failed");
{
@@ -9228,10 +9240,10 @@ int main(int argc, char **argv)
init_win_path_patterns();
#endif
- read_command_buf= (char*)my_malloc(read_command_buflen= 65536, MYF(MY_FAE));
+ read_command_buf= (char*)my_malloc(PSI_NOT_INSTRUMENTED, read_command_buflen= 65536, MYF(MY_FAE));
init_dynamic_string(&ds_res, "", 2048, 2048);
- init_alloc_root(&require_file_root, "require_file", 1024, 1024, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &require_file_root, 1024, 1024, MYF(0));
parse_args(argc, argv);
@@ -9245,7 +9257,7 @@ int main(int argc, char **argv)
/* Init connections, allocate 1 extra as buffer + 1 for default */
connections= (struct st_connection*)
- my_malloc((opt_max_connections+2) * sizeof(struct st_connection),
+ my_malloc(PSI_NOT_INSTRUMENTED, (opt_max_connections+2) * sizeof(struct st_connection),
MYF(MY_WME | MY_ZEROFILL));
connections_end= connections + opt_max_connections +1;
next_con= connections + 1;
@@ -9276,7 +9288,7 @@ int main(int argc, char **argv)
if (cur_file == file_stack && cur_file->file == 0)
{
cur_file->file= stdin;
- cur_file->file_name= my_strdup("<stdin>", MYF(MY_WME));
+ cur_file->file_name= my_strdup(PSI_NOT_INSTRUMENTED, "<stdin>", MYF(MY_WME));
cur_file->lineno= 1;
}
var_set_string("MYSQLTEST_FILE", cur_file->file_name);
@@ -9329,7 +9341,7 @@ int main(int argc, char **argv)
}
#endif
- if (!(con->name = my_strdup("default", MYF(MY_WME))))
+ if (!(con->name = my_strdup(PSI_NOT_INSTRUMENTED, "default", MYF(MY_WME))))
die("Out of memory");
mysql_options(con->mysql, MYSQL_OPT_NONBLOCK, 0);
@@ -9925,7 +9937,7 @@ void do_get_replace_column(struct st_command *command)
die("Missing argument in %s", command->query);
/* Allocate a buffer for results */
- start= buff= (char*)my_malloc(strlen(from)+1,MYF(MY_WME | MY_FAE));
+ start= buff= (char*)my_malloc(PSI_NOT_INSTRUMENTED, strlen(from)+1,MYF(MY_WME | MY_FAE));
while (*from)
{
char *to;
@@ -9938,7 +9950,7 @@ void do_get_replace_column(struct st_command *command)
command->query);
to= get_string(&buff, &from, command);
my_free(replace_column[column_number-1]);
- replace_column[column_number-1]= my_strdup(to, MYF(MY_WME | MY_FAE));
+ replace_column[column_number-1]= my_strdup(PSI_NOT_INSTRUMENTED, to, MYF(MY_WME | MY_FAE));
set_if_bigger(max_replace_column, column_number);
}
my_free(start);
@@ -10005,7 +10017,7 @@ void do_get_replace(struct st_command *command)
bzero(&from_array,sizeof(from_array));
if (!*from)
die("Missing argument in %s", command->query);
- start= buff= (char*)my_malloc(strlen(from)+1,MYF(MY_WME | MY_FAE));
+ start= buff= (char*)my_malloc(PSI_NOT_INSTRUMENTED, strlen(from)+1,MYF(MY_WME | MY_FAE));
while (*from)
{
char *to= buff;
@@ -10167,17 +10179,17 @@ struct st_replace_regex* init_replace_regex(char* expr)
size_t expr_len= strlen(expr);
/* my_malloc() will die on fail with MY_FAE */
- res=(struct st_replace_regex*)my_malloc(
+ res=(struct st_replace_regex*)my_malloc(PSI_NOT_INSTRUMENTED,
sizeof(*res)+8192 ,MYF(MY_FAE+MY_WME));
- my_init_dynamic_array(&res->regex_arr,sizeof(struct st_regex), 128, 128, MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &res->regex_arr, sizeof(struct st_regex), 128, 128, MYF(0));
expr_end= expr + expr_len;
buf_p= (char*)res + sizeof(*res);
append_replace_regex(expr, expr_end, res, &buf_p);
res->odd_buf_len= res->even_buf_len= 8192;
- res->even_buf= (char*)my_malloc(res->even_buf_len,MYF(MY_WME+MY_FAE));
- res->odd_buf= (char*)my_malloc(res->odd_buf_len,MYF(MY_WME+MY_FAE));
+ res->even_buf= (char*)my_malloc(PSI_NOT_INSTRUMENTED, res->even_buf_len,MYF(MY_WME+MY_FAE));
+ res->odd_buf= (char*)my_malloc(PSI_NOT_INSTRUMENTED, res->odd_buf_len,MYF(MY_WME+MY_FAE));
res->buf= res->even_buf;
return res;
@@ -10360,7 +10372,7 @@ void free_replace_regex()
#define SECURE_REG_BUF if (buf_len < need_buf_len) \
{ \
ssize_t off= res_p - buf; \
- buf= (char*)my_realloc(buf,need_buf_len,MYF(MY_WME+MY_FAE)); \
+ buf= (char*)my_realloc(PSI_NOT_INSTRUMENTED, buf,need_buf_len,MYF(MY_WME+MY_FAE)); \
res_p= buf + off; \
buf_len= need_buf_len; \
} \
@@ -10413,7 +10425,7 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern,
return 1;
}
- subs= (regmatch_t*)my_malloc(sizeof(regmatch_t) * (r.re_nsub+1),
+ subs= (regmatch_t*)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(regmatch_t) * (r.re_nsub+1),
MYF(MY_WME+MY_FAE));
*res_p= 0;
@@ -10661,7 +10673,7 @@ REPLACE *init_replace(char * *from, char * *to,uint count,
if (init_sets(&sets,states))
DBUG_RETURN(0);
found_sets=0;
- if (!(found_set= (FOUND_SET*) my_malloc(sizeof(FOUND_SET)*max_length*count,
+ if (!(found_set= (FOUND_SET*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(FOUND_SET)*max_length*count,
MYF(MY_WME))))
{
free_sets(&sets);
@@ -10672,7 +10684,7 @@ REPLACE *init_replace(char * *from, char * *to,uint count,
used_sets=-1;
word_states=make_new_set(&sets); /* Start of new word */
start_states=make_new_set(&sets); /* This is first state */
- if (!(follow=(FOLLOWS*) my_malloc((states+2)*sizeof(FOLLOWS),MYF(MY_WME))))
+ if (!(follow=(FOLLOWS*) my_malloc(PSI_NOT_INSTRUMENTED, (states+2)*sizeof(FOLLOWS),MYF(MY_WME))))
{
free_sets(&sets);
my_free(found_set);
@@ -10836,7 +10848,7 @@ REPLACE *init_replace(char * *from, char * *to,uint count,
/* Alloc replace structure for the replace-state-machine */
- if ((replace=(REPLACE*) my_malloc(sizeof(REPLACE)*(sets.count)+
+ if ((replace=(REPLACE*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(REPLACE)*(sets.count)+
sizeof(REPLACE_STRING)*(found_sets+1)+
sizeof(char *)*count+result_len,
MYF(MY_WME | MY_ZEROFILL))))
@@ -10881,10 +10893,10 @@ int init_sets(REP_SETS *sets,uint states)
{
bzero(sets, sizeof(*sets));
sets->size_of_bits=((states+7)/8);
- if (!(sets->set_buffer=(REP_SET*) my_malloc(sizeof(REP_SET)*SET_MALLOC_HUNC,
+ if (!(sets->set_buffer=(REP_SET*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(REP_SET)*SET_MALLOC_HUNC,
MYF(MY_WME))))
return 1;
- if (!(sets->bit_buffer=(uint*) my_malloc(sizeof(uint)*sets->size_of_bits*
+ if (!(sets->bit_buffer=(uint*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(uint)*sets->size_of_bits*
SET_MALLOC_HUNC,MYF(MY_WME))))
{
my_free(sets->set);
@@ -10919,12 +10931,12 @@ REP_SET *make_new_set(REP_SETS *sets)
return set;
}
count=sets->count+sets->invisible+SET_MALLOC_HUNC;
- if (!(set=(REP_SET*) my_realloc(sets->set_buffer, sizeof(REP_SET)*count,
+ if (!(set=(REP_SET*) my_realloc(PSI_NOT_INSTRUMENTED, sets->set_buffer, sizeof(REP_SET)*count,
MYF(MY_WME))))
return 0;
sets->set_buffer=set;
sets->set=set+sets->invisible;
- if (!(bit_buffer=(uint*) my_realloc(sets->bit_buffer,
+ if (!(bit_buffer=(uint*) my_realloc(PSI_NOT_INSTRUMENTED, sets->bit_buffer,
(sizeof(uint)*sets->size_of_bits)*count,
MYF(MY_WME))))
return 0;
@@ -11079,11 +11091,11 @@ int insert_pointer_name(POINTER_ARRAY *pa,char * name)
if (! pa->typelib.count)
{
if (!(pa->typelib.type_names=(const char **)
- my_malloc(((PC_MALLOC-MALLOC_OVERHEAD)/
+ my_malloc(PSI_NOT_INSTRUMENTED, ((PC_MALLOC-MALLOC_OVERHEAD)/
(sizeof(char *)+sizeof(*pa->flag))*
(sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME))))
DBUG_RETURN(-1);
- if (!(pa->str= (uchar*) my_malloc(PS_MALLOC - MALLOC_OVERHEAD,
+ if (!(pa->str= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED, PS_MALLOC - MALLOC_OVERHEAD,
MYF(MY_WME))))
{
my_free(pa->typelib.type_names);
@@ -11099,7 +11111,7 @@ int insert_pointer_name(POINTER_ARRAY *pa,char * name)
length=(uint) strlen(name)+1;
if (pa->length+length >= pa->max_length)
{
- if (!(new_pos= (uchar*) my_realloc(pa->str, pa->length + length + PS_MALLOC,
+ if (!(new_pos= (uchar*) my_realloc(PSI_NOT_INSTRUMENTED, pa->str, pa->length + length + PS_MALLOC,
MYF(MY_WME))))
DBUG_RETURN(1);
if (new_pos != pa->str)
@@ -11117,7 +11129,7 @@ int insert_pointer_name(POINTER_ARRAY *pa,char * name)
int len;
pa->array_allocs++;
len=(PC_MALLOC*pa->array_allocs - MALLOC_OVERHEAD);
- if (!(new_array=(const char **) my_realloc(pa->typelib.type_names,
+ if (!(new_array=(const char **) my_realloc(PSI_NOT_INSTRUMENTED, pa->typelib.type_names,
len/
(sizeof(uchar*)+sizeof(*pa->flag))*
(sizeof(uchar*)+sizeof(*pa->flag)),
@@ -11240,7 +11252,7 @@ void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING *ds_input,
if (!*start)
DBUG_VOID_RETURN; /* No input */
- my_init_dynamic_array(&lines, sizeof(const char*), 32, 32, MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &lines, sizeof(const char*), 32, 32, MYF(0));
if (keep_header)
{
diff --git a/client/readline.cc b/client/readline.cc
index 12df8b312ad..8d3d97b8585 100644
--- a/client/readline.cc
+++ b/client/readline.cc
@@ -43,7 +43,8 @@ LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
#endif
if (!(line_buff=(LINE_BUFFER*)
- my_malloc(sizeof(*line_buff),MYF(MY_WME | MY_ZEROFILL))))
+ my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*line_buff),
+ MYF(MY_WME | MY_ZEROFILL))))
return 0;
if (init_line_buffer(line_buff,my_fileno(file),IO_SIZE,max_size))
{
@@ -93,7 +94,8 @@ LINE_BUFFER *batch_readline_command(LINE_BUFFER *line_buff, char * str)
{
if (!line_buff)
if (!(line_buff=(LINE_BUFFER*)
- my_malloc(sizeof(*line_buff),MYF(MY_WME | MY_ZEROFILL))))
+ my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*line_buff),
+ MYF(MY_WME | MY_ZEROFILL))))
return 0;
if (init_line_buffer_from_string(line_buff,str))
{
@@ -114,8 +116,8 @@ init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,ulong max_buffer)
buffer->file=file;
buffer->bufread=size;
buffer->max_size=max_buffer;
- if (!(buffer->buffer = (char*) my_malloc(buffer->bufread+1,
- MYF(MY_WME | MY_FAE))))
+ if (!(buffer->buffer = (char*) my_malloc(PSI_NOT_INSTRUMENTED,
+ buffer->bufread+1, MYF(MY_WME | MY_FAE))))
return 1;
buffer->end_of_line=buffer->end=buffer->buffer;
buffer->buffer[0]=0; /* For easy start test */
@@ -132,8 +134,8 @@ static bool init_line_buffer_from_string(LINE_BUFFER *buffer,char * str)
uint old_length=(uint)(buffer->end - buffer->buffer);
uint length= (uint) strlen(str);
if (!(buffer->buffer= buffer->start_of_line= buffer->end_of_line=
- (char*) my_realloc((uchar*) buffer->buffer, old_length+length+2,
- MYF(MY_FAE|MY_ALLOW_ZERO_PTR))))
+ (char*) my_realloc(PSI_NOT_INSTRUMENTED, buffer->buffer,
+ old_length+length+2, MYF(MY_FAE|MY_ALLOW_ZERO_PTR))))
return 1;
buffer->end= buffer->buffer + old_length;
if (old_length)
@@ -179,8 +181,8 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
return 0;
}
buffer->bufread *= 2;
- if (!(buffer->buffer = (char*) my_realloc(buffer->buffer,
- buffer->bufread+1,
+ if (!(buffer->buffer = (char*) my_realloc(PSI_NOT_INSTRUMENTED,
+ buffer->buffer, buffer->bufread+1,
MYF(MY_WME | MY_FAE))))
{
buffer->error= my_errno;
diff --git a/client/sql_string.cc.dontuse b/client/sql_string.cc.dontuse
deleted file mode 100644
index 0d9536abfa9..00000000000
--- a/client/sql_string.cc.dontuse
+++ /dev/null
@@ -1,836 +0,0 @@
-/*
- Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2009, 2020, MariaDB Corporation.
-
- 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
-*/
-
-/* This file is originally from the mysql distribution. Coded by monty */
-
-#ifdef USE_PRAGMA_IMPLEMENTATION
-#pragma implementation // gcc: Class implementation
-#endif
-
-#include <my_global.h>
-#include <my_sys.h>
-#include <m_string.h>
-#include <m_ctype.h>
-#include <mysql_com.h>
-
-#include "sql_string.h"
-
-/*****************************************************************************
-** String functions
-*****************************************************************************/
-
-bool String::real_alloc(uint32 length)
-{
- uint32 arg_length= ALIGN_SIZE(length + 1);
- DBUG_ASSERT(arg_length > length);
- if (arg_length <= length)
- return TRUE; /* Overflow */
- str_length=0;
- if (Alloced_length < arg_length)
- {
- free();
- if (!(Ptr=(char*) my_malloc(arg_length,MYF(MY_WME))))
- return TRUE;
- Alloced_length=arg_length;
- alloced=1;
- }
- Ptr[0]=0;
- return FALSE;
-}
-
-
-/*
-** Check that string is big enough. Set string[alloc_length] to 0
-** (for C functions)
-*/
-
-bool String::realloc(uint32 alloc_length)
-{
- uint32 len=ALIGN_SIZE(alloc_length+1);
- DBUG_ASSERT(len > alloc_length);
- if (len <= alloc_length)
- return TRUE; /* Overflow */
- if (Alloced_length < len)
- {
- char *new_ptr;
- if (alloced)
- {
- if (!(new_ptr= (char*) my_realloc(Ptr,len,MYF(MY_WME))))
- return TRUE; // Signal error
- }
- else if ((new_ptr= (char*) my_malloc(len,MYF(MY_WME))))
- {
- if (str_length > len - 1)
- str_length= 0;
- if (str_length) // Avoid bugs in memcpy on AIX
- memcpy(new_ptr,Ptr,str_length);
- new_ptr[str_length]=0;
- alloced=1;
- }
- else
- return TRUE; // Signal error
- Ptr= new_ptr;
- Alloced_length= len;
- }
- Ptr[alloc_length]=0; // This make other funcs shorter
- return FALSE;
-}
-
-bool String::set(longlong num, CHARSET_INFO *cs)
-{
- uint l=20*cs->mbmaxlen+1;
-
- if (alloc(l))
- return TRUE;
- str_length=(uint32) (cs->longlong10_to_str)(Ptr,l,-10,num);
- str_charset=cs;
- return FALSE;
-}
-
-bool String::set(ulonglong num, CHARSET_INFO *cs)
-{
- uint l=20*cs->mbmaxlen+1;
-
- if (alloc(l))
- return TRUE;
- str_length=(uint32) (cs->longlong10_to_str)(Ptr,l,10,num);
- str_charset=cs;
- return FALSE;
-}
-
-bool String::set(double num,uint decimals, CHARSET_INFO *cs)
-{
- char buff[FLOATING_POINT_BUFFER];
- uint dummy_errors;
- size_t len;
-
- str_charset=cs;
- if (decimals >= NOT_FIXED_DEC)
- {
- len= my_gcvt(num, MY_GCVT_ARG_DOUBLE, sizeof(buff) - 1, buff, NULL);
- return copy(buff, len, &my_charset_latin1, cs, &dummy_errors);
- }
- len= my_fcvt(num, decimals, buff, NULL);
- return copy(buff, (uint32) len, &my_charset_latin1, cs,
- &dummy_errors);
-}
-
-
-bool String::copy()
-{
- if (!alloced)
- {
- Alloced_length=0; // Force realloc
- return realloc(str_length);
- }
- return FALSE;
-}
-
-bool String::copy(const String &str)
-{
- if (alloc(str.str_length))
- return TRUE;
- str_length=str.str_length;
- bmove(Ptr,str.Ptr,str_length); // May be overlapping
- Ptr[str_length]=0;
- str_charset=str.str_charset;
- return FALSE;
-}
-
-bool String::copy(const char *str,uint32 arg_length, CHARSET_INFO *cs)
-{
- if (alloc(arg_length))
- return TRUE;
- if ((str_length=arg_length))
- memcpy(Ptr,str,arg_length);
- Ptr[arg_length]=0;
- str_charset=cs;
- return FALSE;
-}
-
-
-/*
- Checks that the source string can be just copied to the destination string
- without conversion.
-
- SYNPOSIS
-
- needs_conversion()
- arg_length Length of string to copy.
- from_cs Character set to copy from
- to_cs Character set to copy to
- uint32 *offset Returns number of unaligned characters.
-
- RETURN
- 0 No conversion needed
- 1 Either character set conversion or adding leading zeros
- (e.g. for UCS-2) must be done
-
- NOTE
- to_cs may be NULL for "no conversion" if the system variable
- character_set_results is NULL.
-*/
-
-bool String::needs_conversion(uint32 arg_length,
- CHARSET_INFO *from_cs,
- CHARSET_INFO *to_cs,
- uint32 *offset)
-{
- *offset= 0;
- if (!to_cs ||
- (to_cs == &my_charset_bin) ||
- (to_cs == from_cs) ||
- my_charset_same(from_cs, to_cs) ||
- ((from_cs == &my_charset_bin) &&
- (!(*offset=(arg_length % to_cs->mbminlen)))))
- return FALSE;
- return TRUE;
-}
-
-
-/*
- Copy a multi-byte character sets with adding leading zeros.
-
- SYNOPSIS
-
- copy_aligned()
- str String to copy
- arg_length Length of string. This should NOT be dividable with
- cs->mbminlen.
- offset arg_length % cs->mb_minlength
- cs Character set for 'str'
-
- NOTES
- For real multi-byte, ascii incompatible charactser sets,
- like UCS-2, add leading zeros if we have an incomplete character.
- Thus,
- SELECT _ucs2 0xAA
- will automatically be converted into
- SELECT _ucs2 0x00AA
-
- RETURN
- 0 ok
- 1 error
-*/
-
-bool String::copy_aligned(const char *str,uint32 arg_length, uint32 offset,
- CHARSET_INFO *cs)
-{
- /* How many bytes are in incomplete character */
- offset= cs->mbmaxlen - offset; /* How many zeros we should prepend */
- DBUG_ASSERT(offset && offset != cs->mbmaxlen);
-
- uint32 aligned_length= arg_length + offset;
- if (alloc(aligned_length))
- return TRUE;
-
- /*
- Note, this is only safe for little-endian UCS-2.
- If we add big-endian UCS-2 sometimes, this code
- will be more complicated. But it's OK for now.
- */
- bzero((char*) Ptr, offset);
- memcpy(Ptr + offset, str, arg_length);
- Ptr[aligned_length]=0;
- /* str_length is always >= 0 as arg_length is != 0 */
- str_length= aligned_length;
- str_charset= cs;
- return FALSE;
-}
-
-
-bool String::set_or_copy_aligned(const char *str,uint32 arg_length,
- CHARSET_INFO *cs)
-{
- /* How many bytes are in incomplete character */
- uint32 offset= (arg_length % cs->mbminlen);
-
- if (!offset) /* All characters are complete, just copy */
- {
- set(str, arg_length, cs);
- return FALSE;
- }
- return copy_aligned(str, arg_length, offset, cs);
-}
-
- /* Copy with charset conversion */
-
-bool String::copy(const char *str, uint32 arg_length,
- CHARSET_INFO *from_cs, CHARSET_INFO *to_cs, uint *errors)
-{
- uint32 offset;
- if (!needs_conversion(arg_length, from_cs, to_cs, &offset))
- {
- *errors= 0;
- return copy(str, arg_length, to_cs);
- }
- if ((from_cs == &my_charset_bin) && offset)
- {
- *errors= 0;
- return copy_aligned(str, arg_length, offset, to_cs);
- }
- uint32 new_length= to_cs->mbmaxlen*arg_length;
- if (alloc(new_length))
- return TRUE;
- str_length=copy_and_convert((char*) Ptr, new_length, to_cs,
- str, arg_length, from_cs, errors);
- str_charset=to_cs;
- return FALSE;
-}
-
-
-/*
- Set a string to the value of a latin1-string, keeping the original charset
-
- SYNOPSIS
- copy_or_set()
- str String of a simple charset (latin1)
- arg_length Length of string
-
- IMPLEMENTATION
- If string object is of a simple character set, set it to point to the
- given string.
- If not, make a copy and convert it to the new character set.
-
- RETURN
- 0 ok
- 1 Could not allocate result buffer
-
-*/
-
-bool String::set_ascii(const char *str, uint32 arg_length)
-{
- if (str_charset->mbminlen == 1)
- {
- set(str, arg_length, str_charset);
- return 0;
- }
- uint dummy_errors;
- return copy(str, arg_length, &my_charset_latin1, str_charset, &dummy_errors);
-}
-
-
-/* This is used by mysql.cc */
-
-bool String::fill(uint32 max_length,char fill_char)
-{
- if (str_length > max_length)
- Ptr[str_length=max_length]=0;
- else
- {
- if (realloc(max_length))
- return TRUE;
- bfill(Ptr+str_length,max_length-str_length,fill_char);
- str_length=max_length;
- }
- return FALSE;
-}
-
-void String::strip_sp()
-{
- while (str_length && my_isspace(str_charset,Ptr[str_length-1]))
- str_length--;
-}
-
-bool String::append(const String &s)
-{
- if (s.length())
- {
- if (realloc(str_length+s.length()))
- return TRUE;
- memcpy(Ptr+str_length,s.ptr(),s.length());
- str_length+=s.length();
- }
- return FALSE;
-}
-
-
-/*
- Append an ASCII string to the a string of the current character set
-*/
-
-bool String::append(const char *s,uint32 arg_length)
-{
- if (!arg_length)
- return FALSE;
-
- /*
- For an ASCII incompatible string, e.g. UCS-2, we need to convert
- */
- if (str_charset->mbminlen > 1)
- {
- uint32 add_length=arg_length * str_charset->mbmaxlen;
- uint dummy_errors;
- if (realloc(str_length+ add_length))
- return TRUE;
- str_length+= copy_and_convert(Ptr+str_length, add_length, str_charset,
- s, arg_length, &my_charset_latin1,
- &dummy_errors);
- return FALSE;
- }
-
- /*
- For an ASCII compatinble string we can just append.
- */
- if (realloc(str_length+arg_length))
- return TRUE;
- memcpy(Ptr+str_length,s,arg_length);
- str_length+=arg_length;
- return FALSE;
-}
-
-
-/*
- Append a 0-terminated ASCII string
-*/
-
-bool String::append(const char *s)
-{
- return append(s, (uint) strlen(s));
-}
-
-
-/*
- Append a string in the given charset to the string
- with character set recoding
-*/
-
-bool String::append(const char *s,uint32 arg_length, CHARSET_INFO *cs)
-{
- uint32 dummy_offset;
-
- if (needs_conversion(arg_length, cs, str_charset, &dummy_offset))
- {
- uint32 add_length= arg_length / cs->mbminlen * str_charset->mbmaxlen;
- uint dummy_errors;
- if (realloc(str_length + add_length))
- return TRUE;
- str_length+= copy_and_convert(Ptr+str_length, add_length, str_charset,
- s, arg_length, cs, &dummy_errors);
- }
- else
- {
- if (realloc(str_length + arg_length))
- return TRUE;
- memcpy(Ptr + str_length, s, arg_length);
- str_length+= arg_length;
- }
- return FALSE;
-}
-
-
-#ifdef TO_BE_REMOVED
-bool String::append(FILE* file, uint32 arg_length, myf my_flags)
-{
- if (realloc(str_length+arg_length))
- return TRUE;
- if (my_fread(file, (uchar*) Ptr + str_length, arg_length, my_flags))
- {
- shrink(str_length);
- return TRUE;
- }
- str_length+=arg_length;
- return FALSE;
-}
-#endif
-
-bool String::append(IO_CACHE* file, uint32 arg_length)
-{
- if (realloc(str_length+arg_length))
- return TRUE;
- if (my_b_read(file, (uchar*) Ptr + str_length, arg_length))
- {
- shrink(str_length);
- return TRUE;
- }
- str_length+=arg_length;
- return FALSE;
-}
-
-bool String::append_with_prefill(const char *s,uint32 arg_length,
- uint32 full_length, char fill_char)
-{
- int t_length= arg_length > full_length ? arg_length : full_length;
-
- if (realloc(str_length + t_length))
- return TRUE;
- t_length= full_length - arg_length;
- if (t_length > 0)
- {
- bfill(Ptr+str_length, t_length, fill_char);
- str_length=str_length + t_length;
- }
- append(s, arg_length);
- return FALSE;
-}
-
-uint32 String::numchars()
-{
- return str_charset->(Ptr, Ptr+str_length);
-}
-
-int String::charpos(longlong i,uint32 offset)
-{
- if (i <= 0)
- return (int)i;
- return (int)str_charset->charpos(Ptr+offset,Ptr+str_length,(size_t)i);
-}
-
-int String::strstr(const String &s,uint32 offset)
-{
- if (s.length()+offset <= str_length)
- {
- if (!s.length())
- return ((int) offset); // Empty string is always found
-
- register const char *str = Ptr+offset;
- register const char *search=s.ptr();
- const char *end=Ptr+str_length-s.length()+1;
- const char *search_end=s.ptr()+s.length();
-skip:
- while (str != end)
- {
- if (*str++ == *search)
- {
- register char *i,*j;
- i=(char*) str; j=(char*) search+1;
- while (j != search_end)
- if (*i++ != *j++) goto skip;
- return (int) (str-Ptr) -1;
- }
- }
- }
- return -1;
-}
-
-/*
-** Search string from end. Offset is offset to the end of string
-*/
-
-int String::strrstr(const String &s,uint32 offset)
-{
- if (s.length() <= offset && offset <= str_length)
- {
- if (!s.length())
- return offset; // Empty string is always found
- register const char *str = Ptr+offset-1;
- register const char *search=s.ptr()+s.length()-1;
-
- const char *end=Ptr+s.length()-2;
- const char *search_end=s.ptr()-1;
-skip:
- while (str != end)
- {
- if (*str-- == *search)
- {
- register char *i,*j;
- i=(char*) str; j=(char*) search-1;
- while (j != search_end)
- if (*i-- != *j--) goto skip;
- return (int) (i-Ptr) +1;
- }
- }
- }
- return -1;
-}
-
-/*
- Replace substring with string
- If wrong parameter or not enough memory, do nothing
-*/
-
-bool String::replace(uint32 offset,uint32 arg_length,const String &to)
-{
- return replace(offset,arg_length,to.ptr(),to.length());
-}
-
-bool String::replace(uint32 offset,uint32 arg_length,
- const char *to, uint32 to_length)
-{
- long diff = (long) to_length-(long) arg_length;
- if (offset+arg_length <= str_length)
- {
- if (diff < 0)
- {
- if (to_length)
- memcpy(Ptr+offset,to,to_length);
- bmove(Ptr+offset+to_length,Ptr+offset+arg_length,
- str_length-offset-arg_length);
- }
- else
- {
- if (diff)
- {
- if (realloc(str_length+(uint32) diff))
- return TRUE;
- bmove_upp((uchar*) Ptr+str_length+diff, (uchar*) Ptr+str_length,
- str_length-offset-arg_length);
- }
- if (to_length)
- memcpy(Ptr+offset,to,to_length);
- }
- str_length+=(uint32) diff;
- }
- return FALSE;
-}
-
-
-// added by Holyfoot for "geometry" needs
-int String::reserve(uint32 space_needed, uint32 grow_by)
-{
- if (Alloced_length < str_length + space_needed)
- {
- if (realloc(Alloced_length + max(space_needed, grow_by) - 1))
- return TRUE;
- }
- return FALSE;
-}
-
-void String::qs_append(const char *str, uint32 len)
-{
- memcpy(Ptr + str_length, str, len + 1);
- str_length += len;
-}
-
-void String::qs_append(double d)
-{
- char *buff = Ptr + str_length;
- str_length+= my_gcvt(d, MY_GCVT_ARG_DOUBLE, FLOATING_POINT_BUFFER - 1, buff,
- NULL);
-}
-
-void String::qs_append(double *d)
-{
- double ld;
- float8get(ld, (char*) d);
- qs_append(ld);
-}
-
-void String::qs_append(int i)
-{
- char *buff= Ptr + str_length;
- char *end= int10_to_str(i, buff, -10);
- str_length+= (int) (end-buff);
-}
-
-void String::qs_append(uint i)
-{
- char *buff= Ptr + str_length;
- char *end= int10_to_str(i, buff, 10);
- str_length+= (int) (end-buff);
-}
-
-/*
- Compare strings according to collation, without end space.
-
- SYNOPSIS
- sortcmp()
- s First string
- t Second string
- cs Collation
-
- NOTE:
- Normally this is case sensitive comparison
-
- RETURN
- < 0 s < t
- 0 s == t
- > 0 s > t
-*/
-
-
-int sortcmp(const String *s,const String *t, CHARSET_INFO *cs)
-{
- return cs->strnncollsp(s->ptr(), s->length(),
- t->ptr(), t->length());
-}
-
-
-/*
- Compare strings byte by byte. End spaces are also compared.
-
- SYNOPSIS
- stringcmp()
- s First string
- t Second string
-
- NOTE:
- Strings are compared as a stream of unsigned chars
-
- RETURN
- < 0 s < t
- 0 s == t
- > 0 s > t
-*/
-
-
-int stringcmp(const String *s,const String *t)
-{
- uint32 s_len=s->length(),t_len=t->length(),len=min(s_len,t_len);
- int cmp= memcmp(s->ptr(), t->ptr(), len);
- return (cmp) ? cmp : (int) (s_len - t_len);
-}
-
-
-String *copy_if_not_alloced(String *to,String *from,uint32 from_length)
-{
- if (from->Alloced_length >= from_length)
- return from;
- if ((from->alloced && (from->Alloced_length != 0)) || !to || from == to)
- {
- (void) from->realloc(from_length);
- return from;
- }
- if (to->realloc(from_length))
- return from; // Actually an error
- if ((to->str_length=min(from->str_length,from_length)))
- memcpy(to->Ptr,from->Ptr,to->str_length);
- to->str_charset=from->str_charset;
- return to;
-}
-
-
-/****************************************************************************
- Help functions
-****************************************************************************/
-
-/*
- copy a string from one character set to another
-
- SYNOPSIS
- copy_and_convert()
- to Store result here
- to_cs Character set of result string
- from Copy from here
- from_length Length of from string
- from_cs From character set
-
- NOTES
- 'to' must be big enough as form_length * to_cs->mbmaxlen
-
- RETURN
- length of bytes copied to 'to'
-*/
-
-
-uint32
-copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
- const char *from, uint32 from_length, CHARSET_INFO *from_cs,
- uint *errors)
-{
- int cnvres;
- my_wc_t wc;
- const uchar *from_end= (const uchar*) from+from_length;
- char *to_start= to;
- uchar *to_end= (uchar*) to+to_length;
- my_charset_conv_mb_wc mb_wc= from_cs->cset->mb_wc;
- my_charset_conv_wc_mb wc_mb= to_cs->cset->wc_mb;
- uint error_count= 0;
-
- while (1)
- {
- if ((cnvres= (*mb_wc)(from_cs, &wc, (uchar*) from,
- from_end)) > 0)
- from+= cnvres;
- else if (cnvres == MY_CS_ILSEQ)
- {
- error_count++;
- from++;
- wc= '?';
- }
- else if (cnvres > MY_CS_TOOSMALL)
- {
- /*
- A correct multibyte sequence detected
- But it doesn't have Unicode mapping.
- */
- error_count++;
- from+= (-cnvres);
- wc= '?';
- }
- else
- break; // Not enough characters
-
-outp:
- if ((cnvres= (*wc_mb)(to_cs, wc, (uchar*) to, to_end)) > 0)
- to+= cnvres;
- else if (cnvres == MY_CS_ILUNI && wc != '?')
- {
- error_count++;
- wc= '?';
- goto outp;
- }
- else
- break;
- }
- *errors= error_count;
- return (uint32) (to - to_start);
-}
-
-
-void String::print(String *str)
-{
- char *st= (char*)Ptr, *end= st+str_length;
- for (; st < end; st++)
- {
- uchar c= *st;
- switch (c)
- {
- case '\\':
- str->append(STRING_WITH_LEN("\\\\"));
- break;
- case '\0':
- str->append(STRING_WITH_LEN("\\0"));
- break;
- case '\'':
- str->append(STRING_WITH_LEN("\\'"));
- break;
- case '\n':
- str->append(STRING_WITH_LEN("\\n"));
- break;
- case '\r':
- str->append(STRING_WITH_LEN("\\r"));
- break;
- case 26: //Ctrl-Z
- str->append(STRING_WITH_LEN("\\z"));
- break;
- default:
- str->append(c);
- }
- }
-}
-
-
-/*
- Exchange state of this object and argument.
-
- SYNOPSIS
- String::swap()
-
- RETURN
- Target string will contain state of this object and vice versa.
-*/
-
-void String::swap(String &s)
-{
- swap_variables(char *, Ptr, s.Ptr);
- swap_variables(uint32, str_length, s.str_length);
- swap_variables(uint32, Alloced_length, s.Alloced_length);
- swap_variables(bool, alloced, s.alloced);
- swap_variables(CHARSET_INFO*, str_charset, s.str_charset);
-}
diff --git a/client/sql_string.h.dontuse b/client/sql_string.h.dontuse
deleted file mode 100644
index e5bf8e0b67c..00000000000
--- a/client/sql_string.h.dontuse
+++ /dev/null
@@ -1,366 +0,0 @@
-#ifndef SQL_STRING_INCLUDED
-#define SQL_STRING_INCLUDED
-
-/* Copyright (c) 2000, 2013, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
-
-/* This file is originally from the mysql distribution. Coded by monty */
-
-#ifdef USE_PRAGMA_INTERFACE
-#pragma interface /* gcc class implementation */
-#endif
-
-class String;
-int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
-String *copy_if_not_alloced(String *a,String *b,uint32 arg_length);
-uint32 copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
- const char *from, uint32 from_length,
- CHARSET_INFO *from_cs, uint *errors);
-
-class String
-{
- char *Ptr;
- uint32 str_length,Alloced_length, extra_alloc;
- bool alloced;
- CHARSET_INFO *str_charset;
-public:
- String()
- {
- Ptr=0; str_length=Alloced_length=extra_alloc=0; alloced=0;
- str_charset= &my_charset_bin;
- }
- String(uint32 length_arg)
- {
- alloced=0; Alloced_length=0; (void) real_alloc(length_arg);
- str_charset= &my_charset_bin;
- }
- String(const char *str, CHARSET_INFO *cs)
- {
- Ptr=(char*) str; str_length= (uint32) strlen(str);
- Alloced_length= extra_alloc= 0; alloced=0;
- str_charset=cs;
- }
- String(const char *str,uint32 len, CHARSET_INFO *cs)
- {
- Ptr=(char*) str; str_length=len; Alloced_length= extra_alloc=0; alloced=0;
- str_charset=cs;
- }
- String(char *str,uint32 len, CHARSET_INFO *cs)
- {
- Ptr=(char*) str; Alloced_length=str_length=len; extra_alloc= 0; alloced=0;
- str_charset=cs;
- }
- String(const String &str)
- {
- Ptr=str.Ptr ; str_length=str.str_length ;
- Alloced_length=str.Alloced_length; extra_alloc= 0; alloced=0;
- str_charset=str.str_charset;
- }
- static void *operator new(size_t size, MEM_ROOT *mem_root)
- { return (void*) alloc_root(mem_root, (uint) size); }
- static void operator delete(void *ptr_arg, size_t size)
- {
- (void) ptr_arg;
- (void) size;
- TRASH(ptr_arg, size);
- }
- static void operator delete(void *, MEM_ROOT *)
- { /* never called */ }
- ~String() { free(); }
-
- inline void set_charset(CHARSET_INFO *charset_arg)
- { str_charset= charset_arg; }
- inline CHARSET_INFO *charset() const { return str_charset; }
- inline uint32 length() const { return str_length;}
- inline uint32 alloced_length() const { return Alloced_length;}
- inline char& operator [] (uint32 i) const { return Ptr[i]; }
- inline void length(uint32 len) { str_length=len ; }
- inline bool is_empty() { return (str_length == 0); }
- inline void mark_as_const() { Alloced_length= 0;}
- inline const char *ptr() const { return Ptr; }
- inline char *c_ptr()
- {
- if (!Ptr || Ptr[str_length]) /* Should be safe */
- (void) realloc(str_length);
- return Ptr;
- }
- inline char *c_ptr_quick()
- {
- if (Ptr && str_length < Alloced_length)
- Ptr[str_length]=0;
- return Ptr;
- }
- inline char *c_ptr_safe()
- {
- if (Ptr && str_length < Alloced_length)
- Ptr[str_length]=0;
- else
- (void) realloc(str_length);
- return Ptr;
- }
-
- void set(String &str,uint32 offset,uint32 arg_length)
- {
- DBUG_ASSERT(&str != this);
- free();
- Ptr=(char*) str.ptr()+offset; str_length=arg_length; alloced=0;
- if (str.Alloced_length)
- Alloced_length=str.Alloced_length-offset;
- else
- Alloced_length=0;
- str_charset=str.str_charset;
- }
- inline void set(char *str,uint32 arg_length, CHARSET_INFO *cs)
- {
- free();
- Ptr=(char*) str; str_length=Alloced_length=arg_length ; alloced=0;
- str_charset=cs;
- }
- inline void set(const char *str,uint32 arg_length, CHARSET_INFO *cs)
- {
- free();
- Ptr=(char*) str; str_length=arg_length; Alloced_length=0 ; alloced=0;
- str_charset=cs;
- }
- bool set_ascii(const char *str, uint32 arg_length);
- inline void set_quick(char *str,uint32 arg_length, CHARSET_INFO *cs)
- {
- if (!alloced)
- {
- Ptr=(char*) str; str_length=Alloced_length=arg_length;
- }
- str_charset=cs;
- }
- bool set(longlong num, CHARSET_INFO *cs);
- bool set(ulonglong num, CHARSET_INFO *cs);
- bool set(double num,uint decimals, CHARSET_INFO *cs);
-
- /*
- PMG 2004.11.12
- This is a method that works the same as perl's "chop". It simply
- drops the last character of a string. This is useful in the case
- of the federated storage handler where I'm building a unknown
- number, list of values and fields to be used in a sql insert
- statement to be run on the remote server, and have a comma after each.
- When the list is complete, I "chop" off the trailing comma
-
- ex.
- String stringobj;
- stringobj.append("VALUES ('foo', 'fi', 'fo',");
- stringobj.chop();
- stringobj.append(")");
-
- In this case, the value of string was:
-
- VALUES ('foo', 'fi', 'fo',
- VALUES ('foo', 'fi', 'fo'
- VALUES ('foo', 'fi', 'fo')
-
- */
- inline void chop()
- {
- Ptr[str_length--]= '\0';
- }
-
- inline void free()
- {
- if (alloced)
- {
- alloced=0;
- Alloced_length=0;
- my_free(Ptr);
- Ptr=0;
- str_length=0; /* Safety */
- }
- }
- inline bool alloc(uint32 arg_length)
- {
- if (arg_length < Alloced_length)
- return 0;
- return real_alloc(arg_length);
- }
- bool real_alloc(uint32 arg_length); // Empties old string
- bool realloc(uint32 arg_length);
-
- // Shrink the buffer, but only if it is allocated on the heap.
- inline void shrink(uint32 arg_length)
- {
- if (!is_alloced())
- return;
- if (arg_length < Alloced_length)
- {
- char *new_ptr;
- if (!(new_ptr=(char*) my_realloc(Ptr,arg_length,MYF(0))))
- {
- Alloced_length = 0;
- real_alloc(arg_length);
- }
- else
- {
- Ptr=new_ptr;
- Alloced_length=arg_length;
- }
- }
- }
- bool is_alloced() const { return alloced; }
- inline String& operator = (const String &s)
- {
- if (&s != this)
- {
- /*
- It is forbidden to do assignments like
- some_string = substring_of_that_string
- */
- DBUG_ASSERT(!s.uses_buffer_owned_by(this));
- free();
- Ptr=s.Ptr ; str_length=s.str_length ; Alloced_length=s.Alloced_length;
- str_charset=s.str_charset;
- alloced=0;
- }
- return *this;
- }
-
- bool copy(); // Alloc string if not alloced
- bool copy(const String &s); // Allocate new string
- bool copy(const char *s,uint32 arg_length, CHARSET_INFO *cs); // Allocate new string
- static bool needs_conversion(uint32 arg_length,
- CHARSET_INFO *cs_from, CHARSET_INFO *cs_to,
- uint32 *offset);
- bool copy_aligned(const char *s, uint32 arg_length, uint32 offset,
- CHARSET_INFO *cs);
- bool set_or_copy_aligned(const char *s, uint32 arg_length, CHARSET_INFO *cs);
- bool copy(const char*s,uint32 arg_length, CHARSET_INFO *csfrom,
- CHARSET_INFO *csto, uint *errors);
- bool append(const String &s);
- bool append(const char *s);
- bool append(const char *s,uint32 arg_length);
- bool append(const char *s,uint32 arg_length, CHARSET_INFO *cs);
- bool append(IO_CACHE* file, uint32 arg_length);
- bool append_with_prefill(const char *s, uint32 arg_length,
- uint32 full_length, char fill_char);
- int strstr(const String &search,uint32 offset=0); // Returns offset to substring or -1
- int strrstr(const String &search,uint32 offset=0); // Returns offset to substring or -1
- bool replace(uint32 offset,uint32 arg_length,const char *to,uint32 length);
- bool replace(uint32 offset,uint32 arg_length,const String &to);
- inline bool append(char chr)
- {
- if (str_length < Alloced_length)
- {
- Ptr[str_length++]=chr;
- }
- else
- {
- if (realloc(str_length+1))
- return 1;
- Ptr[str_length++]=chr;
- }
- return 0;
- }
- bool fill(uint32 max_length,char fill);
- void strip_sp();
- friend int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
- friend int stringcmp(const String *a,const String *b);
- friend String *copy_if_not_alloced(String *a,String *b,uint32 arg_length);
- uint32 numchars();
- int charpos(longlong i,uint32 offset=0);
-
- int reserve(uint32 space_needed)
- {
- return realloc(str_length + space_needed);
- }
- int reserve(uint32 space_needed, uint32 grow_by);
-
- /*
- The following append operations do NOT check alloced memory
- q_*** methods writes values of parameters itself
- qs_*** methods writes string representation of value
- */
- void q_append(const char c)
- {
- Ptr[str_length++] = c;
- }
- void q_append(const uint32 n)
- {
- int4store(Ptr + str_length, n);
- str_length += 4;
- }
- void q_append(double d)
- {
- float8store(Ptr + str_length, d);
- str_length += 8;
- }
- void q_append(double *d)
- {
- float8store(Ptr + str_length, *d);
- str_length += 8;
- }
- void q_append(const char *data, uint32 data_len)
- {
- memcpy(Ptr + str_length, data, data_len);
- str_length += data_len;
- }
-
- void write_at_position(int position, uint32 value)
- {
- int4store(Ptr + position,value);
- }
-
- void qs_append(const char *str, uint32 len);
- void qs_append(double d);
- void qs_append(double *d);
- inline void qs_append(const char c)
- {
- Ptr[str_length]= c;
- str_length++;
- }
- void qs_append(int i);
- void qs_append(uint i);
-
- /* Inline (general) functions used by the protocol functions */
-
- inline char *prep_append(uint32 arg_length, uint32 step_alloc)
- {
- uint32 new_length= arg_length + str_length;
- if (new_length > Alloced_length)
- {
- if (realloc(new_length + step_alloc))
- return 0;
- }
- uint32 old_length= str_length;
- str_length+= arg_length;
- return Ptr+ old_length; /* Area to use */
- }
-
- inline bool append(const char *s, uint32 arg_length, uint32 step_alloc)
- {
- uint32 new_length= arg_length + str_length;
- if (new_length > Alloced_length && realloc(new_length + step_alloc))
- return TRUE;
- memcpy(Ptr+str_length, s, arg_length);
- str_length+= arg_length;
- return FALSE;
- }
- void print(String *print);
-
- /* Swap two string objects. Efficient way to exchange data without memcpy. */
- void swap(String &s);
-
- inline bool uses_buffer_owned_by(const String *s) const
- {
- return (s->alloced && Ptr >= s->Ptr && Ptr < s->Ptr + s->str_length);
- }
-};
-
-#endif /* SQL_STRING_INCLUDED */
diff --git a/cmake/create_initial_db.cmake b/cmake/create_initial_db.cmake
index 3c42bb24ead..c786815964f 100644
--- a/cmake/create_initial_db.cmake
+++ b/cmake/create_initial_db.cmake
@@ -37,8 +37,6 @@ ENDFOREACH()
FILE(READ ${TOP_SRCDIR}/scripts/fill_help_tables.sql CONTENTS)
FILE(APPEND bootstrap.sql "${CONTENTS}")
-FILE(REMOVE_RECURSE mysql performance_schema)
-FILE(REMOVE ibdata1 ib_logfile0 ib_logfile1)
MAKE_DIRECTORY(mysql)
@@ -46,13 +44,8 @@ SET(BOOTSTRAP_COMMAND
${MYSQLD_EXECUTABLE}
--no-defaults
--console
- --bootstrap
- --lc-messages-dir=${BINDIR}/share
- --basedir=.
+ --bootstrap
--datadir=.
- --default-storage-engine=MyISAM
- --max_allowed_packet=8M
- --net_buffer_length=32K
)
GET_FILENAME_COMPONENT(CWD . ABSOLUTE)
diff --git a/cmake/os/Linux.cmake b/cmake/os/Linux.cmake
index 6fde915165f..f629661a5c9 100644
--- a/cmake/os/Linux.cmake
+++ b/cmake/os/Linux.cmake
@@ -20,7 +20,6 @@ INCLUDE(CheckSymbolExists)
# Something that needs to be set on legacy reasons
SET(TARGET_OS_LINUX 1)
-SET(HAVE_NPTL 1)
SET(_GNU_SOURCE 1)
SET(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE=1)
diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake
index 08d231068de..1fbb1774bf7 100644
--- a/cmake/os/Windows.cmake
+++ b/cmake/os/Windows.cmake
@@ -203,9 +203,9 @@ IF(MSVC)
ENDIF()
ENDIF()
-# Always link with socket library
-STRING(APPEND CMAKE_C_STANDARD_LIBRARIES " ws2_32.lib")
-STRING(APPEND CMAKE_CXX_STANDARD_LIBRARIES " ws2_32.lib")
+# Always link with socket/synchronization libraries
+STRING(APPEND CMAKE_C_STANDARD_LIBRARIES " ws2_32.lib synchronization.lib")
+STRING(APPEND CMAKE_CXX_STANDARD_LIBRARIES " ws2_32.lib synchronization.lib")
# System checks
SET(SIGNAL_WITH_VIO_CLOSE 1) # Something that runtime team needs
diff --git a/cmake/pcre.cmake b/cmake/pcre.cmake
index ba72991ecd9..ecad590d4ef 100644
--- a/cmake/pcre.cmake
+++ b/cmake/pcre.cmake
@@ -11,16 +11,17 @@ MACRO(BUNDLE_PCRE2)
FOREACH(lib pcre2-posix pcre2-8)
ADD_LIBRARY(${lib} STATIC IMPORTED GLOBAL)
ADD_DEPENDENCIES(${lib} pcre2)
- SET(file ${dir}/src/pcre2-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX})
IF(WIN32)
# Debug libary name.
# Same condition as in pcre2 CMakeLists.txt that adds "d"
+ SET(file ${dir}/src/pcre2-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX})
SET(file_d ${dir}/src/pcre2-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}d${CMAKE_STATIC_LIBRARY_SUFFIX})
SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION_DEBUG ${file_d})
ELSE()
+ SET(file ${dir}/src/pcre2-build/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX})
SET(file_d)
ENDIF()
- SET(byproducts ${byproducts} BUILD_BYPRODUCTS ${file} ${file_d})
+ SET(byproducts ${byproducts} BUILD_BYPRODUCTS ${file} ${file_d})
SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION ${file})
ENDFOREACH()
FOREACH(v "" "_DEBUG" "_RELWITHDEBINFO" "_RELEASE" "_MINZISEREL")
@@ -33,7 +34,7 @@ MACRO(BUNDLE_PCRE2)
ExternalProject_Add(
pcre2
PREFIX "${dir}"
- URL "https://ftp.pcre.org/pub/pcre/pcre2-10.34.zip"
+ URL "http://ftp.pcre.org/pub/pcre/pcre2-10.34.zip"
URL_MD5 fdb10dba7f3be43730966bebdd3755ef
INSTALL_COMMAND ""
CMAKE_ARGS
diff --git a/config.h.cmake b/config.h.cmake
index 3f8634519af..2a270749661 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -172,7 +172,6 @@
#cmakedefine HAVE_LSTAT 1
#cmakedefine HAVE_MEMALIGN 1
/* #cmakedefine HAVE_MLOCK 1 see Bug#54662 */
-#cmakedefine HAVE_NPTL 1
#cmakedefine HAVE_NL_LANGINFO 1
#cmakedefine HAVE_MADVISE 1
#cmakedefine HAVE_DECL_MADVISE 1
diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh
index 8b70e784615..26a00c541c1 100755
--- a/debian/autobake-deb.sh
+++ b/debian/autobake-deb.sh
@@ -73,13 +73,23 @@ then
fi
# If libzstd-dev is not available (before Debian Stretch and Ubuntu Xenial)
-# remove the dependency from server and rocksdb so it can build properly
+# remove the dependency from server and RocksDB so it can build properly
if ! apt-cache madison libzstd-dev | grep 'libzstd-dev' >/dev/null 2>&1
then
sed '/libzstd-dev/d' -i debian/control
sed '/libzstd1/d' -i debian/control
fi
+# If rocksdb-tools is not available (before Debian Buster and Ubuntu Disco)
+# remove the dependency from the RocksDB plugin so it can install properly
+# and instead ship the one built from MariaDB sources
+if ! apt-cache madison rocksdb-tools | grep 'rocksdb-tools' >/dev/null 2>&1
+then
+ sed '/rocksdb-tools/d' -i debian/control
+ sed '/sst_dump/d' -i debian/not-installed
+ echo "usr/bin/sst_dump" >> debian/mariadb-plugin-rocksdb.install
+fi
+
# The binaries should be fully hardened by default. However TokuDB compilation seems to fail on
# Debian Jessie and older and on Ubuntu Xenial and older with the following error message:
# /usr/bin/ld.bfd.real: /tmp/ccOIwjFo.ltrans0.ltrans.o: relocation R_X86_64_PC32 against symbol
diff --git a/debian/control b/debian/control
index ba2a94daa2b..62476161363 100644
--- a/debian/control
+++ b/debian/control
@@ -396,7 +396,8 @@ Breaks: mariadb-client-10.0,
mariadb-client-10.3,
mariadb-client-10.4,
mariadb-server-10.3,
- mariadb-server-10.4
+ mariadb-server-10.4,
+ mariadb-server-10.5 (<< ${source:Version})
Replaces: mariadb-client-10.0,
mariadb-client-10.1,
mariadb-client-10.2,
@@ -404,6 +405,7 @@ Replaces: mariadb-client-10.0,
mariadb-client-10.4,
mariadb-server-10.3,
mariadb-server-10.4,
+ mariadb-server-10.5 (<< ${source:Version}),
mariadb-server-core-10.0,
mariadb-server-core-10.1,
mariadb-server-core-10.2,
@@ -582,6 +584,7 @@ Description: Connect storage engine for MariaDB
Package: mariadb-plugin-rocksdb
Architecture: amd64 arm64 mips64el ppc64el
Depends: mariadb-server-10.5 (= ${binary:Version}),
+ rocksdb-tools,
${misc:Depends},
${shlibs:Depends}
Breaks: mariadb-rocksdb-engine-10.2,
diff --git a/debian/mariadb-backup.install b/debian/mariadb-backup.install
index 21a32860b0c..2bc61c12079 100644
--- a/debian/mariadb-backup.install
+++ b/debian/mariadb-backup.install
@@ -2,3 +2,4 @@ usr/bin/mariabackup
usr/bin/mbstream
usr/share/man/man1/mariabackup.1
usr/share/man/man1/mariadb-backup.1
+usr/share/man/man1/mbstream.1
diff --git a/debian/mariadb-client-10.5.install b/debian/mariadb-client-10.5.install
index 4d848364f23..67c0c2619c3 100644
--- a/debian/mariadb-client-10.5.install
+++ b/debian/mariadb-client-10.5.install
@@ -11,9 +11,11 @@ usr/bin/mysqldumpslow
usr/bin/mysqlimport
usr/bin/mysqlshow
usr/bin/mysqlslap
+usr/bin/mytop
usr/share/man/man1/mariadb-access.1
usr/share/man/man1/mariadb-admin.1
usr/share/man/man1/mariadb-binlog.1
+usr/share/man/man1/mariadb-conv.1
usr/share/man/man1/mariadb-dump.1
usr/share/man/man1/mariadb-dumpslow.1
usr/share/man/man1/mariadb-find-rows.1
@@ -32,3 +34,4 @@ usr/share/man/man1/mysqldumpslow.1
usr/share/man/man1/mysqlimport.1
usr/share/man/man1/mysqlshow.1
usr/share/man/man1/mysqlslap.1
+usr/share/man/man1/mytop.1
diff --git a/debian/mariadb-plugin-rocksdb.install b/debian/mariadb-plugin-rocksdb.install
index 3e6e3d4b00e..80987612c30 100644
--- a/debian/mariadb-plugin-rocksdb.install
+++ b/debian/mariadb-plugin-rocksdb.install
@@ -1,7 +1,7 @@
etc/mysql/conf.d/rocksdb.cnf etc/mysql/mariadb.conf.d
usr/bin/myrocks_hotbackup
usr/bin/mysql_ldb
-usr/bin/sst_dump
usr/lib/mysql/plugin/ha_rocksdb.so
usr/share/man/man1/mariadb-ldb.1
+usr/share/man/man1/myrocks_hotbackup.1
usr/share/man/man1/mysql_ldb.1
diff --git a/debian/mariadb-server-10.5.install b/debian/mariadb-server-10.5.install
index a9587dbd7f0..9b2fe0498dc 100644
--- a/debian/mariadb-server-10.5.install
+++ b/debian/mariadb-server-10.5.install
@@ -16,7 +16,6 @@ usr/bin/galera_new_cluster
usr/bin/galera_recovery
usr/bin/mariadb-service-convert
usr/bin/msql2mysql
-usr/bin/my_print_defaults
usr/bin/myisam_ftdump
usr/bin/myisamchk
usr/bin/myisamlog
@@ -79,7 +78,6 @@ usr/share/man/man1/mariadbd-multi.1
usr/share/man/man1/mariadbd-safe-helper.1
usr/share/man/man1/mariadbd-safe.1
usr/share/man/man1/msql2mysql.1
-usr/share/man/man1/my_print_defaults.1
usr/share/man/man1/myisam_ftdump.1
usr/share/man/man1/myisamchk.1
usr/share/man/man1/myisamlog.1
@@ -103,11 +101,5 @@ usr/share/man/man1/wsrep_sst_mariabackup.1
usr/share/man/man1/wsrep_sst_mysqldump.1
usr/share/man/man1/wsrep_sst_rsync.1
usr/share/mysql/errmsg-utf8.txt
-usr/share/mysql/fill_help_tables.sql
-usr/share/mysql/maria_add_gis_sp_bootstrap.sql
-usr/share/mysql/mysql_performance_tables.sql
-usr/share/mysql/mysql_system_tables.sql
-usr/share/mysql/mysql_system_tables_data.sql
usr/share/mysql/mysql_test_data_timezone.sql
-usr/share/mysql/mysql_test_db.sql
usr/share/mysql/wsrep_notify
diff --git a/debian/mariadb-server-core-10.5.install b/debian/mariadb-server-core-10.5.install
index 9139949a24e..a8acdfa6300 100644
--- a/debian/mariadb-server-core-10.5.install
+++ b/debian/mariadb-server-core-10.5.install
@@ -1,10 +1,12 @@
usr/bin/innochecksum
+usr/bin/my_print_defaults
usr/bin/mysql_install_db
usr/bin/mysql_upgrade
usr/sbin/mysqld
usr/share/man/man1/innochecksum.1
usr/share/man/man1/mariadb-install-db.1
usr/share/man/man1/mariadb-upgrade.1
+usr/share/man/man1/my_print_defaults.1
usr/share/man/man1/mysql_install_db.1
usr/share/man/man1/mysql_upgrade.1
usr/share/man/man8/mariadbd.8
@@ -15,6 +17,7 @@ usr/share/mysql/danish
usr/share/mysql/dutch
usr/share/mysql/english
usr/share/mysql/estonian
+usr/share/mysql/fill_help_tables.sql
usr/share/mysql/french
usr/share/mysql/german
usr/share/mysql/greek
@@ -23,6 +26,11 @@ usr/share/mysql/hungarian
usr/share/mysql/italian
usr/share/mysql/japanese
usr/share/mysql/korean
+usr/share/mysql/maria_add_gis_sp_bootstrap.sql
+usr/share/mysql/mysql_performance_tables.sql
+usr/share/mysql/mysql_system_tables.sql
+usr/share/mysql/mysql_system_tables_data.sql
+usr/share/mysql/mysql_test_db.sql
usr/share/mysql/norwegian
usr/share/mysql/norwegian-ny
usr/share/mysql/polish
diff --git a/debian/not-installed b/debian/not-installed
index 7e42735b03c..c95954a90ef 100644
--- a/debian/not-installed
+++ b/debian/not-installed
@@ -3,6 +3,7 @@ lib/systemd/system/mariadb@.service # Installed by rules file
usr/bin/mysql_config # We already have the MariaDB variant
usr/bin/mysql_embedded # Huge 500 MB file. Not intended for distribution via any disto package.
usr/bin/mytop # Mytop is distributed from a separate source package
+usr/bin/sst_dump # Use the one from rocksdb-tools package
usr/lib/sysusers.d/sysusers.conf
usr/lib/tmpfiles.d/tmpfiles.conf
usr/lib/mysql/plugin/JavaWrappers.jar # These are only built if JNI/libjawt.so is installed from e.g. openjdk-8-jre-headless
diff --git a/extra/comp_err.c b/extra/comp_err.c
index e6ea9acccb9..52353ac9eea 100644
--- a/extra/comp_err.c
+++ b/extra/comp_err.c
@@ -886,7 +886,7 @@ static char *get_word(char **str)
DBUG_ENTER("get_word");
*str= find_end_of_word(start);
- DBUG_RETURN(my_strndup(start, (uint) (*str - start),
+ DBUG_RETURN(my_strndup(PSI_NOT_INSTRUMENTED, start, (uint) (*str - start),
MYF(MY_WME | MY_FAE)));
}
@@ -920,7 +920,7 @@ static struct message *parse_message_string(struct message *new_message,
while (*str != ' ' && *str != '\t' && *str)
str++;
if (!(new_message->lang_short_name=
- my_strndup(start, (uint) (str - start),
+ my_strndup(PSI_NOT_INSTRUMENTED, start, (uint) (str - start),
MYF(MY_WME | MY_FAE))))
DBUG_RETURN(0); /* Fatal error */
DBUG_PRINT("info", ("msg_slang: %s", new_message->lang_short_name));
@@ -940,9 +940,9 @@ static struct message *parse_message_string(struct message *new_message,
start= str + 1;
str= parse_text_line(start);
- if (!(new_message->text= my_strndup(start, (uint) (str - start),
- MYF(MY_WME | MY_FAE))))
- DBUG_RETURN(0); /* Fatal error */
+ if (!(new_message->text= my_strndup(PSI_NOT_INSTRUMENTED, start,
+ (uint) (str - start), MYF(MY_WME | MY_FAE))))
+ DBUG_RETURN(0);
DBUG_PRINT("info", ("msg_text: %s", new_message->text));
DBUG_RETURN(new_message);
@@ -955,11 +955,11 @@ static struct errors *generate_empty_message(uint d_code, my_bool skip)
struct message message;
/* create a new element */
- if (!(new_error= (struct errors *) my_malloc(sizeof(*new_error),
- MYF(MY_WME))))
+ if (!(new_error= (struct errors *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*new_error), MYF(MY_WME))))
return(0);
- if (my_init_dynamic_array(&new_error->msg, sizeof(struct message), 0, 1,
- MYF(0)))
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &new_error->msg,
+ sizeof(struct message), 0, 1, MYF(0)))
return(0); /* OOM: Fatal error */
new_error->er_name= NULL;
@@ -970,8 +970,10 @@ static struct errors *generate_empty_message(uint d_code, my_bool skip)
message.text= 0; /* If skip set, don't generate a text */
- if (!(message.lang_short_name= my_strdup(default_language, MYF(MY_WME))) ||
- (!skip && !(message.text= my_strdup("", MYF(MY_WME)))))
+ if (!(message.lang_short_name= my_strdup(PSI_NOT_INSTRUMENTED,
+ default_language, MYF(MY_WME))) ||
+ (!skip && !(message.text= my_strdup(PSI_NOT_INSTRUMENTED,
+ "", MYF(MY_WME)))))
return(0);
/* Can't fail as msg is preallocated */
@@ -992,13 +994,14 @@ static struct errors *parse_error_string(char *str, int er_count)
DBUG_PRINT("enter", ("str: %s", str));
/* create a new element */
- if (!(new_error= (struct errors *) my_malloc(sizeof(*new_error),
- MYF(MY_WME))))
+ if (!(new_error= (struct errors *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*new_error), MYF(MY_WME))))
DBUG_RETURN(0);
new_error->next_error= 0;
- if (my_init_dynamic_array(&new_error->msg, sizeof(struct message), 0, 0, MYF(0)))
- DBUG_RETURN(0); /* OOM: Fatal error */
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &new_error->msg,
+ sizeof(struct message), 0, 0, MYF(0)))
+ DBUG_RETURN(0);
/* getting the error name */
str= skip_delimiters(str);
@@ -1084,7 +1087,8 @@ static struct languages *parse_charset_string(char *str)
do
{
/*creating new element of the linked list */
- new_lang= (struct languages *) my_malloc(sizeof(*new_lang), MYF(MY_WME));
+ new_lang= (struct languages *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*new_lang), MYF(MY_WME));
new_lang->next_lang= head;
head= new_lang;
diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc
index df8d1c0956b..847340e6dc7 100644
--- a/extra/mariabackup/backup_mysql.cc
+++ b/extra/mariabackup/backup_mysql.cc
@@ -462,23 +462,23 @@ get_mysql_vars(MYSQL *connection)
}
if (innodb_data_file_path_var && *innodb_data_file_path_var) {
- innobase_data_file_path = my_strdup(
+ innobase_data_file_path = my_strdup(PSI_NOT_INSTRUMENTED,
innodb_data_file_path_var, MYF(MY_FAE));
}
if (innodb_data_home_dir_var) {
- innobase_data_home_dir = my_strdup(
+ innobase_data_home_dir = my_strdup(PSI_NOT_INSTRUMENTED,
innodb_data_home_dir_var, MYF(MY_FAE));
}
if (innodb_log_group_home_dir_var
&& *innodb_log_group_home_dir_var) {
- srv_log_group_home_dir = my_strdup(
+ srv_log_group_home_dir = my_strdup(PSI_NOT_INSTRUMENTED,
innodb_log_group_home_dir_var, MYF(MY_FAE));
}
if (innodb_undo_directory_var && *innodb_undo_directory_var) {
- srv_undo_dir = my_strdup(
+ srv_undo_dir = my_strdup(PSI_NOT_INSTRUMENTED,
innodb_undo_directory_var, MYF(MY_FAE));
}
diff --git a/extra/mariabackup/crc/crc_glue.c b/extra/mariabackup/crc/crc_glue.c
index a9709c8378e..bc14d0bb9df 100644
--- a/extra/mariabackup/crc/crc_glue.c
+++ b/extra/mariabackup/crc/crc_glue.c
@@ -63,9 +63,9 @@ unsigned long crc32_iso3309(unsigned long crc, const unsigned char *buf, unsigne
{
#if __GNUC__ >= 4 && defined(__x86_64__) && defined(HAVE_CLMUL_INSTRUCTION)
if (pclmul_enabled) {
- uint32_t crc_accum = crc ^ 0xffffffffL;
+ uint32_t crc_accum = (uint32_t) ~crc;
crc32_intel_pclmul(&crc_accum, buf, len);
- return crc_accum ^ 0xffffffffL;
+ return ~crc_accum;
}
#endif
return crc32(crc, buf, len);
diff --git a/extra/mariabackup/ds_buffer.cc b/extra/mariabackup/ds_buffer.cc
index 720a329c238..308070ab3b3 100644
--- a/extra/mariabackup/ds_buffer.cc
+++ b/extra/mariabackup/ds_buffer.cc
@@ -71,13 +71,13 @@ buffer_init(const char *root)
ds_ctxt_t *ctxt;
ds_buffer_ctxt_t *buffer_ctxt;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_buffer_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_buffer_ctxt_t), MYF(MY_FAE));
buffer_ctxt = (ds_buffer_ctxt_t *) (ctxt + 1);
buffer_ctxt->buffer_size = DS_DEFAULT_BUFFER_SIZE;
ctxt->ptr = buffer_ctxt;
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -101,9 +101,8 @@ buffer_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
buffer_ctxt = (ds_buffer_ctxt_t *) ctxt->ptr;
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_buffer_file_t) +
- buffer_ctxt->buffer_size,
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_file_t) +
+ sizeof(ds_buffer_file_t) + buffer_ctxt->buffer_size,
MYF(MY_FAE));
buffer_file = (ds_buffer_file_t *) (file + 1);
diff --git a/extra/mariabackup/ds_compress.cc b/extra/mariabackup/ds_compress.cc
index 487718e2ac0..54c49deac16 100644
--- a/extra/mariabackup/ds_compress.cc
+++ b/extra/mariabackup/ds_compress.cc
@@ -100,16 +100,15 @@ compress_init(const char *root)
return NULL;
}
- ctxt = (ds_ctxt_t *) my_malloc(sizeof(ds_ctxt_t) +
- sizeof(ds_compress_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_compress_ctxt_t), MYF(MY_FAE));
compress_ctxt = (ds_compress_ctxt_t *) (ctxt + 1);
compress_ctxt->threads = threads;
compress_ctxt->nthreads = xtrabackup_compress_threads;
ctxt->ptr = compress_ctxt;
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -159,9 +158,8 @@ compress_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
goto err;
}
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_compress_file_t),
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_file_t) + sizeof(ds_compress_file_t), MYF(MY_FAE));
comp_file = (ds_compress_file_t *) (file + 1);
comp_file->dest_file = dest_file;
comp_file->comp_ctxt = comp_ctxt;
@@ -336,8 +334,8 @@ create_worker_threads(uint n)
comp_thread_ctxt_t *threads;
uint i;
- threads = (comp_thread_ctxt_t *)
- my_malloc(sizeof(comp_thread_ctxt_t) * n, MYF(MY_FAE));
+ threads = (comp_thread_ctxt_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(comp_thread_ctxt_t) * n, MYF(MY_FAE));
for (i = 0; i < n; i++) {
comp_thread_ctxt_t *thd = threads + i;
@@ -347,9 +345,8 @@ create_worker_threads(uint n)
thd->cancelled = FALSE;
thd->data_avail = FALSE;
- thd->to = (char *) my_malloc(COMPRESS_CHUNK_SIZE +
- MY_QLZ_COMPRESS_OVERHEAD,
- MYF(MY_FAE));
+ thd->to = (char *) my_malloc(PSI_NOT_INSTRUMENTED,
+ COMPRESS_CHUNK_SIZE + MY_QLZ_COMPRESS_OVERHEAD, MYF(MY_FAE));
/* Initialize the control mutex and condition var */
if (pthread_mutex_init(&thd->ctrl_mutex, NULL) ||
diff --git a/extra/mariabackup/ds_local.cc b/extra/mariabackup/ds_local.cc
index fb2ea0a1629..06b061f3646 100644
--- a/extra/mariabackup/ds_local.cc
+++ b/extra/mariabackup/ds_local.cc
@@ -69,9 +69,9 @@ local_init(const char *root)
return NULL;
}
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t), MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_ctxt_t), MYF(MY_FAE));
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -109,7 +109,7 @@ local_open(ds_ctxt_t *ctxt, const char *path,
path_len = strlen(fullpath) + 1; /* terminating '\0' */
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_file_t) +
sizeof(ds_local_file_t) +
path_len,
MYF(MY_FAE));
diff --git a/extra/mariabackup/ds_stdout.cc b/extra/mariabackup/ds_stdout.cc
index 85dbb83865b..d30c105d258 100644
--- a/extra/mariabackup/ds_stdout.cc
+++ b/extra/mariabackup/ds_stdout.cc
@@ -49,9 +49,9 @@ stdout_init(const char *root)
{
ds_ctxt_t *ctxt;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t), MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_ctxt_t), MYF(MY_FAE));
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -69,10 +69,8 @@ stdout_open(ds_ctxt_t *ctxt __attribute__((unused)),
pathlen = strlen(fullpath) + 1;
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_stdout_file_t) +
- pathlen,
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_file_t) +
+ sizeof(ds_stdout_file_t) + pathlen, MYF(MY_FAE));
stdout_file = (ds_stdout_file_t *) (file + 1);
diff --git a/extra/mariabackup/ds_tmpfile.cc b/extra/mariabackup/ds_tmpfile.cc
index 22dff165aa0..4851c2f0263 100644
--- a/extra/mariabackup/ds_tmpfile.cc
+++ b/extra/mariabackup/ds_tmpfile.cc
@@ -61,8 +61,8 @@ tmpfile_init(const char *root)
ds_ctxt_t *ctxt;
ds_tmpfile_ctxt_t *tmpfile_ctxt;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_tmpfile_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_tmpfile_ctxt_t), MYF(MY_FAE));
tmpfile_ctxt = (ds_tmpfile_ctxt_t *) (ctxt + 1);
tmpfile_ctxt->file_list = NULL;
if (pthread_mutex_init(&tmpfile_ctxt->mutex, NULL)) {
@@ -72,7 +72,7 @@ tmpfile_init(const char *root)
}
ctxt->ptr = tmpfile_ctxt;
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -100,9 +100,8 @@ tmpfile_open(ds_ctxt_t *ctxt, const char *path,
path_len = strlen(path) + 1; /* terminating '\0' */
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_tmp_file_t) + path_len,
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_file_t) + sizeof(ds_tmp_file_t) + path_len, MYF(MY_FAE));
tmp_file = (ds_tmp_file_t *) (file + 1);
tmp_file->file = file;
@@ -114,7 +113,7 @@ tmpfile_open(ds_ctxt_t *ctxt, const char *path,
memcpy(tmp_file->orig_path, path, path_len);
/* Store the real temporary file name in file->path */
- file->path = my_strdup(tmp_path, MYF(MY_FAE));
+ file->path = my_strdup(PSI_NOT_INSTRUMENTED, tmp_path, MYF(MY_FAE));
file->ptr = tmp_file;
/* Store the file object in the list to be piped later */
@@ -170,7 +169,7 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
pipe_ctxt = ctxt->pipe_ctxt;
xb_a(pipe_ctxt != NULL);
- buf = my_malloc(buf_size, MYF(MY_FAE));
+ buf = my_malloc(PSI_NOT_INSTRUMENTED, buf_size, MYF(MY_FAE));
tmpfile_ctxt = (ds_tmpfile_ctxt_t *) ctxt->ptr;
list = tmpfile_ctxt->file_list;
diff --git a/extra/mariabackup/ds_xbstream.cc b/extra/mariabackup/ds_xbstream.cc
index 5a753b08474..7522510ab27 100644
--- a/extra/mariabackup/ds_xbstream.cc
+++ b/extra/mariabackup/ds_xbstream.cc
@@ -79,8 +79,8 @@ xbstream_init(const char *root __attribute__((unused)))
ds_stream_ctxt_t *stream_ctxt;
xb_wstream_t *xbstream;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_stream_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_stream_ctxt_t), MYF(MY_FAE));
stream_ctxt = (ds_stream_ctxt_t *)(ctxt + 1);
if (pthread_mutex_init(&stream_ctxt->mutex, NULL)) {
@@ -131,9 +131,8 @@ xbstream_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
}
pthread_mutex_unlock(&stream_ctxt->mutex);
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_stream_file_t),
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_file_t) + sizeof(ds_stream_file_t), MYF(MY_FAE));
stream_file = (ds_stream_file_t *) (file + 1);
xbstream = stream_ctxt->xbstream;
diff --git a/extra/mariabackup/innobackupex.cc b/extra/mariabackup/innobackupex.cc
index e23adb047ee..319399b97c5 100644
--- a/extra/mariabackup/innobackupex.cc
+++ b/extra/mariabackup/innobackupex.cc
@@ -774,7 +774,8 @@ ibx_get_one_option(const struct my_option *opt,
{
char *start = argument;
my_free(opt_ibx_password);
- opt_ibx_password= my_strdup(argument, MYF(MY_FAE));
+ opt_ibx_password= my_strdup(PSI_NOT_INSTRUMENTED,
+ argument, MYF(MY_FAE));
/* Destroy argument */
while (*argument)
*argument++= 'x';
diff --git a/extra/mariabackup/xbstream.cc b/extra/mariabackup/xbstream.cc
index d22437427fa..ba55141cdd9 100644
--- a/extra/mariabackup/xbstream.cc
+++ b/extra/mariabackup/xbstream.cc
@@ -226,7 +226,7 @@ stream_one_file(File file, xb_wstream_file_t *xbfile)
posix_fadvise(file, 0, 0, POSIX_FADV_SEQUENTIAL);
offset = my_tell(file, MYF(MY_WME));
- buf = (uchar*)(my_malloc(XBSTREAM_BUFFER_SIZE, MYF(MY_FAE)));
+ buf = (uchar*)(my_malloc(PSI_NOT_INSTRUMENTED, XBSTREAM_BUFFER_SIZE, MYF(MY_FAE)));
while ((bytes = (ssize_t)my_read(file, buf, XBSTREAM_BUFFER_SIZE,
MYF(MY_WME))) > 0) {
@@ -321,13 +321,13 @@ file_entry_new(extract_ctxt_t *ctxt, const char *path, uint pathlen)
file_entry_t *entry;
ds_file_t *file;
- entry = (file_entry_t *) my_malloc(sizeof(file_entry_t),
+ entry = (file_entry_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(file_entry_t),
MYF(MY_WME | MY_ZEROFILL));
if (entry == NULL) {
return NULL;
}
- entry->path = my_strndup(path, pathlen, MYF(MY_WME));
+ entry->path = my_strndup(PSI_NOT_INSTRUMENTED, path, pathlen, MYF(MY_WME));
if (entry->path == NULL) {
goto err;
}
@@ -495,8 +495,8 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
pthread_mutex_t mutex;
int ret = 0;
- if (my_hash_init(&filehash, &my_charset_bin, START_FILE_HASH_SIZE,
- 0, 0, (my_hash_get_key) get_file_entry_key,
+ if (my_hash_init(PSI_NOT_INSTRUMENTED, &filehash, &my_charset_bin,
+ START_FILE_HASH_SIZE, 0, 0, (my_hash_get_key) get_file_entry_key,
(my_hash_free_key) file_entry_free, MYF(0))) {
msg("%s: failed to initialize file hash.", my_progname);
return 1;
diff --git a/extra/mariabackup/xbstream_read.cc b/extra/mariabackup/xbstream_read.cc
index ff13800fd94..3880dd50ed5 100644
--- a/extra/mariabackup/xbstream_read.cc
+++ b/extra/mariabackup/xbstream_read.cc
@@ -42,7 +42,7 @@ xb_stream_read_new(void)
{
xb_rstream_t *stream;
- stream = (xb_rstream_t *) my_malloc(sizeof(xb_rstream_t), MYF(MY_FAE));
+ stream = (xb_rstream_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(xb_rstream_t), MYF(MY_FAE));
#ifdef __WIN__
setmode(fileno(stdin), _O_BINARY);
@@ -190,7 +190,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
/* Reallocate the buffer if needed */
if (chunk->length > chunk->buflen) {
- chunk->data = my_realloc(chunk->data, chunk->length,
+ chunk->data = my_realloc(PSI_NOT_INSTRUMENTED, chunk->data, chunk->length,
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
if (chunk->data == NULL) {
msg("xb_stream_read_chunk(): failed to increase buffer "
diff --git a/extra/mariabackup/xbstream_write.cc b/extra/mariabackup/xbstream_write.cc
index fcf92f40acd..b6fd9c294a5 100644
--- a/extra/mariabackup/xbstream_write.cc
+++ b/extra/mariabackup/xbstream_write.cc
@@ -65,7 +65,7 @@ xb_stream_write_new(void)
{
xb_wstream_t *stream;
- stream = (xb_wstream_t *) my_malloc(sizeof(xb_wstream_t), MYF(MY_FAE));
+ stream = (xb_wstream_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(xb_wstream_t), MYF(MY_FAE));
pthread_mutex_init(&stream->mutex, NULL);
return stream;;
@@ -87,7 +87,7 @@ xb_stream_write_open(xb_wstream_t *stream, const char *path,
return NULL;
}
- file = (xb_wstream_file_t *) my_malloc(sizeof(xb_wstream_file_t) +
+ file = (xb_wstream_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(xb_wstream_file_t) +
path_len + 1, MYF(MY_FAE));
file->path = (char *) (file + 1);
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index a17aace794b..aac87c61742 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -1723,7 +1723,7 @@ xb_get_one_option(const struct my_option *opt,
{
char *start= argument;
my_free(opt_password);
- opt_password= my_strdup(argument, MYF(MY_FAE));
+ opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; // Destroy argument
if (*start)
start[1]=0 ;
@@ -3860,7 +3860,9 @@ static bool xtrabackup_backup_low()
if (recv_find_max_checkpoint(&max_cp_field) == DB_SUCCESS
&& log_sys.log.format != 0) {
if (max_cp_field == LOG_CHECKPOINT_1) {
- log_header_read(max_cp_field);
+ log_sys.log.read(max_cp_field,
+ {log_sys.checkpoint_buf,
+ OS_FILE_LOG_BLOCK_SIZE});
}
metadata_to_lsn = mach_read_from_8(
log_sys.checkpoint_buf + LOG_CHECKPOINT_LSN);
@@ -4067,11 +4069,11 @@ reread_log_header:
goto fail;
}
- const byte* buf = log_sys.checkpoint_buf;
+ byte* buf = log_sys.checkpoint_buf;
checkpoint_lsn_start = log_sys.log.get_lsn();
checkpoint_no_start = log_sys.next_checkpoint_no;
- log_header_read(max_cp_field);
+ log_sys.log.read(max_cp_field, {buf, OS_FILE_LOG_BLOCK_SIZE});
if (checkpoint_no_start != mach_read_from_8(buf + LOG_CHECKPOINT_NO)
|| checkpoint_lsn_start
@@ -5452,11 +5454,11 @@ static bool xtrabackup_prepare_func(char** argv)
}
/* Check whether the log is applied enough or not. */
- if (srv_start_lsn && srv_start_lsn < target_lsn) {
+ if (recv_sys.recovered_lsn && recv_sys.recovered_lsn < target_lsn) {
msg("mariabackup: error: "
"The log was only applied up to LSN " LSN_PF
", instead of " LSN_PF,
- srv_start_lsn, target_lsn);
+ recv_sys.recovered_lsn, target_lsn);
ok = false;
}
#ifdef WITH_WSREP
diff --git a/extra/my_print_defaults.c b/extra/my_print_defaults.c
index 85827b74466..09bd26c59ea 100644
--- a/extra/my_print_defaults.c
+++ b/extra/my_print_defaults.c
@@ -170,7 +170,8 @@ int main(int argc, char **argv)
if (nargs < 2)
usage();
- load_default_groups=(char**) my_malloc(nargs*sizeof(char*), MYF(MY_WME));
+ load_default_groups=(char**) my_malloc(PSI_NOT_INSTRUMENTED,
+ nargs*sizeof(char*), MYF(MY_WME));
if (!load_default_groups)
exit(1);
if (opt_mysqld)
diff --git a/extra/replace.c b/extra/replace.c
index 717bc92d0c4..0d35c6d0194 100644
--- a/extra/replace.c
+++ b/extra/replace.c
@@ -259,12 +259,12 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
if (! pa->typelib.count)
{
if (!(pa->typelib.type_names=(const char **)
- my_malloc(((PC_MALLOC-MALLOC_OVERHEAD)/
+ my_malloc(PSI_NOT_INSTRUMENTED, ((PC_MALLOC-MALLOC_OVERHEAD)/
(sizeof(char *)+sizeof(*pa->flag))*
(sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME))))
DBUG_RETURN(-1);
- if (!(pa->str= (uchar*) my_malloc((uint) (PS_MALLOC-MALLOC_OVERHEAD),
- MYF(MY_WME))))
+ if (!(pa->str= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED,
+ PS_MALLOC-MALLOC_OVERHEAD, MYF(MY_WME))))
{
my_free((void*) pa->typelib.type_names);
DBUG_RETURN (-1);
@@ -281,9 +281,8 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
{
pa->max_length=(pa->length+length+MALLOC_OVERHEAD+PS_MALLOC-1)/PS_MALLOC;
pa->max_length=pa->max_length*PS_MALLOC-MALLOC_OVERHEAD;
- if (!(new_pos= (uchar*) my_realloc((uchar*) pa->str,
- (uint) pa->max_length,
- MYF(MY_WME))))
+ if (!(new_pos= (uchar*) my_realloc(PSI_NOT_INSTRUMENTED, (uchar*) pa->str,
+ (uint) pa->max_length, MYF(MY_WME))))
DBUG_RETURN(1);
if (new_pos != pa->str)
{
@@ -299,7 +298,7 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
int len;
pa->array_allocs++;
len=(PC_MALLOC*pa->array_allocs - MALLOC_OVERHEAD);
- if (!(new_array=(const char **) my_realloc((uchar*) pa->typelib.type_names,
+ if (!(new_array=(const char **) my_realloc(PSI_NOT_INSTRUMENTED, (void*)(pa->typelib.type_names),
(uint) len/
(sizeof(uchar*)+sizeof(*pa->flag))*
(sizeof(uchar*)+sizeof(*pa->flag)),
@@ -431,7 +430,8 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
if (init_sets(&sets,states))
DBUG_RETURN(0);
found_sets=0;
- if (!(found_set= (FOUND_SET*) my_malloc(sizeof(FOUND_SET)*max_length*count,
+ if (!(found_set= (FOUND_SET*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(FOUND_SET)*max_length*count,
MYF(MY_WME))))
{
free_sets(&sets);
@@ -442,7 +442,8 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
used_sets=-1;
word_states=make_new_set(&sets); /* Start of new word */
start_states=make_new_set(&sets); /* This is first state */
- if (!(follow=(FOLLOWS*) my_malloc((states+2)*sizeof(FOLLOWS),MYF(MY_WME))))
+ if (!(follow=(FOLLOWS*) my_malloc(PSI_NOT_INSTRUMENTED,
+ (states+2)*sizeof(FOLLOWS), MYF(MY_WME))))
{
free_sets(&sets);
my_free(found_set);
@@ -634,7 +635,8 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
/* Alloc replace structure for the replace-state-machine */
- if ((replace=(REPLACE*) my_malloc(sizeof(REPLACE)*(sets.count)+
+ if ((replace=(REPLACE*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(REPLACE)*(sets.count)+
sizeof(REPLACE_STRING)*(found_sets+1)+
sizeof(char *)*count+result_len,
MYF(MY_WME | MY_ZEROFILL))))
@@ -679,10 +681,12 @@ static int init_sets(REP_SETS *sets,uint states)
{
bzero((char*) sets,sizeof(*sets));
sets->size_of_bits=((states+7)/8);
- if (!(sets->set_buffer=(REP_SET*) my_malloc(sizeof(REP_SET)*SET_MALLOC_HUNC,
+ if (!(sets->set_buffer=(REP_SET*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(REP_SET)*SET_MALLOC_HUNC,
MYF(MY_WME))))
return 1;
- if (!(sets->bit_buffer=(uint*) my_malloc(sizeof(uint)*sets->size_of_bits*
+ if (!(sets->bit_buffer=(uint*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(uint)*sets->size_of_bits*
SET_MALLOC_HUNC,MYF(MY_WME))))
{
my_free(sets->set);
@@ -717,15 +721,14 @@ static REP_SET *make_new_set(REP_SETS *sets)
return set;
}
count=sets->count+sets->invisible+SET_MALLOC_HUNC;
- if (!(set=(REP_SET*) my_realloc((uchar*) sets->set_buffer,
- sizeof(REP_SET)*count,
- MYF(MY_WME))))
+ if (!(set=(REP_SET*) my_realloc(PSI_NOT_INSTRUMENTED, sets->set_buffer,
+ sizeof(REP_SET)*count, MYF(MY_WME))))
return 0;
sets->set_buffer=set;
sets->set=set+sets->invisible;
- if (!(bit_buffer=(uint*) my_realloc((uchar*) sets->bit_buffer,
- (sizeof(uint)*sets->size_of_bits)*count,
- MYF(MY_WME))))
+ if (!(bit_buffer=(uint*) my_realloc(PSI_NOT_INSTRUMENTED, sets->bit_buffer,
+ (sizeof(uint)*sets->size_of_bits)*count,
+ MYF(MY_WME))))
return 0;
sets->bit_buffer=bit_buffer;
for (i=0 ; i < count ; i++)
@@ -898,7 +901,7 @@ static uint replace_strings(REPLACE *rep, char **start, uint *max_length,
if (to == end)
{
(*max_length)+=8192;
- if (!(new=my_realloc(*start,*max_length,MYF(MY_WME))))
+ if (!(new=my_realloc(PSI_NOT_INSTRUMENTED, *start,*max_length,MYF(MY_WME))))
return (uint) -1;
to=new+(to - *start);
end=(*start=new)+ *max_length-1;
@@ -914,7 +917,7 @@ static uint replace_strings(REPLACE *rep, char **start, uint *max_length,
if (to == end)
{
(*max_length)*=2;
- if (!(new=my_realloc(*start,*max_length,MYF(MY_WME))))
+ if (!(new=my_realloc(PSI_NOT_INSTRUMENTED, *start,*max_length,MYF(MY_WME))))
return (uint) -1;
to=new+(to - *start);
end=(*start=new)+ *max_length-1;
@@ -938,11 +941,11 @@ static int initialize_buffer()
{
bufread = 8192;
bufalloc = bufread + bufread / 2;
- if (!(buffer = my_malloc(bufalloc+1,MYF(MY_WME))))
+ if (!(buffer = my_malloc(PSI_NOT_INSTRUMENTED, bufalloc+1, MYF(MY_WME))))
return 1;
bufbytes=my_eof=0;
out_length=bufread;
- if (!(out_buff=my_malloc(out_length,MYF(MY_WME))))
+ if (!(out_buff=my_malloc(PSI_NOT_INSTRUMENTED, out_length, MYF(MY_WME))))
return(1);
return 0;
}
@@ -979,7 +982,7 @@ int n;
bufalloc *= 2;
bufread *= 2;
}
- buffer = my_realloc(buffer, bufalloc+1, MYF(MY_WME));
+ buffer = my_realloc(PSI_NOT_INSTRUMENTED, buffer, bufalloc+1, MYF(MY_WME));
if (! buffer)
return(-1);
}
diff --git a/extra/resolve_stack_dump.c b/extra/resolve_stack_dump.c
index 1aae413d2a9..195ad73a927 100644
--- a/extra/resolve_stack_dump.c
+++ b/extra/resolve_stack_dump.c
@@ -224,8 +224,8 @@ static int init_sym_entry(SYM_ENTRY* se, char* buf)
static void init_sym_table()
{
char buf[512];
- if (my_init_dynamic_array(&sym_table, sizeof(SYM_ENTRY), INIT_SYM_TABLE,
- INC_SYM_TABLE, MYF(0)))
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &sym_table, sizeof(SYM_ENTRY),
+ INIT_SYM_TABLE, INC_SYM_TABLE, MYF(0)))
die("Failed in my_init_dynamic_array() -- looks like out of memory problem");
while (fgets(buf, sizeof(buf), fp_sym))
diff --git a/include/hash.h b/include/hash.h
index fd64bf4c5df..00ffca503fc 100644
--- a/include/hash.h
+++ b/include/hash.h
@@ -63,13 +63,12 @@ typedef struct st_hash {
/* A search iterator state */
typedef uint HASH_SEARCH_STATE;
-#define my_hash_init(A,B,C,D,E,F,G,H) my_hash_init2(A,0,B,C,D,E,F,0,G,H)
-my_bool my_hash_init2(HASH *hash, uint growth_size, CHARSET_INFO *charset,
- ulong default_array_elements, size_t key_offset,
- size_t key_length, my_hash_get_key get_key,
- my_hash_function hash_function,
- void (*free_element)(void*),
- uint flags);
+#define my_hash_init(A,B,C,D,E,F,G,H,I) my_hash_init2(A,B,0,C,D,E,F,G,0,H,I)
+my_bool my_hash_init2(PSI_memory_key psi_key, HASH *hash, uint growth_size,
+ CHARSET_INFO *charset, ulong default_array_elements,
+ size_t key_offset, size_t key_length,
+ my_hash_get_key get_key, my_hash_function hash_function,
+ void (*free_element)(void*), uint flags);
void my_hash_free(HASH *tree);
void my_hash_reset(HASH *hash);
uchar *my_hash_element(HASH *hash, size_t idx);
@@ -99,8 +98,8 @@ my_bool my_hash_iterate(HASH *hash, my_hash_walk_action action, void *argument);
#define my_hash_clear(H) bzero((char*) (H), sizeof(*(H)))
#define my_hash_inited(H) ((H)->blength != 0)
-#define my_hash_init_opt(A,B,C,D,E,F,G,H) \
- (!my_hash_inited(A) && my_hash_init(A,B,C,D,E,F,G,H))
+#define my_hash_init_opt(A,B,C,D,E,F,G,H,I) \
+ (!my_hash_inited(B) && my_hash_init(A,B,C,D,E,F,G,H,I))
#ifdef __cplusplus
}
diff --git a/include/heap.h b/include/heap.h
index ca6efa48f1b..b734f8ae88d 100644
--- a/include/heap.h
+++ b/include/heap.h
@@ -153,7 +153,6 @@ typedef struct st_heap_share
char * name; /* Name of "memory-file" */
time_t create_time;
THR_LOCK lock;
- mysql_mutex_t intern_lock; /* Locking for use with _locking */
my_bool delete_on_close;
my_bool internal; /* Internal temporary table */
LIST open_list;
diff --git a/include/my_alloc.h b/include/my_alloc.h
index 9b0aad26956..181f637c093 100644
--- a/include/my_alloc.h
+++ b/include/my_alloc.h
@@ -20,6 +20,8 @@
#ifndef _my_alloc_h
#define _my_alloc_h
+#include <mysql/psi/psi_memory.h>
+
#define ALLOC_MAX_BLOCK_TO_DROP 4096
#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10
@@ -43,7 +45,6 @@ typedef struct st_mem_root
/* if block have less memory it will be put in 'used' list */
size_t min_malloc;
size_t block_size; /* initial block size */
- size_t total_alloc;
unsigned int block_num; /* allocated blocks counter */
/*
first free block in queue test counter (if it exceed
@@ -52,7 +53,8 @@ typedef struct st_mem_root
unsigned int first_block_usage;
void (*error_handler)(void);
- const char *name;
+
+ PSI_memory_key m_psi_key;
} MEM_ROOT;
#ifdef __cplusplus
diff --git a/include/my_bit.h b/include/my_bit.h
index ccdf5a069e1..ca51c9825b6 100644
--- a/include/my_bit.h
+++ b/include/my_bit.h
@@ -25,16 +25,50 @@ C_MODE_START
extern const uchar _my_bits_reverse_table[256];
+
/*
- Find smallest X in 2^X >= value
- This can be used to divide a number with value by doing a shift instead
-*/
+ my_bit_log2_xxx()
+
+ In the given value, find the highest bit set,
+ which is the smallest X that satisfies the condition: (2^X >= value).
+ Can be used as a reverse operation for (1<<X), to find X.
+
+ Examples:
+ - returns 0 for (1<<0)
+ - returns 1 for (1<<1)
+ - returns 2 for (1<<2)
+ - returns 2 for 3, which has (1<<2) as the highest bit set.
-static inline uint my_bit_log2(ulong value)
+ Note, the behaviour of log2(0) is not defined.
+ Let's return 0 for the input 0, for the code simplicity.
+ See the 000x branch. It covers both (1<<0) and 0.
+*/
+static inline CONSTEXPR uint my_bit_log2_hex_digit(uint8 value)
{
- uint bit;
- for (bit=0 ; value > 1 ; value>>=1, bit++) ;
- return bit;
+ return value & 0x0C ? /*1100*/ (value & 0x08 ? /*1000*/ 3 : /*0100*/ 2) :
+ /*0010*/ (value & 0x02 ? /*0010*/ 1 : /*000x*/ 0);
+}
+static inline CONSTEXPR uint my_bit_log2_uint8(uint8 value)
+{
+ return value & 0xF0 ? my_bit_log2_hex_digit(value >> 4) + 4:
+ my_bit_log2_hex_digit(value);
+}
+static inline CONSTEXPR uint my_bit_log2_uint16(uint16 value)
+{
+ return value & 0xFF00 ? my_bit_log2_uint8((uint8) (value >> 8)) + 8 :
+ my_bit_log2_uint8((uint8) value);
+}
+static inline CONSTEXPR uint my_bit_log2_uint32(uint32 value)
+{
+ return value & 0xFFFF0000UL ?
+ my_bit_log2_uint16((uint16) (value >> 16)) + 16 :
+ my_bit_log2_uint16((uint16) value);
+}
+static inline CONSTEXPR uint my_bit_log2_uint64(ulonglong value)
+{
+ return value & 0xFFFFFFFF00000000ULL ?
+ my_bit_log2_uint32((uint32) (value >> 32)) + 32 :
+ my_bit_log2_uint32((uint32) value);
}
diff --git a/include/my_compiler.h b/include/my_compiler.h
index 902ef6992a2..8e37f8bcd19 100644
--- a/include/my_compiler.h
+++ b/include/my_compiler.h
@@ -28,6 +28,14 @@
Compiler-dependent internal convenience macros.
*/
+/* C vs C++ */
+#ifdef __cplusplus
+#define CONSTEXPR constexpr
+#else
+#define CONSTEXPR
+#endif /* __cplusplus */
+
+
/* GNU C/C++ */
#if defined __GNUC__
/* Convenience macro to test the minimum required GCC version. */
diff --git a/include/my_cpu.h b/include/my_cpu.h
index b7d7008a8e3..fba04ccea66 100644
--- a/include/my_cpu.h
+++ b/include/my_cpu.h
@@ -54,6 +54,7 @@
#elif defined HAVE_PAUSE_INSTRUCTION
#elif defined(_ARCH_PWR8)
#else
+# include "my_global.h"
# include "my_atomic.h"
#endif
diff --git a/include/my_pthread.h b/include/my_pthread.h
index 17813047ce5..0c67dc95765 100644
--- a/include/my_pthread.h
+++ b/include/my_pthread.h
@@ -116,7 +116,7 @@ int pthread_cancel(pthread_t thread);
#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF)
#define pthread_key_delete(A) TlsFree(A)
#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V)))
-#define pthread_setspecific(A,B) (!TlsSetValue((A),(B)))
+#define pthread_setspecific(A,B) (!TlsSetValue((A),(LPVOID)(B)))
#define pthread_getspecific(A) (TlsGetValue(A))
#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A))
#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V))
@@ -739,18 +739,7 @@ extern uint my_thread_end_wait_time;
extern my_bool safe_mutex_deadlock_detector;
#define my_thread_var (_my_thread_var())
#define my_errno my_thread_var->thr_errno
-/*
- Keep track of shutdown,signal, and main threads so that my_end() will not
- report errors with them
-*/
-
-/* Which kind of thread library is in use */
-
-#define THD_LIB_OTHER 1
-#define THD_LIB_NPTL 2
-#define THD_LIB_LT 4
-extern uint thd_lib_detected;
/*
thread_safe_xxx functions are for critical statistic or counters.
diff --git a/include/my_stack_alloc.h b/include/my_stack_alloc.h
index 2d5a721856d..95e746d6fe7 100644
--- a/include/my_stack_alloc.h
+++ b/include/my_stack_alloc.h
@@ -68,14 +68,14 @@ do \
else \
{ \
(must_be_freed)= 1; \
- (res)= my_malloc(size, MYF(MY_THREAD_SPECIFIC | MY_WME)); \
+ (res)= my_malloc(PSI_INSTRUMENT_ME, size, MYF(MY_THREAD_SPECIFIC | MY_WME)); \
} \
} while(0)
#else
#define alloc_on_stack(stack_end, res, must_be_freed, size) \
do { \
(must_be_freed)= 1; \
- (res)= my_malloc(size, MYF(MY_THREAD_SPECIFIC | MY_WME)); \
+ (res)= my_malloc(PSI_INSTRUMENT_ME, size, MYF(MY_THREAD_SPECIFIC | MY_WME)); \
} while(0)
#endif /* HAVE_ALLOCA */
diff --git a/include/my_sys.h b/include/my_sys.h
index 31e59b6bf47..3d271c93a17 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -18,6 +18,7 @@
#define _my_sys_h
#include <m_string.h>
+#include <mysql/psi/mysql_memory.h>
C_MODE_START
@@ -89,14 +90,12 @@ typedef struct my_aio_result {
#define MY_ZEROFILL 32U /* my_malloc(), fill array with zero */
#define MY_ALLOW_ZERO_PTR 64U /* my_realloc() ; zero ptr -> malloc */
#define MY_FREE_ON_ERROR 128U /* my_realloc() ; Free old ptr on error */
-#define MY_HOLD_ON_ERROR 256U /* my_realloc() ; Return old ptr on error */
#define MY_DONT_OVERWRITE_FILE 2048U /* my_copy: Don't overwrite file */
#define MY_THREADSAFE 2048U /* my_seek(): lock fd mutex */
#define MY_SYNC 4096U /* my_copy(): sync dst file */
#define MY_SYNC_DIR 32768U /* my_create/delete/rename: sync directory */
#define MY_SYNC_FILESIZE 65536U /* my_sync(): safe sync when file is extended */
#define MY_THREAD_SPECIFIC 0x10000U /* my_malloc(): thread specific */
-#define MY_THREAD_MOVE 0x20000U /* realloc(); Memory can move */
/* Tree that should delete things automatically */
#define MY_TREE_WITH_DELETE 0x40000U
@@ -168,14 +167,14 @@ typedef void (*MALLOC_SIZE_CB) (long long size, my_bool is_thread_specific);
extern void set_malloc_size_cb(MALLOC_SIZE_CB func);
/* defines when allocating data */
-extern void *my_malloc(size_t Size,myf MyFlags);
-extern void *my_multi_malloc(myf MyFlags, ...);
-extern void *my_multi_malloc_large(myf MyFlags, ...);
-extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags);
+extern void *my_malloc(PSI_memory_key key, size_t size, myf MyFlags);
+extern void *my_multi_malloc(PSI_memory_key key, myf MyFlags, ...);
+extern void *my_multi_malloc_large(PSI_memory_key key, myf MyFlags, ...);
+extern void *my_realloc(PSI_memory_key key, void *ptr, size_t size, myf MyFlags);
extern void my_free(void *ptr);
-extern void *my_memdup(const void *from,size_t length,myf MyFlags);
-extern char *my_strdup(const char *from,myf MyFlags);
-extern char *my_strndup(const char *from, size_t length, myf MyFlags);
+extern void *my_memdup(PSI_memory_key key, const void *from,size_t length,myf MyFlags);
+extern char *my_strdup(PSI_memory_key key, const char *from,myf MyFlags);
+extern char *my_strndup(PSI_memory_key key, const char *from, size_t length, myf MyFlags);
#ifdef HAVE_LINUX_LARGE_PAGES
extern uint my_get_large_page_size(void);
@@ -211,11 +210,11 @@ extern my_bool my_may_have_atomic_write;
#define MAX_ALLOCA_SZ 4096
#define my_safe_alloca(size) (((size) <= MAX_ALLOCA_SZ) ? \
my_alloca(size) : \
- my_malloc((size), MYF(MY_THREAD_SPECIFIC|MY_WME)))
+ my_malloc(PSI_NOT_INSTRUMENTED, (size), MYF(MY_THREAD_SPECIFIC|MY_WME)))
#define my_safe_afree(ptr, size) \
do { if ((size) > MAX_ALLOCA_SZ) my_free(ptr); } while(0)
#else
-#define my_alloca(SZ) my_malloc(SZ,MYF(MY_FAE))
+#define my_alloca(SZ) my_malloc(PSI_NOT_INSTRUMENTED, SZ,MYF(MY_FAE))
#define my_afree(PTR) my_free(PTR)
#define my_safe_alloca(size) my_alloca(size)
#define my_safe_afree(ptr, size) my_afree(ptr)
@@ -353,6 +352,7 @@ typedef struct st_dynamic_array
uint elements,max_element;
uint alloc_increment;
uint size_of_element;
+ PSI_memory_key m_psi_key;
myf malloc_flags;
} DYNAMIC_ARRAY;
@@ -508,6 +508,8 @@ typedef void (*my_error_reporter)(enum loglevel level, const char *format, ...)
extern my_error_reporter my_charset_error_reporter;
+extern PSI_file_key key_file_io_cache;
+
/* inline functions for mf_iocache */
extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock);
@@ -800,6 +802,10 @@ my_off_t my_get_ptr(uchar *ptr, size_t pack_length);
extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize,
enum cache_type type,my_off_t seek_offset,
my_bool use_async_io, myf cache_myflags);
+extern int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize,
+ enum cache_type type, my_off_t seek_offset,
+ pbool use_async_io, myf cache_myflags,
+ PSI_file_key file_key);
extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type,
my_off_t seek_offset, my_bool use_async_io,
my_bool clear_cache);
@@ -835,11 +841,12 @@ extern my_bool real_open_cached_file(IO_CACHE *cache);
extern void close_cached_file(IO_CACHE *cache);
File create_temp_file(char *to, const char *dir, const char *pfx,
int mode, myf MyFlags);
-#define my_init_dynamic_array(A,B,C,D,E) init_dynamic_array2(A,B,NULL,C,D,E)
-#define my_init_dynamic_array2(A,B,C,D,E,F) init_dynamic_array2(A,B,C,D,E,F)
-extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,
- void *init_buffer, uint init_alloc,
- uint alloc_increment, myf my_flags);
+#define my_init_dynamic_array(A,B,C,D,E,F) init_dynamic_array2(A,B,C,NULL,D,E,F)
+#define my_init_dynamic_array2(A,B,C,D,E,F,G) init_dynamic_array2(A,B,C,D,E,F,G)
+extern my_bool init_dynamic_array2(PSI_memory_key psi_key, DYNAMIC_ARRAY *array,
+ uint element_size, void *init_buffer,
+ uint init_alloc, uint alloc_increment,
+ myf my_flags);
extern my_bool insert_dynamic(DYNAMIC_ARRAY *array, const void* element);
extern void *alloc_dynamic(DYNAMIC_ARRAY *array);
extern void *pop_dynamic(DYNAMIC_ARRAY*);
@@ -886,13 +893,14 @@ extern uint32 copy_and_convert_extended(char *to, uint32 to_length,
extern void *my_malloc_lock(size_t length,myf flags);
extern void my_free_lock(void *ptr);
#else
-#define my_malloc_lock(A,B) my_malloc((A),(B))
+#define my_malloc_lock(A,B) my_malloc(PSI_INSTRUMENT_ME, (A),(B))
#define my_free_lock(A) my_free((A))
#endif
+#define root_name(A) ""
#define alloc_root_inited(A) ((A)->min_malloc != 0)
#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8)
#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0)
-extern void init_alloc_root(MEM_ROOT *mem_root, const char *name,
+extern void init_alloc_root(PSI_memory_key key, MEM_ROOT *mem_root,
size_t block_size, size_t pre_alloc_size,
myf my_flags);
extern void *alloc_root(MEM_ROOT *mem_root, size_t Size);
diff --git a/include/mysql.h b/include/mysql.h
index ec49ca0482a..6ff4c6d3fad 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -97,6 +97,9 @@ extern char *mysql_unix_port;
#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING)
+typedef struct st_mysql_const_lex_string MARIADB_CONST_STRING;
+
+
typedef struct st_mysql_field {
char *name; /* Name of column */
char *org_name; /* Original column name, if an alias */
@@ -411,6 +414,14 @@ MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res);
MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res);
+
+
+
+int STDCALL mariadb_field_attr(MARIADB_CONST_STRING *attr,
+ const MYSQL_FIELD *field,
+ enum mariadb_field_attr_t type);
+
+
unsigned int STDCALL mysql_field_count(MYSQL *mysql);
my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);
diff --git a/include/mysql.h.pp b/include/mysql.h.pp
index 4fcfab4aea4..051821c2d37 100644
--- a/include/mysql.h.pp
+++ b/include/mysql.h.pp
@@ -28,6 +28,11 @@ enum enum_indicator_type
STMT_INDICATOR_DEFAULT,
STMT_INDICATOR_IGNORE
};
+enum mariadb_field_attr_t
+{
+ MARIADB_FIELD_ATTR_DATA_TYPE_NAME= 0,
+ MARIADB_FIELD_ATTR_FORMAT_NAME= 1
+};
struct st_vio;
typedef struct st_vio Vio;
typedef struct st_net {
@@ -207,6 +212,7 @@ extern int list_walk(LIST *,list_walk_action action,unsigned char * argument);
extern unsigned int mariadb_deinitialize_ssl;
extern unsigned int mysql_port;
extern char *mysql_unix_port;
+typedef struct st_mysql_const_lex_string MARIADB_CONST_STRING;
typedef struct st_mysql_field {
char *name;
char *org_name;
@@ -234,6 +240,12 @@ typedef char **MYSQL_ROW;
typedef unsigned int MYSQL_FIELD_OFFSET;
typedef unsigned long long my_ulonglong;
extern "C" {
+}
+extern "C" {
+struct PSI_thread;
+typedef unsigned int PSI_memory_key;
+}
+extern "C" {
typedef struct st_used_mem
{
struct st_used_mem *next;
@@ -247,11 +259,10 @@ typedef struct st_mem_root
USED_MEM *pre_alloc;
size_t min_malloc;
size_t block_size;
- size_t total_alloc;
unsigned int block_num;
unsigned int first_block_usage;
void (*error_handler)(void);
- const char *name;
+ PSI_memory_key m_psi_key;
} MEM_ROOT;
}
typedef struct st_typelib {
@@ -436,6 +447,9 @@ MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES *res,
MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *res);
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *res);
MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *res);
+int mariadb_field_attr(MARIADB_CONST_STRING *attr,
+ const MYSQL_FIELD *field,
+ enum mariadb_field_attr_t type);
unsigned int mysql_field_count(MYSQL *mysql);
my_ulonglong mysql_affected_rows(MYSQL *mysql);
my_ulonglong mysql_insert_id(MYSQL *mysql);
diff --git a/include/mysql/psi/mysql_file.h b/include/mysql/psi/mysql_file.h
index 1d2ec34fc98..761482d0165 100644
--- a/include/mysql/psi/mysql_file.h
+++ b/include/mysql/psi/mysql_file.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2017, 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, version 2.0,
@@ -48,6 +48,10 @@
#include "mysql/psi/psi.h"
+#ifndef PSI_FILE_CALL
+#define PSI_FILE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
/**
@defgroup File_instrumentation File Instrumentation
@ingroup Instrumentation_interface
@@ -295,7 +299,7 @@
*/
#ifdef HAVE_PSI_FILE_INTERFACE
#define mysql_file_create_temp(K, T, D, P, M, F) \
- inline_mysql_file_create_temp(K, T, D, P, M, F)
+ inline_mysql_file_create_temp(K, __FILE__, __LINE__, T, D, P, M, F)
#else
#define mysql_file_create_temp(K, T, D, P, M, F) \
inline_mysql_file_create_temp(T, D, P, M, F)
@@ -536,7 +540,7 @@ inline_mysql_file_fgets(
{
char *result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -564,7 +568,7 @@ inline_mysql_file_fgetc(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -592,7 +596,7 @@ inline_mysql_file_fputs(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -622,7 +626,7 @@ inline_mysql_file_fputc(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -650,7 +654,7 @@ inline_mysql_file_fprintf(MYSQL_FILE *file, const char *format, ...)
int result;
va_list args;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -682,7 +686,7 @@ inline_mysql_file_vfprintf(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -710,7 +714,7 @@ inline_mysql_file_fflush(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -744,18 +748,15 @@ inline_mysql_file_fstat(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, filenr, PSI_FILE_FSTAT);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, filenr, PSI_FILE_FSTAT);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
- result= my_fstat(filenr, stat_area, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_fstat(filenr, stat_area, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
}
#endif
@@ -772,18 +773,15 @@ inline_mysql_file_stat(
{
MY_STAT *result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_STAT, path, &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_STAT, path, &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
- result= my_stat(path, stat_area, flags);
- PSI_FILE_CALL(end_file_open_wait)(locker, result);
- return result;
- }
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ result= my_stat(path, stat_area, flags);
+ PSI_FILE_CALL(end_file_open_wait)(locker, result);
+ return result;
}
#endif
@@ -800,19 +798,16 @@ inline_mysql_file_chsize(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_CHSIZE);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_CHSIZE);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) newlength, src_file,
- src_line);
- result= my_chsize(file, newlength, filler, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) newlength);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) newlength, src_file,
+ src_line);
+ result= my_chsize(file, newlength, filler, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) newlength);
+ return result;
}
#endif
@@ -828,28 +823,26 @@ inline_mysql_file_fopen(
const char *filename, int flags, myf myFlags)
{
MYSQL_FILE *that;
- that= (MYSQL_FILE*) my_malloc(sizeof(MYSQL_FILE), MYF(MY_WME));
+ that= (MYSQL_FILE*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(MYSQL_FILE), MYF(MY_WME));
if (likely(that != NULL))
{
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_STREAM_OPEN,
+ filename, that);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_STREAM_OPEN,
- filename, that);
- if (likely(locker != NULL))
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ that->m_file= my_fopen(filename, flags, myFlags);
+ that->m_psi= PSI_FILE_CALL(end_file_open_wait)(locker, that->m_file);
+ if (unlikely(that->m_file == NULL))
{
- PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
- that->m_file= my_fopen(filename, flags, myFlags);
- that->m_psi= PSI_FILE_CALL(end_file_open_wait)(locker, that->m_file);
- if (unlikely(that->m_file == NULL))
- {
- my_free(that);
- return NULL;
- }
- return that;
+ my_free(that);
+ return NULL;
}
+ return that;
}
#endif
@@ -875,7 +868,7 @@ inline_mysql_file_fclose(
if (likely(file != NULL))
{
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -907,7 +900,7 @@ inline_mysql_file_fread(
{
size_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -940,7 +933,7 @@ inline_mysql_file_fwrite(
{
size_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -973,7 +966,7 @@ inline_mysql_file_fseek(
{
my_off_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -1001,7 +994,7 @@ inline_mysql_file_ftell(
{
my_off_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ if (psi_likely(file->m_psi))
{
struct PSI_file_locker *locker;
PSI_file_locker_state state;
@@ -1029,19 +1022,16 @@ inline_mysql_file_create(
{
File file;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, filename,
+ &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, filename,
- &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
- file= my_create(filename, create_flags, access_flags, myFlags);
- PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
- return file;
- }
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ file= my_create(filename, create_flags, access_flags, myFlags);
+ PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
+ return file;
}
#endif
@@ -1052,20 +1042,27 @@ inline_mysql_file_create(
static inline File
inline_mysql_file_create_temp(
#ifdef HAVE_PSI_FILE_INTERFACE
- PSI_file_key key,
+ PSI_file_key key, const char *src_file, uint src_line,
#endif
char *to, const char *dir, const char *pfx, int mode, myf myFlags)
{
File file;
- /*
- TODO: This event is instrumented, but not timed.
- The problem is that the file name is now known
- before the create_temp_file call.
- */
- file= create_temp_file(to, dir, pfx, mode, myFlags);
#ifdef HAVE_PSI_FILE_INTERFACE
- PSI_FILE_CALL(create_file)(key, to, file);
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_CREATE, NULL, &locker);
+ if (psi_likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ /* The file name is generated by create_temp_file(). */
+ file= create_temp_file(to, dir, pfx, mode, myFlags);
+ PSI_FILE_CALL(end_temp_file_open_wait_and_bind_to_descriptor)(locker, file, (const char*)to);
+ return file;
+ }
#endif
+
+ file= create_temp_file(to, dir, pfx, mode, myFlags);
return file;
}
@@ -1078,19 +1075,16 @@ inline_mysql_file_open(
{
File file;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_OPEN, filename,
+ &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_OPEN, filename,
- &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
- file= my_open(filename, flags, myFlags);
- PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
- return file;
- }
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ file= my_open(filename, flags, myFlags);
+ PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
+ return file;
}
#endif
@@ -1107,18 +1101,15 @@ inline_mysql_file_close(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_CLOSE);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_CLOSE);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
- result= my_close(file, flags);
- PSI_FILE_CALL(end_file_close_wait)(locker, result);
- return result;
- }
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_close(file, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ return result;
}
#endif
@@ -1135,23 +1126,20 @@ inline_mysql_file_read(
{
size_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_read;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- size_t bytes_read;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
- result= my_read(file, buffer, count, flags);
- if (flags & (MY_NABP | MY_FNABP))
- bytes_read= (result == 0) ? count : 0;
- else
- bytes_read= (result != MY_FILE_ERROR) ? result : 0;
- PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_read(file, buffer, count, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_read= (result == 0) ? count : 0;
+ else
+ bytes_read= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
+ return result;
}
#endif
@@ -1168,23 +1156,20 @@ inline_mysql_file_write(
{
size_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_written;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_WRITE);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- size_t bytes_written;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_WRITE);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
- result= my_write(file, buffer, count, flags);
- if (flags & (MY_NABP | MY_FNABP))
- bytes_written= (result == 0) ? count : 0;
- else
- bytes_written= (result != MY_FILE_ERROR) ? result : 0;
- PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_write(file, buffer, count, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_written= (result == 0) ? count : 0;
+ else
+ bytes_written= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
+ return result;
}
#endif
@@ -1201,23 +1186,20 @@ inline_mysql_file_pread(
{
size_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_read;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- size_t bytes_read;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
- result= my_pread(file, buffer, count, offset, flags);
- if (flags & (MY_NABP | MY_FNABP))
- bytes_read= (result == 0) ? count : 0;
- else
- bytes_read= (result != MY_FILE_ERROR) ? result : 0;
- PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_pread(file, buffer, count, offset, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_read= (result == 0) ? count : 0;
+ else
+ bytes_read= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
+ return result;
}
#endif
@@ -1234,23 +1216,20 @@ inline_mysql_file_pwrite(
{
size_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_written;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_WRITE);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- size_t bytes_written;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_WRITE);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
- result= my_pwrite(file, buffer, count, offset, flags);
- if (flags & (MY_NABP | MY_FNABP))
- bytes_written= (result == 0) ? count : 0;
- else
- bytes_written= (result != MY_FILE_ERROR) ? result : 0;
- PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_pwrite(file, buffer, count, offset, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_written= (result == 0) ? count : 0;
+ else
+ bytes_written= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
+ return result;
}
#endif
@@ -1267,18 +1246,15 @@ inline_mysql_file_seek(
{
my_off_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_SEEK);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_SEEK);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
- result= my_seek(file, pos, whence, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_seek(file, pos, whence, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
}
#endif
@@ -1295,18 +1271,15 @@ inline_mysql_file_tell(
{
my_off_t result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_TELL);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_TELL);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
- result= my_tell(file, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_tell(file, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
}
#endif
@@ -1323,18 +1296,15 @@ inline_mysql_file_delete(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, name, &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, name, &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
- result= my_delete(name, flags);
- PSI_FILE_CALL(end_file_close_wait)(locker, result);
- return result;
- }
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_delete(name, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ return result;
}
#endif
@@ -1351,18 +1321,16 @@ inline_mysql_file_rename(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_RENAME, from, &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_RENAME, to, &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
- result= my_rename(from, to, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_rename(from, to, flags);
+ PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result);
+ return result;
}
#endif
@@ -1381,20 +1349,17 @@ inline_mysql_file_create_with_symlink(
{
File file;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, filename,
+ &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, filename,
- &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
- file= my_create_with_symlink(linkname, filename, create_flags, access_flags,
- flags);
- PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
- return file;
- }
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ file= my_create_with_symlink(linkname, filename, create_flags, access_flags,
+ flags);
+ PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
+ return file;
}
#endif
@@ -1415,19 +1380,16 @@ inline_mysql_file_delete_with_symlink(
char buf[FN_REFLEN];
char *fullname= fn_format(buf, name, "", ext, MY_UNPACK_FILENAME | MY_APPEND_EXT);
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, fullname,
+ &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, fullname,
- &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
- result= my_handler_delete_with_symlink(fullname, flags);
- PSI_FILE_CALL(end_file_close_wait)(locker, result);
- return result;
- }
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_handler_delete_with_symlink(fullname, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ return result;
}
#endif
@@ -1445,18 +1407,16 @@ inline_mysql_file_rename_with_symlink(
{
int result;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_RENAME, from, &locker);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_RENAME, to, &locker);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
- result= my_rename_with_symlink(from, to, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_rename_with_symlink(from, to, flags);
+ PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result);
+ return result;
}
#endif
@@ -1473,18 +1433,15 @@ inline_mysql_file_sync(
{
int result= 0;
#ifdef HAVE_PSI_FILE_INTERFACE
- if (psi_likely(pfs_enabled))
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, fd, PSI_FILE_SYNC);
+ if (psi_likely(locker != NULL))
{
- struct PSI_file_locker *locker;
- PSI_file_locker_state state;
- locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, fd, PSI_FILE_SYNC);
- if (likely(locker != NULL))
- {
- PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
- result= my_sync(fd, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
- return result;
- }
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_sync(fd, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
}
#endif
diff --git a/include/mysql/psi/mysql_idle.h b/include/mysql/psi/mysql_idle.h
index 1eb19f8f684..f8085073af6 100644
--- a/include/mysql/psi/mysql_idle.h
+++ b/include/mysql/psi/mysql_idle.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- Copyright (c) 2017, MariaDB Corporation.
+ Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
@@ -31,6 +31,10 @@
#include "mysql/psi/psi.h"
+#ifndef PSI_IDLE_CALL
+#define PSI_IDLE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
/**
@defgroup Idle_instrumentation Idle Instrumentation
@ingroup Instrumentation_interface
diff --git a/include/mysql/psi/mysql_mdl.h b/include/mysql/psi/mysql_mdl.h
new file mode 100644
index 00000000000..20d6c94c57c
--- /dev/null
+++ b/include/mysql/psi/mysql_mdl.h
@@ -0,0 +1,143 @@
+/* Copyright (c) 2012, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef MYSQL_MDL_H
+#define MYSQL_MDL_H
+
+/**
+ @file mysql/psi/mysql_mdl.h
+ Instrumentation helpers for metadata locks.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+
+#ifndef PSI_METADATA_CALL
+#define PSI_METADATA_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#define PSI_CALL_start_metadata_wait(A,B,C,D) PSI_METADATA_CALL(start_metadata_wait)(A,B,C,D)
+#define PSI_CALL_end_metadata_wait(A,B) PSI_METADATA_CALL(end_metadata_wait)(A,B)
+#define PSI_CALL_create_metadata_lock(A,B,C,D,E,F,G) PSI_METADATA_CALL(create_metadata_lock)(A,B,C,D,E,F,G)
+#define PSI_CALL_set_metadata_lock_status(A,B) PSI_METADATA_CALL(set_metadata_lock_status)(A,B)
+#define PSI_CALL_destroy_metadata_lock(A) PSI_METADATA_CALL(destroy_metadata_lock)(A)
+#else
+#define PSI_CALL_start_metadata_wait(A,B,C,D) 0
+#define PSI_CALL_end_metadata_wait(A,B) do { } while(0)
+#define PSI_CALL_create_metadata_lock(A,B,C,D,E,F,G) 0
+#define PSI_CALL_set_metadata_lock_status(A,B) do {} while(0)
+#define PSI_CALL_destroy_metadata_lock(A) do {} while(0)
+#endif
+
+/**
+ @defgroup Thread_instrumentation Metadata Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_mdl_create(K, M, A)
+ Instrumented metadata lock creation.
+ @param I Metadata lock identity
+ @param K Metadata key
+ @param T Metadata lock type
+ @param D Metadata lock duration
+ @param S Metadata lock status
+ @param F request source file
+ @param L request source line
+*/
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+ #define mysql_mdl_create(I, K, T, D, S, F, L) \
+ inline_mysql_mdl_create(I, K, T, D, S, F, L)
+#else
+ #define mysql_mdl_create(I, K, T, D, S, F, L) NULL
+#endif
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+ #define mysql_mdl_set_status(L, S) \
+ inline_mysql_mdl_set_status(L, S)
+#else
+ #define mysql_mdl_set_status(L, S) \
+ do {} while (0)
+#endif
+
+
+/**
+ @def mysql_mdl_destroy(M)
+ Instrumented metadata lock destruction.
+ @param M Metadata lock
+*/
+#ifdef HAVE_PSI_METADATA_INTERFACE
+ #define mysql_mdl_destroy(M) \
+ inline_mysql_mdl_destroy(M, __FILE__, __LINE__)
+#else
+ #define mysql_mdl_destroy(M) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+
+static inline PSI_metadata_lock *
+inline_mysql_mdl_create(void *identity,
+ const MDL_key *mdl_key,
+ enum_mdl_type mdl_type,
+ enum_mdl_duration mdl_duration,
+ MDL_ticket::enum_psi_status mdl_status,
+ const char *src_file, uint src_line)
+{
+ PSI_metadata_lock *result;
+
+ /* static_cast: Fit a round C++ enum peg into a square C int hole ... */
+ result= PSI_METADATA_CALL(create_metadata_lock)
+ (identity,
+ mdl_key,
+ static_cast<opaque_mdl_type> (mdl_type),
+ static_cast<opaque_mdl_duration> (mdl_duration),
+ static_cast<opaque_mdl_status> (mdl_status),
+ src_file, src_line);
+
+ return result;
+}
+
+static inline void inline_mysql_mdl_set_status(
+ PSI_metadata_lock *psi,
+ MDL_ticket::enum_psi_status mdl_status)
+{
+ if (psi != NULL)
+ PSI_METADATA_CALL(set_metadata_lock_status)(psi, mdl_status);
+}
+
+static inline void inline_mysql_mdl_destroy(
+ PSI_metadata_lock *psi,
+ const char *src_file, uint src_line)
+{
+ if (psi != NULL)
+ PSI_METADATA_CALL(destroy_metadata_lock)(psi);
+}
+#endif /* HAVE_PSI_METADATA_INTERFACE */
+
+/** @} (end of group Metadata_instrumentation) */
+
+#endif
+
diff --git a/include/mysql/psi/mysql_memory.h b/include/mysql/psi/mysql_memory.h
new file mode 100644
index 00000000000..a79579c2e56
--- /dev/null
+++ b/include/mysql/psi/mysql_memory.h
@@ -0,0 +1,79 @@
+/* Copyright (c) 2012, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef MYSQL_MEMORY_H
+#define MYSQL_MEMORY_H
+
+/**
+ @file mysql/psi/mysql_memory.h
+ Instrumentation helpers for memory allocation.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+#define PSI_CALL_memory_alloc(A1,A2,A3) PSI_MEMORY_CALL(memory_alloc)(A1,A2,A3)
+#define PSI_CALL_memory_free(A1,A2,A3) PSI_MEMORY_CALL(memory_free)(A1,A2,A3)
+#define PSI_CALL_memory_realloc(A1,A2,A3,A4) PSI_MEMORY_CALL(memory_realloc)(A1,A2,A3,A4)
+#define PSI_CALL_register_memory(A1,A2,A3) PSI_MEMORY_CALL(register_memory)(A1,A2,A3)
+#else
+#define PSI_CALL_memory_alloc(A1,A2,A3) 0
+#define PSI_CALL_memory_free(A1,A2,A3) do { } while(0)
+#define PSI_CALL_memory_realloc(A1,A2,A3,A4) 0
+#define PSI_CALL_register_memory(A1,A2,A3) do { } while(0)
+#endif
+
+#ifndef PSI_MEMORY_CALL
+#define PSI_MEMORY_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Memory_instrumentation Memory Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_memory_register(P1, P2, P3)
+ Memory registration.
+*/
+#define mysql_memory_register(P1, P2, P3) \
+ inline_mysql_memory_register(P1, P2, P3)
+
+static inline void inline_mysql_memory_register(
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+ const char *category,
+ PSI_memory_info *info,
+ int count)
+#else
+ const char *category __attribute__((unused)),
+ void *info __attribute__((unused)),
+ int count __attribute__((unused)))
+#endif
+{
+ PSI_CALL_register_memory(category, info, count);
+}
+
+/** @} (end of group Memory_instrumentation) */
+
+#endif
+
diff --git a/include/mysql/psi/mysql_ps.h b/include/mysql/psi/mysql_ps.h
new file mode 100644
index 00000000000..f0b2733297a
--- /dev/null
+++ b/include/mysql/psi/mysql_ps.h
@@ -0,0 +1,108 @@
+/* Copyright (c) 2014, 2017, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef MYSQL_PS_H
+#define MYSQL_PS_H
+
+/**
+ @file mysql/psi/mysql_ps.h
+ Instrumentation helpers for prepared statements.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_PS_CALL
+#define PSI_PS_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifdef HAVE_PSI_PS_INTERFACE
+ #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH) \
+ inline_mysql_create_prepared_stmt(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH)
+ #define MYSQL_EXECUTE_PS(LOCKER, PREPARED_STMT) \
+ inline_mysql_execute_prepared_stmt(LOCKER, PREPARED_STMT)
+ #define MYSQL_DESTROY_PS(PREPARED_STMT) \
+ inline_mysql_destroy_prepared_stmt(PREPARED_STMT)
+ #define MYSQL_REPREPARE_PS(PREPARED_STMT) \
+ inline_mysql_reprepare_prepared_stmt(PREPARED_STMT)
+ #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \
+ inline_mysql_set_prepared_stmt_text(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH)
+#else
+ #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH) \
+ NULL
+ #define MYSQL_EXECUTE_PS(LOCKER, PREPARED_STMT) \
+ do {} while (0)
+ #define MYSQL_DESTROY_PS(PREPARED_STMT) \
+ do {} while (0)
+ #define MYSQL_REPREPARE_PS(PREPARED_STMT) \
+ do {} while (0)
+ #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_PS_INTERFACE
+static inline struct PSI_prepared_stmt*
+inline_mysql_create_prepared_stmt(void *identity, uint stmt_id,
+ PSI_statement_locker *locker,
+ const char *stmt_name, size_t stmt_name_length)
+{
+ if (locker == NULL)
+ return NULL;
+ return PSI_PS_CALL(create_prepared_stmt)(identity, stmt_id,
+ locker,
+ stmt_name, stmt_name_length);
+}
+
+static inline void
+inline_mysql_execute_prepared_stmt(PSI_statement_locker *locker,
+ PSI_prepared_stmt* prepared_stmt)
+{
+ if (prepared_stmt != NULL && locker != NULL)
+ PSI_PS_CALL(execute_prepared_stmt)(locker, prepared_stmt);
+}
+
+static inline void
+inline_mysql_destroy_prepared_stmt(PSI_prepared_stmt *prepared_stmt)
+{
+ if (prepared_stmt != NULL)
+ PSI_PS_CALL(destroy_prepared_stmt)(prepared_stmt);
+}
+
+static inline void
+inline_mysql_reprepare_prepared_stmt(PSI_prepared_stmt *prepared_stmt)
+{
+ if (prepared_stmt != NULL)
+ PSI_PS_CALL(reprepare_prepared_stmt)(prepared_stmt);
+}
+
+static inline void
+inline_mysql_set_prepared_stmt_text(PSI_prepared_stmt *prepared_stmt,
+ const char *text,
+ uint text_len)
+{
+ if (prepared_stmt != NULL)
+ {
+ PSI_PS_CALL(set_prepared_stmt_text)(prepared_stmt, text, text_len);
+ }
+}
+#endif
+
+#endif
diff --git a/include/mysql/psi/mysql_socket.h b/include/mysql/psi/mysql_socket.h
index d0302edd09b..765c5aa7793 100644
--- a/include/mysql/psi/mysql_socket.h
+++ b/include/mysql/psi/mysql_socket.h
@@ -31,7 +31,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
/* For my_chsize */
#include <my_sys.h>
/* For socket api */
-#ifdef __WIN__
+#ifdef _WIN32
#include <ws2def.h>
#include <winsock2.h>
#include <MSWSock.h>
@@ -47,6 +47,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
#include "mysql/psi/psi.h"
+#ifndef PSI_SOCKET_CALL
+#define PSI_SOCKET_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
/**
@defgroup Socket_instrumentation Socket Instrumentation
@ingroup Instrumentation_interface
@@ -65,6 +69,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
do {} while (0)
#endif
+/** An instrumented socket. */
struct st_mysql_socket
{
/** The real socket descriptor. */
@@ -107,9 +112,8 @@ mysql_socket_invalid()
/**
Set socket descriptor and address.
@param socket nstrumented socket
- @param fd socket descriptor
@param addr unformatted socket address
- @param adr_len length of socket address
+ @param addr_len length of socket address
*/
static inline void
@@ -134,7 +138,6 @@ mysql_socket_set_address(
/**
Set socket descriptor and address.
@param socket instrumented socket
- @param thread instrumented owning thread
*/
static inline void
mysql_socket_set_thread_owner(
@@ -201,7 +204,6 @@ mysql_socket_setfd(MYSQL_SOCKET *mysql_socket, my_socket fd)
@param STATE locker state
@param SOCKET instrumented socket
@param OP The socket operation to be performed
- @param FLAGS per-socket operation flags.
@param COUNT bytes to be written/read
@sa MYSQL_END_SOCKET_WAIT.
*/
@@ -230,6 +232,13 @@ mysql_socket_setfd(MYSQL_SOCKET *mysql_socket, my_socket fd)
do {} while (0)
#endif
+/**
+ @def MYSQL_SOCKET_SET_STATE
+ Set the state (IDLE, ACTIVE) of an instrumented socket.
+ @param SOCKET the instrumented socket
+ @param STATE the new state
+ @sa PSI_socket_state
+*/
#ifdef HAVE_PSI_SOCKET_INTERFACE
#define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \
inline_mysql_socket_set_state(SOCKET, STATE)
@@ -325,8 +334,8 @@ inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state)
Return port number and IP address of the local host
@c mysql_socket_getsockname is a replacement for @c getsockname.
@param FD Instrumented socket descriptor returned by socket()
- @param A Pointer to returned address of local host in sockaddr structure
- @param L Pointer to length of sockaddr structure
+ @param AP Pointer to returned address of local host in @c sockaddr structure
+ @param LP Pointer to length of @c sockaddr structure
*/
#ifdef HAVE_PSI_SOCKET_INTERFACE
#define mysql_socket_getsockname(FD, AP, LP) \
@@ -430,7 +439,7 @@ inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state)
@param N Maximum bytes to receive
@param FL Control flags
@param AP Pointer to source address in sockaddr_storage structure
- @param L Size of sockaddr_storage structure
+ @param LP Size of sockaddr_storage structure
*/
#ifdef HAVE_PSI_SOCKET_INTERFACE
#define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \
@@ -477,6 +486,19 @@ inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state)
#endif
/**
+ @def mysql_sock_set_nonblocking
+ Set socket to non-blocking.
+ @param FD instrumented socket descriptor
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_sock_set_nonblocking(FD) \
+ inline_mysql_sock_set_nonblocking(__FILE__, __LINE__, FD)
+#else
+ #define mysql_sock_set_nonblocking(FD) \
+ inline_mysql_sock_set_nonblocking(FD)
+#endif
+
+/**
@def mysql_socket_listen(FD, N)
Set socket state to listen for an incoming connection.
@c mysql_socket_listen is a replacement for @c listen.
@@ -972,6 +994,78 @@ inline_mysql_socket_setsockopt
return result;
}
+/** set_socket_nonblock */
+static inline int
+set_socket_nonblock(my_socket fd)
+{
+ int ret= 0;
+#ifdef _WIN32
+ {
+ u_long nonblocking= 1;
+ ret= ioctlsocket(fd, FIONBIO, &nonblocking);
+ }
+#else
+ {
+ int fd_flags;
+ fd_flags= fcntl(fd, F_GETFL, 0);
+ if (fd_flags < 0)
+ return errno;
+#if defined(O_NONBLOCK)
+ fd_flags |= O_NONBLOCK;
+#elif defined(O_NDELAY)
+ fd_flags |= O_NDELAY;
+#elif defined(O_FNDELAY)
+ fd_flags |= O_FNDELAY;
+#else
+#error "No definition of non-blocking flag found."
+#endif /* O_NONBLOCK */
+ if (fcntl(fd, F_SETFL, fd_flags) == -1)
+ ret= errno;
+ }
+#endif /* _WIN32 */
+ return ret;
+}
+
+/** mysql_socket_set_nonblocking */
+
+static inline int
+inline_mysql_sock_set_nonblocking
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket
+)
+{
+ int result= 0;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_OPT,
+ (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= set_socket_nonblock(mysql_socket.fd);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= set_socket_nonblock(mysql_socket.fd);
+
+ return result;
+}
+
/** mysql_socket_listen */
static inline int
@@ -1136,7 +1230,7 @@ inline_mysql_socket_shutdown
{
int result;
-#ifdef __WIN__
+#ifdef _WIN32
static LPFN_DISCONNECTEX DisconnectEx = NULL;
if (DisconnectEx == NULL)
{
@@ -1159,7 +1253,7 @@ inline_mysql_socket_shutdown
(&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line);
/* Instrumented code */
-#ifdef __WIN__
+#ifdef _WIN32
if (DisconnectEx)
result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL,
(DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1;
@@ -1176,7 +1270,7 @@ inline_mysql_socket_shutdown
#endif
/* Non instrumented code */
-#ifdef __WIN__
+#ifdef _WIN32
if (DisconnectEx)
result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL,
(DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1;
diff --git a/include/mysql/psi/mysql_sp.h b/include/mysql/psi/mysql_sp.h
new file mode 100644
index 00000000000..5eeea37f4c4
--- /dev/null
+++ b/include/mysql/psi/mysql_sp.h
@@ -0,0 +1,104 @@
+/* Copyright (c) 2013, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef MYSQL_SP_H
+#define MYSQL_SP_H
+
+/**
+ @file mysql/psi/mysql_sp.h
+ Instrumentation helpers for stored programs.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_SP_CALL
+#define PSI_SP_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_START_SP(STATE, SP_SHARE) \
+ inline_mysql_start_sp(STATE, SP_SHARE)
+#else
+ #define MYSQL_START_SP(STATE, SP_SHARE) \
+ NULL
+#endif
+
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_END_SP(LOCKER) \
+ inline_mysql_end_sp(LOCKER)
+#else
+ #define MYSQL_END_SP(LOCKER) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_DROP_SP(OT, SN, SNL, ON, ONL) \
+ inline_mysql_drop_sp(OT, SN, SNL, ON, ONL)
+#else
+ #define MYSQL_DROP_SP(OT, SN, SNL, ON, ONL) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_GET_SP_SHARE(OT, SN, SNL, ON, ONL) \
+ inline_mysql_get_sp_share(OT, SN, SNL, ON, ONL)
+#else
+ #define MYSQL_GET_SP_SHARE(OT, SN, SNL, ON, ONL) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+static inline struct PSI_sp_locker*
+inline_mysql_start_sp(PSI_sp_locker_state *state, PSI_sp_share *sp_share)
+{
+ return PSI_SP_CALL(start_sp)(state, sp_share);
+}
+
+static inline void inline_mysql_end_sp(PSI_sp_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_SP_CALL(end_sp)(locker);
+}
+
+static inline void
+inline_mysql_drop_sp(uint sp_type,
+ const char* schema_name, uint shcema_name_length,
+ const char* object_name, uint object_name_length)
+{
+ PSI_SP_CALL(drop_sp)(sp_type,
+ schema_name, shcema_name_length,
+ object_name, object_name_length);
+}
+
+static inline PSI_sp_share*
+inline_mysql_get_sp_share(uint sp_type,
+ const char* schema_name, uint shcema_name_length,
+ const char* object_name, uint object_name_length)
+{
+ return PSI_SP_CALL(get_sp_share)(sp_type,
+ schema_name, shcema_name_length,
+ object_name, object_name_length);
+}
+#endif
+
+#endif
diff --git a/include/mysql/psi/mysql_stage.h b/include/mysql/psi/mysql_stage.h
index 1dbaed6c682..732df6bd357 100644
--- a/include/mysql/psi/mysql_stage.h
+++ b/include/mysql/psi/mysql_stage.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2014, 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, version 2.0,
@@ -30,6 +30,10 @@
#include "mysql/psi/psi.h"
+#ifndef PSI_STAGE_CALL
+#define PSI_STAGE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
/**
@defgroup Stage_instrumentation Stage Instrumentation
@ingroup Instrumentation_interface
@@ -48,12 +52,48 @@
do {} while (0)
#endif
+/**
+ @def MYSQL_SET_STAGE
+ Set the current stage.
+ Use this API when the file and line
+ is passed from the caller.
+ @param K the stage key
+ @param F the source file name
+ @param L the source file line
+ @return the current stage progress
+*/
#ifdef HAVE_PSI_STAGE_INTERFACE
#define MYSQL_SET_STAGE(K, F, L) \
inline_mysql_set_stage(K, F, L)
#else
#define MYSQL_SET_STAGE(K, F, L) \
- do {} while (0)
+ NULL
+#endif
+
+/**
+ @def mysql_set_stage
+ Set the current stage.
+ @param K the stage key
+ @return the current stage progress
+*/
+#ifdef HAVE_PSI_STAGE_INTERFACE
+ #define mysql_set_stage(K) \
+ inline_mysql_set_stage(K, __FILE__, __LINE__)
+#else
+ #define mysql_set_stage(K) \
+ NULL
+#endif
+
+/**
+ @def mysql_end_stage
+ End the last stage
+*/
+#ifdef HAVE_PSI_STAGE_INTERFACE
+ #define mysql_end_stage() \
+ inline_mysql_end_stage()
+#else
+ #define mysql_end_stage() \
+ do {} while (0)
#endif
#ifdef HAVE_PSI_STAGE_INTERFACE
@@ -65,11 +105,97 @@ static inline void inline_mysql_stage_register(
#endif
#ifdef HAVE_PSI_STAGE_INTERFACE
-static inline void
+static inline PSI_stage_progress*
inline_mysql_set_stage(PSI_stage_key key,
const char *src_file, int src_line)
{
- PSI_STAGE_CALL(start_stage)(key, src_file, src_line);
+ return PSI_STAGE_CALL(start_stage)(key, src_file, src_line);
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_end_stage()
+{
+ PSI_STAGE_CALL(end_stage)();
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_set_work_completed(P1, P2) \
+ inline_mysql_stage_set_work_completed(P1, P2)
+
+#define mysql_stage_get_work_completed(P1) \
+ inline_mysql_stage_get_work_completed(P1)
+#else
+#define mysql_stage_set_work_completed(P1, P2) \
+ do {} while (0)
+
+#define mysql_stage_get_work_completed(P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_inc_work_completed(P1, P2) \
+ inline_mysql_stage_inc_work_completed(P1, P2)
+#else
+#define mysql_stage_inc_work_completed(P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_set_work_estimated(P1, P2) \
+ inline_mysql_stage_set_work_estimated(P1, P2)
+
+#define mysql_stage_get_work_estimated(P1) \
+ inline_mysql_stage_get_work_estimated(P1)
+#else
+#define mysql_stage_set_work_estimated(P1, P2) \
+ do {} while (0)
+
+#define mysql_stage_get_work_estimated(P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_stage_set_work_completed(PSI_stage_progress *progress,
+ ulonglong val)
+{
+ if (progress != NULL)
+ progress->m_work_completed= val;
+}
+
+static inline ulonglong
+inline_mysql_stage_get_work_completed(PSI_stage_progress *progress)
+{
+ return progress->m_work_completed;
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_stage_inc_work_completed(PSI_stage_progress *progress,
+ ulonglong val)
+{
+ if (progress != NULL)
+ progress->m_work_completed+= val;
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_stage_set_work_estimated(PSI_stage_progress *progress,
+ ulonglong val)
+{
+ if (progress != NULL)
+ progress->m_work_estimated= val;
+}
+
+static inline ulonglong
+inline_mysql_stage_get_work_estimated(PSI_stage_progress *progress)
+{
+ return progress->m_work_estimated;
}
#endif
diff --git a/include/mysql/psi/mysql_statement.h b/include/mysql/psi/mysql_statement.h
index 6d38131ea99..fab23d2c5c2 100644
--- a/include/mysql/psi/mysql_statement.h
+++ b/include/mysql/psi/mysql_statement.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
- Copyright (c) 2017, MariaDB Corporation.
+ Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
@@ -31,6 +31,17 @@
#include "mysql/psi/psi.h"
+class Diagnostics_area;
+typedef const struct charset_info_st CHARSET_INFO;
+
+#ifndef PSI_STATEMENT_CALL
+#define PSI_STATEMENT_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_DIGEST_CALL
+#define PSI_DIGEST_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
/**
@defgroup Statement_instrumentation Statement Instrumentation
@ingroup Instrumentation_interface
@@ -66,10 +77,10 @@
#endif
#ifdef HAVE_PSI_STATEMENT_INTERFACE
- #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS) \
- inline_mysql_start_statement(STATE, K, DB, DB_LEN, CS, __FILE__, __LINE__)
+ #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS, SPS) \
+ inline_mysql_start_statement(STATE, K, DB, DB_LEN, CS, SPS, __FILE__, __LINE__)
#else
- #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS) \
+ #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS, SPS) \
NULL
#endif
@@ -153,11 +164,13 @@ static inline struct PSI_statement_locker *
inline_mysql_start_statement(PSI_statement_locker_state *state,
PSI_statement_key key,
const char *db, size_t db_len,
- const CHARSET_INFO *charset,
+ CHARSET_INFO *charset,
+ PSI_sp_share *sp_share,
const char *src_file, uint src_line)
{
PSI_statement_locker *locker;
- locker= PSI_STATEMENT_CALL(get_thread_statement_locker)(state, key, charset);
+ locker= PSI_STATEMENT_CALL(get_thread_statement_locker)(state, key, charset,
+ sp_share);
if (psi_likely(locker != NULL))
PSI_STATEMENT_CALL(start_statement)(locker, db, (uint)db_len, src_file, src_line);
return locker;
diff --git a/include/mysql/psi/mysql_table.h b/include/mysql/psi/mysql_table.h
index c1244e38866..5bbe8cef929 100644
--- a/include/mysql/psi/mysql_table.h
+++ b/include/mysql/psi/mysql_table.h
@@ -1,5 +1,5 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
- Copyright (c) 2017, MariaDB Corporation.
+/* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
@@ -31,6 +31,10 @@
#include "mysql/psi/psi.h"
+#ifndef PSI_TABLE_CALL
+#define PSI_TABLE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
/**
@defgroup Table_instrumentation Table Instrumentation
@ingroup Instrumentation_interface
@@ -54,7 +58,7 @@
#define PSI_CALL_unbind_table(A1) do { } while(0)
#define PSI_CALL_rebind_table(A1,A2,A3) NULL
-#define PSI_CALL_close_table(A1) do { } while(0)
+#define PSI_CALL_close_table(A1,A2) do { } while(0)
#define PSI_CALL_open_table(A1,A2) NULL
#define PSI_CALL_get_table_share(A1,A2) NULL
#define PSI_CALL_release_table_share(A1) do { } while(0)
@@ -82,72 +86,6 @@
#endif
/**
- @def MYSQL_TABLE_IO_WAIT
- Instrumentation helper for table io_waits.
- This instrumentation marks the start of a wait event.
- @param PSI the instrumented table
- @param OP the table operation to be performed
- @param INDEX the table index used if any, or MAY_KEY.
- @param FLAGS per table operation flags.
- @sa MYSQL_END_TABLE_WAIT.
-*/
-#ifdef HAVE_PSI_TABLE_INTERFACE
- #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \
- { \
- if (psi_likely(PSI != NULL)) \
- { \
- PSI_table_locker *locker; \
- PSI_table_locker_state state; \
- locker= PSI_TABLE_CALL(start_table_io_wait) \
- (& state, PSI, OP, INDEX, __FILE__, __LINE__); \
- PAYLOAD \
- if (locker != NULL) \
- PSI_TABLE_CALL(end_table_io_wait)(locker); \
- } \
- else \
- { \
- PAYLOAD \
- } \
- }
-#else
- #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \
- PAYLOAD
-#endif
-
-/**
- @def MYSQL_TABLE_LOCK_WAIT
- Instrumentation helper for table io_waits.
- This instrumentation marks the start of a wait event.
- @param PSI the instrumented table
- @param OP the table operation to be performed
- @param INDEX the table index used if any, or MAY_KEY.
- @param FLAGS per table operation flags.
- @sa MYSQL_END_TABLE_WAIT.
-*/
-#ifdef HAVE_PSI_TABLE_INTERFACE
- #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \
- { \
- if (psi_likely(PSI != NULL)) \
- { \
- PSI_table_locker *locker; \
- PSI_table_locker_state state; \
- locker= PSI_TABLE_CALL(start_table_lock_wait) \
- (& state, PSI, OP, FLAGS, __FILE__, __LINE__); \
- PAYLOAD \
- if (locker != NULL) \
- PSI_TABLE_CALL(end_table_lock_wait)(locker); \
- } \
- else \
- { \
- PAYLOAD \
- } \
- }
-#else
- #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \
- PAYLOAD
-#endif
-
-/**
@def MYSQL_START_TABLE_LOCK_WAIT
Instrumentation helper for table lock waits.
This instrumentation marks the start of a wait event.
@@ -183,6 +121,14 @@
#endif
#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_UNLOCK_TABLE(T) \
+ inline_mysql_unlock_table(T)
+#else
+ #define MYSQL_UNLOCK_TABLE(T) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TABLE_INTERFACE
/**
Instrumentation calls for MYSQL_START_TABLE_LOCK_WAIT.
@sa MYSQL_END_TABLE_LOCK_WAIT.
@@ -213,6 +159,13 @@ inline_mysql_end_table_lock_wait(struct PSI_table_locker *locker)
if (psi_likely(locker != NULL))
PSI_TABLE_CALL(end_table_lock_wait)(locker);
}
+
+static inline void
+inline_mysql_unlock_table(struct PSI_table *table)
+{
+ if (table != NULL)
+ PSI_TABLE_CALL(unlock_table)(table);
+}
#endif
/** @} (end of group Table_instrumentation) */
diff --git a/include/mysql/psi/mysql_thread.h b/include/mysql/psi/mysql_thread.h
index eab87402140..711520dba78 100644
--- a/include/mysql/psi/mysql_thread.h
+++ b/include/mysql/psi/mysql_thread.h
@@ -62,6 +62,27 @@
*/
#include "mysql/psi/psi.h"
+#ifdef MYSQL_SERVER
+#ifndef MYSQL_DYNAMIC_PLUGIN
+#include "pfs_thread_provider.h"
+#endif
+#endif
+
+#ifndef PSI_MUTEX_CALL
+#define PSI_MUTEX_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_RWLOCK_CALL
+#define PSI_RWLOCK_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_COND_CALL
+#define PSI_COND_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_THREAD_CALL
+#define PSI_THREAD_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
/**
@defgroup Thread_instrumentation Thread Instrumentation
@@ -75,26 +96,32 @@
#define PSI_CALL_new_thread PSI_THREAD_CALL(new_thread)
#define PSI_CALL_register_thread PSI_THREAD_CALL(register_thread)
#define PSI_CALL_set_thread PSI_THREAD_CALL(set_thread)
+#define PSI_CALL_set_thread_THD PSI_THREAD_CALL(set_thread_THD)
#define PSI_CALL_set_thread_connect_attrs PSI_THREAD_CALL(set_thread_connect_attrs)
#define PSI_CALL_set_thread_db PSI_THREAD_CALL(set_thread_db)
#define PSI_CALL_set_thread_id PSI_THREAD_CALL(set_thread_id)
+#define PSI_CALL_set_thread_os_id PSI_THREAD_CALL(set_thread_os_id)
#define PSI_CALL_set_thread_info PSI_THREAD_CALL(set_thread_info)
#define PSI_CALL_set_thread_start_time PSI_THREAD_CALL(set_thread_start_time)
-#define PSI_CALL_set_thread_user_host PSI_THREAD_CALL(set_thread_user_host)
+#define PSI_CALL_set_thread_account PSI_THREAD_CALL(set_thread_account)
#define PSI_CALL_spawn_thread PSI_THREAD_CALL(spawn_thread)
+#define PSI_CALL_set_connection_type PSI_THREAD_CALL(set_connection_type)
#else
#define PSI_CALL_delete_current_thread() do { } while(0)
#define PSI_CALL_get_thread() NULL
#define PSI_CALL_new_thread(A1,A2,A3) NULL
#define PSI_CALL_register_thread(A1,A2,A3) do { } while(0)
#define PSI_CALL_set_thread(A1) do { } while(0)
+#define PSI_CALL_set_thread_THD(A1,A2) do { } while(0)
#define PSI_CALL_set_thread_connect_attrs(A1,A2,A3) 0
#define PSI_CALL_set_thread_db(A1,A2) do { } while(0)
#define PSI_CALL_set_thread_id(A1,A2) do { } while(0)
+#define PSI_CALL_set_thread_os_id(A1) do { } while(0)
#define PSI_CALL_set_thread_info(A1, A2) do { } while(0)
#define PSI_CALL_set_thread_start_time(A1) do { } while(0)
-#define PSI_CALL_set_thread_user_host(A1, A2, A3, A4) do { } while(0)
+#define PSI_CALL_set_thread_account(A1, A2, A3, A4) do { } while(0)
#define PSI_CALL_spawn_thread(A1, A2, A3, A4, A5) 0
+#define PSI_CALL_set_connection_type(A) do { } while(0)
#endif
@@ -256,11 +283,19 @@ typedef struct st_mysql_cond mysql_cond_t;
#define mysql_mutex_setflags(M, F) \
safe_mutex_setflags(&(M)->m_mutex, (F))
-/** Wrappers for instrumented prlock objects. */
-
+/**
+ @def mysql_prlock_assert_write_owner(M)
+ Drop-in replacement
+ for @c rw_pr_lock_assert_write_owner.
+*/
#define mysql_prlock_assert_write_owner(M) \
rw_pr_lock_assert_write_owner(&(M)->m_prlock)
+/**
+ @def mysql_prlock_assert_not_write_owner(M)
+ Drop-in replacement
+ for @c rw_pr_lock_assert_not_write_owner.
+*/
#define mysql_prlock_assert_not_write_owner(M) \
rw_pr_lock_assert_not_write_owner(&(M)->m_prlock)
@@ -538,7 +573,7 @@ typedef struct st_mysql_cond mysql_cond_t;
Instrumented cond_wait.
@c mysql_cond_wait is a drop-in replacement for @c pthread_cond_wait.
*/
-#ifdef HAVE_PSI_COND_INTERFACE
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
#define mysql_cond_wait(C, M) \
inline_mysql_cond_wait(C, M, __FILE__, __LINE__)
#else
@@ -552,7 +587,7 @@ typedef struct st_mysql_cond mysql_cond_t;
@c mysql_cond_timedwait is a drop-in replacement
for @c pthread_cond_timedwait.
*/
-#ifdef HAVE_PSI_COND_INTERFACE
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
#define mysql_cond_timedwait(C, M, W) \
inline_mysql_cond_timedwait(C, M, W, __FILE__, __LINE__)
#else
@@ -618,6 +653,17 @@ typedef struct st_mysql_cond mysql_cond_t;
#define mysql_thread_set_psi_id(I) do {} while (0)
#endif
+/**
+ @def mysql_thread_set_psi_THD(T)
+ Set the thread sql session for the instrumentation.
+ @param I The thread identifier
+*/
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ #define mysql_thread_set_psi_THD(T) inline_mysql_thread_set_psi_THD(T)
+#else
+ #define mysql_thread_set_psi_THD(T) do {} while (0)
+#endif
+
static inline void inline_mysql_mutex_register(
#ifdef HAVE_PSI_MUTEX_INTERFACE
const char *category,
@@ -1154,7 +1200,7 @@ static inline int inline_mysql_cond_destroy(
static inline int inline_mysql_cond_wait(
mysql_cond_t *that,
mysql_mutex_t *mutex
-#ifdef HAVE_PSI_COND_INTERFACE
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
, const char *src_file, uint src_line
#endif
)
@@ -1191,7 +1237,7 @@ static inline int inline_mysql_cond_timedwait(
mysql_cond_t *that,
mysql_mutex_t *mutex,
const struct timespec *abstime
-#ifdef HAVE_PSI_COND_INTERFACE
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
, const char *src_file, uint src_line
#endif
)
@@ -1281,6 +1327,16 @@ static inline void inline_mysql_thread_set_psi_id(my_thread_id id)
struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
PSI_THREAD_CALL(set_thread_id)(psi, id);
}
+
+#ifdef __cplusplus
+class THD;
+static inline void inline_mysql_thread_set_psi_THD(THD *thd)
+{
+ struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
+ PSI_THREAD_CALL(set_thread_THD)(psi, thd);
+}
+#endif /* __cplusplus */
+
#endif
#endif /* DISABLE_MYSQL_THREAD_H */
diff --git a/include/mysql/psi/mysql_transaction.h b/include/mysql/psi/mysql_transaction.h
new file mode 100644
index 00000000000..6de794d95bb
--- /dev/null
+++ b/include/mysql/psi/mysql_transaction.h
@@ -0,0 +1,220 @@
+/* Copyright (c) 2013, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef MYSQL_TRANSACTION_H
+#define MYSQL_TRANSACTION_H
+
+/**
+ @file mysql/psi/mysql_transaction.h
+ Instrumentation helpers for transactions.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_TRANSACTION_CALL
+#define PSI_TRANSACTION_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Transaction_instrumentation Transaction Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_START_TRANSACTION(STATE, XID, TRXID, ISO, RO, AC) \
+ inline_mysql_start_transaction(STATE, XID, TRXID, ISO, RO, AC, __FILE__, __LINE__)
+#else
+ #define MYSQL_START_TRANSACTION(STATE, XID, TRXID, ISO, RO, AC) \
+ 0
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_GTID(LOCKER, P1, P2) \
+ inline_mysql_set_transaction_gtid(LOCKER, P1, P2)
+#else
+ #define MYSQL_SET_TRANSACTION_GTID(LOCKER, P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_XID(LOCKER, P1, P2) \
+ inline_mysql_set_transaction_xid(LOCKER, P1, P2)
+#else
+ #define MYSQL_SET_TRANSACTION_XID(LOCKER, P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_XA_STATE(LOCKER, P1) \
+ inline_mysql_set_transaction_xa_state(LOCKER, P1)
+#else
+ #define MYSQL_SET_TRANSACTION_XA_STATE(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_TRXID(LOCKER, P1) \
+ inline_mysql_set_transaction_trxid(LOCKER, P1)
+#else
+ #define MYSQL_SET_TRANSACTION_TRXID(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_INC_TRANSACTION_SAVEPOINTS(LOCKER, P1) \
+ inline_mysql_inc_transaction_savepoints(LOCKER, P1)
+#else
+ #define MYSQL_INC_TRANSACTION_SAVEPOINTS(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(LOCKER, P1) \
+ inline_mysql_inc_transaction_rollback_to_savepoint(LOCKER, P1)
+#else
+ #define MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(LOCKER, P1) \
+ inline_mysql_inc_transaction_release_savepoint(LOCKER, P1)
+#else
+ #define MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_ROLLBACK_TRANSACTION(LOCKER) \
+ inline_mysql_rollback_transaction(LOCKER)
+#else
+ #define MYSQL_ROLLBACK_TRANSACTION(LOCKER) \
+ do { } while(0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_COMMIT_TRANSACTION(LOCKER) \
+ inline_mysql_commit_transaction(LOCKER)
+#else
+ #define MYSQL_COMMIT_TRANSACTION(LOCKER) \
+ do { } while(0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+static inline struct PSI_transaction_locker *
+inline_mysql_start_transaction(PSI_transaction_locker_state *state,
+ const void *xid,
+ ulonglong trxid,
+ int isolation_level,
+ my_bool read_only,
+ my_bool autocommit,
+ const char *src_file, int src_line)
+{
+ PSI_transaction_locker *locker;
+ locker= PSI_TRANSACTION_CALL(get_thread_transaction_locker)(state,
+ xid, trxid,
+ isolation_level,
+ read_only,
+ autocommit);
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(start_transaction)(locker, src_file, src_line);
+ return locker;
+}
+
+static inline void
+inline_mysql_set_transaction_gtid(PSI_transaction_locker *locker,
+ const void *sid,
+ const void *gtid_spec)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_gtid)(locker, sid, gtid_spec);
+}
+
+static inline void
+inline_mysql_set_transaction_xid(PSI_transaction_locker *locker,
+ const void *xid,
+ int xa_state)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_xid)(locker, xid, xa_state);
+}
+
+static inline void
+inline_mysql_set_transaction_xa_state(PSI_transaction_locker *locker,
+ int xa_state)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_xa_state)(locker, xa_state);
+}
+
+static inline void
+inline_mysql_set_transaction_trxid(PSI_transaction_locker *locker,
+ const ulonglong *trxid)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_trxid)(locker, trxid);
+}
+
+static inline void
+inline_mysql_inc_transaction_savepoints(PSI_transaction_locker *locker,
+ ulong count)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(inc_transaction_savepoints)(locker, count);
+}
+
+static inline void
+inline_mysql_inc_transaction_rollback_to_savepoint(PSI_transaction_locker *locker,
+ ulong count)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(inc_transaction_rollback_to_savepoint)(locker, count);
+}
+
+static inline void
+inline_mysql_inc_transaction_release_savepoint(PSI_transaction_locker *locker,
+ ulong count)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(inc_transaction_release_savepoint)(locker, count);
+}
+
+static inline void
+inline_mysql_rollback_transaction(struct PSI_transaction_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(end_transaction)(locker, false);
+}
+
+static inline void
+inline_mysql_commit_transaction(struct PSI_transaction_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(end_transaction)(locker, true);
+}
+#endif
+
+/** @} (end of group Transaction_instrumentation) */
+
+#endif
+
diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h
index 238471c7af1..958a086f05a 100644
--- a/include/mysql/psi/psi.h
+++ b/include/mysql/psi/psi.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2017, 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, version 2.0,
@@ -23,19 +23,6 @@
#ifndef MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H
#define MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H
-#ifdef EMBEDDED_LIBRARY
-#define DISABLE_PSI_MUTEX
-#define DISABLE_PSI_RWLOCK
-#define DISABLE_PSI_COND
-#define DISABLE_PSI_FILE
-#define DISABLE_PSI_TABLE
-#define DISABLE_PSI_SOCKET
-#define DISABLE_PSI_STAGE
-#define DISABLE_PSI_STATEMENT
-#define DISABLE_PSI_IDLE
-#define DISABLE_PSI_STATEMENT_DIGEST
-#endif /* EMBEDDED_LIBRARY */
-
#ifndef MY_GLOBAL_INCLUDED
/*
Make sure a .c or .cc file contains an include to my_global.h first.
@@ -61,13 +48,58 @@
#define psi_unlikely(A) likely(A)
#endif
+#include "psi_base.h"
+#include "psi_memory.h"
+
+#ifdef _WIN32
+typedef struct thread_attr pthread_attr_t;
+typedef DWORD pthread_t;
+typedef DWORD pthread_key_t;
+#endif
+
+/*
+ MAINTAINER:
+ The following pattern:
+ typedef struct XYZ XYZ;
+ is not needed in C++, but required for C.
+*/
C_MODE_START
+/** @sa MDL_key. */
+struct MDL_key;
+typedef struct MDL_key MDL_key;
+
+/** @sa enum_mdl_type. */
+typedef int opaque_mdl_type;
+
+/** @sa enum_mdl_duration. */
+typedef int opaque_mdl_duration;
+
+/** @sa MDL_wait::enum_wait_status. */
+typedef int opaque_mdl_status;
+
+/** @sa enum_vio_type. */
+typedef int opaque_vio_type;
+
struct TABLE_SHARE;
struct sql_digest_storage;
+#ifdef __cplusplus
+ class THD;
+#else
+ /*
+ Phony declaration when compiling C code.
+ This is ok, because the C code will never have a THD anyway.
+ */
+ struct opaque_THD
+ {
+ int dummy;
+ };
+ typedef struct opaque_THD THD;
+#endif
+
/**
@file mysql/psi/psi.h
Performance schema instrumentation interface.
@@ -134,6 +166,13 @@ struct PSI_socket;
typedef struct PSI_socket PSI_socket;
/**
+ Interface for an instrumented prepared statement.
+ This is an opaque structure.
+*/
+struct PSI_prepared_stmt;
+typedef struct PSI_prepared_stmt PSI_prepared_stmt;
+
+/**
Interface for an instrumented table operation.
This is an opaque structure.
*/
@@ -148,6 +187,13 @@ struct PSI_statement_locker;
typedef struct PSI_statement_locker PSI_statement_locker;
/**
+ Interface for an instrumented transaction.
+ This is an opaque structure.
+*/
+struct PSI_transaction_locker;
+typedef struct PSI_transaction_locker PSI_transaction_locker;
+
+/**
Interface for an instrumented idle operation.
This is an opaque structure.
*/
@@ -161,6 +207,90 @@ typedef struct PSI_idle_locker PSI_idle_locker;
struct PSI_digest_locker;
typedef struct PSI_digest_locker PSI_digest_locker;
+/**
+ Interface for an instrumented stored procedure share.
+ This is an opaque structure.
+*/
+struct PSI_sp_share;
+typedef struct PSI_sp_share PSI_sp_share;
+
+/**
+ Interface for an instrumented stored program.
+ This is an opaque structure.
+*/
+struct PSI_sp_locker;
+typedef struct PSI_sp_locker PSI_sp_locker;
+
+/**
+ Interface for an instrumented metadata lock.
+ This is an opaque structure.
+*/
+struct PSI_metadata_lock;
+typedef struct PSI_metadata_lock PSI_metadata_lock;
+
+/**
+ Interface for an instrumented stage progress.
+ This is a public structure, for efficiency.
+*/
+struct PSI_stage_progress
+{
+ ulonglong m_work_completed;
+ ulonglong m_work_estimated;
+};
+typedef struct PSI_stage_progress PSI_stage_progress;
+
+/** IO operation performed on an instrumented table. */
+enum PSI_table_io_operation
+{
+ /** Row fetch. */
+ PSI_TABLE_FETCH_ROW= 0,
+ /** Row write. */
+ PSI_TABLE_WRITE_ROW= 1,
+ /** Row update. */
+ PSI_TABLE_UPDATE_ROW= 2,
+ /** Row delete. */
+ PSI_TABLE_DELETE_ROW= 3
+};
+typedef enum PSI_table_io_operation PSI_table_io_operation;
+
+/**
+ State data storage for @c start_table_io_wait_v1_t,
+ @c start_table_lock_wait_v1_t.
+ This structure provide temporary storage to a table locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_table_io_wait_v1_t
+ @sa start_table_lock_wait_v1_t
+*/
+struct PSI_table_locker_state
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current io operation. */
+ enum PSI_table_io_operation m_io_operation;
+ /** Current table handle. */
+ struct PSI_table *m_table;
+ /** Current table share. */
+ struct PSI_table_share *m_table_share;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+ /**
+ Implementation specific.
+ For table io, the table io index.
+ For table lock, the lock type.
+ */
+ uint m_index;
+};
+typedef struct PSI_table_locker_state PSI_table_locker_state;
+
/** Entry point for the performance schema interface. */
struct PSI_bootstrap
{
@@ -183,14 +313,84 @@ typedef struct PSI_bootstrap PSI_bootstrap;
#ifdef HAVE_PSI_INTERFACE
+#ifdef DISABLE_ALL_PSI
+
+#ifndef DISABLE_PSI_THREAD
+#define DISABLE_PSI_THREAD
+#endif
+
+#ifndef DISABLE_PSI_MUTEX
+#define DISABLE_PSI_MUTEX
+#endif
+
+#ifndef DISABLE_PSI_RWLOCK
+#define DISABLE_PSI_RWLOCK
+#endif
+
+#ifndef DISABLE_PSI_COND
+#define DISABLE_PSI_COND
+#endif
+
+#ifndef DISABLE_PSI_FILE
+#define DISABLE_PSI_FILE
+#endif
+
+#ifndef DISABLE_PSI_TABLE
+#define DISABLE_PSI_TABLE
+#endif
+
+#ifndef DISABLE_PSI_SOCKET
+#define DISABLE_PSI_SOCKET
+#endif
+
+#ifndef DISABLE_PSI_STAGE
+#define DISABLE_PSI_STAGE
+#endif
+
+#ifndef DISABLE_PSI_STATEMENT
+#define DISABLE_PSI_STATEMENT
+#endif
+
+#ifndef DISABLE_PSI_SP
+#define DISABLE_PSI_SP
+#endif
+
+#ifndef DISABLE_PSI_IDLE
+#define DISABLE_PSI_IDLE
+#endif
+
+#ifndef DISABLE_PSI_STATEMENT_DIGEST
+#define DISABLE_PSI_STATEMENT_DIGEST
+#endif
+
+#ifndef DISABLE_PSI_METADATA
+#define DISABLE_PSI_METADATA
+#endif
+
+#ifndef DISABLE_PSI_MEMORY
+#define DISABLE_PSI_MEMORY
+#endif
+
+#ifndef DISABLE_PSI_TRANSACTION
+#define DISABLE_PSI_TRANSACTION
+#endif
+
+#ifndef DISABLE_PSI_SP
+#define DISABLE_PSI_SP
+#endif
+
+#ifndef DISABLE_PSI_PS
+#define DISABLE_PSI_PS
+#endif
+
+#endif
+
/**
@def DISABLE_PSI_MUTEX
Compiling option to disable the mutex instrumentation.
This option is mostly intended to be used during development,
when doing special builds with only a subset of the performance schema instrumentation,
for code analysis / profiling / performance tuning of a specific instrumentation alone.
- For this reason, DISABLE_PSI_MUTEX is not advertised in the cmake general options.
- To disable mutexes, add -DDISABLE_PSI_MUTEX to CFLAGS.
@sa DISABLE_PSI_RWLOCK
@sa DISABLE_PSI_COND
@sa DISABLE_PSI_FILE
@@ -198,8 +398,13 @@ typedef struct PSI_bootstrap PSI_bootstrap;
@sa DISABLE_PSI_TABLE
@sa DISABLE_PSI_STAGE
@sa DISABLE_PSI_STATEMENT
+ @sa DISABLE_PSI_SP
+ @sa DISABLE_PSI_STATEMENT_DIGEST
@sa DISABLE_PSI_SOCKET
+ @sa DISABLE_PSI_MEMORY
@sa DISABLE_PSI_IDLE
+ @sa DISABLE_PSI_METADATA
+ @sa DISABLE PSI_TRANSACTION
*/
#ifndef DISABLE_PSI_MUTEX
@@ -276,6 +481,26 @@ typedef struct PSI_bootstrap PSI_bootstrap;
#endif
/**
+ @def DISABLE_PSI_SP
+ Compiling option to disable the stored program instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+#ifndef DISABLE_PSI_SP
+#define HAVE_PSI_SP_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_PS
+ Compiling option to disable the prepared statement instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+#ifndef DISABLE_PSI_STATEMENT
+#ifndef DISABLE_PSI_PS
+#define HAVE_PSI_PS_INTERFACE
+#endif
+#endif
+
+/**
@def DISABLE_PSI_STATEMENT_DIGEST
Compiling option to disable the statement digest instrumentation.
*/
@@ -287,6 +512,16 @@ typedef struct PSI_bootstrap PSI_bootstrap;
#endif
/**
+ @def DISABLE_PSI_TRANSACTION
+ Compiling option to disable the transaction instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_TRANSACTION
+#define HAVE_PSI_TRANSACTION_INTERFACE
+#endif
+
+/**
@def DISABLE_PSI_SOCKET
Compiling option to disable the statement instrumentation.
@sa DISABLE_PSI_MUTEX
@@ -297,6 +532,16 @@ typedef struct PSI_bootstrap PSI_bootstrap;
#endif
/**
+ @def DISABLE_PSI_MEMORY
+ Compiling option to disable the memory instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_MEMORY
+#define HAVE_PSI_MEMORY_INTERFACE
+#endif
+
+/**
@def DISABLE_PSI_IDLE
Compiling option to disable the idle instrumentation.
@sa DISABLE_PSI_MUTEX
@@ -307,6 +552,16 @@ typedef struct PSI_bootstrap PSI_bootstrap;
#endif
/**
+ @def DISABLE_PSI_METADATA
+ Compiling option to disable the metadata instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_METADATA
+#define HAVE_PSI_METADATA_INTERFACE
+#endif
+
+/**
@def PSI_VERSION_1
Performance Schema Interface number for version 1.
This version is supported.
@@ -368,6 +623,13 @@ typedef struct PSI_file_locker PSI_file_locker;
struct PSI_socket_locker;
typedef struct PSI_socket_locker PSI_socket_locker;
+/**
+ Interface for an instrumented MDL operation.
+ This is an opaque structure.
+*/
+struct PSI_metadata_locker;
+typedef struct PSI_metadata_locker PSI_metadata_locker;
+
/** Operation performed on an instrumented mutex. */
enum PSI_mutex_operation
{
@@ -378,7 +640,12 @@ enum PSI_mutex_operation
};
typedef enum PSI_mutex_operation PSI_mutex_operation;
-/** Operation performed on an instrumented rwlock. */
+/**
+ Operation performed on an instrumented rwlock.
+ For basic READ / WRITE lock,
+ operations are "READ" or "WRITE".
+ For SX-locks, operations are "SHARED", "SHARED-EXCLUSIVE" or "EXCLUSIVE".
+*/
enum PSI_rwlock_operation
{
/** Read lock. */
@@ -388,7 +655,21 @@ enum PSI_rwlock_operation
/** Read lock attempt. */
PSI_RWLOCK_TRYREADLOCK= 2,
/** Write lock attempt. */
- PSI_RWLOCK_TRYWRITELOCK= 3
+ PSI_RWLOCK_TRYWRITELOCK= 3,
+
+ /** Shared lock. */
+ PSI_RWLOCK_SHAREDLOCK= 4,
+ /** Shared Exclusive lock. */
+ PSI_RWLOCK_SHAREDEXCLUSIVELOCK= 5,
+ /** Exclusive lock. */
+ PSI_RWLOCK_EXCLUSIVELOCK= 6,
+ /** Shared lock attempt. */
+ PSI_RWLOCK_TRYSHAREDLOCK= 7,
+ /** Shared Exclusive lock attempt. */
+ PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK= 8,
+ /** Exclusive lock attempt. */
+ PSI_RWLOCK_TRYEXCLUSIVELOCK= 9
+
};
typedef enum PSI_rwlock_operation PSI_rwlock_operation;
@@ -448,20 +729,6 @@ enum PSI_file_operation
};
typedef enum PSI_file_operation PSI_file_operation;
-/** IO operation performed on an instrumented table. */
-enum PSI_table_io_operation
-{
- /** Row fetch. */
- PSI_TABLE_FETCH_ROW= 0,
- /** Row write. */
- PSI_TABLE_WRITE_ROW= 1,
- /** Row update. */
- PSI_TABLE_UPDATE_ROW= 2,
- /** Row delete. */
- PSI_TABLE_DELETE_ROW= 3
-};
-typedef enum PSI_table_io_operation PSI_table_io_operation;
-
/** Lock operation performed on an instrumented table. */
enum PSI_table_lock_operation
{
@@ -518,6 +785,7 @@ enum PSI_socket_operation
};
typedef enum PSI_socket_operation PSI_socket_operation;
+#endif
/**
Instrumented mutex key.
To instrument a mutex, a mutex key must be obtained using @c register_mutex.
@@ -577,44 +845,6 @@ typedef unsigned int PSI_statement_key;
*/
typedef unsigned int PSI_socket_key;
-/**
- @def USE_PSI_1
- Define USE_PSI_1 to use the interface version 1.
-*/
-
-/**
- @def USE_PSI_2
- Define USE_PSI_2 to use the interface version 2.
-*/
-
-/**
- @def HAVE_PSI_1
- Define HAVE_PSI_1 if the interface version 1 needs to be compiled in.
-*/
-
-/**
- @def HAVE_PSI_2
- Define HAVE_PSI_2 if the interface version 2 needs to be compiled in.
-*/
-
-/**
- Global flag.
- This flag indicate that an instrumentation point is a global variable,
- or a singleton.
-*/
-#define PSI_FLAG_GLOBAL (1 << 0)
-
-/**
- Global flag.
- This flag indicate that an instrumentation point is a general placeholder,
- that can mutate into a more specific instrumentation point.
-*/
-#define PSI_FLAG_MUTABLE (1 << 1)
-
-#ifdef USE_PSI_1
-#define HAVE_PSI_1
-#endif
-
#ifdef HAVE_PSI_1
/**
@@ -644,6 +874,7 @@ struct PSI_mutex_info_v1
*/
int m_flags;
};
+typedef struct PSI_mutex_info_v1 PSI_mutex_info_v1;
/**
Rwlock information.
@@ -666,6 +897,7 @@ struct PSI_rwlock_info_v1
*/
int m_flags;
};
+typedef struct PSI_rwlock_info_v1 PSI_rwlock_info_v1;
/**
Condition information.
@@ -688,6 +920,7 @@ struct PSI_cond_info_v1
*/
int m_flags;
};
+typedef struct PSI_cond_info_v1 PSI_cond_info_v1;
/**
Thread instrument information.
@@ -710,6 +943,7 @@ struct PSI_thread_info_v1
*/
int m_flags;
};
+typedef struct PSI_thread_info_v1 PSI_thread_info_v1;
/**
File instrument information.
@@ -732,6 +966,7 @@ struct PSI_file_info_v1
*/
int m_flags;
};
+typedef struct PSI_file_info_v1 PSI_file_info_v1;
/**
Stage instrument information.
@@ -747,6 +982,7 @@ struct PSI_stage_info_v1
/** The flags of the stage instrument to register. */
int m_flags;
};
+typedef struct PSI_stage_info_v1 PSI_stage_info_v1;
/**
Statement instrument information.
@@ -762,6 +998,7 @@ struct PSI_statement_info_v1
/** The flags of the statement instrument to register. */
int m_flags;
};
+typedef struct PSI_statement_info_v1 PSI_statement_info_v1;
/**
Socket instrument information.
@@ -784,6 +1021,7 @@ struct PSI_socket_info_v1
*/
int m_flags;
};
+typedef struct PSI_socket_info_v1 PSI_socket_info_v1;
/**
State data storage for @c start_idle_wait_v1_t.
@@ -807,6 +1045,7 @@ struct PSI_idle_locker_state_v1
/** Internal data. */
void *m_wait;
};
+typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state_v1;
/**
State data storage for @c start_mutex_wait_v1_t.
@@ -834,6 +1073,7 @@ struct PSI_mutex_locker_state_v1
/** Internal data. */
void *m_wait;
};
+typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state_v1;
/**
State data storage for @c start_rwlock_rdwait_v1_t, @c start_rwlock_wrwait_v1_t.
@@ -862,6 +1102,7 @@ struct PSI_rwlock_locker_state_v1
/** Internal data. */
void *m_wait;
};
+typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state_v1;
/**
State data storage for @c start_cond_wait_v1_t.
@@ -891,6 +1132,7 @@ struct PSI_cond_locker_state_v1
/** Internal data. */
void *m_wait;
};
+typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state_v1;
/**
State data storage for @c get_thread_file_name_locker_v1_t.
@@ -926,28 +1168,23 @@ struct PSI_file_locker_state_v1
/** Internal data. */
void *m_wait;
};
+typedef struct PSI_file_locker_state_v1 PSI_file_locker_state_v1;
/**
- State data storage for @c start_table_io_wait_v1_t,
- @c start_table_lock_wait_v1_t.
- This structure provide temporary storage to a table locker.
+ State data storage for @c start_metadata_wait_v1_t.
+ This structure provide temporary storage to a metadata locker.
The content of this structure is considered opaque,
the fields are only hints of what an implementation
of the psi interface can use.
This memory is provided by the instrumented code for performance reasons.
- @sa start_table_io_wait_v1_t
- @sa start_table_lock_wait_v1_t
+ @sa start_metadata_wait_v1_t
*/
-struct PSI_table_locker_state_v1
+struct PSI_metadata_locker_state_v1
{
/** Internal state. */
uint m_flags;
- /** Current io operation. */
- enum PSI_table_io_operation m_io_operation;
- /** Current table handle. */
- struct PSI_table *m_table;
- /** Current table share. */
- struct PSI_table_share *m_table_share;
+ /** Current metadata lock. */
+ struct PSI_metadata_lock *m_metadata_lock;
/** Current thread. */
struct PSI_thread *m_thread;
/** Timer start. */
@@ -956,13 +1193,8 @@ struct PSI_table_locker_state_v1
ulonglong (*m_timer)(void);
/** Internal data. */
void *m_wait;
- /**
- Implementation specific.
- For table io, the table io index.
- For table lock, the lock type.
- */
- uint m_index;
};
+typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state_v1;
/* Duplicate of NAME_LEN, to avoid dependency on mysql_com.h */
#define PSI_SCHEMA_NAME_LEN (64 * 3)
@@ -981,6 +1213,8 @@ struct PSI_statement_locker_state_v1
{
/** Discarded flag. */
my_bool m_discarded;
+ /** In prepare flag. */
+ my_bool m_in_prepare;
/** Metric, no index used flag. */
uchar m_no_index_used;
/** Metric, no good index used flag. */
@@ -1033,7 +1267,50 @@ struct PSI_statement_locker_state_v1
uint m_schema_name_length;
/** Statement character set number. */
uint m_cs_number;
+ PSI_sp_share *m_parent_sp_share;
+ PSI_prepared_stmt *m_parent_prepared_stmt;
};
+typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state_v1;
+
+/**
+ State data storage for @c get_thread_transaction_locker_v1_t,
+ @c get_thread_transaction_locker_v1_t.
+ This structure provide temporary storage to a transaction locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa get_thread_transaction_locker_v1_t
+*/
+struct PSI_transaction_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Instrumentation class. */
+ void *m_class;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_transaction;
+ /** True if read-only transaction, false if read-write. */
+ my_bool m_read_only;
+ /** True if transaction is autocommit. */
+ my_bool m_autocommit;
+ /** Number of statements. */
+ ulong m_statement_count;
+ /** Total number of savepoints. */
+ ulong m_savepoint_count;
+ /** Number of rollback_to_savepoint. */
+ ulong m_rollback_to_savepoint_count;
+ /** Number of release_savepoint. */
+ ulong m_release_savepoint_count;
+};
+
+typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state_v1;
/**
State data storage for @c start_socket_wait_v1_t.
@@ -1067,6 +1344,22 @@ struct PSI_socket_locker_state_v1
/** Internal data. */
void *m_wait;
};
+typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state_v1;
+
+struct PSI_sp_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Stored Procedure share. */
+ PSI_sp_share* m_sp_share;
+};
+typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state_v1;
/* Using typedef to make reuse between PSI_v1 and PSI_v2 easier later. */
@@ -1263,7 +1556,8 @@ typedef PSI_table* (*rebind_table_v1_t)
Note that the table handle is invalid after this call.
@param table the table handle to close
*/
-typedef void (*close_table_v1_t)(struct PSI_table *table);
+typedef void (*close_table_v1_t)(struct TABLE_SHARE *server_share,
+ struct PSI_table *table);
/**
Create a file instrumentation for a created file.
@@ -1300,6 +1594,14 @@ typedef struct PSI_thread* (*new_thread_v1_t)
(PSI_thread_key key, const void *identity, ulonglong thread_id);
/**
+ Assign a THD to an instrumented thread.
+ @param thread the instrumented thread
+ @param THD the sql layer THD to assign
+*/
+typedef void (*set_thread_THD_v1_t)(struct PSI_thread *thread,
+ THD *thd);
+
+/**
Assign an id to an instrumented thread.
@param thread the instrumented thread
@param id the id to assign
@@ -1308,6 +1610,13 @@ typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread,
ulonglong id);
/**
+ Assign the current operating system thread id to an instrumented thread.
+ The operating system task id is obtained from @c gettid()
+ @param thread the instrumented thread
+*/
+typedef void (*set_thread_os_id_v1_t)(struct PSI_thread *thread);
+
+/**
Get the instrumentation for the running thread.
For this function to return a result,
the thread instrumentation must have been attached to the
@@ -1330,8 +1639,8 @@ typedef void (*set_thread_user_v1_t)(const char *user, int user_len);
@param host the host name
@param host_len the host name length
*/
-typedef void (*set_thread_user_host_v1_t)(const char *user, int user_len,
- const char *host, int host_len);
+typedef void (*set_thread_account_v1_t)(const char *user, int user_len,
+ const char *host, int host_len);
/**
Assign a current database to the instrumented thread.
@@ -1347,6 +1656,13 @@ typedef void (*set_thread_db_v1_t)(const char* db, int db_len);
typedef void (*set_thread_command_v1_t)(int command);
/**
+ Assign a connection type to the instrumented thread.
+ @param conn_type the connection type
+*/
+typedef void (*set_connection_type_v1_t)(opaque_vio_type conn_type);
+
+
+/**
Assign a start time to the instrumented thread.
@param start_time the thread start time
*/
@@ -1446,9 +1762,20 @@ typedef void (*signal_cond_v1_t)
typedef void (*broadcast_cond_v1_t)
(struct PSI_cond *cond);
+/**
+ Record an idle instrumentation wait start event.
+ @param state data storage for the locker
+ @param file the source file name
+ @param line the source line number
+ @return an idle locker, or NULL
+*/
typedef struct PSI_idle_locker* (*start_idle_wait_v1_t)
(struct PSI_idle_locker_state_v1 *state, const char *src_file, uint src_line);
+/**
+ Record an idle instrumentation wait end event.
+ @param locker a thread locker for the running thread
+*/
typedef void (*end_idle_wait_v1_t)
(struct PSI_idle_locker *locker);
@@ -1540,7 +1867,7 @@ typedef void (*end_cond_wait_v1_t)
@param line the source line number
*/
typedef struct PSI_table_locker* (*start_table_io_wait_v1_t)
- (struct PSI_table_locker_state_v1 *state,
+ (struct PSI_table_locker_state *state,
struct PSI_table *table,
enum PSI_table_io_operation op,
uint index,
@@ -1549,8 +1876,11 @@ typedef struct PSI_table_locker* (*start_table_io_wait_v1_t)
/**
Record a table instrumentation io wait end event.
@param locker a table locker for the running thread
+ @param numrows the number of rows involved in io
*/
-typedef void (*end_table_io_wait_v1_t)(struct PSI_table_locker *locker);
+typedef void (*end_table_io_wait_v1_t)
+ (struct PSI_table_locker *locker,
+ ulonglong numrows);
/**
Record a table instrumentation lock wait start event.
@@ -1559,7 +1889,7 @@ typedef void (*end_table_io_wait_v1_t)(struct PSI_table_locker *locker);
@param line the source line number
*/
typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t)
- (struct PSI_table_locker_state_v1 *state,
+ (struct PSI_table_locker_state *state,
struct PSI_table *table,
enum PSI_table_lock_operation op,
ulong flags,
@@ -1571,6 +1901,8 @@ typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t)
*/
typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker);
+typedef void (*unlock_table_v1_t)(struct PSI_table *table);
+
/**
Start a file instrumentation open operation.
@param locker the file locker
@@ -1599,6 +1931,15 @@ typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t)
(struct PSI_file_locker *locker, File file);
/**
+ End a file instrumentation open operation, for non stream temporary files.
+ @param locker the file locker.
+ @param file the file number assigned by open() or create() for this file.
+ @param filename the file name generated during temporary file creation.
+*/
+typedef void (*end_temp_file_open_wait_and_bind_to_descriptor_v1_t)
+ (struct PSI_file_locker *locker, File file, const char *filename);
+
+/**
Record a file instrumentation start event.
@param locker a file locker for the running thread
@param op file operation to be performed
@@ -1645,14 +1986,28 @@ typedef void (*end_file_close_wait_v1_t)
(struct PSI_file_locker *locker, int rc);
/**
+ Rename a file instrumentation close operation.
+ @param locker the file locker.
+ @param old_name name of the file to be renamed.
+ @param new_name name of the file after rename.
+ @param rc the rename operation return code (0 for success).
+*/
+typedef void (*end_file_rename_wait_v1_t)
+ (struct PSI_file_locker *locker, const char *old_name,
+ const char *new_name, int rc);
+
+/**
Start a new stage, and implicitly end the previous stage.
@param key the key of the new stage
@param src_file the source file name
@param src_line the source line number
+ @return the new stage progress
*/
-typedef void (*start_stage_v1_t)
+typedef PSI_stage_progress* (*start_stage_v1_t)
(PSI_stage_key key, const char *src_file, int src_line);
+typedef PSI_stage_progress* (*get_current_stage_progress_v1_t)(void);
+
/** End the current stage. */
typedef void (*end_stage_v1_t) (void);
@@ -1665,7 +2020,7 @@ typedef void (*end_stage_v1_t) (void);
*/
typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t)
(struct PSI_statement_locker_state_v1 *state,
- PSI_statement_key key, const void *charset);
+ PSI_statement_key key, const void *charset, PSI_sp_share *sp_share);
/**
Refine a statement locker to a more specific key.
@@ -1839,6 +2194,102 @@ typedef void (*end_statement_v1_t)
(struct PSI_statement_locker *locker, void *stmt_da);
/**
+ Get a transaction instrumentation locker.
+ @param state data storage for the locker
+ @param xid the xid for this transaction
+ @param trxid the InnoDB transaction id
+ @param iso_level isolation level for this transaction
+ @param read_only true if transaction access mode is read-only
+ @param autocommit true if transaction is autocommit
+ @return a transaction locker, or NULL
+*/
+typedef struct PSI_transaction_locker* (*get_thread_transaction_locker_v1_t)
+ (struct PSI_transaction_locker_state_v1 *state, const void *xid,
+ ulonglong trxid, int isolation_level, my_bool read_only,
+ my_bool autocommit);
+
+/**
+ Start a new transaction event.
+ @param locker the transaction locker for this event
+ @param src_file source file name
+ @param src_line source line number
+*/
+typedef void (*start_transaction_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const char *src_file, uint src_line);
+
+/**
+ Set the transaction xid.
+ @param locker the transaction locker for this event
+ @param xid the id of the XA transaction
+ #param xa_state is the state of the XA transaction
+*/
+typedef void (*set_transaction_xid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const void *xid, int xa_state);
+
+/**
+ Set the state of the XA transaction.
+ @param locker the transaction locker for this event
+ @param xa_state the new state of the xa transaction
+*/
+typedef void (*set_transaction_xa_state_v1_t)
+ (struct PSI_transaction_locker *locker,
+ int xa_state);
+
+/**
+ Set the transaction gtid.
+ @param locker the transaction locker for this event
+ @param sid the source id for the transaction, mapped from sidno
+ @param gtid_spec the gtid specifier for the transaction
+*/
+typedef void (*set_transaction_gtid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const void *sid, const void *gtid_spec);
+
+/**
+ Set the transaction trx_id.
+ @param locker the transaction locker for this event
+ @param trxid the storage engine transaction ID
+*/
+typedef void (*set_transaction_trxid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const ulonglong *trxid);
+
+/**
+ Increment a transaction event savepoint count.
+ @param locker the transaction locker
+ @param count the increment value
+*/
+typedef void (*inc_transaction_savepoints_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+
+/**
+ Increment a transaction event rollback to savepoint count.
+ @param locker the transaction locker
+ @param count the increment value
+*/
+typedef void (*inc_transaction_rollback_to_savepoint_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+
+/**
+ Increment a transaction event release savepoint count.
+ @param locker the transaction locker
+ @param count the increment value
+*/
+typedef void (*inc_transaction_release_savepoint_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+
+/**
+ Commit or rollback the transaction.
+ @param locker the transaction locker for this event
+ @param commit true if transaction was committed, false if rolled back
+*/
+typedef void (*end_transaction_v1_t)
+ (struct PSI_transaction_locker *locker,
+ my_bool commit);
+
+/**
Record a socket instrumentation start event.
@param locker a socket locker for the running thread
@param op socket operation to be performed
@@ -1894,23 +2345,119 @@ typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket,
typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket);
/**
+ Get a prepare statement.
+ @param locker a statement locker for the running thread.
+*/
+typedef PSI_prepared_stmt* (*create_prepared_stmt_v1_t)
+ (void *identity, uint stmt_id, PSI_statement_locker *locker,
+ const char *stmt_name, size_t stmt_name_length);
+
+/**
+ destroy a prepare statement.
+ @param prepared_stmt prepared statement.
+*/
+typedef void (*destroy_prepared_stmt_v1_t)
+ (PSI_prepared_stmt *prepared_stmt);
+
+/**
+ repreare a prepare statement.
+ @param prepared_stmt prepared statement.
+*/
+typedef void (*reprepare_prepared_stmt_v1_t)
+ (PSI_prepared_stmt *prepared_stmt);
+
+/**
+ Record a prepare statement instrumentation execute event.
+ @param locker a statement locker for the running thread.
+ @param prepared_stmt prepared statement.
+*/
+typedef void (*execute_prepared_stmt_v1_t)
+ (PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt);
+
+/**
+ Set the statement text for a prepared statment event.
+ @param prepared_stmt prepared statement.
+ @param text the prepared statement text
+ @param text_len the prepared statement text length
+*/
+typedef void (*set_prepared_stmt_text_v1_t)(PSI_prepared_stmt *prepared_stmt,
+ const char *text,
+ uint text_len);
+/**
Get a digest locker for the current statement.
@param locker a statement locker for the running thread
*/
typedef struct PSI_digest_locker * (*digest_start_v1_t)
(struct PSI_statement_locker *locker);
+/**
+ Add a token to the current digest instrumentation.
+ @param locker a digest locker for the current statement
+ @param token the lexical token to add
+ @param yylval the lexical token attributes
+*/
typedef void (*digest_end_v1_t)
(struct PSI_digest_locker *locker, const struct sql_digest_storage *digest);
+typedef PSI_sp_locker* (*start_sp_v1_t)
+ (struct PSI_sp_locker_state_v1 *state, struct PSI_sp_share* sp_share);
+
+typedef void (*end_sp_v1_t)
+ (struct PSI_sp_locker *locker);
+
+typedef void (*drop_sp_v1_t)
+ (uint object_type,
+ const char *schema_name, uint schema_name_length,
+ const char *object_name, uint object_name_length);
+
+/**
+ Acquire a sp share instrumentation.
+ @param type of stored program
+ @param schema name of stored program
+ @param name of stored program
+ @return a stored program share instrumentation, or NULL
+*/
+typedef struct PSI_sp_share* (*get_sp_share_v1_t)
+ (uint object_type,
+ const char *schema_name, uint schema_name_length,
+ const char *object_name, uint object_name_length);
+
+/**
+ Release a stored program share.
+ @param info the stored program share to release
+*/
+typedef void (*release_sp_share_v1_t)(struct PSI_sp_share *share);
+
+typedef PSI_metadata_lock* (*create_metadata_lock_v1_t)
+ (void *identity,
+ const MDL_key *key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line);
+
+typedef void (*set_metadata_lock_status_v1_t)(PSI_metadata_lock *lock,
+ opaque_mdl_status mdl_status);
+
+typedef void (*destroy_metadata_lock_v1_t)(PSI_metadata_lock *lock);
+
+typedef struct PSI_metadata_locker* (*start_metadata_wait_v1_t)
+ (struct PSI_metadata_locker_state_v1 *state,
+ struct PSI_metadata_lock *mdl,
+ const char *src_file, uint src_line);
+
+typedef void (*end_metadata_wait_v1_t)
+ (struct PSI_metadata_locker *locker, int rc);
+
/**
Stores an array of connection attributes
@param buffer char array of length encoded connection attributes
in network format
- @param length legnth of the data in buffer
- @param from_cs charset in which @buffer is encodded
+ @param length length of the data in buffer
+ @param from_cs charset in which @c buffer is encoded
@return state
- @retval non-0 attributes truncated
+ @retval non_0 attributes truncated
@retval 0 stored the attribute
*/
typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length,
@@ -1954,6 +2501,7 @@ struct PSI_v1
init_socket_v1_t init_socket;
/** @sa destroy_socket_v1_t. */
destroy_socket_v1_t destroy_socket;
+
/** @sa get_table_share_v1_t. */
get_table_share_v1_t get_table_share;
/** @sa release_table_share_v1_t. */
@@ -1976,16 +2524,22 @@ struct PSI_v1
new_thread_v1_t new_thread;
/** @sa set_thread_id_v1_t. */
set_thread_id_v1_t set_thread_id;
+ /** @sa set_thread_THD_v1_t. */
+ set_thread_THD_v1_t set_thread_THD;
+ /** @sa set_thread_os_id_v1_t. */
+ set_thread_os_id_v1_t set_thread_os_id;
/** @sa get_thread_v1_t. */
get_thread_v1_t get_thread;
/** @sa set_thread_user_v1_t. */
set_thread_user_v1_t set_thread_user;
- /** @sa set_thread_user_host_v1_t. */
- set_thread_user_host_v1_t set_thread_user_host;
+ /** @sa set_thread_account_v1_t. */
+ set_thread_account_v1_t set_thread_account;
/** @sa set_thread_db_v1_t. */
set_thread_db_v1_t set_thread_db;
/** @sa set_thread_command_v1_t. */
set_thread_command_v1_t set_thread_command;
+ /** @sa set_connection_type_v1_t. */
+ set_connection_type_v1_t set_connection_type;
/** @sa set_thread_start_time_v1_t. */
set_thread_start_time_v1_t set_thread_start_time;
/** @sa set_thread_state_v1_t. */
@@ -2047,6 +2601,9 @@ struct PSI_v1
/** @sa end_file_open_wait_and_bind_to_descriptor_v1_t. */
end_file_open_wait_and_bind_to_descriptor_v1_t
end_file_open_wait_and_bind_to_descriptor;
+ /** @sa end_temp_file_open_wait_and_bind_to_descriptor_v1_t. */
+ end_temp_file_open_wait_and_bind_to_descriptor_v1_t
+ end_temp_file_open_wait_and_bind_to_descriptor;
/** @sa start_file_wait_v1_t. */
start_file_wait_v1_t start_file_wait;
/** @sa end_file_wait_v1_t. */
@@ -2055,8 +2612,12 @@ struct PSI_v1
start_file_close_wait_v1_t start_file_close_wait;
/** @sa end_file_close_wait_v1_t. */
end_file_close_wait_v1_t end_file_close_wait;
+ /** @sa rename_file_close_wait_v1_t. */
+ end_file_rename_wait_v1_t end_file_rename_wait;
/** @sa start_stage_v1_t. */
start_stage_v1_t start_stage;
+ /** @sa get_current_stage_progress_v1_t. */
+ get_current_stage_progress_v1_t get_current_stage_progress;
/** @sa end_stage_v1_t. */
end_stage_v1_t end_stage;
/** @sa get_thread_statement_locker_v1_t. */
@@ -2101,6 +2662,26 @@ struct PSI_v1
set_statement_no_good_index_used_t set_statement_no_good_index_used;
/** @sa end_statement_v1_t. */
end_statement_v1_t end_statement;
+ /** @sa get_thread_transaction_locker_v1_t. */
+ get_thread_transaction_locker_v1_t get_thread_transaction_locker;
+ /** @sa start_transaction_v1_t. */
+ start_transaction_v1_t start_transaction;
+ /** @sa set_transaction_xid_v1_t. */
+ set_transaction_xid_v1_t set_transaction_xid;
+ /** @sa set_transaction_xa_state_v1_t. */
+ set_transaction_xa_state_v1_t set_transaction_xa_state;
+ /** @sa set_transaction_gtid_v1_t. */
+ set_transaction_gtid_v1_t set_transaction_gtid;
+ /** @sa set_transaction_trxid_v1_t. */
+ set_transaction_trxid_v1_t set_transaction_trxid;
+ /** @sa inc_transaction_savepoints_v1_t. */
+ inc_transaction_savepoints_v1_t inc_transaction_savepoints;
+ /** @sa inc_transaction_rollback_to_savepoint_v1_t. */
+ inc_transaction_rollback_to_savepoint_v1_t inc_transaction_rollback_to_savepoint;
+ /** @sa inc_transaction_release_savepoint_v1_t. */
+ inc_transaction_release_savepoint_v1_t inc_transaction_release_savepoint;
+ /** @sa end_transaction_v1_t. */
+ end_transaction_v1_t end_transaction;
/** @sa start_socket_wait_v1_t. */
start_socket_wait_v1_t start_socket_wait;
/** @sa end_socket_wait_v1_t. */
@@ -2111,12 +2692,51 @@ struct PSI_v1
set_socket_info_v1_t set_socket_info;
/** @sa set_socket_thread_owner_v1_t. */
set_socket_thread_owner_v1_t set_socket_thread_owner;
+ /** @sa create_prepared_stmt_v1_t. */
+ create_prepared_stmt_v1_t create_prepared_stmt;
+ /** @sa destroy_prepared_stmt_v1_t. */
+ destroy_prepared_stmt_v1_t destroy_prepared_stmt;
+ /** @sa reprepare_prepared_stmt_v1_t. */
+ reprepare_prepared_stmt_v1_t reprepare_prepared_stmt;
+ /** @sa execute_prepared_stmt_v1_t. */
+ execute_prepared_stmt_v1_t execute_prepared_stmt;
+ /** @sa set_prepared_stmt_text_v1_t. */
+ set_prepared_stmt_text_v1_t set_prepared_stmt_text;
/** @sa digest_start_v1_t. */
digest_start_v1_t digest_start;
/** @sa digest_end_v1_t. */
digest_end_v1_t digest_end;
/** @sa set_thread_connect_attrs_v1_t. */
set_thread_connect_attrs_v1_t set_thread_connect_attrs;
+ /** @sa start_sp_v1_t. */
+ start_sp_v1_t start_sp;
+ /** @sa start_sp_v1_t. */
+ end_sp_v1_t end_sp;
+ /** @sa drop_sp_v1_t. */
+ drop_sp_v1_t drop_sp;
+ /** @sa get_sp_share_v1_t. */
+ get_sp_share_v1_t get_sp_share;
+ /** @sa release_sp_share_v1_t. */
+ release_sp_share_v1_t release_sp_share;
+ /** @sa register_memory_v1_t. */
+ register_memory_v1_t register_memory;
+ /** @sa memory_alloc_v1_t. */
+ memory_alloc_v1_t memory_alloc;
+ /** @sa memory_realloc_v1_t. */
+ memory_realloc_v1_t memory_realloc;
+ /** @sa memory_claim_v1_t. */
+ memory_claim_v1_t memory_claim;
+ /** @sa memory_free_v1_t. */
+ memory_free_v1_t memory_free;
+
+ unlock_table_v1_t unlock_table;
+
+ create_metadata_lock_v1_t create_metadata_lock;
+ set_metadata_lock_status_v1_t set_metadata_lock_status;
+ destroy_metadata_lock_v1_t destroy_metadata_lock;
+
+ start_metadata_wait_v1_t start_metadata_wait;
+ end_metadata_wait_v1_t end_metadata_wait;
};
/** @} (end of group Group_PSI_v1) */
@@ -2197,6 +2817,13 @@ struct PSI_statement_info_v2
};
/** Placeholder */
+struct PSI_transaction_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
struct PSI_idle_locker_state_v2
{
/** Placeholder */
@@ -2232,14 +2859,14 @@ struct PSI_file_locker_state_v2
};
/** Placeholder */
-struct PSI_table_locker_state_v2
+struct PSI_statement_locker_state_v2
{
/** Placeholder */
int placeholder;
};
/** Placeholder */
-struct PSI_statement_locker_state_v2
+struct PSI_transaction_locker_state_v2
{
/** Placeholder */
int placeholder;
@@ -2252,6 +2879,11 @@ struct PSI_socket_locker_state_v2
int placeholder;
};
+struct PSI_metadata_locker_state_v2
+{
+ int placeholder;
+};
+
/** @} (end of group Group_PSI_v2) */
#endif /* HAVE_PSI_2 */
@@ -2297,15 +2929,18 @@ typedef struct PSI_thread_info_v1 PSI_thread_info;
typedef struct PSI_file_info_v1 PSI_file_info;
typedef struct PSI_stage_info_v1 PSI_stage_info;
typedef struct PSI_statement_info_v1 PSI_statement_info;
+typedef struct PSI_transaction_info_v1 PSI_transaction_info;
typedef struct PSI_socket_info_v1 PSI_socket_info;
typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state;
typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state;
typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state;
typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state;
typedef struct PSI_file_locker_state_v1 PSI_file_locker_state;
-typedef struct PSI_table_locker_state_v1 PSI_table_locker_state;
typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state;
+typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state;
typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state;
+typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state;
+typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state;
#endif
#ifdef USE_PSI_2
@@ -2317,18 +2952,21 @@ typedef struct PSI_thread_info_v2 PSI_thread_info;
typedef struct PSI_file_info_v2 PSI_file_info;
typedef struct PSI_stage_info_v2 PSI_stage_info;
typedef struct PSI_statement_info_v2 PSI_statement_info;
+typedef struct PSI_transaction_info_v2 PSI_transaction_info;
typedef struct PSI_socket_info_v2 PSI_socket_info;
typedef struct PSI_idle_locker_state_v2 PSI_idle_locker_state;
typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state;
typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state;
typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state;
typedef struct PSI_file_locker_state_v2 PSI_file_locker_state;
-typedef struct PSI_table_locker_state_v2 PSI_table_locker_state;
typedef struct PSI_statement_locker_state_v2 PSI_statement_locker_state;
+typedef struct PSI_transaction_locker_state_v2 PSI_transaction_locker_state;
typedef struct PSI_socket_locker_state_v2 PSI_socket_locker_state;
+typedef struct PSI_sp_locker_state_v2 PSI_sp_locker_state;
+typedef struct PSI_metadata_locker_state_v2 PSI_metadata_locker_state;
#endif
-#else /* HAVE_PSI_INTERFACE */
+#ifndef HAVE_PSI_INTERFACE
/**
Dummy structure, used to declare PSI_server when no instrumentation
@@ -2365,10 +3003,13 @@ struct PSI_stage_info_none
with HAVE_PSI_INTERFACE.
*/
typedef struct PSI_stage_info_none PSI_stage_info;
+typedef struct PSI_stage_info_none PSI_statement_info;
+typedef struct PSI_stage_info_none PSI_sp_locker_state;
+typedef struct PSI_stage_info_none PSI_metadata_locker_state;
+typedef struct PSI_stage_info_none PSI_metadata_locker;
#endif /* HAVE_PSI_INTERFACE */
-extern MYSQL_PLUGIN_IMPORT my_bool pfs_enabled;
extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
/*
@@ -2378,50 +3019,6 @@ extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
make a dynamic call using the PSI_server function pointer.
*/
-#ifndef PSI_MUTEX_CALL
-#define PSI_MUTEX_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_RWLOCK_CALL
-#define PSI_RWLOCK_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_COND_CALL
-#define PSI_COND_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_THREAD_CALL
-#define PSI_THREAD_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_FILE_CALL
-#define PSI_FILE_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_SOCKET_CALL
-#define PSI_SOCKET_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_STAGE_CALL
-#define PSI_STAGE_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_STATEMENT_CALL
-#define PSI_STATEMENT_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_DIGEST_CALL
-#define PSI_DIGEST_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_TABLE_CALL
-#define PSI_TABLE_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
-#ifndef PSI_IDLE_CALL
-#define PSI_IDLE_CALL(M) PSI_DYNAMIC_CALL(M)
-#endif
-
#define PSI_DYNAMIC_CALL(M) PSI_server->M
/** @} */
diff --git a/include/mysql/psi/psi_abi_v0.h b/include/mysql/psi/psi_abi_v0.h
index ca4373f847b..5c879fb8536 100644
--- a/include/mysql/psi/psi_abi_v0.h
+++ b/include/mysql/psi/psi_abi_v0.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2013, 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, version 2.0,
diff --git a/include/mysql/psi/psi_abi_v0.h.pp b/include/mysql/psi/psi_abi_v0.h.pp
index 17d61016a68..47dc72b7ecb 100644
--- a/include/mysql/psi/psi_abi_v0.h.pp
+++ b/include/mysql/psi/psi_abi_v0.h.pp
@@ -1,7 +1,23 @@
#include "mysql/psi/psi.h"
+#include "psi_base.h"
+#include "psi_memory.h"
+#include "psi_base.h"
+struct PSI_thread;
+typedef unsigned int PSI_memory_key;
C_MODE_START
+struct MDL_key;
+typedef struct MDL_key MDL_key;
+typedef int opaque_mdl_type;
+typedef int opaque_mdl_duration;
+typedef int opaque_mdl_status;
+typedef int opaque_vio_type;
struct TABLE_SHARE;
struct sql_digest_storage;
+ struct opaque_THD
+ {
+ int dummy;
+ };
+ typedef struct opaque_THD THD;
struct PSI_mutex;
typedef struct PSI_mutex PSI_mutex;
struct PSI_rwlock;
@@ -18,14 +34,51 @@ struct PSI_file;
typedef struct PSI_file PSI_file;
struct PSI_socket;
typedef struct PSI_socket PSI_socket;
+struct PSI_prepared_stmt;
+typedef struct PSI_prepared_stmt PSI_prepared_stmt;
struct PSI_table_locker;
typedef struct PSI_table_locker PSI_table_locker;
struct PSI_statement_locker;
typedef struct PSI_statement_locker PSI_statement_locker;
+struct PSI_transaction_locker;
+typedef struct PSI_transaction_locker PSI_transaction_locker;
struct PSI_idle_locker;
typedef struct PSI_idle_locker PSI_idle_locker;
struct PSI_digest_locker;
typedef struct PSI_digest_locker PSI_digest_locker;
+struct PSI_sp_share;
+typedef struct PSI_sp_share PSI_sp_share;
+struct PSI_sp_locker;
+typedef struct PSI_sp_locker PSI_sp_locker;
+struct PSI_metadata_lock;
+typedef struct PSI_metadata_lock PSI_metadata_lock;
+struct PSI_stage_progress
+{
+ ulonglong m_work_completed;
+ ulonglong m_work_estimated;
+};
+typedef struct PSI_stage_progress PSI_stage_progress;
+enum PSI_table_io_operation
+{
+ PSI_TABLE_FETCH_ROW= 0,
+ PSI_TABLE_WRITE_ROW= 1,
+ PSI_TABLE_UPDATE_ROW= 2,
+ PSI_TABLE_DELETE_ROW= 3
+};
+typedef enum PSI_table_io_operation PSI_table_io_operation;
+struct PSI_table_locker_state
+{
+ uint m_flags;
+ enum PSI_table_io_operation m_io_operation;
+ struct PSI_table *m_table;
+ struct PSI_table_share *m_table_share;
+ struct PSI_thread *m_thread;
+ ulonglong m_timer_start;
+ ulonglong (*m_timer)(void);
+ void *m_wait;
+ uint m_index;
+};
+typedef struct PSI_table_locker_state PSI_table_locker_state;
struct PSI_bootstrap
{
void* (*get_interface)(int version);
diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp
index ef18f59e4a9..60a6a8031a6 100644
--- a/include/mysql/psi/psi_abi_v1.h.pp
+++ b/include/mysql/psi/psi_abi_v1.h.pp
@@ -1,6 +1,37 @@
+extern "C" {
+}
+extern "C" {
+struct PSI_thread;
+typedef unsigned int PSI_memory_key;
+struct PSI_memory_info_v1
+{
+ PSI_memory_key *m_key;
+ const char *m_name;
+ int m_flags;
+};
+typedef struct PSI_memory_info_v1 PSI_memory_info_v1;
+typedef void (*register_memory_v1_t)
+ (const char *category, struct PSI_memory_info_v1 *info, int count);
+typedef PSI_memory_key (*memory_alloc_v1_t)
+ (PSI_memory_key key, size_t size, struct PSI_thread ** owner);
+typedef PSI_memory_key (*memory_realloc_v1_t)
+ (PSI_memory_key key, size_t old_size, size_t new_size, struct PSI_thread ** owner);
+typedef PSI_memory_key (*memory_claim_v1_t)
+ (PSI_memory_key key, size_t size, struct PSI_thread ** owner);
+typedef void (*memory_free_v1_t)
+ (PSI_memory_key key, size_t size, struct PSI_thread * owner);
+typedef struct PSI_memory_info_v1 PSI_memory_info;
+}
C_MODE_START
+struct MDL_key;
+typedef struct MDL_key MDL_key;
+typedef int opaque_mdl_type;
+typedef int opaque_mdl_duration;
+typedef int opaque_mdl_status;
+typedef int opaque_vio_type;
struct TABLE_SHARE;
struct sql_digest_storage;
+ class THD;
struct PSI_mutex;
typedef struct PSI_mutex PSI_mutex;
struct PSI_rwlock;
@@ -17,14 +48,51 @@ struct PSI_file;
typedef struct PSI_file PSI_file;
struct PSI_socket;
typedef struct PSI_socket PSI_socket;
+struct PSI_prepared_stmt;
+typedef struct PSI_prepared_stmt PSI_prepared_stmt;
struct PSI_table_locker;
typedef struct PSI_table_locker PSI_table_locker;
struct PSI_statement_locker;
typedef struct PSI_statement_locker PSI_statement_locker;
+struct PSI_transaction_locker;
+typedef struct PSI_transaction_locker PSI_transaction_locker;
struct PSI_idle_locker;
typedef struct PSI_idle_locker PSI_idle_locker;
struct PSI_digest_locker;
typedef struct PSI_digest_locker PSI_digest_locker;
+struct PSI_sp_share;
+typedef struct PSI_sp_share PSI_sp_share;
+struct PSI_sp_locker;
+typedef struct PSI_sp_locker PSI_sp_locker;
+struct PSI_metadata_lock;
+typedef struct PSI_metadata_lock PSI_metadata_lock;
+struct PSI_stage_progress
+{
+ ulonglong m_work_completed;
+ ulonglong m_work_estimated;
+};
+typedef struct PSI_stage_progress PSI_stage_progress;
+enum PSI_table_io_operation
+{
+ PSI_TABLE_FETCH_ROW= 0,
+ PSI_TABLE_WRITE_ROW= 1,
+ PSI_TABLE_UPDATE_ROW= 2,
+ PSI_TABLE_DELETE_ROW= 3
+};
+typedef enum PSI_table_io_operation PSI_table_io_operation;
+struct PSI_table_locker_state
+{
+ uint m_flags;
+ enum PSI_table_io_operation m_io_operation;
+ struct PSI_table *m_table;
+ struct PSI_table_share *m_table_share;
+ struct PSI_thread *m_thread;
+ ulonglong m_timer_start;
+ ulonglong (*m_timer)(void);
+ void *m_wait;
+ uint m_index;
+};
+typedef struct PSI_table_locker_state PSI_table_locker_state;
struct PSI_bootstrap
{
void* (*get_interface)(int version);
@@ -40,6 +108,8 @@ struct PSI_file_locker;
typedef struct PSI_file_locker PSI_file_locker;
struct PSI_socket_locker;
typedef struct PSI_socket_locker PSI_socket_locker;
+struct PSI_metadata_locker;
+typedef struct PSI_metadata_locker PSI_metadata_locker;
enum PSI_mutex_operation
{
PSI_MUTEX_LOCK= 0,
@@ -51,7 +121,13 @@ enum PSI_rwlock_operation
PSI_RWLOCK_READLOCK= 0,
PSI_RWLOCK_WRITELOCK= 1,
PSI_RWLOCK_TRYREADLOCK= 2,
- PSI_RWLOCK_TRYWRITELOCK= 3
+ PSI_RWLOCK_TRYWRITELOCK= 3,
+ PSI_RWLOCK_SHAREDLOCK= 4,
+ PSI_RWLOCK_SHAREDEXCLUSIVELOCK= 5,
+ PSI_RWLOCK_EXCLUSIVELOCK= 6,
+ PSI_RWLOCK_TRYSHAREDLOCK= 7,
+ PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK= 8,
+ PSI_RWLOCK_TRYEXCLUSIVELOCK= 9
};
typedef enum PSI_rwlock_operation PSI_rwlock_operation;
enum PSI_cond_operation
@@ -81,14 +157,6 @@ enum PSI_file_operation
PSI_FILE_SYNC= 16
};
typedef enum PSI_file_operation PSI_file_operation;
-enum PSI_table_io_operation
-{
- PSI_TABLE_FETCH_ROW= 0,
- PSI_TABLE_WRITE_ROW= 1,
- PSI_TABLE_UPDATE_ROW= 2,
- PSI_TABLE_DELETE_ROW= 3
-};
-typedef enum PSI_table_io_operation PSI_table_io_operation;
enum PSI_table_lock_operation
{
PSI_TABLE_LOCK= 0,
@@ -134,48 +202,56 @@ struct PSI_mutex_info_v1
const char *m_name;
int m_flags;
};
+typedef struct PSI_mutex_info_v1 PSI_mutex_info_v1;
struct PSI_rwlock_info_v1
{
PSI_rwlock_key *m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_rwlock_info_v1 PSI_rwlock_info_v1;
struct PSI_cond_info_v1
{
PSI_cond_key *m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_cond_info_v1 PSI_cond_info_v1;
struct PSI_thread_info_v1
{
PSI_thread_key *m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_thread_info_v1 PSI_thread_info_v1;
struct PSI_file_info_v1
{
PSI_file_key *m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_file_info_v1 PSI_file_info_v1;
struct PSI_stage_info_v1
{
PSI_stage_key m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_stage_info_v1 PSI_stage_info_v1;
struct PSI_statement_info_v1
{
PSI_statement_key m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_statement_info_v1 PSI_statement_info_v1;
struct PSI_socket_info_v1
{
PSI_socket_key *m_key;
const char *m_name;
int m_flags;
};
+typedef struct PSI_socket_info_v1 PSI_socket_info_v1;
struct PSI_idle_locker_state_v1
{
uint m_flags;
@@ -184,6 +260,7 @@ struct PSI_idle_locker_state_v1
ulonglong (*m_timer)(void);
void *m_wait;
};
+typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state_v1;
struct PSI_mutex_locker_state_v1
{
uint m_flags;
@@ -194,6 +271,7 @@ struct PSI_mutex_locker_state_v1
ulonglong (*m_timer)(void);
void *m_wait;
};
+typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state_v1;
struct PSI_rwlock_locker_state_v1
{
uint m_flags;
@@ -204,6 +282,7 @@ struct PSI_rwlock_locker_state_v1
ulonglong (*m_timer)(void);
void *m_wait;
};
+typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state_v1;
struct PSI_cond_locker_state_v1
{
uint m_flags;
@@ -215,6 +294,7 @@ struct PSI_cond_locker_state_v1
ulonglong (*m_timer)(void);
void *m_wait;
};
+typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state_v1;
struct PSI_file_locker_state_v1
{
uint m_flags;
@@ -228,21 +308,21 @@ struct PSI_file_locker_state_v1
ulonglong (*m_timer)(void);
void *m_wait;
};
-struct PSI_table_locker_state_v1
+typedef struct PSI_file_locker_state_v1 PSI_file_locker_state_v1;
+struct PSI_metadata_locker_state_v1
{
uint m_flags;
- enum PSI_table_io_operation m_io_operation;
- struct PSI_table *m_table;
- struct PSI_table_share *m_table_share;
+ struct PSI_metadata_lock *m_metadata_lock;
struct PSI_thread *m_thread;
ulonglong m_timer_start;
ulonglong (*m_timer)(void);
void *m_wait;
- uint m_index;
};
+typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state_v1;
struct PSI_statement_locker_state_v1
{
my_bool m_discarded;
+ my_bool m_in_prepare;
uchar m_no_index_used;
uchar m_no_good_index_used;
uint m_flags;
@@ -269,7 +349,26 @@ struct PSI_statement_locker_state_v1
char m_schema_name[(64 * 3)];
uint m_schema_name_length;
uint m_cs_number;
+ PSI_sp_share *m_parent_sp_share;
+ PSI_prepared_stmt *m_parent_prepared_stmt;
+};
+typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state_v1;
+struct PSI_transaction_locker_state_v1
+{
+ uint m_flags;
+ void *m_class;
+ struct PSI_thread *m_thread;
+ ulonglong m_timer_start;
+ ulonglong (*m_timer)(void);
+ void *m_transaction;
+ my_bool m_read_only;
+ my_bool m_autocommit;
+ ulong m_statement_count;
+ ulong m_savepoint_count;
+ ulong m_rollback_to_savepoint_count;
+ ulong m_release_savepoint_count;
};
+typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state_v1;
struct PSI_socket_locker_state_v1
{
uint m_flags;
@@ -283,6 +382,16 @@ struct PSI_socket_locker_state_v1
int m_src_line;
void *m_wait;
};
+typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state_v1;
+struct PSI_sp_locker_state_v1
+{
+ uint m_flags;
+ struct PSI_thread *m_thread;
+ ulonglong m_timer_start;
+ ulonglong (*m_timer)(void);
+ PSI_sp_share* m_sp_share;
+};
+typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state_v1;
typedef void (*register_mutex_v1_t)
(const char *category, struct PSI_mutex_info_v1 *info, int count);
typedef void (*register_rwlock_v1_t)
@@ -324,7 +433,8 @@ typedef void (*unbind_table_v1_t)
(struct PSI_table *table);
typedef PSI_table* (*rebind_table_v1_t)
(PSI_table_share *share, const void *identity, PSI_table *table);
-typedef void (*close_table_v1_t)(struct PSI_table *table);
+typedef void (*close_table_v1_t)(struct TABLE_SHARE *server_share,
+ struct PSI_table *table);
typedef void (*create_file_v1_t)(PSI_file_key key, const char *name,
File file);
typedef int (*spawn_thread_v1_t)(PSI_thread_key key,
@@ -333,14 +443,18 @@ typedef int (*spawn_thread_v1_t)(PSI_thread_key key,
void *(*start_routine)(void*), void *arg);
typedef struct PSI_thread* (*new_thread_v1_t)
(PSI_thread_key key, const void *identity, ulonglong thread_id);
+typedef void (*set_thread_THD_v1_t)(struct PSI_thread *thread,
+ THD *thd);
typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread,
ulonglong id);
+typedef void (*set_thread_os_id_v1_t)(struct PSI_thread *thread);
typedef struct PSI_thread* (*get_thread_v1_t)(void);
typedef void (*set_thread_user_v1_t)(const char *user, int user_len);
-typedef void (*set_thread_user_host_v1_t)(const char *user, int user_len,
- const char *host, int host_len);
+typedef void (*set_thread_account_v1_t)(const char *user, int user_len,
+ const char *host, int host_len);
typedef void (*set_thread_db_v1_t)(const char* db, int db_len);
typedef void (*set_thread_command_v1_t)(int command);
+typedef void (*set_connection_type_v1_t)(opaque_vio_type conn_type);
typedef void (*set_thread_start_time_v1_t)(time_t start_time);
typedef void (*set_thread_state_v1_t)(const char* state);
typedef void (*set_thread_info_v1_t)(const char* info, uint info_len);
@@ -399,25 +513,30 @@ typedef struct PSI_cond_locker* (*start_cond_wait_v1_t)
typedef void (*end_cond_wait_v1_t)
(struct PSI_cond_locker *locker, int rc);
typedef struct PSI_table_locker* (*start_table_io_wait_v1_t)
- (struct PSI_table_locker_state_v1 *state,
+ (struct PSI_table_locker_state *state,
struct PSI_table *table,
enum PSI_table_io_operation op,
uint index,
const char *src_file, uint src_line);
-typedef void (*end_table_io_wait_v1_t)(struct PSI_table_locker *locker);
+typedef void (*end_table_io_wait_v1_t)
+ (struct PSI_table_locker *locker,
+ ulonglong numrows);
typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t)
- (struct PSI_table_locker_state_v1 *state,
+ (struct PSI_table_locker_state *state,
struct PSI_table *table,
enum PSI_table_lock_operation op,
ulong flags,
const char *src_file, uint src_line);
typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker);
+typedef void (*unlock_table_v1_t)(struct PSI_table *table);
typedef void (*start_file_open_wait_v1_t)
(struct PSI_file_locker *locker, const char *src_file, uint src_line);
typedef struct PSI_file* (*end_file_open_wait_v1_t)
(struct PSI_file_locker *locker, void *result);
typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t)
(struct PSI_file_locker *locker, File file);
+typedef void (*end_temp_file_open_wait_and_bind_to_descriptor_v1_t)
+ (struct PSI_file_locker *locker, File file, const char *filename);
typedef void (*start_file_wait_v1_t)
(struct PSI_file_locker *locker, size_t count,
const char *src_file, uint src_line);
@@ -427,12 +546,16 @@ typedef void (*start_file_close_wait_v1_t)
(struct PSI_file_locker *locker, const char *src_file, uint src_line);
typedef void (*end_file_close_wait_v1_t)
(struct PSI_file_locker *locker, int rc);
-typedef void (*start_stage_v1_t)
+typedef void (*end_file_rename_wait_v1_t)
+ (struct PSI_file_locker *locker, const char *old_name,
+ const char *new_name, int rc);
+typedef PSI_stage_progress* (*start_stage_v1_t)
(PSI_stage_key key, const char *src_file, int src_line);
+typedef PSI_stage_progress* (*get_current_stage_progress_v1_t)(void);
typedef void (*end_stage_v1_t) (void);
typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t)
(struct PSI_statement_locker_state_v1 *state,
- PSI_statement_key key, const void *charset);
+ PSI_statement_key key, const void *charset, PSI_sp_share *sp_share);
typedef struct PSI_statement_locker* (*refine_statement_v1_t)
(struct PSI_statement_locker *locker,
PSI_statement_key key);
@@ -477,6 +600,34 @@ typedef void (*set_statement_no_good_index_used_t)
(struct PSI_statement_locker *locker);
typedef void (*end_statement_v1_t)
(struct PSI_statement_locker *locker, void *stmt_da);
+typedef struct PSI_transaction_locker* (*get_thread_transaction_locker_v1_t)
+ (struct PSI_transaction_locker_state_v1 *state, const void *xid,
+ ulonglong trxid, int isolation_level, my_bool read_only,
+ my_bool autocommit);
+typedef void (*start_transaction_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const char *src_file, uint src_line);
+typedef void (*set_transaction_xid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const void *xid, int xa_state);
+typedef void (*set_transaction_xa_state_v1_t)
+ (struct PSI_transaction_locker *locker,
+ int xa_state);
+typedef void (*set_transaction_gtid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const void *sid, const void *gtid_spec);
+typedef void (*set_transaction_trxid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const ulonglong *trxid);
+typedef void (*inc_transaction_savepoints_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+typedef void (*inc_transaction_rollback_to_savepoint_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+typedef void (*inc_transaction_release_savepoint_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+typedef void (*end_transaction_v1_t)
+ (struct PSI_transaction_locker *locker,
+ my_bool commit);
typedef struct PSI_socket_locker* (*start_socket_wait_v1_t)
(struct PSI_socket_locker_state_v1 *state,
struct PSI_socket *socket,
@@ -492,10 +643,52 @@ typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket,
const struct sockaddr *addr,
socklen_t addr_len);
typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket);
+typedef PSI_prepared_stmt* (*create_prepared_stmt_v1_t)
+ (void *identity, uint stmt_id, PSI_statement_locker *locker,
+ const char *stmt_name, size_t stmt_name_length);
+typedef void (*destroy_prepared_stmt_v1_t)
+ (PSI_prepared_stmt *prepared_stmt);
+typedef void (*reprepare_prepared_stmt_v1_t)
+ (PSI_prepared_stmt *prepared_stmt);
+typedef void (*execute_prepared_stmt_v1_t)
+ (PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt);
+typedef void (*set_prepared_stmt_text_v1_t)(PSI_prepared_stmt *prepared_stmt,
+ const char *text,
+ uint text_len);
typedef struct PSI_digest_locker * (*digest_start_v1_t)
(struct PSI_statement_locker *locker);
typedef void (*digest_end_v1_t)
(struct PSI_digest_locker *locker, const struct sql_digest_storage *digest);
+typedef PSI_sp_locker* (*start_sp_v1_t)
+ (struct PSI_sp_locker_state_v1 *state, struct PSI_sp_share* sp_share);
+typedef void (*end_sp_v1_t)
+ (struct PSI_sp_locker *locker);
+typedef void (*drop_sp_v1_t)
+ (uint object_type,
+ const char *schema_name, uint schema_name_length,
+ const char *object_name, uint object_name_length);
+typedef struct PSI_sp_share* (*get_sp_share_v1_t)
+ (uint object_type,
+ const char *schema_name, uint schema_name_length,
+ const char *object_name, uint object_name_length);
+typedef void (*release_sp_share_v1_t)(struct PSI_sp_share *share);
+typedef PSI_metadata_lock* (*create_metadata_lock_v1_t)
+ (void *identity,
+ const MDL_key *key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line);
+typedef void (*set_metadata_lock_status_v1_t)(PSI_metadata_lock *lock,
+ opaque_mdl_status mdl_status);
+typedef void (*destroy_metadata_lock_v1_t)(PSI_metadata_lock *lock);
+typedef struct PSI_metadata_locker* (*start_metadata_wait_v1_t)
+ (struct PSI_metadata_locker_state_v1 *state,
+ struct PSI_metadata_lock *mdl,
+ const char *src_file, uint src_line);
+typedef void (*end_metadata_wait_v1_t)
+ (struct PSI_metadata_locker *locker, int rc);
typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length,
const void *from_cs);
struct PSI_v1
@@ -527,11 +720,14 @@ struct PSI_v1
spawn_thread_v1_t spawn_thread;
new_thread_v1_t new_thread;
set_thread_id_v1_t set_thread_id;
+ set_thread_THD_v1_t set_thread_THD;
+ set_thread_os_id_v1_t set_thread_os_id;
get_thread_v1_t get_thread;
set_thread_user_v1_t set_thread_user;
- set_thread_user_host_v1_t set_thread_user_host;
+ set_thread_account_v1_t set_thread_account;
set_thread_db_v1_t set_thread_db;
set_thread_command_v1_t set_thread_command;
+ set_connection_type_v1_t set_connection_type;
set_thread_start_time_v1_t set_thread_start_time;
set_thread_state_v1_t set_thread_state;
set_thread_info_v1_t set_thread_info;
@@ -563,11 +759,15 @@ struct PSI_v1
end_file_open_wait_v1_t end_file_open_wait;
end_file_open_wait_and_bind_to_descriptor_v1_t
end_file_open_wait_and_bind_to_descriptor;
+ end_temp_file_open_wait_and_bind_to_descriptor_v1_t
+ end_temp_file_open_wait_and_bind_to_descriptor;
start_file_wait_v1_t start_file_wait;
end_file_wait_v1_t end_file_wait;
start_file_close_wait_v1_t start_file_close_wait;
end_file_close_wait_v1_t end_file_close_wait;
+ end_file_rename_wait_v1_t end_file_rename_wait;
start_stage_v1_t start_stage;
+ get_current_stage_progress_v1_t get_current_stage_progress;
end_stage_v1_t end_stage;
get_thread_statement_locker_v1_t get_thread_statement_locker;
refine_statement_v1_t refine_statement;
@@ -590,14 +790,45 @@ struct PSI_v1
set_statement_no_index_used_t set_statement_no_index_used;
set_statement_no_good_index_used_t set_statement_no_good_index_used;
end_statement_v1_t end_statement;
+ get_thread_transaction_locker_v1_t get_thread_transaction_locker;
+ start_transaction_v1_t start_transaction;
+ set_transaction_xid_v1_t set_transaction_xid;
+ set_transaction_xa_state_v1_t set_transaction_xa_state;
+ set_transaction_gtid_v1_t set_transaction_gtid;
+ set_transaction_trxid_v1_t set_transaction_trxid;
+ inc_transaction_savepoints_v1_t inc_transaction_savepoints;
+ inc_transaction_rollback_to_savepoint_v1_t inc_transaction_rollback_to_savepoint;
+ inc_transaction_release_savepoint_v1_t inc_transaction_release_savepoint;
+ end_transaction_v1_t end_transaction;
start_socket_wait_v1_t start_socket_wait;
end_socket_wait_v1_t end_socket_wait;
set_socket_state_v1_t set_socket_state;
set_socket_info_v1_t set_socket_info;
set_socket_thread_owner_v1_t set_socket_thread_owner;
+ create_prepared_stmt_v1_t create_prepared_stmt;
+ destroy_prepared_stmt_v1_t destroy_prepared_stmt;
+ reprepare_prepared_stmt_v1_t reprepare_prepared_stmt;
+ execute_prepared_stmt_v1_t execute_prepared_stmt;
+ set_prepared_stmt_text_v1_t set_prepared_stmt_text;
digest_start_v1_t digest_start;
digest_end_v1_t digest_end;
set_thread_connect_attrs_v1_t set_thread_connect_attrs;
+ start_sp_v1_t start_sp;
+ end_sp_v1_t end_sp;
+ drop_sp_v1_t drop_sp;
+ get_sp_share_v1_t get_sp_share;
+ release_sp_share_v1_t release_sp_share;
+ register_memory_v1_t register_memory;
+ memory_alloc_v1_t memory_alloc;
+ memory_realloc_v1_t memory_realloc;
+ memory_claim_v1_t memory_claim;
+ memory_free_v1_t memory_free;
+ unlock_table_v1_t unlock_table;
+ create_metadata_lock_v1_t create_metadata_lock;
+ set_metadata_lock_status_v1_t set_metadata_lock_status;
+ destroy_metadata_lock_v1_t destroy_metadata_lock;
+ start_metadata_wait_v1_t start_metadata_wait;
+ end_metadata_wait_v1_t end_metadata_wait;
};
typedef struct PSI_v1 PSI;
typedef struct PSI_mutex_info_v1 PSI_mutex_info;
@@ -607,15 +838,17 @@ typedef struct PSI_thread_info_v1 PSI_thread_info;
typedef struct PSI_file_info_v1 PSI_file_info;
typedef struct PSI_stage_info_v1 PSI_stage_info;
typedef struct PSI_statement_info_v1 PSI_statement_info;
+typedef struct PSI_transaction_info_v1 PSI_transaction_info;
typedef struct PSI_socket_info_v1 PSI_socket_info;
typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state;
typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state;
typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state;
typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state;
typedef struct PSI_file_locker_state_v1 PSI_file_locker_state;
-typedef struct PSI_table_locker_state_v1 PSI_table_locker_state;
typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state;
+typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state;
typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state;
-extern MYSQL_PLUGIN_IMPORT my_bool pfs_enabled;
+typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state;
+typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state;
extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
C_MODE_END
diff --git a/include/mysql/psi/psi_abi_v2.h b/include/mysql/psi/psi_abi_v2.h
index 67c054848a1..3495d618b05 100644
--- a/include/mysql/psi/psi_abi_v2.h
+++ b/include/mysql/psi/psi_abi_v2.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2013, 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, version 2.0,
diff --git a/include/mysql/psi/psi_abi_v2.h.pp b/include/mysql/psi/psi_abi_v2.h.pp
index adf1af7cfae..a670e53a8b7 100644
--- a/include/mysql/psi/psi_abi_v2.h.pp
+++ b/include/mysql/psi/psi_abi_v2.h.pp
@@ -1,6 +1,24 @@
+extern "C" {
+}
+extern "C" {
+struct PSI_thread;
+typedef unsigned int PSI_memory_key;
+struct PSI_memory_info_v2
+{
+ int placeholder;
+};
+typedef struct PSI_memory_info_v2 PSI_memory_info;
+}
C_MODE_START
+struct MDL_key;
+typedef struct MDL_key MDL_key;
+typedef int opaque_mdl_type;
+typedef int opaque_mdl_duration;
+typedef int opaque_mdl_status;
+typedef int opaque_vio_type;
struct TABLE_SHARE;
struct sql_digest_storage;
+ class THD;
struct PSI_mutex;
typedef struct PSI_mutex PSI_mutex;
struct PSI_rwlock;
@@ -17,14 +35,51 @@ struct PSI_file;
typedef struct PSI_file PSI_file;
struct PSI_socket;
typedef struct PSI_socket PSI_socket;
+struct PSI_prepared_stmt;
+typedef struct PSI_prepared_stmt PSI_prepared_stmt;
struct PSI_table_locker;
typedef struct PSI_table_locker PSI_table_locker;
struct PSI_statement_locker;
typedef struct PSI_statement_locker PSI_statement_locker;
+struct PSI_transaction_locker;
+typedef struct PSI_transaction_locker PSI_transaction_locker;
struct PSI_idle_locker;
typedef struct PSI_idle_locker PSI_idle_locker;
struct PSI_digest_locker;
typedef struct PSI_digest_locker PSI_digest_locker;
+struct PSI_sp_share;
+typedef struct PSI_sp_share PSI_sp_share;
+struct PSI_sp_locker;
+typedef struct PSI_sp_locker PSI_sp_locker;
+struct PSI_metadata_lock;
+typedef struct PSI_metadata_lock PSI_metadata_lock;
+struct PSI_stage_progress
+{
+ ulonglong m_work_completed;
+ ulonglong m_work_estimated;
+};
+typedef struct PSI_stage_progress PSI_stage_progress;
+enum PSI_table_io_operation
+{
+ PSI_TABLE_FETCH_ROW= 0,
+ PSI_TABLE_WRITE_ROW= 1,
+ PSI_TABLE_UPDATE_ROW= 2,
+ PSI_TABLE_DELETE_ROW= 3
+};
+typedef enum PSI_table_io_operation PSI_table_io_operation;
+struct PSI_table_locker_state
+{
+ uint m_flags;
+ enum PSI_table_io_operation m_io_operation;
+ struct PSI_table *m_table;
+ struct PSI_table_share *m_table_share;
+ struct PSI_thread *m_thread;
+ ulonglong m_timer_start;
+ ulonglong (*m_timer)(void);
+ void *m_wait;
+ uint m_index;
+};
+typedef struct PSI_table_locker_state PSI_table_locker_state;
struct PSI_bootstrap
{
void* (*get_interface)(int version);
@@ -40,6 +95,8 @@ struct PSI_file_locker;
typedef struct PSI_file_locker PSI_file_locker;
struct PSI_socket_locker;
typedef struct PSI_socket_locker PSI_socket_locker;
+struct PSI_metadata_locker;
+typedef struct PSI_metadata_locker PSI_metadata_locker;
enum PSI_mutex_operation
{
PSI_MUTEX_LOCK= 0,
@@ -51,7 +108,13 @@ enum PSI_rwlock_operation
PSI_RWLOCK_READLOCK= 0,
PSI_RWLOCK_WRITELOCK= 1,
PSI_RWLOCK_TRYREADLOCK= 2,
- PSI_RWLOCK_TRYWRITELOCK= 3
+ PSI_RWLOCK_TRYWRITELOCK= 3,
+ PSI_RWLOCK_SHAREDLOCK= 4,
+ PSI_RWLOCK_SHAREDEXCLUSIVELOCK= 5,
+ PSI_RWLOCK_EXCLUSIVELOCK= 6,
+ PSI_RWLOCK_TRYSHAREDLOCK= 7,
+ PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK= 8,
+ PSI_RWLOCK_TRYEXCLUSIVELOCK= 9
};
typedef enum PSI_rwlock_operation PSI_rwlock_operation;
enum PSI_cond_operation
@@ -81,14 +144,6 @@ enum PSI_file_operation
PSI_FILE_SYNC= 16
};
typedef enum PSI_file_operation PSI_file_operation;
-enum PSI_table_io_operation
-{
- PSI_TABLE_FETCH_ROW= 0,
- PSI_TABLE_WRITE_ROW= 1,
- PSI_TABLE_UPDATE_ROW= 2,
- PSI_TABLE_DELETE_ROW= 3
-};
-typedef enum PSI_table_io_operation PSI_table_io_operation;
enum PSI_table_lock_operation
{
PSI_TABLE_LOCK= 0,
@@ -160,6 +215,10 @@ struct PSI_statement_info_v2
{
int placeholder;
};
+struct PSI_transaction_info_v2
+{
+ int placeholder;
+};
struct PSI_idle_locker_state_v2
{
int placeholder;
@@ -180,11 +239,11 @@ struct PSI_file_locker_state_v2
{
int placeholder;
};
-struct PSI_table_locker_state_v2
+struct PSI_statement_locker_state_v2
{
int placeholder;
};
-struct PSI_statement_locker_state_v2
+struct PSI_transaction_locker_state_v2
{
int placeholder;
};
@@ -192,6 +251,10 @@ struct PSI_socket_locker_state_v2
{
int placeholder;
};
+struct PSI_metadata_locker_state_v2
+{
+ int placeholder;
+};
typedef struct PSI_v2 PSI;
typedef struct PSI_mutex_info_v2 PSI_mutex_info;
typedef struct PSI_rwlock_info_v2 PSI_rwlock_info;
@@ -200,15 +263,17 @@ typedef struct PSI_thread_info_v2 PSI_thread_info;
typedef struct PSI_file_info_v2 PSI_file_info;
typedef struct PSI_stage_info_v2 PSI_stage_info;
typedef struct PSI_statement_info_v2 PSI_statement_info;
+typedef struct PSI_transaction_info_v2 PSI_transaction_info;
typedef struct PSI_socket_info_v2 PSI_socket_info;
typedef struct PSI_idle_locker_state_v2 PSI_idle_locker_state;
typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state;
typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state;
typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state;
typedef struct PSI_file_locker_state_v2 PSI_file_locker_state;
-typedef struct PSI_table_locker_state_v2 PSI_table_locker_state;
typedef struct PSI_statement_locker_state_v2 PSI_statement_locker_state;
+typedef struct PSI_transaction_locker_state_v2 PSI_transaction_locker_state;
typedef struct PSI_socket_locker_state_v2 PSI_socket_locker_state;
-extern MYSQL_PLUGIN_IMPORT my_bool pfs_enabled;
+typedef struct PSI_sp_locker_state_v2 PSI_sp_locker_state;
+typedef struct PSI_metadata_locker_state_v2 PSI_metadata_locker_state;
extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
C_MODE_END
diff --git a/include/mysql/psi/psi_base.h b/include/mysql/psi/psi_base.h
index 2bb3061d55c..f365e2625ee 100644
--- a/include/mysql/psi/psi_base.h
+++ b/include/mysql/psi/psi_base.h
@@ -1,13 +1,25 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2016, 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.
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
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.
+ GNU General Public License, version 2.0, 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,
@@ -16,6 +28,10 @@
#ifndef MYSQL_PSI_BASE_H
#define MYSQL_PSI_BASE_H
+#ifdef EMBEDDED_LIBRARY
+#define DISABLE_ALL_PSI
+#endif /* EMBEDDED_LIBRARY */
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -30,6 +46,7 @@ extern "C" {
*/
#define PSI_INSTRUMENT_ME 0
+#define PSI_INSTRUMENT_MEM ((PSI_memory_key)0)
#define PSI_NOT_INSTRUMENTED 0
@@ -69,6 +86,14 @@ extern "C" {
*/
#define PSI_FLAG_TRANSFER (1 << 5)
+/**
+ Volatility flag.
+ This flag indicate that an instrumented object
+ has a volatility (life cycle) comparable
+ to the volatility of a session.
+*/
+#define PSI_FLAG_VOLATILITY_SESSION (1 << 6)
+
#ifdef HAVE_PSI_INTERFACE
/**
diff --git a/include/mysql/psi/psi_memory.h b/include/mysql/psi/psi_memory.h
index 3c633e6a918..bbe2be32a29 100644
--- a/include/mysql/psi/psi_memory.h
+++ b/include/mysql/psi/psi_memory.h
@@ -1,13 +1,25 @@
/* Copyright (c) 2013, 2015, 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.
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
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.
+ GNU General Public License, version 2.0, 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,
diff --git a/include/mysql_com.h b/include/mysql_com.h
index 4eafe148743..de9eb938f69 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -25,8 +25,10 @@
#define HOSTNAME_LENGTH 60
#define SYSTEM_CHARSET_MBMAXLEN 3
-#define NAME_CHAR_LEN 64U /* Field/table name length */
-#define USERNAME_CHAR_LENGTH 128U
+#define NAME_CHAR_LEN 64 /* Field/table name length */
+#define USERNAME_CHAR_LENGTH 128
+#define USERNAME_CHAR_LENGTH_STR STRINGIFY_ARG(USERNAME_CHAR_LENGTH)
+
#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN)
#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN)
#define DEFINER_CHAR_LENGTH (USERNAME_CHAR_LENGTH + HOSTNAME_LENGTH + 1)
@@ -206,6 +208,8 @@ enum enum_indicator_type
itself supports it*/
#define LONG_UNIQUE_HASH_FIELD (1<< 30) /* This field will store hash for unique
column */
+#define FIELD_PART_OF_TMP_UNIQUE (1<< 31) /* part of an unique constrain
+ for a tmporary table*/
#define REFRESH_GRANT (1ULL << 0) /* Refresh grant tables */
#define REFRESH_LOG (1ULL << 1) /* Start on new log file */
@@ -296,6 +300,8 @@ enum enum_indicator_type
#define MARIADB_CLIENT_COM_MULTI (1ULL << 33)
/* support of array binding */
#define MARIADB_CLIENT_STMT_BULK_OPERATIONS (1ULL << 34)
+/* support of extended metadata (e.g. type/format information) */
+#define MARIADB_CLIENT_EXTENDED_METADATA (1ULL << 35)
#ifdef HAVE_COMPRESS
#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS
@@ -337,6 +343,7 @@ enum enum_indicator_type
CLIENT_CONNECT_ATTRS |\
MARIADB_CLIENT_COM_MULTI |\
MARIADB_CLIENT_STMT_BULK_OPERATIONS |\
+ MARIADB_CLIENT_EXTENDED_METADATA|\
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS)
/*
@@ -348,6 +355,15 @@ enum enum_indicator_type
& ~CLIENT_COMPRESS) \
& ~CLIENT_SSL_VERIFY_SERVER_CERT)
+enum mariadb_field_attr_t
+{
+ MARIADB_FIELD_ATTR_DATA_TYPE_NAME= 0,
+ MARIADB_FIELD_ATTR_FORMAT_NAME= 1
+};
+
+#define MARIADB_FIELD_ATTR_LAST MARIADB_FIELD_ATTR_FORMAT_NAME
+
+
/**
Is raised when a multi-statement transaction
has been started, either explicitly, by means
diff --git a/include/pfs_file_provider.h b/include/pfs_file_provider.h
new file mode 100644
index 00000000000..3df999894fd
--- /dev/null
+++ b/include/pfs_file_provider.h
@@ -0,0 +1,92 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_FILE_PROVIDER_H
+#define PFS_FILE_PROVIDER_H
+
+/**
+ @file include/pfs_file_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_FILE_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_FILE_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+void pfs_register_file_v1(const char *category,
+ PSI_file_info_v1 *info,
+ int count);
+
+void pfs_create_file_v1(PSI_file_key key, const char *name, File file);
+
+PSI_file_locker*
+pfs_get_thread_file_name_locker_v1(PSI_file_locker_state *state,
+ PSI_file_key key,
+ PSI_file_operation op,
+ const char *name, const void *identity);
+
+PSI_file_locker*
+pfs_get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
+ PSI_file *file, PSI_file_operation op);
+
+PSI_file_locker*
+pfs_get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
+ File file, PSI_file_operation op);
+
+void pfs_start_file_open_wait_v1(PSI_file_locker *locker,
+ const char *src_file,
+ uint src_line);
+
+PSI_file* pfs_end_file_open_wait_v1(PSI_file_locker *locker, void *result);
+
+void pfs_end_file_open_wait_and_bind_to_descriptor_v1
+ (PSI_file_locker *locker, File file);
+
+void pfs_end_temp_file_open_wait_and_bind_to_descriptor_v1
+ (PSI_file_locker *locker, File file, const char *filename);
+
+void pfs_start_file_wait_v1(PSI_file_locker *locker,
+ size_t count,
+ const char *src_file,
+ uint src_line);
+
+void pfs_end_file_wait_v1(PSI_file_locker *locker,
+ size_t byte_count);
+
+void pfs_start_file_close_wait_v1(PSI_file_locker *locker,
+ const char *src_file,
+ uint src_line);
+
+void pfs_end_file_close_wait_v1(PSI_file_locker *locker, int rc);
+
+void pfs_end_file_rename_wait_v1(PSI_file_locker *locker, const char *old_name,
+ const char *new_name, int rc);
+
+C_MODE_END
+
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_FILE_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_idle_provider.h b/include/pfs_idle_provider.h
new file mode 100644
index 00000000000..71d116f7423
--- /dev/null
+++ b/include/pfs_idle_provider.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_IDLE_PROVIDER_H
+#define PFS_IDLE_PROVIDER_H
+
+/**
+ @file include/pfs_idle_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_IDLE_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_IDLE_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+PSI_idle_locker*
+pfs_start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_line);
+
+void pfs_end_idle_wait_v1(PSI_idle_locker* locker);
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_IDLE_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_memory_provider.h b/include/pfs_memory_provider.h
new file mode 100644
index 00000000000..ea60f9de3be
--- /dev/null
+++ b/include/pfs_memory_provider.h
@@ -0,0 +1,57 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_MEMORY_PROVIDER_H
+#define PFS_MEMORY_PROVIDER_H
+
+/**
+ @file include/pfs_memory_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_MEMORY_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+void pfs_register_memory_v1
+ (const char *category, struct PSI_memory_info_v1 *info, int count);
+
+PSI_memory_key
+pfs_memory_alloc_v1
+ (PSI_memory_key key, size_t size, PSI_thread **owner);
+
+PSI_memory_key
+pfs_memory_realloc_v1
+ (PSI_memory_key key, size_t old_size, size_t new_size, PSI_thread **owner);
+
+void pfs_memory_free_v1
+ (PSI_memory_key key, size_t size, PSI_thread *owner);
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_MEMORY_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_metadata_provider.h b/include/pfs_metadata_provider.h
new file mode 100644
index 00000000000..cf3dd0d0dc1
--- /dev/null
+++ b/include/pfs_metadata_provider.h
@@ -0,0 +1,67 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_METADATA_PROVIDER_H
+#define PFS_METADATA_PROVIDER_H
+
+/**
+ @file include/pfs_metadata_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_METADATA_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+PSI_metadata_lock* pfs_create_metadata_lock_v1
+ (void *identity,
+ const MDL_key *key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line);
+
+void pfs_set_metadata_lock_status_v1
+ (PSI_metadata_lock *lock,
+ opaque_mdl_status mdl_status);
+
+void pfs_destroy_metadata_lock_v1(PSI_metadata_lock *lock);
+
+struct PSI_metadata_locker*
+pfs_start_metadata_wait_v1
+ (struct PSI_metadata_locker_state_v1 *state,
+ struct PSI_metadata_lock *mdl,
+ const char *src_file, uint src_line);
+
+void pfs_end_metadata_wait_v1
+ (struct PSI_metadata_locker *locker, int rc);
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_METADATA_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_socket_provider.h b/include/pfs_socket_provider.h
new file mode 100644
index 00000000000..bfafdaafb00
--- /dev/null
+++ b/include/pfs_socket_provider.h
@@ -0,0 +1,71 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_SOCKET_PROVIDER_H
+#define PFS_SOCKET_PROVIDER_H
+
+/**
+ @file include/pfs_socket_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_SOCKET_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+void pfs_register_socket_v1(const char *category,
+ PSI_socket_info_v1 *info,
+ int count);
+
+PSI_socket*
+pfs_init_socket_v1(PSI_socket_key key, const my_socket *fd,
+ const struct sockaddr *addr, socklen_t addr_len);
+
+void pfs_destroy_socket_v1(PSI_socket *socket);
+
+PSI_socket_locker*
+pfs_start_socket_wait_v1(PSI_socket_locker_state *state,
+ PSI_socket *socket,
+ PSI_socket_operation op,
+ size_t count,
+ const char *src_file, uint src_line);
+
+void pfs_end_socket_wait_v1(PSI_socket_locker *locker, size_t byte_count);
+
+void pfs_set_socket_state_v1(PSI_socket *socket, PSI_socket_state state);
+
+void pfs_set_socket_info_v1(PSI_socket *socket,
+ const my_socket *fd,
+ const struct sockaddr *addr,
+ socklen_t addr_len);
+
+void pfs_set_socket_thread_owner_v1(PSI_socket *socket);
+
+C_MODE_END
+
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_SOCKET_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_stage_provider.h b/include/pfs_stage_provider.h
new file mode 100644
index 00000000000..2ad2faab890
--- /dev/null
+++ b/include/pfs_stage_provider.h
@@ -0,0 +1,52 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_STAGE_PROVIDER_H
+#define PFS_STAGE_PROVIDER_H
+
+/**
+ @file include/pfs_stage_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_STAGE_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+void pfs_register_stage_v1(const char *category,
+ PSI_stage_info_v1 **info_array,
+ int count);
+
+PSI_stage_progress* pfs_start_stage_v1(PSI_stage_key key, const char *src_file, int src_line);
+PSI_stage_progress* pfs_get_current_stage_progress_v1();
+
+void pfs_end_stage_v1();
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_STAGE_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_statement_provider.h b/include/pfs_statement_provider.h
new file mode 100644
index 00000000000..96870d8400d
--- /dev/null
+++ b/include/pfs_statement_provider.h
@@ -0,0 +1,118 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_STATEMENT_PROVIDER_H
+#define PFS_STATEMENT_PROVIDER_H
+
+/**
+ @file include/pfs_statement_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_STATEMENT_CALL(M) pfs_ ## M ## _v1
+#define PSI_DIGEST_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+void pfs_register_statement_v1(const char *category,
+ PSI_statement_info_v1 *info,
+ int count);
+
+PSI_statement_locker*
+pfs_get_thread_statement_locker_v1(PSI_statement_locker_state *state,
+ PSI_statement_key key,
+ const void *charset,
+ PSI_sp_share *sp_share);
+
+PSI_statement_locker*
+pfs_refine_statement_v1(PSI_statement_locker *locker,
+ PSI_statement_key key);
+
+void pfs_start_statement_v1(PSI_statement_locker *locker,
+ const char *db, uint db_len,
+ const char *src_file, uint src_line);
+
+void pfs_set_statement_text_v1(PSI_statement_locker *locker,
+ const char *text, uint text_len);
+
+void pfs_set_statement_lock_time_v1(PSI_statement_locker *locker,
+ ulonglong count);
+
+void pfs_set_statement_rows_sent_v1(PSI_statement_locker *locker,
+ ulonglong count);
+
+void pfs_set_statement_rows_examined_v1(PSI_statement_locker *locker,
+ ulonglong count);
+
+void pfs_inc_statement_created_tmp_disk_tables_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_created_tmp_tables_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_select_full_join_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_select_full_range_join_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_select_range_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_select_range_check_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_select_scan_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_sort_merge_passes_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_sort_range_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_sort_rows_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_inc_statement_sort_scan_v1(PSI_statement_locker *locker,
+ ulong count);
+
+void pfs_set_statement_no_index_used_v1(PSI_statement_locker *locker);
+
+void pfs_set_statement_no_good_index_used_v1(PSI_statement_locker *locker);
+
+void pfs_end_statement_v1(PSI_statement_locker *locker, void *stmt_da);
+
+PSI_digest_locker *pfs_digest_start_v1(PSI_statement_locker *locker);
+
+void pfs_digest_end_v1(PSI_digest_locker *locker,
+ const sql_digest_storage *digest);
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_STATEMENT_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_table_provider.h b/include/pfs_table_provider.h
new file mode 100644
index 00000000000..0d7ee76274b
--- /dev/null
+++ b/include/pfs_table_provider.h
@@ -0,0 +1,83 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_TABLE_PROVIDER_H
+#define PFS_TABLE_PROVIDER_H
+
+/**
+ @file include/pfs_table_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_TABLE_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_TABLE_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+PSI_table_share*
+pfs_get_table_share_v1(my_bool temporary, struct TABLE_SHARE *share);
+
+void pfs_release_table_share_v1(PSI_table_share* share);
+
+void
+pfs_drop_table_share_v1(my_bool temporary,
+ const char *schema_name, int schema_name_length,
+ const char *table_name, int table_name_length);
+
+PSI_table*
+pfs_open_table_v1(PSI_table_share *share, const void *identity);
+
+void pfs_unbind_table_v1(PSI_table *table);
+
+PSI_table *
+pfs_rebind_table_v1(PSI_table_share *share, const void *identity, PSI_table *table);
+
+void pfs_close_table_v1(struct TABLE_SHARE *server_share, PSI_table *table);
+
+PSI_table_locker*
+pfs_start_table_io_wait_v1(PSI_table_locker_state *state,
+ PSI_table *table,
+ PSI_table_io_operation op,
+ uint index,
+ const char *src_file, uint src_line);
+
+PSI_table_locker*
+pfs_start_table_lock_wait_v1(PSI_table_locker_state *state,
+ PSI_table *table,
+ PSI_table_lock_operation op,
+ ulong op_flags,
+ const char *src_file, uint src_line);
+
+void pfs_end_table_io_wait_v1(PSI_table_locker* locker, ulonglong numrows);
+
+void pfs_end_table_lock_wait_v1(PSI_table_locker* locker);
+
+void pfs_unlock_table_v1(PSI_table *table);
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_TABLE_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_thread_provider.h b/include/pfs_thread_provider.h
new file mode 100644
index 00000000000..c4118a8efbf
--- /dev/null
+++ b/include/pfs_thread_provider.h
@@ -0,0 +1,170 @@
+/* Copyright (c) 2012, 2015, 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 */
+
+#ifndef PFS_THREAD_PROVIDER_H
+#define PFS_THREAD_PROVIDER_H
+
+/**
+ @file include/pfs_thread_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_THREAD_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_MUTEX_CALL(M) pfs_ ## M ## _v1
+#define PSI_RWLOCK_CALL(M) pfs_ ## M ## _v1
+#define PSI_COND_CALL(M) pfs_ ## M ## _v1
+#define PSI_THREAD_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+void pfs_register_mutex_v1(const char *category,
+ PSI_mutex_info_v1 *info,
+ int count);
+
+void pfs_register_rwlock_v1(const char *category,
+ PSI_rwlock_info_v1 *info,
+ int count);
+
+void pfs_register_cond_v1(const char *category,
+ PSI_cond_info_v1 *info,
+ int count);
+
+void pfs_register_thread_v1(const char *category,
+ PSI_thread_info_v1 *info,
+ int count);
+
+PSI_mutex*
+pfs_init_mutex_v1(PSI_mutex_key key, const void *identity);
+
+void pfs_destroy_mutex_v1(PSI_mutex* mutex);
+
+PSI_rwlock*
+pfs_init_rwlock_v1(PSI_rwlock_key key, const void *identity);
+
+void pfs_destroy_rwlock_v1(PSI_rwlock* rwlock);
+
+PSI_cond*
+pfs_init_cond_v1(PSI_cond_key key, const void *identity);
+
+void pfs_destroy_cond_v1(PSI_cond* cond);
+
+int pfs_spawn_thread_v1(PSI_thread_key key,
+ pthread_t *thread, const pthread_attr_t *attr,
+ void *(*start_routine)(void*), void *arg);
+
+PSI_thread*
+pfs_new_thread_v1(PSI_thread_key key, const void *identity, ulonglong processlist_id);
+
+void pfs_set_thread_id_v1(PSI_thread *thread, ulonglong processlist_id);
+void pfs_set_thread_THD_v1(PSI_thread *thread, THD *thd);
+void pfs_set_thread_os_id_v1(PSI_thread *thread);
+
+PSI_thread*
+pfs_get_thread_v1(void);
+
+void pfs_set_thread_user_v1(const char *user, int user_len);
+
+void pfs_set_thread_account_v1(const char *user, int user_len,
+ const char *host, int host_len);
+
+void pfs_set_thread_db_v1(const char* db, int db_len);
+
+void pfs_set_thread_command_v1(int command);
+
+void pfs_set_thread_start_time_v1(time_t start_time);
+
+void pfs_set_thread_state_v1(const char* state);
+
+void pfs_set_connection_type_v1(opaque_vio_type conn_type);
+
+void pfs_set_thread_info_v1(const char* info, uint info_len);
+
+void pfs_set_thread_v1(PSI_thread* thread);
+
+void pfs_delete_current_thread_v1(void);
+
+void pfs_delete_thread_v1(PSI_thread *thread);
+
+PSI_mutex_locker*
+pfs_start_mutex_wait_v1(PSI_mutex_locker_state *state,
+ PSI_mutex *mutex, PSI_mutex_operation op,
+ const char *src_file, uint src_line);
+
+PSI_rwlock_locker*
+pfs_start_rwlock_rdwait_v1(PSI_rwlock_locker_state *state,
+ PSI_rwlock *rwlock,
+ PSI_rwlock_operation op,
+ const char *src_file, uint src_line);
+
+PSI_rwlock_locker*
+pfs_start_rwlock_wrwait_v1(PSI_rwlock_locker_state *state,
+ PSI_rwlock *rwlock,
+ PSI_rwlock_operation op,
+ const char *src_file, uint src_line);
+
+PSI_cond_locker*
+pfs_start_cond_wait_v1(PSI_cond_locker_state *state,
+ PSI_cond *cond, PSI_mutex *mutex,
+ PSI_cond_operation op,
+ const char *src_file, uint src_line);
+
+PSI_table_locker*
+pfs_start_table_io_wait_v1(PSI_table_locker_state *state,
+ PSI_table *table,
+ PSI_table_io_operation op,
+ uint index,
+ const char *src_file, uint src_line);
+
+PSI_table_locker*
+pfs_start_table_lock_wait_v1(PSI_table_locker_state *state,
+ PSI_table *table,
+ PSI_table_lock_operation op,
+ ulong op_flags,
+ const char *src_file, uint src_line);
+
+void pfs_unlock_mutex_v1(PSI_mutex *mutex);
+
+void pfs_unlock_rwlock_v1(PSI_rwlock *rwlock);
+
+void pfs_signal_cond_v1(PSI_cond* cond);
+
+void pfs_broadcast_cond_v1(PSI_cond* cond);
+
+void pfs_end_mutex_wait_v1(PSI_mutex_locker* locker, int rc);
+
+void pfs_end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc);
+
+void pfs_end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc);
+
+void pfs_end_cond_wait_v1(PSI_cond_locker* locker, int rc);
+
+int pfs_set_thread_connect_attrs_v1(const char *buffer, uint length,
+ const void *from_cs);
+
+C_MODE_END
+
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_THREAD_INTERFACE */
+
+#endif
+
diff --git a/include/pfs_transaction_provider.h b/include/pfs_transaction_provider.h
new file mode 100644
index 00000000000..fdaad8ae1c6
--- /dev/null
+++ b/include/pfs_transaction_provider.h
@@ -0,0 +1,79 @@
+/* Copyright (c) 2013, 2015, 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 */
+
+#ifndef PFS_TRANSACTION_PROVIDER_H
+#define PFS_TRANSACTION_PROVIDER_H
+
+/**
+ @file include/pfs_transaction_provider.h
+ Performance schema instrumentation (declarations).
+*/
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+#ifdef MYSQL_SERVER
+#ifndef EMBEDDED_LIBRARY
+#ifndef MYSQL_DYNAMIC_PLUGIN
+
+#include "mysql/psi/psi.h"
+
+#define PSI_TRANSACTION_CALL(M) pfs_ ## M ## _v1
+
+C_MODE_START
+
+PSI_transaction_locker*
+pfs_get_thread_transaction_locker_v1(PSI_transaction_locker_state *state,
+ const void *xid,
+ ulonglong trxid,
+ int isolation_level,
+ my_bool read_only,
+ my_bool autocommit);
+
+void pfs_start_transaction_v1(PSI_transaction_locker *locker,
+ const char *src_file, uint src_line);
+
+void pfs_set_transaction_xid_v1(PSI_transaction_locker *locker,
+ const void *xid,
+ int xa_state);
+
+void pfs_set_transaction_xa_state_v1(PSI_transaction_locker *locker,
+ int xa_state);
+
+void pfs_set_transaction_gtid_v1(PSI_transaction_locker *locker,
+ const void *sid,
+ const void *gtid_spec);
+
+void pfs_set_transaction_trxid_v1(PSI_transaction_locker *locker,
+ const ulonglong *trxid);
+
+void pfs_inc_transaction_savepoints_v1(PSI_transaction_locker *locker,
+ ulong count);
+
+void pfs_inc_transaction_rollback_to_savepoint_v1(PSI_transaction_locker *locker,
+ ulong count);
+
+void pfs_inc_transaction_release_savepoint_v1(PSI_transaction_locker *locker,
+ ulong count);
+
+void pfs_end_transaction_v1(PSI_transaction_locker *locker, my_bool commit);
+
+C_MODE_END
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_SERVER */
+#endif /* HAVE_PSI_TRANSACTION_INTERFACE */
+
+#endif
+
diff --git a/include/thread_pool_priv.h b/include/thread_pool_priv.h
index 0112ef9c434..769c4a7d97d 100644
--- a/include/thread_pool_priv.h
+++ b/include/thread_pool_priv.h
@@ -38,12 +38,6 @@
#include <table.h>
#include <sql_list.h>
-/* Needed to get access to scheduler variables */
-void* thd_get_scheduler_data(THD *thd);
-void thd_set_scheduler_data(THD *thd, void *data);
-PSI_thread* thd_get_psi(THD *thd);
-void thd_set_psi(THD *thd, PSI_thread *psi);
-
/* Interface to THD variables and functions */
void thd_set_killed(THD *thd);
void thd_clear_errors(THD *thd);
diff --git a/include/violite.h b/include/violite.h
index 1d981c8bf83..95a4830df89 100644
--- a/include/violite.h
+++ b/include/violite.h
@@ -39,7 +39,10 @@ enum enum_vio_type
{
VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET, VIO_TYPE_NAMEDPIPE,
VIO_TYPE_SSL
+ /* see also vio_type_names[] */
};
+#define FIRST_VIO_TYPE VIO_CLOSED
+#define LAST_VIO_TYPE VIO_TYPE_SSL
/**
VIO I/O events.
@@ -184,6 +187,8 @@ void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd);
void vio_end(void);
+const char *vio_type_name(enum enum_vio_type vio_type, size_t *len);
+
#ifdef __cplusplus
}
#endif
diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt
index f9eba7d7713..ae54fb4ef5f 100644
--- a/libmysqld/CMakeLists.txt
+++ b/libmysqld/CMakeLists.txt
@@ -424,9 +424,15 @@ mysql_net_field_length
mysql_options4
)
+
+SET(CLIENT_API_FUNCTIONS_10_5
+mariadb_field_attr
+)
+
SET(CLIENT_API_FUNCTIONS
${CLIENT_API_FUNCTIONS_5_1}
${CLIENT_API_FUNCTIONS_5_5}
+ ${CLIENT_API_FUNCTIONS_10_5}
)
diff --git a/libmysqld/emb_qcache.cc b/libmysqld/emb_qcache.cc
index 603542e820e..33de60e92ac 100644
--- a/libmysqld/emb_qcache.cc
+++ b/libmysqld/emb_qcache.cc
@@ -418,7 +418,7 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
if (!data)
goto err;
- init_alloc_root(&data->alloc, "embedded_query_cache", 8192,0,MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &data->alloc, 8192, 0, MYF(0));
f_alloc= &data->alloc;
data->fields= src->load_int();
@@ -445,6 +445,7 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
!(field->catalog= src->load_str(f_alloc, &field->catalog_length)) ||
src->load_safe_str(f_alloc, &field->def, &field->def_length))
goto err;
+ field->extension= NULL;
}
data->rows= rows;
diff --git a/libmysqld/embedded_priv.h b/libmysqld/embedded_priv.h
index 77955ea499e..af80f5bc6a9 100644
--- a/libmysqld/embedded_priv.h
+++ b/libmysqld/embedded_priv.h
@@ -38,4 +38,11 @@ typedef struct embedded_query_result
char sqlstate[SQLSTATE_LENGTH+1];
} EQR;
+
+typedef struct st_mariadb_field_extension
+{
+ MARIADB_CONST_STRING metadata[MARIADB_FIELD_ATTR_LAST+1]; /* 10.5 */
+} MARIADB_FIELD_EXTENSION;
+
+
C_MODE_END
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 8b25515405c..d5810f5e48e 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -491,8 +491,8 @@ char **copy_arguments(int argc, char **argv)
for (from=argv ; from != end ; from++)
length+= strlen(*from);
- if ((res= (char**) my_malloc(sizeof(argv)*(argc+1)+length+argc,
- MYF(MY_WME))))
+ if ((res= (char**) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(argv)*(argc+1)+length+argc, MYF(MY_WME))))
{
char **to= res, *to_str= (char*) (res+argc+1);
for (from=argv ; from != end ;)
@@ -664,7 +664,7 @@ void init_embedded_mysql(MYSQL *mysql, int client_flag)
thd->mysql= mysql;
mysql->server_version= server_version;
mysql->client_flag= client_flag;
- init_alloc_root(&mysql->field_alloc, "fields", 8192, 0, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &mysql->field_alloc, 8192, 0, MYF(0));
}
/**
@@ -758,7 +758,7 @@ int check_embedded_connection(MYSQL *mysql, const char *db)
sctx->host_or_ip= sctx->host= (char*) my_localhost;
strmake_buf(sctx->priv_host, (char*) my_localhost);
strmake_buf(sctx->priv_user, mysql->user);
- sctx->user= my_strdup(mysql->user, MYF(0));
+ sctx->user= my_strdup(PSI_NOT_INSTRUMENTED, mysql->user, MYF(0));
sctx->proxy_user[0]= 0;
sctx->master_access= GLOBAL_ACLS; // Full rights
emb_transfer_connect_attrs(mysql);
@@ -918,10 +918,8 @@ MYSQL_DATA *THD::alloc_new_dataset()
{
MYSQL_DATA *data;
struct embedded_query_result *emb_data;
- if (!my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
- &data, sizeof(*data),
- &emb_data, sizeof(*emb_data),
- NULL))
+ if (!my_multi_malloc(PSI_NOT_INSTRUMENTED, MYF(MY_WME | MY_ZEROFILL),
+ &data, sizeof(*data), &emb_data, sizeof(*emb_data), NULL))
return NULL;
emb_data->prev_ptr= &data->data;
@@ -984,7 +982,7 @@ bool Protocol::begin_dataset()
return 1;
alloc= &data->alloc;
/* Assume rowlength < 8192 */
- init_alloc_root(alloc, "protocol", 8192, 0, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, alloc, 8192, 0, MYF(0));
alloc->min_malloc= sizeof(MYSQL_ROWS);
return 0;
}
@@ -1032,6 +1030,39 @@ void Protocol_text::remove_last_row()
}
+
+static MARIADB_CONST_STRING ma_const_string_copy_root(MEM_ROOT *memroot,
+ const char *str,
+ size_t length)
+{
+ MARIADB_CONST_STRING res;
+ if (!str || !(res.str= strmake_root(memroot, str, length)))
+ return null_clex_str;
+ res.length= length;
+ return res;
+}
+
+
+class Client_field_extension: public Sql_alloc,
+ public MARIADB_FIELD_EXTENSION
+{
+public:
+ Client_field_extension()
+ {
+ memset(this, 0, sizeof(*this));
+ }
+ void copy_extended_metadata(MEM_ROOT *memroot,
+ const Send_field_extended_metadata &src)
+ {
+ for (uint i= 0; i <= MARIADB_FIELD_ATTR_LAST; i++)
+ {
+ LEX_CSTRING attr= src.attr(i);
+ metadata[i]= ma_const_string_copy_root(memroot, attr.str, attr.length);
+ }
+ }
+};
+
+
bool Protocol_text::store_field_metadata(const THD * thd,
const Send_field &server_field,
CHARSET_INFO *charset_for_protocol,
@@ -1080,6 +1111,17 @@ bool Protocol_text::store_field_metadata(const THD * thd,
client_field->catalog= dup_str_aux(field_alloc, "def", 3, cs, thd_cs);
client_field->catalog_length= 3;
+ if (server_field.has_extended_metadata())
+ {
+ Client_field_extension *ext= new (field_alloc) Client_field_extension();
+ if ((client_field->extension= static_cast<MARIADB_FIELD_EXTENSION*>(ext)))
+ ext->copy_extended_metadata(field_alloc, server_field);
+ }
+ else
+ {
+ client_field->extension= NULL;
+ }
+
if (IS_NUM(client_field->type))
client_field->flags|= NUM_FLAG;
diff --git a/libmysqld/libmysql.c b/libmysqld/libmysql.c
index 2be94882303..dce7a000c0c 100644
--- a/libmysqld/libmysql.c
+++ b/libmysqld/libmysql.c
@@ -64,6 +64,7 @@
#include <sql_common.h>
#include "client_settings.h"
+#include "embedded_priv.h"
#undef net_buffer_length
#undef max_allowed_packet
@@ -398,9 +399,9 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
my_free(saved_db);
/* alloc new connect information */
- mysql->user= my_strdup(mysql->user, MYF(MY_WME));
- mysql->passwd= my_strdup(mysql->passwd, MYF(MY_WME));
- mysql->db= db ? my_strdup(db, MYF(MY_WME)) : 0;
+ mysql->user= my_strdup(PSI_NOT_INSTRUMENTED, mysql->user, MYF(MY_WME));
+ mysql->passwd= my_strdup(PSI_NOT_INSTRUMENTED, mysql->passwd, MYF(MY_WME));
+ mysql->db= db ? my_strdup(PSI_NOT_INSTRUMENTED, db, MYF(MY_WME)) : 0;
}
else
{
@@ -481,7 +482,7 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
}
/* copy filename into local memory and allocate read buffer */
- if (!(buf=my_malloc(packet_length, MYF(0))))
+ if (!(buf=my_malloc(PSI_NOT_INSTRUMENTED, packet_length, MYF(0))))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
DBUG_RETURN(1);
@@ -579,7 +580,8 @@ static int default_local_infile_init(void **ptr, const char *filename,
char tmp_name[FN_REFLEN];
if (!(*ptr= data= ((default_local_infile_data *)
- my_malloc(sizeof(default_local_infile_data), MYF(0)))))
+ my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(default_local_infile_data), MYF(0)))))
return 1; /* out of memory */
data->error_msg[0]= 0;
@@ -733,6 +735,26 @@ mysql_fetch_field(MYSQL_RES *result)
/**************************************************************************
+** Return mysql field metadata
+**************************************************************************/
+int STDCALL
+mariadb_field_attr(MARIADB_CONST_STRING *attr,
+ const MYSQL_FIELD *field,
+ enum mariadb_field_attr_t type)
+{
+ MARIADB_FIELD_EXTENSION *ext= (MARIADB_FIELD_EXTENSION*) field->extension;
+ if (!ext || type > MARIADB_FIELD_ATTR_LAST)
+ {
+ static MARIADB_CONST_STRING null_str= {0,0};
+ *attr= null_str;
+ return 1;
+ }
+ *attr= ext->metadata[type];
+ return 0;
+}
+
+
+/**************************************************************************
Move to a specific row and column
**************************************************************************/
@@ -844,7 +866,7 @@ mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
!(fields= (*mysql->methods->list_fields)(mysql)))
DBUG_RETURN(NULL);
- if (!(result = (MYSQL_RES *) my_malloc(sizeof(MYSQL_RES),
+ if (!(result = (MYSQL_RES *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(MYSQL_RES),
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(NULL);
@@ -1522,10 +1544,10 @@ mysql_stmt_init(MYSQL *mysql)
DBUG_ENTER("mysql_stmt_init");
if (!(stmt=
- (MYSQL_STMT *) my_malloc(sizeof (MYSQL_STMT),
+ (MYSQL_STMT *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof (MYSQL_STMT),
MYF(MY_WME | MY_ZEROFILL))) ||
!(stmt->extension=
- (MYSQL_STMT_EXT *) my_malloc(sizeof (MYSQL_STMT_EXT),
+ (MYSQL_STMT_EXT *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof (MYSQL_STMT_EXT),
MYF(MY_WME | MY_ZEROFILL))))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
@@ -1533,9 +1555,8 @@ mysql_stmt_init(MYSQL *mysql)
DBUG_RETURN(NULL);
}
- init_alloc_root(&stmt->mem_root, "stmt", 2048,2048, MYF(MY_THREAD_SPECIFIC));
- init_alloc_root(&stmt->result.alloc, "result", 4096, 4096,
- MYF(MY_THREAD_SPECIFIC));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &stmt->mem_root, 2048,2048, MYF(MY_THREAD_SPECIFIC));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &stmt->result.alloc, 4096, 4096, MYF(MY_THREAD_SPECIFIC));
stmt->result.alloc.min_malloc= sizeof(MYSQL_ROWS);
mysql->stmts= list_add(mysql->stmts, &stmt->list);
stmt->list.data= stmt;
@@ -1546,7 +1567,7 @@ mysql_stmt_init(MYSQL *mysql)
strmov(stmt->sqlstate, not_error_sqlstate);
/* The rest of statement members was bzeroed inside malloc */
- init_alloc_root(&stmt->extension->fields_mem_root, "extension", 2048, 0,
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &stmt->extension->fields_mem_root, 2048, 0,
MYF(MY_THREAD_SPECIFIC));
DBUG_RETURN(stmt);
@@ -1833,7 +1854,7 @@ mysql_stmt_result_metadata(MYSQL_STMT *stmt)
if (!stmt->field_count)
DBUG_RETURN(0);
- if (!(result=(MYSQL_RES*) my_malloc(sizeof(*result),
+ if (!(result=(MYSQL_RES*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*result),
MYF(MY_WME | MY_ZEROFILL))))
{
set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL);
@@ -2191,7 +2212,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
}
length= (ulong) (net->write_pos - net->buff);
/* TODO: Look into avoding the following memdup */
- if (!(param_data= my_memdup(net->buff, length, MYF(0))))
+ if (!(param_data= my_memdup(PSI_NOT_INSTRUMENTED, net->buff, length, MYF(0))))
{
set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL);
DBUG_RETURN(1);
diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c
index 6de86927a38..d29126467e2 100644
--- a/libmysqld/libmysqld.c
+++ b/libmysqld/libmysqld.c
@@ -157,7 +157,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
put extra 'my_free's in mysql_close.
So we alloc it with the 'user' string to be freed at once
*/
- mysql->user= my_strdup(user, MYF(0));
+ mysql->user= my_strdup(PSI_NOT_INSTRUMENTED, user, MYF(0));
port=0;
unix_socket=0;
@@ -175,7 +175,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
if (db)
client_flag|=CLIENT_CONNECT_WITH_DB;
- mysql->info_buffer= my_malloc(MYSQL_ERRMSG_SIZE, MYF(0));
+ mysql->info_buffer= my_malloc(PSI_NOT_INSTRUMENTED, MYSQL_ERRMSG_SIZE, MYF(0));
mysql->thd= create_embedded_thd(client_flag);
init_embedded_mysql(mysql, client_flag);
diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt
index 58c1efaebf1..24f5dac9292 100644
--- a/man/CMakeLists.txt
+++ b/man/CMakeLists.txt
@@ -1,21 +1,21 @@
# Copyright (c) 2012, 2020, MariaDB
-#
+#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
SET(MAN1_SERVER innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1
aria_chk.1 aria_dump_log.1 aria_ftdump.1 aria_pack.1 aria_read_log.1
- myisamlog.1 myisampack.1 mysql.server.1
+ myisamlog.1 myisampack.1 mysql.server.1 mariadb-conv.1
mysql_convert_table_format.1 mysql_fix_extensions.1
mysql_install_db.1
mysql_secure_installation.1 mysql_setpermission.1
@@ -26,13 +26,13 @@ SET(MAN1_SERVER innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1
mysqld_safe_helper.1 wsrep_sst_common.1
wsrep_sst_mysqldump.1 wsrep_sst_rsync.1
galera_recovery.1 galera_new_cluster.1
- mysql_ldb.1
+ mysql_ldb.1 myrocks_hotbackup.1
wsrep_sst_mariabackup.1 mbstream.1 mariabackup.1
wsrep_sst_rsync_wan.1)
SET(MAN8_SERVER mysqld.8)
SET(MAN1_CLIENT msql2mysql.1 mysql.1 mysql_find_rows.1 mysql_waitpid.1
mysqlaccess.1 mysqladmin.1 mysqlbinlog.1 mysqlcheck.1
- mysqldump.1 mysqlimport.1 mysqlshow.1 mysqlslap.1
+ mysqldump.1 mysqlimport.1 mysqlshow.1 mysqlslap.1 mytop.1
mysql_plugin.1 mysql_embedded.1)
SET(MAN1_DEVEL mysql_config.1)
SET(MAN1_TEST mysql-stress-test.pl.1 mysql-test-run.pl.1 mysql_client_test.1
@@ -80,7 +80,7 @@ endmacro(MARIADB_SYMLINK_MANPAGE)
macro(MARIADB_SYMLINK_MANPAGE_CREATE mysqlname index mannr dir comp)
LIST(GET MARIADB_SYMLINK_TOS ${index} _mariadbname)
SET(dest "${CMAKE_CURRENT_BINARY_DIR}/${_mariadbname}.${mannr}")
- FILE(WRITE ${dest} ".so ${mysqlname}.${mannr}")
+ FILE(WRITE ${dest} ".so ${dir}/${mysqlname}.${mannr}")
INSTALL(FILES ${dest} DESTINATION ${INSTALL_MANDIR}/${dir} COMPONENT ${comp})
endmacro(MARIADB_SYMLINK_MANPAGE_CREATE)
diff --git a/man/mariadb-conv.1 b/man/mariadb-conv.1
new file mode 100644
index 00000000000..9a045ea05e2
--- /dev/null
+++ b/man/mariadb-conv.1
@@ -0,0 +1,104 @@
+'\" t
+.\"
+.TH "\FBMARIADB-CONV" "1" "28 Feb 2020" "MariaDB 10\&.5" "MariaDB Database System"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.\" mariadb\-conv
+.SH "NAME"
+mariadb\-conv \- character set conversion utility for MariaDB
+.SH "SYNOPSIS"
+.HP \w'\fBmariadb\-conv\ [\fR\fB\fIOPTION...\fR\fR\fB]\ [\fR\fB\fIFILE...\fR\fR\fB]\ 'u
+\fBmariadb\-conv [\fR\fB\fIOPTION...\fR\fR\fB] [\fR\fB\fIFILE...\fR\fR\fB] \fR
+.SH "DESCRIPTION"
+.PP
+\fBmariadb\-conv\fR
+is a character set conversion utility for MariaDB\&.
+.PP
+\fBmariadb-conv\fR
+supports the following options\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+.\" mariadb-conv: from option
+.\" from option: mariadb-conv
+\fB\-\-from=\fR\fB\fIname\fR\fR,
+\fB\-f \fR\fB\fIname\fR\fR
+.sp
+Specifies the encoding of the input\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+.\" mariadb-conv: to option
+.\" to option: mariadb-conv
+\fB\-\-to=\fR\fB\fIname\fR\fR,
+\fB\-t \fR\fB\fIname\fR\fR
+.sp
+Specifies the encoding of the output\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+.\" mariadb-conv: continue option
+.\" continue option: mariadb-conv
+\fB\-\-continue\fR,
+\fB\-c \fR
+.sp
+Silently ignore conversion errors\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+.\" mariadb-conv: continue option
+.\" continue option: mariadb-conv
+\fB\-\-delimiter=\fR\fB\fIname\fR\fR,
+.sp
+Treat the specified characters as delimiters\&.
+.RE
+.SH "COPYRIGHT"
+.br
+.PP
+Copyright 2020 MariaDB Foundation
+.PP
+This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.
+.PP
+This documentation 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.
+.PP
+You should have received a copy of the GNU General Public License along with the program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA or see http://www.gnu.org/licenses/.
+.sp
+.SH "SEE ALSO"
+For more information, please refer to the MariaDB Knowledge Base, available online at https://mariadb.com/kb/en/mariadb-conv/
+.SH AUTHOR
+MariaDB Foundation (http://www.mariadb.org/).
diff --git a/man/myrocks_hotbackup.1 b/man/myrocks_hotbackup.1
new file mode 100644
index 00000000000..4784239c689
--- /dev/null
+++ b/man/myrocks_hotbackup.1
@@ -0,0 +1,82 @@
+.TH MYROCKS_HOTBACKUP "1" "March 2020" "MariaDB 10\&.5" "MariaDB Database System"
+.SH NAME
+myrocks_hotbackup \- streaming backup for MariaDB MyRocks
+.SH DESCRIPTION
+Usage:
+.PP
+Backup: set \fB\-o\fR pipefail; myrocks_hotbackup \fB\-\-user\fR=\fI\,root\/\fR \fB\-\-password\fR=\fI\,pw\/\fR \fB\-\-port\fR=\fI\,3306\/\fR \fB\-\-checkpoint_dir=\fR<directory where temporary backup hard links are created> | ssh \fB\-o\fR NoneEnabled=yes remote_server 'tar \fB\-xi\fR \fB\-C\fR <directory on remote server where backups will be sent>' . You need to execute backup command on a server where you take backups.
+.PP
+Backup using WDT: myrocks_hotbackup \fB\-\-user\fR=\fI\,root\/\fR \fB\-\-password\fR=\fI\,pw\/\fR \fB\-\-stream\fR=\fI\,wdt\/\fR \fB\-\-checkpoint_dir=\fR<directory where temporary backup hard links are created> \fB\-\-destination=\fR<remote host name> \fB\-\-backup_dir=\fR<remote directory name>. This has to be executed at the src host.
+.PP
+Move\-Back: myrocks_hotbackup \fB\-\-move_back\fR \fB\-\-datadir=\fR<dest mysql datadir> \fB\-\-rocksdb_datadir=\fR<dest rocksdb datadir> \fB\-\-rocksdb_waldir=\fR<dest rocksdb wal dir> \fB\-\-backup_dir=\fR<where backup files are stored> . You need to execute move\-back command on a server where backup files are sent.
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
+.TP
+\fB\-i\fR CHECKPOINT_INTERVAL, \fB\-\-interval\fR=\fI\,CHECKPOINT_INTERVAL\/\fR
+Number of seconds to renew checkpoint
+.TP
+\fB\-c\fR CHECKPOINT_DIRECTORY, \fB\-\-checkpoint_dir\fR=\fI\,CHECKPOINT_DIRECTORY\/\fR
+Local directory name where checkpoints will be
+created.
+.TP
+\fB\-d\fR DATADIR, \fB\-\-datadir\fR=\fI\,DATADIR\/\fR
+backup mode: src MySQL datadir. move_back mode: dest
+MySQL datadir
+.TP
+\fB\-s\fR OUTPUT_STREAM, \fB\-\-stream\fR=\fI\,OUTPUT_STREAM\/\fR
+Setting streaming backup options. Currently tar, WDT
+and xbstream are supported. Default is tar
+.TP
+\fB\-\-destination\fR=\fI\,DESTINATION\/\fR
+Remote server name. Only used for WDT mode so far.
+.TP
+\fB\-\-avg_mbytes_per_sec\fR=\fI\,AVG_MBYTES_PER_SEC\/\fR
+Average backup rate in MBytes/sec. WDT only.
+.TP
+\fB\-\-extra_wdt_sender_options\fR=\fI\,EXTRA_WDT_SENDER_OPTIONS\/\fR
+Extra options for WDT sender
+.TP
+\fB\-\-extra_wdt_receiver_options\fR=\fI\,EXTRA_WDT_RECEIVER_OPTIONS\/\fR
+Extra options for WDT receiver
+.TP
+\fB\-u\fR MYSQL_USER, \fB\-\-user\fR=\fI\,MYSQL_USER\/\fR
+MySQL user name
+.TP
+\fB\-p\fR MYSQL_PASSWORD, \fB\-\-password\fR=\fI\,MYSQL_PASSWORD\/\fR
+MySQL password name
+.TP
+\fB\-P\fR MYSQL_PORT, \fB\-\-port\fR=\fI\,MYSQL_PORT\/\fR
+MySQL port number
+.TP
+\fB\-S\fR MYSQL_SOCKET, \fB\-\-socket\fR=\fI\,MYSQL_SOCKET\/\fR
+MySQL socket path. Takes precedence over \fB\-\-port\fR.
+.TP
+\fB\-m\fR, \fB\-\-move_back\fR
+Moving MyRocks backup files to proper locations.
+.TP
+\fB\-r\fR ROCKSDB_DATADIR, \fB\-\-rocksdb_datadir\fR=\fI\,ROCKSDB_DATADIR\/\fR
+RocksDB target data directory where backup data files
+will be moved. Must be empty.
+.TP
+\fB\-w\fR ROCKSDB_WALDIR, \fB\-\-rocksdb_waldir\fR=\fI\,ROCKSDB_WALDIR\/\fR
+RocksDB target data directory where backup wal files
+will be moved. Must be empty.
+.TP
+\fB\-b\fR BACKUPDIR, \fB\-\-backup_dir\fR=\fI\,BACKUPDIR\/\fR
+backup mode for WDT: Remote directory to store backup.
+move_back mode: Locations where backup files are
+stored.
+.TP
+\fB\-f\fR, \fB\-\-skip_check_frm_timestamp\fR
+skipping to check if frm files are updated after
+starting backup.
+.TP
+\fB\-D\fR DEBUG_SIGNAL_FILE, \fB\-\-debug_signal_file\fR=\fI\,DEBUG_SIGNAL_FILE\/\fR
+debugging purpose: waiting until the specified file is
+created
+.SH "SEE ALSO"
+For more information, please refer to the MariaDB Knowledge Base, available online at https://mariadb.com/kb/
+.SH AUTHOR
+MariaDB Foundation (http://www.mariadb.org/).
diff --git a/man/mysql-test-run.pl.1 b/man/mysql-test-run.pl.1
index 1589b81a7e7..28c44655472 100644
--- a/man/mysql-test-run.pl.1
+++ b/man/mysql-test-run.pl.1
@@ -242,10 +242,7 @@ T}
T{
MTR_VERSION
T}:T{
-If set to 1, will run the older version 1 of
- \fBmysql\-test\-run\&.pl\fR\&. This will affect
- what functionailty is available and what command line
- options are supported\&.
+If set to 1, will run the older version 1 of \fBmysql\-test\-run\&.pl\fR\&. This will affect what functionailty is available and what command line options are supported\&.
T}
T{
MTR_MEM
@@ -273,14 +270,7 @@ T}
T{
MTR_\fINAME\fR_TIMEOUT
T}:T{
-Setting of a timeout in minutes or seconds, corresponding to command
- line option
- \fB\-\-\fR\fB\fIname\fR\fR\fB\-timeout\fR\&.
- Available timeout names are TESTCASE,
- SUITE (both in minutes) and
- START, SHUTDOWN
- (both in seconds)\&. These variables are supported from
- MySQL 5\&.1\&.44\&.
+Setting of a timeout in minutes or seconds, corresponding to command line option \fB\-\-\fR\fB\fIname\fR\fR\fB\-timeout\fR\&. Available timeout names are TESTCASE, SUITE (both in minutes) and START, SHUTDOWN (both in seconds)\&. These variables are supported from MySQL 5\&.1\&.44\&.
T}
T{
MYSQL_TEST
diff --git a/man/mytop.1 b/man/mytop.1
new file mode 100644
index 00000000000..187f63d3f8d
--- /dev/null
+++ b/man/mytop.1
@@ -0,0 +1,7 @@
+.TH MYTOP "1" "March 2020" "MariaDB 10\&.5" "MariaDB Database System"
+.SH NAME
+mytop \- display MariaDB server performance info like 'top'
+.SH "SEE ALSO"
+For more information, please refer to the MariaDB Knowledge Base, available online at https://mariadb.com/kb/
+.SH AUTHOR
+MariaDB Foundation (http://www.mariadb.org/).
diff --git a/mysql-test/include/default_mysqld.cnf b/mysql-test/include/default_mysqld.cnf
index e85f3ffbde3..cccf72591cc 100644
--- a/mysql-test/include/default_mysqld.cnf
+++ b/mysql-test/include/default_mysqld.cnf
@@ -76,7 +76,13 @@ loose-performance-schema-max-cond-instances=1000
loose-performance-schema-max-file-instances=10000
loose-performance-schema-max-socket-instances=1000
loose-performance-schema-max-table-instances=500
+loose-performance-schema-max-table-lock-stat=500
+loose-performance-schema-max-index-stat=5000
loose-performance-schema-max-table-handles=1000
+loose-performance-schema-max-prepared-statements-instances=100
+loose-performance-schema-max-program-instances=5000
+loose-performance-schema-setup-actors-size=100
+loose-performance-schema-setup-objects-size=100
loose-performance-schema-events-waits-history-size=10
loose-performance-schema-events-waits-history-long-size=10000
@@ -84,8 +90,11 @@ loose-performance-schema-events-stages-history-size=10
loose-performance-schema-events-stages-history-long-size=1000
loose-performance-schema-events-statements-history-size=10
loose-performance-schema-events-statements-history-long-size=1000
+loose-performance-schema-events-transactions-history-size=10
+loose-performance-schema-events-transactions-history-long-size=1000
loose-performance-schema-max-thread-instances=200
loose-performance-schema-session-connect-attrs-size=2048
+loose-performance-schema-max-metadata-locks=10000
# Enable everything, for maximun code exposure during testing
@@ -97,6 +106,9 @@ loose-performance-schema-consumer-events-stages-history-long=ON
loose-performance-schema-consumer-events-statements-current=ON
loose-performance-schema-consumer-events-statements-history=ON
loose-performance-schema-consumer-events-statements-history-long=ON
+loose-performance-schema-consumer-events-transactions-current=ON
+loose-performance-schema-consumer-events-transactions-history=ON
+loose-performance-schema-consumer-events-transactions-history-long=ON
loose-performance-schema-consumer-events-waits-current=ON
loose-performance-schema-consumer-events-waits-history=ON
loose-performance-schema-consumer-events-waits-history-long=ON
diff --git a/mysql-test/include/maybe_pool_of_threads.combinations b/mysql-test/include/maybe_pool_of_threads.combinations
new file mode 100644
index 00000000000..29d3d7f4871
--- /dev/null
+++ b/mysql-test/include/maybe_pool_of_threads.combinations
@@ -0,0 +1,5 @@
+[pot]
+thread_handling=pool-of-threads
+
+[1tpc]
+thread_handling=one-thread-per-connection
diff --git a/mysql-test/include/maybe_pool_of_threads.inc b/mysql-test/include/maybe_pool_of_threads.inc
new file mode 100644
index 00000000000..51a179b4426
--- /dev/null
+++ b/mysql-test/include/maybe_pool_of_threads.inc
@@ -0,0 +1 @@
+# run with and without threadpool
diff --git a/mysql-test/include/not_threadpool.inc b/mysql-test/include/not_threadpool.inc
index a49c8cfcc32..98e1f7d2535 100644
--- a/mysql-test/include/not_threadpool.inc
+++ b/mysql-test/include/not_threadpool.inc
@@ -1,5 +1,4 @@
if (`SELECT count(*) FROM information_schema.GLOBAL_VARIABLES WHERE
- VARIABLE_NAME = 'THREAD_HANDLING' AND
- VARIABLE_VALUE = 'loaded-dynamically'`){
+ VARIABLE_NAME = 'THREAD_HANDLING' AND VARIABLE_VALUE = 'pool-of-threads'`){
skip Test requires: 'not_threadpool';
}
diff --git a/mysql-test/include/wait_for_sql_thread_read_all.inc b/mysql-test/include/wait_for_sql_thread_read_all.inc
index ec5ecd0cb17..1bbb006f3a8 100644
--- a/mysql-test/include/wait_for_sql_thread_read_all.inc
+++ b/mysql-test/include/wait_for_sql_thread_read_all.inc
@@ -1,6 +1,6 @@
--let $show_statement = show all slaves status
--let $field = Slave_SQL_State
---let $condition = = 'Slave has read all relay log; waiting for the slave I/O thread to update it'
+--let $condition = = 'Slave has read all relay log; waiting for more updates'
--let $wait_for_all = 1
--source include/wait_show_condition.inc
diff --git a/mysql-test/main/alter_table,aria.rdiff b/mysql-test/main/alter_table,aria.rdiff
new file mode 100644
index 00000000000..40bbf95494c
--- /dev/null
+++ b/mysql-test/main/alter_table,aria.rdiff
@@ -0,0 +1,22 @@
+--- ./mysql-test/main/alter_table.result 2020-02-27 19:35:41.279992329 +0300
++++ ./mysql-test/main/alter_table,aria.reject 2020-02-27 19:37:13.251994491 +0300
+@@ -2716,8 +2716,7 @@
+ t3 CREATE TABLE `t3` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+- KEY `b` (`b`),
+- CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`bb`)
++ KEY `b` (`b`)
+ ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ ALTER TABLE t1 RENAME COLUMN bb TO b;
+ SHOW CREATE TABLE t1;
+@@ -2733,8 +2732,7 @@
+ t3 CREATE TABLE `t3` (
+ `a` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+- KEY `b` (`c`),
+- CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`c`) REFERENCES `t1` (`b`)
++ KEY `b` (`c`)
+ ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ CREATE TABLE t4(a int);
+ ALTER TABLE t4 RENAME COLUMN a TO aa, ALGORITHM = INPLACE;
diff --git a/mysql-test/main/alter_table,heap.rdiff b/mysql-test/main/alter_table,heap.rdiff
new file mode 100644
index 00000000000..ad6fd194cc9
--- /dev/null
+++ b/mysql-test/main/alter_table,heap.rdiff
@@ -0,0 +1,59 @@
+--- ./mysql-test/main/alter_table.result 2020-02-27 19:35:41.279992329 +0300
++++ ./mysql-test/main/alter_table,heap.reject 2020-02-27 19:39:44.175998039 +0300
+@@ -2716,8 +2716,7 @@
+ t3 CREATE TABLE `t3` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+- KEY `b` (`b`),
+- CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`bb`)
++ KEY `b` (`b`)
+ ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ ALTER TABLE t1 RENAME COLUMN bb TO b;
+ SHOW CREATE TABLE t1;
+@@ -2733,8 +2732,7 @@
+ t3 CREATE TABLE `t3` (
+ `a` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+- KEY `b` (`c`),
+- CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`c`) REFERENCES `t1` (`b`)
++ KEY `b` (`c`)
+ ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ CREATE TABLE t4(a int);
+ ALTER TABLE t4 RENAME COLUMN a TO aa, ALGORITHM = INPLACE;
+@@ -2774,36 +2772,6 @@
+ ERROR 42S22: Unknown column 'd' in 'field list'
+ DROP TRIGGER trg1;
+ DROP PROCEDURE sp1;
+-CREATE TABLE t_gen(a INT, b DOUBLE GENERATED ALWAYS AS (SQRT(a)));
+-INSERT INTO t_gen(a) VALUES(4);
+-SELECT * FROM t_gen;
+-a b
+-4 2
+-SHOW CREATE TABLE t_gen;
+-Table Create Table
+-t_gen CREATE TABLE `t_gen` (
+- `a` int(11) DEFAULT NULL,
+- `b` double GENERATED ALWAYS AS (sqrt(`a`)) VIRTUAL
+-) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+-ALTER TABLE t_gen RENAME COLUMN a TO c, CHANGE COLUMN b b DOUBLE GENERATED ALWAYS AS (SQRT(c));
+-SELECT * FROM t_gen;
+-c b
+-4 2
+-SHOW CREATE TABLE t_gen;
+-Table Create Table
+-t_gen CREATE TABLE `t_gen` (
+- `c` int(11) DEFAULT NULL,
+- `b` double GENERATED ALWAYS AS (sqrt(`c`)) VIRTUAL
+-) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+-ALTER TABLE t_gen CHANGE COLUMN c x INT;
+-show create table t_gen;
+-Table Create Table
+-t_gen CREATE TABLE `t_gen` (
+- `x` int(11) DEFAULT NULL,
+- `b` double GENERATED ALWAYS AS (sqrt(`x`)) VIRTUAL
+-) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+-ALTER TABLE t_gen RENAME COLUMN x TO a;
+-DROP TABLE t_gen;
+ SHOW CREATE TABLE t1;
+ Table Create Table
+ t1 CREATE TABLE `t1` (
diff --git a/mysql-test/main/alter_table.combinations b/mysql-test/main/alter_table.combinations
new file mode 100644
index 00000000000..824e0a3be04
--- /dev/null
+++ b/mysql-test/main/alter_table.combinations
@@ -0,0 +1,5 @@
+[innodb]
+
+[aria]
+
+[heap]
diff --git a/mysql-test/main/alter_table.result b/mysql-test/main/alter_table.result
index 44973141c2d..c2c5813a100 100644
--- a/mysql-test/main/alter_table.result
+++ b/mysql-test/main/alter_table.result
@@ -2563,3 +2563,684 @@ drop view v1;
#
# End of 10.3 tests
#
+#
+# MDEV-16290 ALTER TABLE ... RENAME COLUMN syntax
+#
+SET @save_default_engine= @@DEFAULT_STORAGE_ENGINE;
+CREATE TABLE t1(a INT, b VARCHAR(30), c FLOAT);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` varchar(30) DEFAULT NULL,
+ `c` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES(1,'abcd',1.234);
+CREATE TABLE t2(a INT, b VARCHAR(30), c FLOAT) ENGINE=MyIsam;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` int(11) DEFAULT NULL,
+ `b` varchar(30) DEFAULT NULL,
+ `c` float DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t2 VALUES(1,'abcd',1.234);
+ALTER TABLE t1 RENAME COLUMN a TO a;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` varchar(30) DEFAULT NULL,
+ `c` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 RENAME COLUMN a TO m;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `m` int(11) DEFAULT NULL,
+ `b` varchar(30) DEFAULT NULL,
+ `c` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+SELECT * FROM t1;
+m b c
+1 abcd 1.234
+ALTER TABLE t1 RENAME COLUMN m TO x,
+RENAME COLUMN b TO y,
+RENAME COLUMN c TO z;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `x` int(11) DEFAULT NULL,
+ `y` varchar(30) DEFAULT NULL,
+ `z` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+SELECT * FROM t1;
+x y z
+1 abcd 1.234
+ALTER TABLE t2 RENAME COLUMN a TO d, RENAME COLUMN b TO e, RENAME COLUMN c to f;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `d` int(11) DEFAULT NULL,
+ `e` varchar(30) DEFAULT NULL,
+ `f` float DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+SELECT * FROM t2;
+d e f
+1 abcd 1.234
+ALTER TABLE t1 CHANGE COLUMN x a INT, RENAME COLUMN y TO b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` varchar(30) DEFAULT NULL,
+ `z` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 CHANGE COLUMN z c DOUBLE, RENAME COLUMN b to b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` varchar(30) DEFAULT NULL,
+ `c` double DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 CHANGE COLUMN a b int, RENAME COLUMN b TO c, CHANGE COLUMN c d FLOAT;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `c` varchar(30) DEFAULT NULL,
+ `d` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 ADD COLUMN zz INT, RENAME COLUMN d TO f;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `c` varchar(30) DEFAULT NULL,
+ `f` float DEFAULT NULL,
+ `zz` int(11) DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 DROP COLUMN zz, RENAME COLUMN c TO zz;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `zz` varchar(30) DEFAULT NULL,
+ `f` float DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 RENAME COLUMN zz to c, DROP COLUMN f;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `c` varchar(30) DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 ADD COLUMN d INT DEFAULT 5, RENAME COLUMN c TO b, DROP COLUMN b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` varchar(30) DEFAULT NULL,
+ `d` int(11) DEFAULT 5
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 RENAME COLUMN b TO d, RENAME COLUMN d TO b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `d` varchar(30) DEFAULT NULL,
+ `b` int(11) DEFAULT 5
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 ADD KEY(b);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `d` varchar(30) DEFAULT NULL,
+ `b` int(11) DEFAULT 5,
+ KEY `b` (`b`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 RENAME COLUMN b TO bb;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `d` varchar(30) DEFAULT NULL,
+ `bb` int(11) DEFAULT 5,
+ KEY `b` (`bb`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+SELECT * FROM t1;
+d bb
+abcd 5
+CREATE TABLE t3(a int, b int, KEY(b));
+ALTER TABLE t3 ADD CONSTRAINT FOREIGN KEY(b) REFERENCES t1(bb);
+SHOW CREATE TABLE t3;
+Table Create Table
+t3 CREATE TABLE `t3` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ KEY `b` (`b`),
+ CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`bb`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 RENAME COLUMN bb TO b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `d` varchar(30) DEFAULT NULL,
+ `b` int(11) DEFAULT 5,
+ KEY `b` (`b`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t3 RENAME COLUMN b TO c;
+SHOW CREATE TABLE t3;
+Table Create Table
+t3 CREATE TABLE `t3` (
+ `a` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ KEY `b` (`c`),
+ CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`c`) REFERENCES `t1` (`b`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+CREATE TABLE t4(a int);
+ALTER TABLE t4 RENAME COLUMN a TO aa, ALGORITHM = INPLACE;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `aa` int(11) DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t4 RENAME COLUMN aa TO a, ALGORITHM = COPY;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `a` int(11) DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+DROP TABLE t4;
+CREATE VIEW v1 AS SELECT d,e,f FROM t2;
+CREATE TRIGGER trg1 BEFORE UPDATE on t2 FOR EACH ROW SET NEW.d=OLD.d + 10;
+CREATE PROCEDURE sp1() INSERT INTO t2(d) VALUES(10);
+ALTER TABLE t2 RENAME COLUMN d TO g;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `g` int(11) DEFAULT NULL,
+ `e` varchar(30) DEFAULT NULL,
+ `f` float DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t2`.`d` AS `d`,`test`.`t2`.`e` AS `e`,`test`.`t2`.`f` AS `f` from `t2` koi8r koi8r_general_ci
+Warnings:
+Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
+SELECT * FROM v1;
+ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
+UPDATE t2 SET f = f + 10;
+ERROR 42S22: Unknown column 'd' in 'OLD'
+CALL sp1();
+ERROR 42S22: Unknown column 'd' in 'field list'
+DROP TRIGGER trg1;
+DROP PROCEDURE sp1;
+CREATE TABLE t_gen(a INT, b DOUBLE GENERATED ALWAYS AS (SQRT(a)));
+INSERT INTO t_gen(a) VALUES(4);
+SELECT * FROM t_gen;
+a b
+4 2
+SHOW CREATE TABLE t_gen;
+Table Create Table
+t_gen CREATE TABLE `t_gen` (
+ `a` int(11) DEFAULT NULL,
+ `b` double GENERATED ALWAYS AS (sqrt(`a`)) VIRTUAL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t_gen RENAME COLUMN a TO c, CHANGE COLUMN b b DOUBLE GENERATED ALWAYS AS (SQRT(c));
+SELECT * FROM t_gen;
+c b
+4 2
+SHOW CREATE TABLE t_gen;
+Table Create Table
+t_gen CREATE TABLE `t_gen` (
+ `c` int(11) DEFAULT NULL,
+ `b` double GENERATED ALWAYS AS (sqrt(`c`)) VIRTUAL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t_gen CHANGE COLUMN c x INT;
+show create table t_gen;
+Table Create Table
+t_gen CREATE TABLE `t_gen` (
+ `x` int(11) DEFAULT NULL,
+ `b` double GENERATED ALWAYS AS (sqrt(`x`)) VIRTUAL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t_gen RENAME COLUMN x TO a;
+DROP TABLE t_gen;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `d` varchar(30) DEFAULT NULL,
+ `b` int(11) DEFAULT 5,
+ KEY `b` (`b`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+ALTER TABLE t1 RENAME COLUMN b z;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'z' at line 1
+ALTER TABLE t1 RENAME COLUMN FROM b TO z;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM b TO z' at line 1
+ALTER TABLE t1 RENAME COLUMN b TO 1;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1
+ALTER TABLE t1 RENAME COLUMN b TO e, RENAME COLUMN c TO e;
+ERROR 42S22: Unknown column 'c' in 't1'
+ALTER TABLE t1 ADD COLUMN z INT, RENAME COLUMN b TO z;
+ERROR 42S21: Duplicate column name 'z'
+ALTER TABLE t1 DROP COLUMN b, RENAME COLUMN b TO z;
+ERROR 42S22: Unknown column 'b' in 't1'
+ALTER TABLE t1 RENAME COLUMN b TO b, RENAME COLUMN b TO b;
+ERROR 42S22: Unknown column 'b' in 't1'
+ALTER TABLE t1 RENAME COLUMN b TO c3, DROP COLUMN c3;
+ERROR 42000: Can't DROP COLUMN `c3`; check that it exists
+ALTER TABLE t1 ADD COLUMN z INT, CHANGE COLUMN z y INT, DROP COLUMN y;
+ERROR 42S22: Unknown column 'z' in 't1'
+ALTER TABLE t1 ADD COLUMN z INT, RENAME COLUMN z TO y, DROP COLUMN y;
+ERROR 42S22: Unknown column 'z' in 't1'
+ALTER TABLE t1 RENAME COLUMN b TO `nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn`;
+ERROR 42000: Incorrect column name 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn'
+ALTER TABLE t1 CHANGE b `nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn` int;
+ERROR 42000: Identifier name 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn' is too long
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `d` varchar(30) DEFAULT NULL,
+ `b` int(11) DEFAULT 5,
+ KEY `b` (`b`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1
+SELECT * FROM t1;
+d b
+abcd 5
+DROP VIEW v1;
+DROP TABLE t3,t1,t2;
+SET DEFAULT_STORAGE_ENGINE= @save_default_engine;
+#
+# MDEV-7318 RENAME INDEX
+#
+#
+# 1) Tests for syntax and semantics of ALTER TABLE RENAME
+# KEY/INDEX result.
+#
+# 1.a) Both RENAME KEY and RENAME INDEX variants should be
+# allowed and produce expected results.
+create table t1 (pk int primary key, i int, j int, key a(i));
+alter table t1 rename key a to b;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `b` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename index b to c;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+# 1.b) It should be impossible to rename index that doesn't
+# exists, dropped or added within the same ALTER TABLE.
+alter table t1 rename key d to e;
+ERROR 42000: Key 'd' doesn't exist in table 't1'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 drop key c, rename key c to d;
+ERROR 42000: Key 'c' doesn't exist in table 't1'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 add key d(j), rename key d to e;
+ERROR 42000: Key 'd' doesn't exist in table 't1'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+# 1.c) It should be impossible to rename index to a name
+# which is already used by another index, or is used
+# by index which is added within the same ALTER TABLE.
+alter table t1 add key d(j);
+alter table t1 rename key c to d;
+ERROR 42000: Duplicate key name 'd'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`i`),
+ KEY `d` (`j`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 drop key d;
+alter table t1 add key d(j), rename key c to d;
+ERROR 42000: Duplicate key name 'd'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+# 1.d) It should be possible to rename index to a name
+# which belongs to index which is dropped within the
+# same ALTER TABLE.
+alter table t1 add key d(j);
+alter table t1 drop key c, rename key d to c;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`j`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+# 1.e) We disallow renaming from/to PRIMARY as it might
+# lead to some other key becoming "primary" internally,
+# which will be interpreted as dropping/addition of
+# primary key.
+alter table t1 rename key primary to d;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'primary to d' at line 1
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`j`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+# Even using 'funny' syntax.
+alter table t1 rename key `primary` to d;
+ERROR 42000: Incorrect index name 'primary'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`j`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename key c to primary;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'primary' at line 1
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`j`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename key c to `primary`;
+ERROR 42000: Incorrect index name 'primary'
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `pk` int(11) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `j` int(11) DEFAULT NULL,
+ PRIMARY KEY (`pk`),
+ KEY `c` (`j`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+#
+# 2) More complex tests for semantics of ALTER TABLE.
+#
+# 2.a) Check that standalone RENAME KEY works as expected
+# for unique and non-unique indexes.
+create table t1 (a int, unique u(a), b int, key k(b));
+alter table t1 rename key u to uu;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ UNIQUE KEY `uu` (`a`),
+ KEY `k` (`b`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename key k to kk;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ UNIQUE KEY `uu` (`a`),
+ KEY `kk` (`b`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+# 2.b) Check how that this clause can be mixed with other
+# clauses which don't affect key or its columns.
+alter table t1 rename key kk to kkk, add column c int;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ UNIQUE KEY `uu` (`a`),
+ KEY `kkk` (`b`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename key uu to uuu, add key c(c);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ UNIQUE KEY `uuu` (`a`),
+ KEY `kkk` (`b`),
+ KEY `c` (`c`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename key kkk to k, drop key uuu;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ KEY `k` (`b`),
+ KEY `c` (`c`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+alter table t1 rename key k to kk, rename to t2;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` int(11) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ KEY `kk` (`b`),
+ KEY `c` (`c`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t2;
+#
+# 3) Test coverage for handling of RENAME INDEX clause in
+# various storage engines and using different ALTER
+# algorithm.
+#
+# 3.a) Test coverage for simple storage engines (MyISAM/Heap).
+create table t1 (i int, key k(i)) engine=myisam;
+insert into t1 values (1);
+create table t2 (i int, key k(i)) engine=memory;
+insert into t2 values (1);
+# MyISAM and Heap should be able to handle key renaming in-place.
+alter table t1 algorithm=inplace, rename key k to kk;
+alter table t2 algorithm=inplace, rename key k to kk;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kk` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kk` (`i`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1
+# So by default in-place algorithm should be chosen.
+# (ALTER TABLE should report 0 rows affected).
+alter table t1 rename key kk to kkk;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+alter table t2 rename key kk to kkk;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kkk` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kkk` (`i`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1
+# Copy algorithm should work as well.
+alter table t1 algorithm=copy, rename key kkk to kkkk;
+alter table t2 algorithm=copy, rename key kkk to kkkk;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kkkk` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kkkk` (`i`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1
+# When renaming is combined with other in-place operation
+# it still works as expected (i.e. works in-place).
+alter table t1 algorithm=inplace, rename key kkkk to k, alter column i set default 100;
+alter table t2 algorithm=inplace, rename key kkkk to k, alter column i set default 100;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i` int(11) DEFAULT 100,
+ KEY `k` (`i`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `i` int(11) DEFAULT 100,
+ KEY `k` (`i`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1
+# Combining with non-inplace operation results in the whole ALTER
+# becoming non-inplace.
+alter table t1 algorithm=inplace, rename key k to kk, add column j int;
+ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
+alter table t2 algorithm=inplace, rename key k to kk, add column j int;
+ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
+drop table t1, t2;
+# 3.b) Basic tests for InnoDB. More tests can be found in
+# innodb.innodb_rename_index*
+create table t1 (i int, key k(i)) engine=innodb;
+insert into t1 values (1);
+# Basic rename, inplace algorithm should be chosen
+alter table t1 algorithm=inplace, rename key k to kk;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kk` (`i`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+# copy algorithm should work as well.
+alter table t1 algorithm=copy, rename key kk to kkk;
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 0
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `i` int(11) DEFAULT NULL,
+ KEY `kkk` (`i`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+drop table t1;
+#
+# 4) Additional coverage for complex cases in which code
+# in ALTER TABLE comparing old and new table version
+# got confused.
+#
+# Once InnoDB starts to support in-place index renaming the result
+# of below statements should stay the same. Information about
+# indexes returned by SHOW CREATE TABLE (from .FRM) and by
+# InnoDB (from InnoDB data-dictionary) should be consistent.
+#
+create table t1 ( a int, b int, c int, d int,
+primary key (a), index i1 (b), index i2 (c) ) engine=innodb;
+alter table t1 add index i1 (d), rename index i1 to x;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `x` (`b`),
+ KEY `i2` (`c`),
+ KEY `i1` (`d`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+select i.name as k, f.name as c from information_schema.innodb_sys_tables as t,
+information_schema.innodb_sys_indexes as i,
+information_schema.innodb_sys_fields as f
+where t.name='test/t1' and t.table_id = i.table_id and i.index_id = f.index_id
+order by k, c;
+k c
+i1 d
+i2 c
+PRIMARY a
+x b
+drop table t1;
+create table t1 (a int, b int, c int, d int,
+primary key (a), index i1 (b), index i2 (c)) engine=innodb;
+alter table t1 add index i1 (d), rename index i1 to i2, drop index i2;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i2` (`b`),
+ KEY `i1` (`d`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+select i.name as k, f.name as c from information_schema.innodb_sys_tables as t,
+information_schema.innodb_sys_indexes as i,
+information_schema.innodb_sys_fields as f
+where t.name='test/t1' and t.table_id = i.table_id and i.index_id = f.index_id
+order by k, c;
+k c
+i1 d
+i2 b
+PRIMARY a
+drop table t1;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/alter_table.test b/mysql-test/main/alter_table.test
index dc6983da38b..19f9777d803 100644
--- a/mysql-test/main/alter_table.test
+++ b/mysql-test/main/alter_table.test
@@ -2076,3 +2076,383 @@ drop view v1;
--echo #
--echo # End of 10.3 tests
--echo #
+
+--echo #
+--echo # MDEV-16290 ALTER TABLE ... RENAME COLUMN syntax
+--echo #
+SET @save_default_engine= @@DEFAULT_STORAGE_ENGINE;
+--disable_query_log
+if ($MTR_COMBINATION_INNODB)
+{
+SET DEFAULT_STORAGE_ENGINE= INNODB;
+}
+if ($MTR_COMBINATION_ARIA)
+{
+SET DEFAULT_STORAGE_ENGINE= ARIA;
+}
+if ($MTR_COMBINATION_HEAP)
+{
+SET DEFAULT_STORAGE_ENGINE= MEMORY;
+}
+--enable_query_log
+let $default_engine= `select @@default_storage_engine`;
+
+CREATE TABLE t1(a INT, b VARCHAR(30), c FLOAT);
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES(1,'abcd',1.234);
+CREATE TABLE t2(a INT, b VARCHAR(30), c FLOAT) ENGINE=MyIsam;
+SHOW CREATE TABLE t2;
+INSERT INTO t2 VALUES(1,'abcd',1.234);
+
+# Rename one column
+ALTER TABLE t1 RENAME COLUMN a TO a;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 RENAME COLUMN a TO m;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+
+# Rename multiple column
+ALTER TABLE t1 RENAME COLUMN m TO x,
+ RENAME COLUMN b TO y,
+ RENAME COLUMN c TO z;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+
+# Rename multiple columns with MyIsam Engine
+ALTER TABLE t2 RENAME COLUMN a TO d, RENAME COLUMN b TO e, RENAME COLUMN c to f;
+SHOW CREATE TABLE t2;
+SELECT * FROM t2;
+
+# Mix different ALTER operations with RENAME COLUMN
+ALTER TABLE t1 CHANGE COLUMN x a INT, RENAME COLUMN y TO b;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 CHANGE COLUMN z c DOUBLE, RENAME COLUMN b to b;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 CHANGE COLUMN a b int, RENAME COLUMN b TO c, CHANGE COLUMN c d FLOAT;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 ADD COLUMN zz INT, RENAME COLUMN d TO f;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 DROP COLUMN zz, RENAME COLUMN c TO zz;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 RENAME COLUMN zz to c, DROP COLUMN f;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 ADD COLUMN d INT DEFAULT 5, RENAME COLUMN c TO b, DROP COLUMN b;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+
+#Cyclic Rename
+ALTER TABLE t1 RENAME COLUMN b TO d, RENAME COLUMN d TO b;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+
+# Rename with Indexes
+ALTER TABLE t1 ADD KEY(b);
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t1 RENAME COLUMN b TO bb;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+
+# Rename with Foreign keys.
+CREATE TABLE t3(a int, b int, KEY(b));
+ALTER TABLE t3 ADD CONSTRAINT FOREIGN KEY(b) REFERENCES t1(bb);
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t3;
+ALTER TABLE t1 RENAME COLUMN bb TO b;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+ALTER TABLE t3 RENAME COLUMN b TO c;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t3;
+
+# Different Algorithm
+CREATE TABLE t4(a int);
+ALTER TABLE t4 RENAME COLUMN a TO aa, ALGORITHM = INPLACE;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t4;
+ALTER TABLE t4 RENAME COLUMN aa TO a, ALGORITHM = COPY;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t4;
+DROP TABLE t4;
+
+# View, Trigger and SP
+CREATE VIEW v1 AS SELECT d,e,f FROM t2;
+CREATE TRIGGER trg1 BEFORE UPDATE on t2 FOR EACH ROW SET NEW.d=OLD.d + 10;
+CREATE PROCEDURE sp1() INSERT INTO t2(d) VALUES(10);
+ALTER TABLE t2 RENAME COLUMN d TO g;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t2;
+SHOW CREATE VIEW v1;
+--error ER_VIEW_INVALID
+SELECT * FROM v1;
+--error ER_BAD_FIELD_ERROR
+UPDATE t2 SET f = f + 10;
+--error ER_BAD_FIELD_ERROR
+CALL sp1();
+DROP TRIGGER trg1;
+DROP PROCEDURE sp1;
+
+# Generated Columns
+if (!$MTR_COMBINATION_HEAP)
+{
+CREATE TABLE t_gen(a INT, b DOUBLE GENERATED ALWAYS AS (SQRT(a)));
+INSERT INTO t_gen(a) VALUES(4);
+SELECT * FROM t_gen;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t_gen;
+ALTER TABLE t_gen RENAME COLUMN a TO c, CHANGE COLUMN b b DOUBLE GENERATED ALWAYS AS (SQRT(c));
+SELECT * FROM t_gen;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t_gen;
+#--error ER_DEPENDENT_BY_GENERATED_COLUMN
+ALTER TABLE t_gen CHANGE COLUMN c x INT;
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+show create table t_gen;
+#--error ER_DEPENDENT_BY_GENERATED_COLUMN
+ALTER TABLE t_gen RENAME COLUMN x TO a;
+DROP TABLE t_gen;
+}
+
+
+#
+# Negative tests
+#
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+
+# Invalid Syntax
+--error ER_PARSE_ERROR
+ALTER TABLE t1 RENAME COLUMN b z;
+--error ER_PARSE_ERROR
+ALTER TABLE t1 RENAME COLUMN FROM b TO z;
+--error ER_PARSE_ERROR
+ALTER TABLE t1 RENAME COLUMN b TO 1;
+
+# Duplicate column name
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE t1 RENAME COLUMN b TO e, RENAME COLUMN c TO e;
+--error ER_DUP_FIELDNAME
+ALTER TABLE t1 ADD COLUMN z INT, RENAME COLUMN b TO z;
+
+# Multiple operation on same column
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE t1 DROP COLUMN b, RENAME COLUMN b TO z;
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE t1 RENAME COLUMN b TO b, RENAME COLUMN b TO b;
+--error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t1 RENAME COLUMN b TO c3, DROP COLUMN c3;
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE t1 ADD COLUMN z INT, CHANGE COLUMN z y INT, DROP COLUMN y;
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE t1 ADD COLUMN z INT, RENAME COLUMN z TO y, DROP COLUMN y;
+
+# Invalid column name while renaming
+--error ER_WRONG_COLUMN_NAME
+ALTER TABLE t1 RENAME COLUMN b TO `nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn`;
+# This error is different compared to ALTER TABLE ... CHANGE command
+--error ER_TOO_LONG_IDENT
+ALTER TABLE t1 CHANGE b `nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn` int;
+
+--replace_result $default_engine DEFAULT_ENGINE " PAGE_CHECKSUM=1" ""
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+
+# Cleanup
+DROP VIEW v1;
+DROP TABLE t3,t1,t2;
+SET DEFAULT_STORAGE_ENGINE= @save_default_engine;
+
+--echo #
+--echo # MDEV-7318 RENAME INDEX
+--echo #
+
+--echo #
+--echo # 1) Tests for syntax and semantics of ALTER TABLE RENAME
+--echo # KEY/INDEX result.
+--echo #
+--echo # 1.a) Both RENAME KEY and RENAME INDEX variants should be
+--echo # allowed and produce expected results.
+create table t1 (pk int primary key, i int, j int, key a(i));
+alter table t1 rename key a to b;
+show create table t1;
+alter table t1 rename index b to c;
+show create table t1;
+
+--echo # 1.b) It should be impossible to rename index that doesn't
+--echo # exists, dropped or added within the same ALTER TABLE.
+--error ER_KEY_DOES_NOT_EXITS
+alter table t1 rename key d to e;
+show create table t1;
+--error ER_KEY_DOES_NOT_EXITS
+alter table t1 drop key c, rename key c to d;
+show create table t1;
+--error ER_KEY_DOES_NOT_EXITS
+alter table t1 add key d(j), rename key d to e;
+show create table t1;
+
+--echo # 1.c) It should be impossible to rename index to a name
+--echo # which is already used by another index, or is used
+--echo # by index which is added within the same ALTER TABLE.
+alter table t1 add key d(j);
+--error ER_DUP_KEYNAME
+alter table t1 rename key c to d;
+show create table t1;
+alter table t1 drop key d;
+--error ER_DUP_KEYNAME
+alter table t1 add key d(j), rename key c to d;
+show create table t1;
+
+--echo # 1.d) It should be possible to rename index to a name
+--echo # which belongs to index which is dropped within the
+--echo # same ALTER TABLE.
+alter table t1 add key d(j);
+alter table t1 drop key c, rename key d to c;
+show create table t1;
+
+--echo # 1.e) We disallow renaming from/to PRIMARY as it might
+--echo # lead to some other key becoming "primary" internally,
+--echo # which will be interpreted as dropping/addition of
+--echo # primary key.
+--error ER_PARSE_ERROR
+alter table t1 rename key primary to d;
+show create table t1;
+--echo # Even using 'funny' syntax.
+--error ER_WRONG_NAME_FOR_INDEX
+alter table t1 rename key `primary` to d;
+show create table t1;
+--error ER_PARSE_ERROR
+alter table t1 rename key c to primary;
+show create table t1;
+--error ER_WRONG_NAME_FOR_INDEX
+alter table t1 rename key c to `primary`;
+show create table t1;
+drop table t1;
+
+
+--echo #
+--echo # 2) More complex tests for semantics of ALTER TABLE.
+--echo #
+--echo # 2.a) Check that standalone RENAME KEY works as expected
+--echo # for unique and non-unique indexes.
+create table t1 (a int, unique u(a), b int, key k(b));
+alter table t1 rename key u to uu;
+show create table t1;
+alter table t1 rename key k to kk;
+show create table t1;
+
+--echo # 2.b) Check how that this clause can be mixed with other
+--echo # clauses which don't affect key or its columns.
+alter table t1 rename key kk to kkk, add column c int;
+show create table t1;
+alter table t1 rename key uu to uuu, add key c(c);
+show create table t1;
+alter table t1 rename key kkk to k, drop key uuu;
+show create table t1;
+alter table t1 rename key k to kk, rename to t2;
+show create table t2;
+drop table t2;
+
+
+--echo #
+--echo # 3) Test coverage for handling of RENAME INDEX clause in
+--echo # various storage engines and using different ALTER
+--echo # algorithm.
+--echo #
+--echo # 3.a) Test coverage for simple storage engines (MyISAM/Heap).
+create table t1 (i int, key k(i)) engine=myisam;
+insert into t1 values (1);
+create table t2 (i int, key k(i)) engine=memory;
+insert into t2 values (1);
+--echo # MyISAM and Heap should be able to handle key renaming in-place.
+alter table t1 algorithm=inplace, rename key k to kk;
+alter table t2 algorithm=inplace, rename key k to kk;
+show create table t1;
+show create table t2;
+--echo # So by default in-place algorithm should be chosen.
+--echo # (ALTER TABLE should report 0 rows affected).
+--enable_info
+alter table t1 rename key kk to kkk;
+alter table t2 rename key kk to kkk;
+--disable_info
+show create table t1;
+show create table t2;
+--echo # Copy algorithm should work as well.
+alter table t1 algorithm=copy, rename key kkk to kkkk;
+alter table t2 algorithm=copy, rename key kkk to kkkk;
+show create table t1;
+show create table t2;
+--echo # When renaming is combined with other in-place operation
+--echo # it still works as expected (i.e. works in-place).
+alter table t1 algorithm=inplace, rename key kkkk to k, alter column i set default 100;
+alter table t2 algorithm=inplace, rename key kkkk to k, alter column i set default 100;
+show create table t1;
+show create table t2;
+--echo # Combining with non-inplace operation results in the whole ALTER
+--echo # becoming non-inplace.
+--error ER_ALTER_OPERATION_NOT_SUPPORTED
+alter table t1 algorithm=inplace, rename key k to kk, add column j int;
+--error ER_ALTER_OPERATION_NOT_SUPPORTED
+alter table t2 algorithm=inplace, rename key k to kk, add column j int;
+drop table t1, t2;
+
+--echo # 3.b) Basic tests for InnoDB. More tests can be found in
+--echo # innodb.innodb_rename_index*
+create table t1 (i int, key k(i)) engine=innodb;
+insert into t1 values (1);
+--echo # Basic rename, inplace algorithm should be chosen
+--enable_info
+alter table t1 algorithm=inplace, rename key k to kk;
+--disable_info
+show create table t1;
+--echo # copy algorithm should work as well.
+--enable_info
+alter table t1 algorithm=copy, rename key kk to kkk;
+--disable_info
+show create table t1;
+drop table t1;
+
+--echo #
+--echo # 4) Additional coverage for complex cases in which code
+--echo # in ALTER TABLE comparing old and new table version
+--echo # got confused.
+--echo #
+--echo # Once InnoDB starts to support in-place index renaming the result
+--echo # of below statements should stay the same. Information about
+--echo # indexes returned by SHOW CREATE TABLE (from .FRM) and by
+--echo # InnoDB (from InnoDB data-dictionary) should be consistent.
+--echo #
+create table t1 ( a int, b int, c int, d int,
+ primary key (a), index i1 (b), index i2 (c) ) engine=innodb;
+alter table t1 add index i1 (d), rename index i1 to x;
+show create table t1;
+select i.name as k, f.name as c from information_schema.innodb_sys_tables as t,
+ information_schema.innodb_sys_indexes as i,
+ information_schema.innodb_sys_fields as f
+where t.name='test/t1' and t.table_id = i.table_id and i.index_id = f.index_id
+order by k, c;
+drop table t1;
+create table t1 (a int, b int, c int, d int,
+ primary key (a), index i1 (b), index i2 (c)) engine=innodb;
+alter table t1 add index i1 (d), rename index i1 to i2, drop index i2;
+show create table t1;
+select i.name as k, f.name as c from information_schema.innodb_sys_tables as t,
+ information_schema.innodb_sys_indexes as i,
+ information_schema.innodb_sys_fields as f
+where t.name='test/t1' and t.table_id = i.table_id and i.index_id = f.index_id
+order by k, c;
+drop table t1;
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/alter_user.result b/mysql-test/main/alter_user.result
index cae864fa437..a2ff642c073 100644
--- a/mysql-test/main/alter_user.result
+++ b/mysql-test/main/alter_user.result
@@ -21,26 +21,30 @@ alter user foo;
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
% foo N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 mysql_native_password N N 0.000000
-# Test super privilege works correctly with a read only database.
+#
+# Test READ_ONLY privilege works correctly with a read only database.
+#
SET @start_read_only = @@global.read_only;
SET GLOBAL read_only=1;
grant create user on *.* to foo;
-# Currently no super privileges.
+# Currently no READ_ONLY ADMIN privileges.
connect a, localhost, foo;
select @@global.read_only;
@@global.read_only
1
alter user foo;
ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
-# Grant super privilege to the user.
+# Grant READ_ONLY ADMIN privilege to the user.
connection default;
-grant super on *.* to foo;
-# We now have super privilege. We should be able to run alter user.
+grant READ_ONLY ADMIN on *.* to foo;
+# We now have READ_ONLY ADMIN privilege. We should be able to run alter user.
connect b, localhost, foo;
alter user foo;
connection default;
SET GLOBAL read_only = @start_read_only;
+#
# Test inexistant user.
+#
alter user boo;
ERROR HY000: Operation ALTER USER failed for 'boo'
#--warning ER_CANNOT_USER
@@ -48,19 +52,21 @@ alter if exists user boo;
Warnings:
Error 1133 Can't find any matching row in the user table
Note 1396 Operation ALTER USER failed for 'boo'
+#
# Test password related altering.
+#
alter user foo identified by 'something';
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
alter user foo identified by 'something2';
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *9CD58369E930E28C8996A89DB18B63294E6DC10C N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N 0 0 0 0 mysql_native_password *9CD58369E930E28C8996A89DB18B63294E6DC10C N N 0.000000
+% foo *9CD58369E930E28C8996A89DB18B63294E6DC10C N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N 0 0 0 0 mysql_native_password *9CD58369E930E28C8996A89DB18B63294E6DC10C N N 0.000000
alter user foo identified by password '*88C89BE093D4ECF72D039F62EBB7477EA1FD4D63';
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
alter user foo identified with 'somecoolplugin';
ERROR HY000: Operation ALTER USER failed for 'foo'@'%'
show warnings;
@@ -70,32 +76,36 @@ Error 1396 Operation ALTER USER failed for 'foo'@'%'
alter user foo identified with 'mysql_old_password';
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N 0 0 0 0 mysql_old_password N N 0.000000
+% foo N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N 0 0 0 0 mysql_old_password N N 0.000000
alter user foo identified with 'mysql_old_password' using '0123456789ABCDEF';
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo 0123456789ABCDEF N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N 0 0 0 0 mysql_old_password 0123456789ABCDEF N N 0.000000
+% foo 0123456789ABCDEF N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N 0 0 0 0 mysql_old_password 0123456789ABCDEF N N 0.000000
+#
# Test ssl related altering.
+#
alter user foo identified by 'something' require SSL;
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N ANY 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N ANY 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
alter user foo identified by 'something' require X509;
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N X509 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N X509 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
alter user foo identified by 'something'
require cipher 'text' issuer 'foo_issuer' subject 'foo_subject';
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N SPECIFIED text foo_issuer foo_subject 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N SPECIFIED text foo_issuer foo_subject 0 0 0 0 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+#
# Test resource limits altering.
+#
alter user foo with MAX_QUERIES_PER_HOUR 10
MAX_UPDATES_PER_HOUR 20
MAX_CONNECTIONS_PER_HOUR 30
MAX_USER_CONNECTIONS 40;
select * from mysql.user where user = 'foo';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
-% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N SPECIFIED text foo_issuer foo_subject 10 20 30 40 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
+% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N SPECIFIED text foo_issuer foo_subject 10 20 30 40 mysql_native_password *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N 0.000000
drop user foo;
update mysql.global_priv set priv=@root_priv where user='root' and host='localhost';
diff --git a/mysql-test/main/alter_user.test b/mysql-test/main/alter_user.test
index 9ea98615272..a18076930b6 100644
--- a/mysql-test/main/alter_user.test
+++ b/mysql-test/main/alter_user.test
@@ -16,36 +16,47 @@ select * from mysql.user where user = 'foo';
alter user foo;
select * from mysql.user where user = 'foo';
---echo # Test super privilege works correctly with a read only database.
+--echo #
+--echo # Test READ_ONLY privilege works correctly with a read only database.
+--echo #
+
SET @start_read_only = @@global.read_only;
SET GLOBAL read_only=1;
grant create user on *.* to foo;
---echo # Currently no super privileges.
+--echo # Currently no READ_ONLY ADMIN privileges.
connect (a, localhost, foo);
select @@global.read_only;
--error ER_OPTION_PREVENTS_STATEMENT
alter user foo;
---echo # Grant super privilege to the user.
+--echo # Grant READ_ONLY ADMIN privilege to the user.
connection default;
-grant super on *.* to foo;
+grant READ_ONLY ADMIN on *.* to foo;
---echo # We now have super privilege. We should be able to run alter user.
+--echo # We now have READ_ONLY ADMIN privilege. We should be able to run alter user.
connect (b, localhost, foo);
alter user foo;
connection default;
SET GLOBAL read_only = @start_read_only;
+
+--echo #
--echo # Test inexistant user.
+--echo #
+
--error ER_CANNOT_USER
alter user boo;
--echo #--warning ER_CANNOT_USER
alter if exists user boo;
+
+--echo #
--echo # Test password related altering.
+--echo #
+
alter user foo identified by 'something';
select * from mysql.user where user = 'foo';
@@ -65,7 +76,11 @@ select * from mysql.user where user = 'foo';
alter user foo identified with 'mysql_old_password' using '0123456789ABCDEF';
select * from mysql.user where user = 'foo';
+
+--echo #
--echo # Test ssl related altering.
+--echo #
+
alter user foo identified by 'something' require SSL;
select * from mysql.user where user = 'foo';
@@ -76,7 +91,11 @@ alter user foo identified by 'something'
require cipher 'text' issuer 'foo_issuer' subject 'foo_subject';
select * from mysql.user where user = 'foo';
+
+--echo #
--echo # Test resource limits altering.
+--echo #
+
alter user foo with MAX_QUERIES_PER_HOUR 10
MAX_UPDATES_PER_HOUR 20
MAX_CONNECTIONS_PER_HOUR 30
diff --git a/mysql-test/main/analyze_format_json.result b/mysql-test/main/analyze_format_json.result
index ccef3a63592..f45433a1572 100644
--- a/mysql-test/main/analyze_format_json.result
+++ b/mysql-test/main/analyze_format_json.result
@@ -517,6 +517,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 0,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t2",
@@ -548,6 +549,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 256,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t2",
@@ -590,6 +592,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 256,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t2",
@@ -701,6 +704,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 0,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "packed_sort_key,rowid",
"temporary_table": {
"filesort": {
"sort_key": "(subquery#2)",
@@ -709,6 +713,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 0,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t2",
@@ -824,6 +829,7 @@ ANALYZE
"r_limit": null,
"r_used_priority_queue": null,
"r_output_rows": null,
+ "r_sort_mode": "sort_key,rowid",
"table": {
"table_name": "t2",
"access_type": "ALL",
diff --git a/mysql-test/main/analyze_stmt_orderby.result b/mysql-test/main/analyze_stmt_orderby.result
index e23813944f4..47bc856ba53 100644
--- a/mysql-test/main/analyze_stmt_orderby.result
+++ b/mysql-test/main/analyze_stmt_orderby.result
@@ -44,6 +44,7 @@ ANALYZE
"r_limit": 5,
"r_used_priority_queue": true,
"r_output_rows": 6,
+ "r_sort_mode": "sort_key,rowid",
"table": {
"update": 1,
"table_name": "t2",
@@ -145,6 +146,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 10000,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"table": {
"delete": 1,
"table_name": "t2",
@@ -211,6 +213,7 @@ ANALYZE
"r_limit": 4,
"r_used_priority_queue": true,
"r_output_rows": 4,
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t0",
@@ -300,6 +303,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 10,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,addon_fields",
"table": {
"table_name": "t0",
"access_type": "ALL",
@@ -359,6 +363,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 10,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t2",
@@ -472,6 +477,7 @@ ANALYZE
"r_limit": 1,
"r_used_priority_queue": true,
"r_output_rows": 2,
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"filesort": {
"sort_key": "t5.a",
@@ -480,6 +486,7 @@ ANALYZE
"r_used_priority_queue": false,
"r_output_rows": 6,
"r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,rowid",
"temporary_table": {
"table": {
"table_name": "t6",
diff --git a/mysql-test/main/brackets.result b/mysql-test/main/brackets.result
index 548250db758..3de7d902335 100644
--- a/mysql-test/main/brackets.result
+++ b/mysql-test/main/brackets.result
@@ -4454,7 +4454,7 @@ create view v1 as
with t(a) as (values (2), (1)) select a from t;
show create view v1;
View Create View character_set_client collation_connection
-v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as (values (2),(1))select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(`a`) as (values (2),(1))select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
select * from v1;
a
2
@@ -4469,7 +4469,7 @@ order by 1 desc limit 3 )
select a from t1 where a=4 union select a from t where a=7 order by a desc;
show create view v1;
View Create View character_set_client collation_connection
-v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as (values (2),(1) union (values (4),(7)) order by 1 desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(`a`) as (values (2),(1) union (values (4),(7)) order by 1 desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
select * from v1;
a
7
@@ -4484,7 +4484,7 @@ order by 1 desc limit 3 )
select a from t1 where a=1 union select a from t where a=7 order by a desc;
show create view v1;
View Create View character_set_client collation_connection
-v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as ((values (2),(1)) union (values (4),(7) order by 1 desc) order by 1 desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 1 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(`a`) as ((values (2),(1)) union (values (4),(7) order by 1 desc) order by 1 desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 1 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
select * from v1;
a
7
diff --git a/mysql-test/main/cte_cycle.result b/mysql-test/main/cte_cycle.result
new file mode 100644
index 00000000000..e66d090b3c7
--- /dev/null
+++ b/mysql-test/main/cte_cycle.result
@@ -0,0 +1,156 @@
+#
+# check errors
+#
+WITH RECURSIVE cte AS (
+SELECT 1 AS a UNION ALL
+SELECT NULL FROM cte WHERE a IS NOT NULL)
+CYCLE a, a RESTRICT
+SELECT * FROM cte;
+ERROR 42S21: Duplicate column name 'a'
+WITH RECURSIVE cte AS (
+SELECT 1 AS a UNION ALL
+SELECT NULL FROM cte WHERE a IS NOT NULL)
+CYCLE b RESTRICT
+SELECT * FROM cte;
+ERROR 42S22: Unknown column 'b' in 'CYCLE clause'
+WITH cte AS (
+SELECT 1 AS a UNION ALL
+SELECT NULL FROM cte WHERE a IS NOT NULL)
+CYCLE b RESTRICT
+SELECT * FROM cte;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CYCLE b RESTRICT
+SELECT * FROM cte' at line 4
+#
+# A degenerate case
+#
+WITH RECURSIVE cte AS (
+SELECT 1 AS a, 2 as b)
+CYCLE b RESTRICT
+SELECT * FROM cte;
+a b
+1 2
+#
+# A simple case
+#
+WITH RECURSIVE cte AS (
+SELECT 1 AS a, 2 as b UNION ALL
+SELECT 2, 2 FROM cte WHERE a IS NOT NULL)
+CYCLE b RESTRICT
+SELECT * FROM cte;
+a b
+1 2
+#
+# MDEV-20632 case (with fixed syntax)
+#
+create table t1 (from_ int, to_ int);
+insert into t1 values (1,2), (1,100), (2,3), (3,4), (4,1);
+WITH RECURSIVE cte (depth, from_, to_) as (
+SELECT 0,1,1
+UNION
+SELECT depth+1, t1.from_, t1.to_
+FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_ RESTRICT
+select * from cte;
+depth from_ to_
+0 1 1
+1 1 2
+1 1 100
+2 2 3
+3 3 4
+4 4 1
+create view v1 as WITH RECURSIVE cte (depth, from_, to_) as (
+SELECT 0,1,1
+UNION
+SELECT depth+1, t1.from_, t1.to_
+FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_ RESTRICT
+select * from cte;
+show create view v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with recursive cte(`depth`,`from_`,`to_`) as (select 0 AS `depth`,1 AS `from_`,1 AS `to_` union select `cte`.`depth` + 1 AS `depth+1`,`t1`.`from_` AS `from_`,`t1`.`to_` AS `to_` from (`t1` join `cte`) where `t1`.`from_` = `cte`.`to_`) CYCLE `from_`,`to_` RESTRICT select `cte`.`depth` AS `depth`,`cte`.`from_` AS `from_`,`cte`.`to_` AS `to_` from `cte` latin1 latin1_swedish_ci
+select * from v1;
+depth from_ to_
+0 1 1
+1 1 2
+1 1 100
+2 2 3
+3 3 4
+4 4 1
+delete from t1;
+insert into t1 values (1,2), (1,NULL), (NULL,NULL), (NULL, 1);
+select * from v1;
+depth from_ to_
+0 1 1
+1 1 2
+1 1 NULL
+drop view v1;
+drop table t1;
+#
+# A simple blob case
+#
+create table t1 (a int, b text);
+insert into t1 values (1, "a");
+WITH RECURSIVE cte AS (
+SELECT a, b from t1 UNION ALL
+SELECT a, b FROM cte WHERE a IS NOT NULL)
+CYCLE b RESTRICT
+SELECT * FROM cte;
+a b
+1 a
+drop table t1;
+#
+# check bit types
+#
+create table t1 (from_ bit(3), to_ bit(3));
+insert into t1 values (1,2), (1,7), (2,3), (3,4), (4,1);
+WITH RECURSIVE cte (depth, from_, to_) as (
+SELECT 0,1,1
+UNION
+SELECT depth+1, t1.from_, t1.to_
+FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_ RESTRICT
+select * from cte;
+depth from_ to_
+0 1 1
+1 1 2
+1 1 7
+2 2 3
+3 3 4
+4 4 1
+drop table t1;
+#
+# check bit types with BLOBs (TEXT)
+#
+create table t1 (from_ bit(3), to_ bit(3), load_ text);
+insert into t1 values (1,2,"A"), (1,7,"A"), (2,3,"A"), (3,4,"A"), (4,1,"A");
+WITH RECURSIVE cte (depth, from_, to_, load_) as (
+SELECT 0,1,1,"A"
+ UNION
+SELECT depth+1, t1.from_, t1.to_, t1.load_
+FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_, load_ RESTRICT
+select * from cte;
+depth from_ to_ load_
+0 1 1 A
+1 1 2 A
+1 1 7 A
+2 2 3 A
+3 3 4 A
+4 4 1 A
+insert into t1 values (4,1,"B");
+WITH RECURSIVE cte (depth, from_, to_, load_) as (
+SELECT 0,1,1,"A"
+ UNION
+SELECT depth+1, t1.from_, t1.to_, t1.load_
+FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_, load_ RESTRICT
+select * from cte;
+depth from_ to_ load_
+0 1 1 A
+1 1 2 A
+1 1 7 A
+2 2 3 A
+3 3 4 A
+4 4 1 A
+4 4 1 B
+drop table t1;
diff --git a/mysql-test/main/cte_cycle.test b/mysql-test/main/cte_cycle.test
new file mode 100644
index 00000000000..505980353fd
--- /dev/null
+++ b/mysql-test/main/cte_cycle.test
@@ -0,0 +1,143 @@
+
+--echo #
+--echo # check errors
+--echo #
+
+--error ER_DUP_FIELDNAME
+WITH RECURSIVE cte AS (
+ SELECT 1 AS a UNION ALL
+ SELECT NULL FROM cte WHERE a IS NOT NULL)
+ CYCLE a, a RESTRICT
+SELECT * FROM cte;
+
+--error ER_BAD_FIELD_ERROR
+WITH RECURSIVE cte AS (
+ SELECT 1 AS a UNION ALL
+ SELECT NULL FROM cte WHERE a IS NOT NULL)
+ CYCLE b RESTRICT
+SELECT * FROM cte;
+
+--error ER_PARSE_ERROR
+WITH cte AS (
+ SELECT 1 AS a UNION ALL
+ SELECT NULL FROM cte WHERE a IS NOT NULL)
+ CYCLE b RESTRICT
+SELECT * FROM cte;
+
+
+--echo #
+--echo # A degenerate case
+--echo #
+
+WITH RECURSIVE cte AS (
+ SELECT 1 AS a, 2 as b)
+ CYCLE b RESTRICT
+SELECT * FROM cte;
+
+
+--echo #
+--echo # A simple case
+--echo #
+
+WITH RECURSIVE cte AS (
+ SELECT 1 AS a, 2 as b UNION ALL
+ SELECT 2, 2 FROM cte WHERE a IS NOT NULL)
+ CYCLE b RESTRICT
+SELECT * FROM cte;
+
+
+--echo #
+--echo # MDEV-20632 case (with fixed syntax)
+--echo #
+
+create table t1 (from_ int, to_ int);
+insert into t1 values (1,2), (1,100), (2,3), (3,4), (4,1);
+
+WITH RECURSIVE cte (depth, from_, to_) as (
+ SELECT 0,1,1
+ UNION
+ SELECT depth+1, t1.from_, t1.to_
+ FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_ RESTRICT
+select * from cte;
+
+create view v1 as WITH RECURSIVE cte (depth, from_, to_) as (
+ SELECT 0,1,1
+ UNION
+ SELECT depth+1, t1.from_, t1.to_
+ FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_ RESTRICT
+select * from cte;
+
+show create view v1;
+
+select * from v1;
+
+delete from t1;
+
+insert into t1 values (1,2), (1,NULL), (NULL,NULL), (NULL, 1);
+
+select * from v1;
+
+drop view v1;
+
+drop table t1;
+
+
+--echo #
+--echo # A simple blob case
+--echo #
+
+create table t1 (a int, b text);
+insert into t1 values (1, "a");
+
+WITH RECURSIVE cte AS (
+ SELECT a, b from t1 UNION ALL
+ SELECT a, b FROM cte WHERE a IS NOT NULL)
+ CYCLE b RESTRICT
+SELECT * FROM cte;
+
+drop table t1;
+
+--echo #
+--echo # check bit types
+--echo #
+
+create table t1 (from_ bit(3), to_ bit(3));
+insert into t1 values (1,2), (1,7), (2,3), (3,4), (4,1);
+
+WITH RECURSIVE cte (depth, from_, to_) as (
+ SELECT 0,1,1
+ UNION
+ SELECT depth+1, t1.from_, t1.to_
+ FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_ RESTRICT
+select * from cte;
+drop table t1;
+
+--echo #
+--echo # check bit types with BLOBs (TEXT)
+--echo #
+
+create table t1 (from_ bit(3), to_ bit(3), load_ text);
+insert into t1 values (1,2,"A"), (1,7,"A"), (2,3,"A"), (3,4,"A"), (4,1,"A");
+
+WITH RECURSIVE cte (depth, from_, to_, load_) as (
+ SELECT 0,1,1,"A"
+ UNION
+ SELECT depth+1, t1.from_, t1.to_, t1.load_
+ FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_, load_ RESTRICT
+select * from cte;
+insert into t1 values (4,1,"B");
+WITH RECURSIVE cte (depth, from_, to_, load_) as (
+ SELECT 0,1,1,"A"
+ UNION
+ SELECT depth+1, t1.from_, t1.to_, t1.load_
+ FROM t1, cte WHERE t1.from_ = cte.to_
+) CYCLE from_, to_, load_ RESTRICT
+select * from cte;
+
+drop table t1;
+
+
diff --git a/mysql-test/main/cte_nonrecursive.result b/mysql-test/main/cte_nonrecursive.result
index 53d9d5ecc8f..a24ebdd1fff 100644
--- a/mysql-test/main/cte_nonrecursive.result
+++ b/mysql-test/main/cte_nonrecursive.result
@@ -606,7 +606,7 @@ with t(c) as (select a from t1 where b >= 'c')
select * from t r1 where r1.c=4;
show create view v3;
View Create View character_set_client collation_connection
-v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS with t(c) as (select `t1`.`a` AS `c` from `t1` where `t1`.`b` >= 'c')select `r1`.`c` AS `c` from `t` `r1` where `r1`.`c` = 4 latin1 latin1_swedish_ci
+v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS with t(`c`) as (select `t1`.`a` AS `c` from `t1` where `t1`.`b` >= 'c')select `r1`.`c` AS `c` from `t` `r1` where `r1`.`c` = 4 latin1 latin1_swedish_ci
select * from v3;
c
4
@@ -618,7 +618,7 @@ with t(c) as (select a from t1 where b >= 'c')
select * from t r1, t r2 where r1.c=r2.c and r2.c=4;
show create view v4;
View Create View character_set_client collation_connection
-v4 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS with t(c) as (select `test`.`t1`.`a` AS `c` from `test`.`t1` where `test`.`t1`.`b` >= 'c')select `r1`.`c` AS `c`,`r2`.`c` AS `d` from (`t` `r1` join (select `test`.`t1`.`a` AS `c` from `test`.`t1` where `test`.`t1`.`b` >= 'c') `r2`) where `r1`.`c` = `r2`.`c` and `r2`.`c` = 4 latin1 latin1_swedish_ci
+v4 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS with t(`c`) as (select `test`.`t1`.`a` AS `c` from `test`.`t1` where `test`.`t1`.`b` >= 'c')select `r1`.`c` AS `c`,`r2`.`c` AS `d` from (`t` `r1` join (select `test`.`t1`.`a` AS `c` from `test`.`t1` where `test`.`t1`.`b` >= 'c') `r2`) where `r1`.`c` = `r2`.`c` and `r2`.`c` = 4 latin1 latin1_swedish_ci
select * from v4;
c d
4 4
diff --git a/mysql-test/main/cte_recursive.result b/mysql-test/main/cte_recursive.result
index d439c2fc39b..2f00248fb55 100644
--- a/mysql-test/main/cte_recursive.result
+++ b/mysql-test/main/cte_recursive.result
@@ -699,7 +699,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
5 RECURSIVE UNION p ALL NULL NULL NULL NULL 12 100.00 Using where; Using join buffer (flat, BNL join)
NULL UNION RESULT <union3,4,5> ALL NULL NULL NULL NULL NULL NULL
Warnings:
-Note 1003 with recursive ancestor_couple_ids(h_id,w_id) as (/* select#2 */ select `a`.`father` AS `h_id`,`a`.`mother` AS `w_id` from `coupled_ancestors` `a` where `a`.`father` is not null and `a`.`mother` is not null), coupled_ancestors(id,name,dob,father,mother) as (/* select#3 */ select `test`.`folks`.`id` AS `id`,`test`.`folks`.`name` AS `name`,`test`.`folks`.`dob` AS `dob`,`test`.`folks`.`father` AS `father`,`test`.`folks`.`mother` AS `mother` from `test`.`folks` where `test`.`folks`.`name` = 'Me' union all /* select#4 */ select `test`.`p`.`id` AS `id`,`test`.`p`.`name` AS `name`,`test`.`p`.`dob` AS `dob`,`test`.`p`.`father` AS `father`,`test`.`p`.`mother` AS `mother` from `test`.`folks` `p` join `ancestor_couple_ids` `fa` where `test`.`p`.`id` = `fa`.`h_id` union all /* select#5 */ select `test`.`p`.`id` AS `id`,`test`.`p`.`name` AS `name`,`test`.`p`.`dob` AS `dob`,`test`.`p`.`father` AS `father`,`test`.`p`.`mother` AS `mother` from `test`.`folks` `p` join `ancestor_couple_ids` `ma` where `test`.`p`.`id` = `ma`.`w_id`)/* select#1 */ select `h`.`name` AS `name`,`h`.`dob` AS `dob`,`w`.`name` AS `name`,`w`.`dob` AS `dob` from `ancestor_couple_ids` `c` join `coupled_ancestors` `h` join `coupled_ancestors` `w` where `h`.`id` = `c`.`h_id` and `w`.`id` = `c`.`w_id`
+Note 1003 with recursive ancestor_couple_ids(`h_id`,`w_id`) as (/* select#2 */ select `a`.`father` AS `h_id`,`a`.`mother` AS `w_id` from `coupled_ancestors` `a` where `a`.`father` is not null and `a`.`mother` is not null), coupled_ancestors(`id`,`name`,`dob`,`father`,`mother`) as (/* select#3 */ select `test`.`folks`.`id` AS `id`,`test`.`folks`.`name` AS `name`,`test`.`folks`.`dob` AS `dob`,`test`.`folks`.`father` AS `father`,`test`.`folks`.`mother` AS `mother` from `test`.`folks` where `test`.`folks`.`name` = 'Me' union all /* select#4 */ select `test`.`p`.`id` AS `id`,`test`.`p`.`name` AS `name`,`test`.`p`.`dob` AS `dob`,`test`.`p`.`father` AS `father`,`test`.`p`.`mother` AS `mother` from `test`.`folks` `p` join `ancestor_couple_ids` `fa` where `test`.`p`.`id` = `fa`.`h_id` union all /* select#5 */ select `test`.`p`.`id` AS `id`,`test`.`p`.`name` AS `name`,`test`.`p`.`dob` AS `dob`,`test`.`p`.`father` AS `father`,`test`.`p`.`mother` AS `mother` from `test`.`folks` `p` join `ancestor_couple_ids` `ma` where `test`.`p`.`id` = `ma`.`w_id`)/* select#1 */ select `h`.`name` AS `name`,`h`.`dob` AS `dob`,`w`.`name` AS `name`,`w`.`dob` AS `dob` from `ancestor_couple_ids` `c` join `coupled_ancestors` `h` join `coupled_ancestors` `w` where `h`.`id` = `c`.`h_id` and `w`.`id` = `c`.`w_id`
# simple mutual recursion
with recursive
ancestor_couple_ids(h_id, w_id)
@@ -3093,7 +3093,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
4 DEPENDENT SUBQUERY <derived2> ALL NULL NULL NULL NULL 16 100.00 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL NULL
Warnings:
-Note 1003 with recursive destinations(city,legs) as (/* select#2 */ select `test`.`a`.`arrival` AS `city`,1 AS `legs` from `test`.`flights` `a` where `test`.`a`.`departure` = 'Cairo' union /* select#3 */ select `test`.`b`.`arrival` AS `arrival`,`r`.`legs` + 1 AS `r.legs + 1` from `destinations` `r` join `test`.`flights` `b` where `r`.`city` = `test`.`b`.`departure` and !<in_optimizer>(`test`.`b`.`arrival`,<exists>(/* select#4 */ select `destinations`.`city` from `destinations` where trigcond(`test`.`b`.`arrival` = `destinations`.`city` or `destinations`.`city` is null) having trigcond(`destinations`.`city` is null))))/* select#1 */ select `destinations`.`city` AS `city`,`destinations`.`legs` AS `legs` from `destinations`
+Note 1003 with recursive destinations(`city`,`legs`) as (/* select#2 */ select `test`.`a`.`arrival` AS `city`,1 AS `legs` from `test`.`flights` `a` where `test`.`a`.`departure` = 'Cairo' union /* select#3 */ select `test`.`b`.`arrival` AS `arrival`,`r`.`legs` + 1 AS `r.legs + 1` from `destinations` `r` join `test`.`flights` `b` where `r`.`city` = `test`.`b`.`departure` and !<in_optimizer>(`test`.`b`.`arrival`,<exists>(/* select#4 */ select `destinations`.`city` from `destinations` where trigcond(`test`.`b`.`arrival` = `destinations`.`city` or `destinations`.`city` is null) having trigcond(`destinations`.`city` is null))))/* select#1 */ select `destinations`.`city` AS `city`,`destinations`.`legs` AS `legs` from `destinations`
set standard_compliant_cte=default;
drop table flights;
#
@@ -3380,7 +3380,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
3 RECURSIVE UNION <derived2> ALL NULL NULL NULL NULL 2 100.00 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL NULL
Warnings:
-Note 1003 with recursive rcte(a) as (/* select#2 */ select 1 AS `a` union /* select#3 */ select cast(`rcte`.`a` + 1 as unsigned) AS `cast(a+1 as unsigned)` from `rcte` where `rcte`.`a` < 10), cte1 as (/* select#4 */ select count(0) AS `c1` from `rcte` join `test`.`t1` where `rcte`.`a` between 3 and 5 and `test`.`t1`.`id` = `rcte`.`a` - 3), cte2 as (/* select#5 */ select count(0) AS `c2` from `rcte` join `test`.`t1` where `rcte`.`a` between 7 and 8 and `test`.`t1`.`id` = `rcte`.`a` - 7)/* select#1 */ select `cte1`.`c1` AS `c1`,`cte2`.`c2` AS `c2` from `cte1` join `cte2`
+Note 1003 with recursive rcte(`a`) as (/* select#2 */ select 1 AS `a` union /* select#3 */ select cast(`rcte`.`a` + 1 as unsigned) AS `cast(a+1 as unsigned)` from `rcte` where `rcte`.`a` < 10), cte1 as (/* select#4 */ select count(0) AS `c1` from `rcte` join `test`.`t1` where `rcte`.`a` between 3 and 5 and `test`.`t1`.`id` = `rcte`.`a` - 3), cte2 as (/* select#5 */ select count(0) AS `c2` from `rcte` join `test`.`t1` where `rcte`.`a` between 7 and 8 and `test`.`t1`.`id` = `rcte`.`a` - 7)/* select#1 */ select `cte1`.`c1` AS `c1`,`cte2`.`c2` AS `c2` from `cte1` join `cte2`
prepare stmt from "with recursive
rcte(a) as
(select 1 union select cast(a+1 as unsigned) from rcte where a < 10),
diff --git a/mysql-test/main/events_bugs.result b/mysql-test/main/events_bugs.result
index 666361188b9..e3984bcd67a 100644
--- a/mysql-test/main/events_bugs.result
+++ b/mysql-test/main/events_bugs.result
@@ -405,7 +405,7 @@ SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS;
event_name definer
e1 mysqltest_u1@localhost
ALTER DEFINER=root@localhost EVENT e1 ON SCHEDULE EVERY 1 HOUR;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS;
event_name definer
e1 mysqltest_u1@localhost
@@ -418,7 +418,7 @@ event_name definer
e1 mysqltest_u1@localhost
DROP EVENT e1;
CREATE DEFINER=root@localhost EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
DROP EVENT e1;
ERROR HY000: Unknown event 'e1'
disconnect conn1;
diff --git a/mysql-test/main/func_misc.result b/mysql-test/main/func_misc.result
index ae6686ecadc..2db9a8e0957 100644
--- a/mysql-test/main/func_misc.result
+++ b/mysql-test/main/func_misc.result
@@ -1641,3 +1641,94 @@ DROP TABLE t1;
#
# End of 10.4 tests
#
+#
+# MDEV-10569 Add RELEASE_ALL_LOCKS SQL-function
+#
+# Test function without any locks
+SELECT RELEASE_ALL_LOCKS();
+RELEASE_ALL_LOCKS()
+0
+# Test function with one lock only
+SELECT GET_LOCK('l1',10);
+GET_LOCK('l1',10)
+1
+SELECT RELEASE_ALL_LOCKS();
+RELEASE_ALL_LOCKS()
+1
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+LOCK_MODE LOCK_TYPE TABLE_SCHEMA
+# Test function with multiple locks
+SELECT GET_LOCK('l01',10),
+GET_LOCK('l02',10),
+GET_LOCK('l03',10),
+GET_LOCK('l04',10),
+GET_LOCK('l05',10),
+GET_LOCK('l06',10),
+GET_LOCK('l07',10),
+GET_LOCK('l08',10),
+GET_LOCK('l09',10),
+GET_LOCK('l10',10),
+GET_LOCK('l11',10),
+GET_LOCK('l12',10),
+GET_LOCK('l13',10),
+GET_LOCK('l14',10),
+GET_LOCK('l15',10);
+GET_LOCK('l01',10) GET_LOCK('l02',10) GET_LOCK('l03',10) GET_LOCK('l04',10) GET_LOCK('l05',10) GET_LOCK('l06',10) GET_LOCK('l07',10) GET_LOCK('l08',10) GET_LOCK('l09',10) GET_LOCK('l10',10) GET_LOCK('l11',10) GET_LOCK('l12',10) GET_LOCK('l13',10) GET_LOCK('l14',10) GET_LOCK('l15',10)
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+LOCK_MODE LOCK_TYPE TABLE_SCHEMA
+MDL_SHARED_NO_WRITE User lock l01
+MDL_SHARED_NO_WRITE User lock l02
+MDL_SHARED_NO_WRITE User lock l03
+MDL_SHARED_NO_WRITE User lock l04
+MDL_SHARED_NO_WRITE User lock l05
+MDL_SHARED_NO_WRITE User lock l06
+MDL_SHARED_NO_WRITE User lock l07
+MDL_SHARED_NO_WRITE User lock l08
+MDL_SHARED_NO_WRITE User lock l09
+MDL_SHARED_NO_WRITE User lock l10
+MDL_SHARED_NO_WRITE User lock l11
+MDL_SHARED_NO_WRITE User lock l12
+MDL_SHARED_NO_WRITE User lock l13
+MDL_SHARED_NO_WRITE User lock l14
+MDL_SHARED_NO_WRITE User lock l15
+SELECT RELEASE_ALL_LOCKS();
+RELEASE_ALL_LOCKS()
+15
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+LOCK_MODE LOCK_TYPE TABLE_SCHEMA
+# Test function with recursive locks
+SELECT GET_LOCK('l1',10),
+GET_LOCK('l2',10),
+GET_LOCK('l2',10),
+GET_LOCK('l3',10),
+GET_LOCK('l3',10),
+GET_LOCK('l3',10),
+GET_LOCK('l4',10),
+GET_LOCK('l4',10),
+GET_LOCK('l4',10),
+GET_LOCK('l4',10),
+GET_LOCK('l5',10),
+GET_LOCK('l5',10),
+GET_LOCK('l5',10),
+GET_LOCK('l5',10),
+GET_LOCK('l5',10);
+GET_LOCK('l1',10) GET_LOCK('l2',10) GET_LOCK('l2',10) GET_LOCK('l3',10) GET_LOCK('l3',10) GET_LOCK('l3',10) GET_LOCK('l4',10) GET_LOCK('l4',10) GET_LOCK('l4',10) GET_LOCK('l4',10) GET_LOCK('l5',10) GET_LOCK('l5',10) GET_LOCK('l5',10) GET_LOCK('l5',10) GET_LOCK('l5',10)
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+LOCK_MODE LOCK_TYPE TABLE_SCHEMA
+MDL_SHARED_NO_WRITE User lock l1
+MDL_SHARED_NO_WRITE User lock l2
+MDL_SHARED_NO_WRITE User lock l3
+MDL_SHARED_NO_WRITE User lock l4
+MDL_SHARED_NO_WRITE User lock l5
+SELECT RELEASE_ALL_LOCKS();
+RELEASE_ALL_LOCKS()
+15
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+LOCK_MODE LOCK_TYPE TABLE_SCHEMA
diff --git a/mysql-test/main/func_misc.test b/mysql-test/main/func_misc.test
index 7d19c9e58af..a471d224677 100644
--- a/mysql-test/main/func_misc.test
+++ b/mysql-test/main/func_misc.test
@@ -1,7 +1,7 @@
#
# Testing of misc functions
#
-
+--source include/have_metadata_lock_info.inc
--source include/default_optimizer_switch.inc
--disable_warnings
DROP TABLE IF EXISTS t1, t2;
@@ -1278,3 +1278,60 @@ DROP TABLE t1;
--echo #
--echo # End of 10.4 tests
--echo #
+
+--echo #
+--echo # MDEV-10569 Add RELEASE_ALL_LOCKS SQL-function
+--echo #
+
+--echo # Test function without any locks
+SELECT RELEASE_ALL_LOCKS();
+
+--echo # Test function with one lock only
+SELECT GET_LOCK('l1',10);
+SELECT RELEASE_ALL_LOCKS();
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+
+--echo # Test function with multiple locks
+SELECT GET_LOCK('l01',10),
+ GET_LOCK('l02',10),
+ GET_LOCK('l03',10),
+ GET_LOCK('l04',10),
+ GET_LOCK('l05',10),
+ GET_LOCK('l06',10),
+ GET_LOCK('l07',10),
+ GET_LOCK('l08',10),
+ GET_LOCK('l09',10),
+ GET_LOCK('l10',10),
+ GET_LOCK('l11',10),
+ GET_LOCK('l12',10),
+ GET_LOCK('l13',10),
+ GET_LOCK('l14',10),
+ GET_LOCK('l15',10);
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+SELECT RELEASE_ALL_LOCKS();
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+
+--echo # Test function with recursive locks
+SELECT GET_LOCK('l1',10),
+ GET_LOCK('l2',10),
+ GET_LOCK('l2',10),
+ GET_LOCK('l3',10),
+ GET_LOCK('l3',10),
+ GET_LOCK('l3',10),
+ GET_LOCK('l4',10),
+ GET_LOCK('l4',10),
+ GET_LOCK('l4',10),
+ GET_LOCK('l4',10),
+ GET_LOCK('l5',10),
+ GET_LOCK('l5',10),
+ GET_LOCK('l5',10),
+ GET_LOCK('l5',10),
+ GET_LOCK('l5',10);
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
+SELECT RELEASE_ALL_LOCKS();
+SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA
+FROM information_schema.metadata_lock_info WHERE thread_id>0 ORDER BY TABLE_SCHEMA;
diff --git a/mysql-test/main/gis.result b/mysql-test/main/gis.result
index 936924ffe87..fa7ded103b2 100644
--- a/mysql-test/main/gis.result
+++ b/mysql-test/main/gis.result
@@ -5095,5 +5095,211 @@ ERROR HY000: Operator does not exists: 'CAST(expr AS multilinestring)'
SELECT CONVERT(1, MULTIPOLYGON);
ERROR HY000: Operator does not exists: 'CAST(expr AS multipolygon)'
#
+# MDEV-17832 Protocol: extensions for Pluggable types and JSON, GEOMETRY
+#
+SET NAMES utf8;
+CREATE TABLE t1 (
+p POINT,
+ls LINESTRING,
+pl POLYGON,
+mp MULTIPOINT,
+mls MULTILINESTRING,
+mpl MULTIPOLYGON,
+gc GEOMETRYCOLLECTION,
+g GEOMETRY
+) CHARACTER SET utf8;
+SELECT * FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def test t1 t1 p p 255 (type=point) 4294967295 0 Y 144 0 63
+def test t1 t1 ls ls 255 (type=linestring) 4294967295 0 Y 144 0 63
+def test t1 t1 pl pl 255 (type=polygon) 4294967295 0 Y 144 0 63
+def test t1 t1 mp mp 255 (type=multipoint) 4294967295 0 Y 144 0 63
+def test t1 t1 mls mls 255 (type=multilinestring) 4294967295 0 Y 144 0 63
+def test t1 t1 mpl mpl 255 (type=multipolygon) 4294967295 0 Y 144 0 63
+def test t1 t1 gc gc 255 (type=geometrycollection) 4294967295 0 Y 144 0 63
+def test t1 t1 g g 255 4294967295 0 Y 144 0 63
+p ls pl mp mls mpl gc g
+SELECT
+COALESCE(p) AS p,
+COALESCE(ls) AS ls,
+COALESCE(pl) AS pl,
+COALESCE(mp) AS mp,
+COALESCE(mls) AS mls,
+COALESCE(mpl) AS mpl,
+COALESCE(gc) AS gc,
+COALESCE(g) AS g
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def p 255 (type=point) 4294967295 0 Y 128 0 63
+def ls 255 (type=linestring) 4294967295 0 Y 128 0 63
+def pl 255 (type=polygon) 4294967295 0 Y 128 0 63
+def mp 255 (type=multipoint) 4294967295 0 Y 128 0 63
+def mls 255 (type=multilinestring) 4294967295 0 Y 128 0 63
+def mpl 255 (type=multipolygon) 4294967295 0 Y 128 0 63
+def gc 255 (type=geometrycollection) 4294967295 0 Y 128 0 63
+def g 255 4294967295 0 Y 128 0 63
+p ls pl mp mls mpl gc g
+SELECT
+COALESCE(p,p),
+COALESCE(p,ls),
+COALESCE(p,pl),
+COALESCE(p,mp),
+COALESCE(p,mls),
+COALESCE(p,mpl),
+COALESCE(p,g),
+COALESCE(p,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(p,p) 255 (type=point) 4294967295 0 Y 128 0 63
+def COALESCE(p,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(p,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(p,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(p,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(p,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(p,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(p,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(p,p) COALESCE(p,ls) COALESCE(p,pl) COALESCE(p,mp) COALESCE(p,mls) COALESCE(p,mpl) COALESCE(p,g) COALESCE(p,gc)
+SELECT
+COALESCE(ls,p),
+COALESCE(ls,ls),
+COALESCE(ls,pl),
+COALESCE(ls,mp),
+COALESCE(ls,mls),
+COALESCE(ls,mpl),
+COALESCE(ls,g),
+COALESCE(ls,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(ls,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(ls,ls) 255 (type=linestring) 4294967295 0 Y 128 0 63
+def COALESCE(ls,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(ls,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(ls,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(ls,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(ls,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(ls,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(ls,p) COALESCE(ls,ls) COALESCE(ls,pl) COALESCE(ls,mp) COALESCE(ls,mls) COALESCE(ls,mpl) COALESCE(ls,g) COALESCE(ls,gc)
+SELECT
+COALESCE(pl,p),
+COALESCE(pl,ls),
+COALESCE(pl,pl),
+COALESCE(pl,mp),
+COALESCE(pl,mls),
+COALESCE(pl,mpl),
+COALESCE(pl,g),
+COALESCE(pl,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(pl,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(pl,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(pl,pl) 255 (type=polygon) 4294967295 0 Y 128 0 63
+def COALESCE(pl,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(pl,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(pl,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(pl,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(pl,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(pl,p) COALESCE(pl,ls) COALESCE(pl,pl) COALESCE(pl,mp) COALESCE(pl,mls) COALESCE(pl,mpl) COALESCE(pl,g) COALESCE(pl,gc)
+SELECT
+COALESCE(mp,p),
+COALESCE(mp,ls),
+COALESCE(mp,pl),
+COALESCE(mp,mp),
+COALESCE(mp,mls),
+COALESCE(mp,mpl),
+COALESCE(mp,g),
+COALESCE(mp,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(mp,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(mp,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(mp,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(mp,mp) 255 (type=multipoint) 4294967295 0 Y 128 0 63
+def COALESCE(mp,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(mp,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(mp,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(mp,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(mp,p) COALESCE(mp,ls) COALESCE(mp,pl) COALESCE(mp,mp) COALESCE(mp,mls) COALESCE(mp,mpl) COALESCE(mp,g) COALESCE(mp,gc)
+SELECT
+COALESCE(mls,p),
+COALESCE(mls,ls),
+COALESCE(mls,pl),
+COALESCE(mls,mp),
+COALESCE(mls,mls),
+COALESCE(mls,mpl),
+COALESCE(mls,g),
+COALESCE(mls,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(mls,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(mls,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(mls,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(mls,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(mls,mls) 255 (type=multilinestring) 4294967295 0 Y 128 0 63
+def COALESCE(mls,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(mls,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(mls,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(mls,p) COALESCE(mls,ls) COALESCE(mls,pl) COALESCE(mls,mp) COALESCE(mls,mls) COALESCE(mls,mpl) COALESCE(mls,g) COALESCE(mls,gc)
+SELECT
+COALESCE(mpl,p),
+COALESCE(mpl,ls),
+COALESCE(mpl,pl),
+COALESCE(mpl,mp),
+COALESCE(mpl,mls),
+COALESCE(mpl,mpl),
+COALESCE(mpl,g),
+COALESCE(mpl,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(mpl,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(mpl,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(mpl,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(mpl,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(mpl,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(mpl,mpl) 255 (type=multipolygon) 4294967295 0 Y 128 0 63
+def COALESCE(mpl,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(mpl,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(mpl,p) COALESCE(mpl,ls) COALESCE(mpl,pl) COALESCE(mpl,mp) COALESCE(mpl,mls) COALESCE(mpl,mpl) COALESCE(mpl,g) COALESCE(mpl,gc)
+SELECT
+COALESCE(g,p),
+COALESCE(g,ls),
+COALESCE(g,pl),
+COALESCE(g,mp),
+COALESCE(g,mls),
+COALESCE(g,mpl),
+COALESCE(g,g),
+COALESCE(g,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(g,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(g,gc) 255 4294967295 0 Y 128 0 63
+COALESCE(g,p) COALESCE(g,ls) COALESCE(g,pl) COALESCE(g,mp) COALESCE(g,mls) COALESCE(g,mpl) COALESCE(g,g) COALESCE(g,gc)
+SELECT
+COALESCE(gc,p),
+COALESCE(gc,ls),
+COALESCE(gc,pl),
+COALESCE(gc,mp),
+COALESCE(gc,mls),
+COALESCE(gc,mpl),
+COALESCE(gc,g),
+COALESCE(gc,gc)
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COALESCE(gc,p) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,ls) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,pl) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,mp) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,mls) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,mpl) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,g) 255 4294967295 0 Y 128 0 63
+def COALESCE(gc,gc) 255 (type=geometrycollection) 4294967295 0 Y 128 0 63
+COALESCE(gc,p) COALESCE(gc,ls) COALESCE(gc,pl) COALESCE(gc,mp) COALESCE(gc,mls) COALESCE(gc,mpl) COALESCE(gc,g) COALESCE(gc,gc)
+DROP TABLE t1;
+#
# End of 10.5 tests
#
diff --git a/mysql-test/main/gis.test b/mysql-test/main/gis.test
index 48f2803b27d..3249b2579d3 100644
--- a/mysql-test/main/gis.test
+++ b/mysql-test/main/gis.test
@@ -3181,5 +3181,126 @@ SELECT CONVERT(1, MULTIPOLYGON);
--echo #
+--echo # MDEV-17832 Protocol: extensions for Pluggable types and JSON, GEOMETRY
+--echo #
+
+SET NAMES utf8;
+CREATE TABLE t1 (
+ p POINT,
+ ls LINESTRING,
+ pl POLYGON,
+ mp MULTIPOINT,
+ mls MULTILINESTRING,
+ mpl MULTIPOLYGON,
+ gc GEOMETRYCOLLECTION,
+ g GEOMETRY
+) CHARACTER SET utf8;
+
+--enable_metadata
+SELECT * FROM t1;
+
+SELECT
+ COALESCE(p) AS p,
+ COALESCE(ls) AS ls,
+ COALESCE(pl) AS pl,
+ COALESCE(mp) AS mp,
+ COALESCE(mls) AS mls,
+ COALESCE(mpl) AS mpl,
+ COALESCE(gc) AS gc,
+ COALESCE(g) AS g
+FROM t1;
+
+SELECT
+ COALESCE(p,p),
+ COALESCE(p,ls),
+ COALESCE(p,pl),
+ COALESCE(p,mp),
+ COALESCE(p,mls),
+ COALESCE(p,mpl),
+ COALESCE(p,g),
+ COALESCE(p,gc)
+FROM t1;
+
+SELECT
+ COALESCE(ls,p),
+ COALESCE(ls,ls),
+ COALESCE(ls,pl),
+ COALESCE(ls,mp),
+ COALESCE(ls,mls),
+ COALESCE(ls,mpl),
+ COALESCE(ls,g),
+ COALESCE(ls,gc)
+FROM t1;
+
+SELECT
+ COALESCE(pl,p),
+ COALESCE(pl,ls),
+ COALESCE(pl,pl),
+ COALESCE(pl,mp),
+ COALESCE(pl,mls),
+ COALESCE(pl,mpl),
+ COALESCE(pl,g),
+ COALESCE(pl,gc)
+FROM t1;
+
+SELECT
+ COALESCE(mp,p),
+ COALESCE(mp,ls),
+ COALESCE(mp,pl),
+ COALESCE(mp,mp),
+ COALESCE(mp,mls),
+ COALESCE(mp,mpl),
+ COALESCE(mp,g),
+ COALESCE(mp,gc)
+FROM t1;
+
+SELECT
+ COALESCE(mls,p),
+ COALESCE(mls,ls),
+ COALESCE(mls,pl),
+ COALESCE(mls,mp),
+ COALESCE(mls,mls),
+ COALESCE(mls,mpl),
+ COALESCE(mls,g),
+ COALESCE(mls,gc)
+FROM t1;
+
+SELECT
+ COALESCE(mpl,p),
+ COALESCE(mpl,ls),
+ COALESCE(mpl,pl),
+ COALESCE(mpl,mp),
+ COALESCE(mpl,mls),
+ COALESCE(mpl,mpl),
+ COALESCE(mpl,g),
+ COALESCE(mpl,gc)
+FROM t1;
+
+SELECT
+ COALESCE(g,p),
+ COALESCE(g,ls),
+ COALESCE(g,pl),
+ COALESCE(g,mp),
+ COALESCE(g,mls),
+ COALESCE(g,mpl),
+ COALESCE(g,g),
+ COALESCE(g,gc)
+FROM t1;
+
+SELECT
+ COALESCE(gc,p),
+ COALESCE(gc,ls),
+ COALESCE(gc,pl),
+ COALESCE(gc,mp),
+ COALESCE(gc,mls),
+ COALESCE(gc,mpl),
+ COALESCE(gc,g),
+ COALESCE(gc,gc)
+FROM t1;
+
+--disable_metadata
+DROP TABLE t1;
+
+--echo #
--echo # End of 10.5 tests
--echo #
diff --git a/mysql-test/main/grant.result b/mysql-test/main/grant.result
index e83083be4ed..8ce99075e6d 100644
--- a/mysql-test/main/grant.result
+++ b/mysql-test/main/grant.result
@@ -621,7 +621,10 @@ Process Server Admin To view the plain text of currently executing queries
Proxy Server Admin To make proxy user possible
References Databases,Tables To have references on tables
Reload Server Admin To reload or refresh tables, logs and privileges
-Replication client Server Admin To ask where the slave or master servers are
+Binlog admin Server To purge binary logs
+Binlog monitor Server To use SHOW BINLOG STATUS and SHOW BINARY LOG
+Replication master admin Server To monitor connected slaves
+Replication slave admin Server To start/monitor/stop slave and apply binlog events
Replication slave Server Admin To read binary log events from the master
Select Tables To retrieve rows from table
Show databases Server Admin To see all databases with SHOW DATABASES
@@ -631,6 +634,10 @@ Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
Trigger Tables To use triggers
Create tablespace Server Admin To create/alter/drop tablespaces
Update Tables To update existing rows
+Set user Server To create views and stored routines with a different definer
+Federated admin Server To execute the CREATE SERVER, ALTER SERVER, DROP SERVER statements
+Connection admin Server To bypass connection limits and kill other users' connections
+Read_only admin Server To perform write operations even if @@read_only=ON
Usage Server Admin No privileges - allow connect only
connect root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK;
connection root;
@@ -1958,7 +1965,7 @@ GRANT USAGE ON *.* TO mysqltest_u1@localhost;
SHOW GRANTS FOR mysqltest_u1@localhost;
Grants for mysqltest_u1@localhost
-GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO `mysqltest_u1`@`localhost`
+GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SHOW DATABASES, REPLICATION SLAVE, BINLOG MONITOR, CREATE USER ON *.* TO `mysqltest_u1`@`localhost`
GRANT CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE ROUTINE, ALTER ROUTINE, EVENT ON `mysqltest_db1`.* TO `mysqltest_u1`@`localhost`
connect con1,localhost,mysqltest_u1,,mysqltest_db1;
connection con1;
diff --git a/mysql-test/main/grant_kill.result b/mysql-test/main/grant_kill.result
new file mode 100644
index 00000000000..34a4d36b889
--- /dev/null
+++ b/mysql-test/main/grant_kill.result
@@ -0,0 +1,76 @@
+#
+# Start of 10.5 tests
+#
+#
+# MDEV-21743 Split up SUPER privilege to smaller privileges
+#
+#
+# Test that KILL is not allowed without CONNECTION ADMIN or SUPER
+#
+CREATE USER foo@localhost;
+GRANT SELECT ON *.* TO foo@localhost;
+CREATE USER bar@localhost;
+GRANT ALL PRIVILEGES ON *.* TO bar@localhost;
+REVOKE CONNECTION ADMIN, SUPER ON *.* FROM bar@localhost;
+connect foo,localhost,foo,,;
+connect bar,localhost,bar,,;
+connection bar;
+SELECT user FROM information_schema.processlist ORDER BY user;
+user
+bar
+foo
+root
+KILL ID;
+ERROR HY000: You are not owner of thread ID
+disconnect foo;
+disconnect bar;
+connection default;
+DROP USER foo@localhost;
+DROP USER bar@localhost;
+#
+# Test that KILL is allowed with CONNECTION ADMIN
+#
+CREATE USER foo@localhost;
+GRANT SELECT ON *.* TO foo@localhost;
+CREATE USER bar@localhost;
+GRANT PROCESS, CONNECTION ADMIN ON *.* TO bar@localhost;
+connect foo,localhost,foo,,;
+connect bar,localhost,bar,,;
+connection bar;
+SELECT user FROM information_schema.processlist ORDER BY user;
+user
+bar
+foo
+root
+KILL ID;
+connection default;
+disconnect foo;
+disconnect bar;
+connection default;
+DROP USER foo@localhost;
+DROP USER bar@localhost;
+#
+# Test that KILL is allowed with SUPER
+#
+CREATE USER foo@localhost;
+GRANT SELECT ON *.* TO foo@localhost;
+CREATE USER bar@localhost;
+GRANT PROCESS, SUPER ON *.* TO bar@localhost;
+connect foo,localhost,foo,,;
+connect bar,localhost,bar,,;
+connection bar;
+SELECT user FROM information_schema.processlist ORDER BY user;
+user
+bar
+foo
+root
+KILL ID;
+connection default;
+disconnect foo;
+disconnect bar;
+connection default;
+DROP USER foo@localhost;
+DROP USER bar@localhost;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/grant_kill.test b/mysql-test/main/grant_kill.test
new file mode 100644
index 00000000000..216adb83bb8
--- /dev/null
+++ b/mysql-test/main/grant_kill.test
@@ -0,0 +1,88 @@
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-21743 Split up SUPER privilege to smaller privileges
+--echo #
+
+--echo #
+--echo # Test that KILL is not allowed without CONNECTION ADMIN or SUPER
+--echo #
+
+CREATE USER foo@localhost;
+GRANT SELECT ON *.* TO foo@localhost;
+CREATE USER bar@localhost;
+GRANT ALL PRIVILEGES ON *.* TO bar@localhost;
+REVOKE CONNECTION ADMIN, SUPER ON *.* FROM bar@localhost;
+--connect (foo,localhost,foo,,)
+let $id=`(SELECT id FROM INFORMATION_SCHEMA.PROCESSLIST WHERE user='foo')`;
+--connect (bar,localhost,bar,,)
+--connection bar
+SELECT user FROM information_schema.processlist ORDER BY user;
+--replace_result $id ID
+--error ER_KILL_DENIED_ERROR
+--eval KILL $id
+--disconnect foo
+--disconnect bar
+--connection default
+DROP USER foo@localhost;
+DROP USER bar@localhost;
+
+--echo #
+--echo # Test that KILL is allowed with CONNECTION ADMIN
+--echo #
+
+CREATE USER foo@localhost;
+GRANT SELECT ON *.* TO foo@localhost;
+CREATE USER bar@localhost;
+GRANT PROCESS, CONNECTION ADMIN ON *.* TO bar@localhost;
+--connect (foo,localhost,foo,,)
+let $id=`(SELECT id FROM INFORMATION_SCHEMA.PROCESSLIST WHERE user='foo')`;
+--connect (bar,localhost,bar,,)
+--connection bar
+SELECT user FROM information_schema.processlist ORDER BY user;
+--replace_result $id ID
+--eval KILL $id
+--connection default
+let $wait_condition=
+ select count(*) = 0 from information_schema.processlist
+ where user = "foo";
+--source include/wait_condition.inc
+--disconnect foo
+--disconnect bar
+--connection default
+DROP USER foo@localhost;
+DROP USER bar@localhost;
+
+--echo #
+--echo # Test that KILL is allowed with SUPER
+--echo #
+
+CREATE USER foo@localhost;
+GRANT SELECT ON *.* TO foo@localhost;
+CREATE USER bar@localhost;
+GRANT PROCESS, SUPER ON *.* TO bar@localhost;
+--connect (foo,localhost,foo,,)
+let $id=`(SELECT id FROM INFORMATION_SCHEMA.PROCESSLIST WHERE user='foo')`;
+--connect (bar,localhost,bar,,)
+--connection bar
+SELECT user FROM information_schema.processlist ORDER BY user;
+--replace_result $id ID
+--eval KILL $id
+--connection default
+let $wait_condition=
+ select count(*) = 0 from information_schema.processlist
+ where user = "foo";
+--source include/wait_condition.inc
+--disconnect foo
+--disconnect bar
+--connection default
+DROP USER foo@localhost;
+DROP USER bar@localhost;
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/grant_master_admin.result b/mysql-test/main/grant_master_admin.result
new file mode 100644
index 00000000000..bd08ade940c
--- /dev/null
+++ b/mysql-test/main/grant_master_admin.result
@@ -0,0 +1,36 @@
+#
+# Start of 10.5 tests
+#
+#
+# MDEV-21743 Split up SUPER privilege to smaller privileges
+#
+#
+# Test that master admin statements are not allowed without REPLICATION MASTER ADMIN
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION MASTER ADMIN ON *.* FROM user1@localhost;
+connect con1,localhost,user1,,;
+connection con1;
+SHOW SLAVE HOSTS;
+ERROR 42000: Access denied; you need (at least one of) the REPLICATION MASTER ADMIN privilege(s) for this operation
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that master admin statements are allowed with REPLICATION MASTER ADMIN
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT REPLICATION MASTER ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT REPLICATION MASTER ADMIN ON *.* TO `user1`@`localhost`
+connect con1,localhost,user1,,;
+connection con1;
+SHOW SLAVE HOSTS;
+Server_id Host Port Master_id
+connection default;
+DROP USER user1@localhost;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/grant_master_admin.test b/mysql-test/main/grant_master_admin.test
new file mode 100644
index 00000000000..c98c374f7e9
--- /dev/null
+++ b/mysql-test/main/grant_master_admin.test
@@ -0,0 +1,47 @@
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-21743 Split up SUPER privilege to smaller privileges
+--echo #
+
+--echo #
+--echo # Test that master admin statements are not allowed without REPLICATION MASTER ADMIN
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION MASTER ADMIN ON *.* FROM user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW SLAVE HOSTS;
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # Test that master admin statements are allowed with REPLICATION MASTER ADMIN
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT REPLICATION MASTER ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+SHOW SLAVE HOSTS;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/grant_read_only.result b/mysql-test/main/grant_read_only.result
new file mode 100644
index 00000000000..185325f03a6
--- /dev/null
+++ b/mysql-test/main/grant_read_only.result
@@ -0,0 +1,73 @@
+#
+# Start of 10.5 tests
+#
+#
+# Test that @@read_only is not ignored without READ_ONLY ADMIN or SUPER
+#
+CREATE TABLE t1 (a INT);
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE READ_ONLY ADMIN, SUPER ON *.* FROM user1@localhost;
+SET @@GLOBAL.read_only=1;
+connect con1,localhost,user1,,;
+connection con1;
+UPDATE t1 SET a=11 WHERE a=10;
+ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
+DELETE FROM t1 WHERE a=11;
+ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
+INSERT INTO t1 VALUES (20);
+ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
+disconnect con1;
+connection default;
+SET @@GLOBAL.read_only=0;
+DROP USER user1@localhost;
+DROP TABLE t1;
+#
+# Test that @@read_only is ignored with READ_ONLY ADMIN
+#
+CREATE TABLE t1 (a INT);
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT INSERT, UPDATE, DELETE, READ_ONLY ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT INSERT, UPDATE, DELETE, READ_ONLY ADMIN ON *.* TO `user1`@`localhost`
+SET @@GLOBAL.read_only=1;
+connect con1,localhost,user1,,;
+connection con1;
+SELECT @@read_only;
+@@read_only
+1
+UPDATE t1 SET a=11 WHERE a=10;
+DELETE FROM t1 WHERE a=11;
+INSERT INTO t1 VALUES (20);
+disconnect con1;
+connection default;
+SET @@GLOBAL.read_only=0;
+DROP USER user1@localhost;
+DROP TABLE t1;
+#
+# Test that @@read_only is ignored with SUPER
+#
+CREATE TABLE t1 (a INT);
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT INSERT, UPDATE, DELETE, SUPER ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT INSERT, UPDATE, DELETE, SUPER ON *.* TO `user1`@`localhost`
+SET @@GLOBAL.read_only=1;
+connect con1,localhost,user1,,;
+connection con1;
+SELECT @@read_only;
+@@read_only
+1
+UPDATE t1 SET a=11 WHERE a=10;
+DELETE FROM t1 WHERE a=11;
+INSERT INTO t1 VALUES (20);
+disconnect con1;
+connection default;
+SET @@GLOBAL.read_only=0;
+DROP USER user1@localhost;
+DROP TABLE t1;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/grant_read_only.test b/mysql-test/main/grant_read_only.test
new file mode 100644
index 00000000000..25ffa3767ba
--- /dev/null
+++ b/mysql-test/main/grant_read_only.test
@@ -0,0 +1,83 @@
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # Test that @@read_only is not ignored without READ_ONLY ADMIN or SUPER
+--echo #
+
+CREATE TABLE t1 (a INT);
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE READ_ONLY ADMIN, SUPER ON *.* FROM user1@localhost;
+SET @@GLOBAL.read_only=1;
+
+connect (con1,localhost,user1,,);
+connection con1;
+--error ER_OPTION_PREVENTS_STATEMENT
+UPDATE t1 SET a=11 WHERE a=10;
+--error ER_OPTION_PREVENTS_STATEMENT
+DELETE FROM t1 WHERE a=11;
+--error ER_OPTION_PREVENTS_STATEMENT
+INSERT INTO t1 VALUES (20);
+disconnect con1;
+
+connection default;
+SET @@GLOBAL.read_only=0;
+DROP USER user1@localhost;
+DROP TABLE t1;
+
+--echo #
+--echo # Test that @@read_only is ignored with READ_ONLY ADMIN
+--echo #
+
+CREATE TABLE t1 (a INT);
+CREATE USER user1@localhost IDENTIFIED BY '';
+## TODO: it works even without INSERT/UPDATE/DELETE: file a bug report!
+GRANT INSERT, UPDATE, DELETE, READ_ONLY ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+SET @@GLOBAL.read_only=1;
+
+connect (con1,localhost,user1,,);
+connection con1;
+SELECT @@read_only;
+UPDATE t1 SET a=11 WHERE a=10;
+DELETE FROM t1 WHERE a=11;
+INSERT INTO t1 VALUES (20);
+disconnect con1;
+
+connection default;
+SET @@GLOBAL.read_only=0;
+DROP USER user1@localhost;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Test that @@read_only is ignored with SUPER
+--echo #
+
+CREATE TABLE t1 (a INT);
+CREATE USER user1@localhost IDENTIFIED BY '';
+## TODO: it works even without INSERT/UPDATE/DELETE: file a bug report!
+GRANT INSERT, UPDATE, DELETE, SUPER ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+SET @@GLOBAL.read_only=1;
+
+connect (con1,localhost,user1,,);
+connection con1;
+SELECT @@read_only;
+UPDATE t1 SET a=11 WHERE a=10;
+DELETE FROM t1 WHERE a=11;
+INSERT INTO t1 VALUES (20);
+disconnect con1;
+
+connection default;
+SET @@GLOBAL.read_only=0;
+DROP USER user1@localhost;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/grant_server.result b/mysql-test/main/grant_server.result
new file mode 100644
index 00000000000..37b5f67ba4b
--- /dev/null
+++ b/mysql-test/main/grant_server.result
@@ -0,0 +1,61 @@
+#
+# Start of 10.5 tests
+#
+#
+# Test that SERVER DDL statements are not allowed without FEDERATED ADMIN or SUPER
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE FEDERATED ADMIN, SUPER ON *.* FROM user1@localhost;
+connect con1,localhost,user1,,;
+connection con1;
+CREATE SERVER IF NOT EXISTS server_1
+FOREIGN DATA WRAPPER mysql
+OPTIONS (USER 'mysqltest_1', HOST 'localhost', DATABASE 'test2');
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
+ALTER SERVER server_1 OPTIONS(HOST 'Server.Example.Org');
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
+DROP SERVER server_1;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that SERVER DDL statements are allowed with FEDERATED ADMIN
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT FEDERATED ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT FEDERATED ADMIN ON *.* TO `user1`@`localhost`
+connect con1,localhost,user1,,;
+connection con1;
+CREATE SERVER IF NOT EXISTS server_1
+FOREIGN DATA WRAPPER mysql
+OPTIONS (USER 'mysqltest_1', HOST 'localhost', DATABASE 'test2');
+ALTER SERVER server_1 OPTIONS(HOST 'Server.Example.Org');
+DROP SERVER server_1;
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that SERVER DDL statements are allowed with SUPER
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT SUPER ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT SUPER ON *.* TO `user1`@`localhost`
+connect con1,localhost,user1,,;
+connection con1;
+CREATE SERVER IF NOT EXISTS server_1
+FOREIGN DATA WRAPPER mysql
+OPTIONS (USER 'mysqltest_1', HOST 'localhost', DATABASE 'test2');
+ALTER SERVER server_1 OPTIONS(HOST 'Server.Example.Org');
+DROP SERVER server_1;
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/grant_server.test b/mysql-test/main/grant_server.test
new file mode 100644
index 00000000000..58c6b4e9ab6
--- /dev/null
+++ b/mysql-test/main/grant_server.test
@@ -0,0 +1,75 @@
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # Test that SERVER DDL statements are not allowed without FEDERATED ADMIN or SUPER
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE FEDERATED ADMIN, SUPER ON *.* FROM user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+CREATE SERVER IF NOT EXISTS server_1
+ FOREIGN DATA WRAPPER mysql
+ OPTIONS (USER 'mysqltest_1', HOST 'localhost', DATABASE 'test2');
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+ALTER SERVER server_1 OPTIONS(HOST 'Server.Example.Org');
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+DROP SERVER server_1;
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # Test that SERVER DDL statements are allowed with FEDERATED ADMIN
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT FEDERATED ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+CREATE SERVER IF NOT EXISTS server_1
+ FOREIGN DATA WRAPPER mysql
+ OPTIONS (USER 'mysqltest_1', HOST 'localhost', DATABASE 'test2');
+ALTER SERVER server_1 OPTIONS(HOST 'Server.Example.Org');
+DROP SERVER server_1;
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # Test that SERVER DDL statements are allowed with SUPER
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT SUPER ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+CREATE SERVER IF NOT EXISTS server_1
+ FOREIGN DATA WRAPPER mysql
+ OPTIONS (USER 'mysqltest_1', HOST 'localhost', DATABASE 'test2');
+ALTER SERVER server_1 OPTIONS(HOST 'Server.Example.Org');
+DROP SERVER server_1;
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/grant_slave_admin.result b/mysql-test/main/grant_slave_admin.result
new file mode 100644
index 00000000000..6f067f6421d
--- /dev/null
+++ b/mysql-test/main/grant_slave_admin.result
@@ -0,0 +1,96 @@
+#
+# Start of 10.5 tests
+#
+#
+# MDEV-21743 Split up SUPER privilege to smaller privileges
+#
+#
+# Test that slave admin statements are not allowed without REPLICATION SLAVE ADMIN or SUPER
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION SLAVE ADMIN, SUPER ON *.* FROM user1@localhost;
+connect con1,localhost,user1,,;
+connection con1;
+START SLAVE;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation
+CHANGE MASTER TO MASTER_HOST='127.0.0.1';
+ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation
+STOP SLAVE;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation
+SHOW SLAVE STATUS;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation
+BINLOG '';
+ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that slave admin statements are allowed with REPLICATION SLAVE ADMIN
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT REPLICATION SLAVE ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT REPLICATION SLAVE ADMIN ON *.* TO `user1`@`localhost`
+connect con1,localhost,user1,,;
+connection con1;
+START SLAVE;
+ERROR HY000: Misconfigured slave: MASTER_HOST was not set; Fix in config file or with CHANGE MASTER TO
+CHANGE MASTER TO MASTER_USER='root';
+STOP SLAVE;
+Warnings:
+Note 1255 Slave already has been stopped
+SHOW SLAVE STATUS;
+BINLOG '';
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that slave admin statements are allowed with SUPER
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT SUPER ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT SUPER ON *.* TO `user1`@`localhost`
+connect con1,localhost,user1,,;
+connection con1;
+START SLAVE;
+ERROR HY000: Misconfigured slave: MASTER_HOST was not set; Fix in config file or with CHANGE MASTER TO
+CHANGE MASTER TO MASTER_USER='root';
+STOP SLAVE;
+Warnings:
+Note 1255 Slave already has been stopped
+SHOW SLAVE STATUS;
+BINLOG '';
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that SHOW RELAYLOG EVENTS is not allowed without REPLICATION SLAVE ADMIN
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION SLAVE ADMIN ON *.* FROM user1@localhost;
+connect con1,localhost,user1,,;
+connection con1;
+SHOW RELAYLOG EVENTS;
+ERROR 42000: Access denied; you need (at least one of) the REPLICATION SLAVE ADMIN privilege(s) for this operation
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# Test that SHOW RELAYLOG EVENTS is allowed with REPLICATION SLAVE ADMIN
+#
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT REPLICATION SLAVE ADMIN ON *.* TO user1@localhost;
+connect con1,localhost,user1,,;
+connection con1;
+SHOW RELAYLOG EVENTS;
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/grant_slave_admin.test b/mysql-test/main/grant_slave_admin.test
new file mode 100644
index 00000000000..9bb561f51d1
--- /dev/null
+++ b/mysql-test/main/grant_slave_admin.test
@@ -0,0 +1,129 @@
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-21743 Split up SUPER privilege to smaller privileges
+--echo #
+
+--echo #
+--echo # Test that slave admin statements are not allowed without REPLICATION SLAVE ADMIN or SUPER
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION SLAVE ADMIN, SUPER ON *.* FROM user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+START SLAVE;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+CHANGE MASTER TO MASTER_HOST='127.0.0.1';
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+STOP SLAVE;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW SLAVE STATUS;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+BINLOG '';
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # Test that slave admin statements are allowed with REPLICATION SLAVE ADMIN
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT REPLICATION SLAVE ADMIN ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+--error ER_BAD_SLAVE
+START SLAVE;
+CHANGE MASTER TO MASTER_USER='root';
+STOP SLAVE;
+--disable_result_log
+SHOW SLAVE STATUS;
+# The below fails with a syntax error.
+# This is fine. It's only important that it does not fail on "access denied".
+--error ER_SYNTAX_ERROR
+BINLOG '';
+--enable_result_log
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # Test that slave admin statements are allowed with SUPER
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT SUPER ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+
+connect (con1,localhost,user1,,);
+connection con1;
+--error ER_BAD_SLAVE
+START SLAVE;
+CHANGE MASTER TO MASTER_USER='root';
+STOP SLAVE;
+--disable_result_log
+SHOW SLAVE STATUS;
+# The below fails with a syntax error.
+# This is fine. It's only important that it does not fail on "access denied".
+--error ER_SYNTAX_ERROR
+BINLOG '';
+--enable_result_log
+disconnect con1;
+
+connection default;
+DROP USER user1@localhost;
+
+
+
+--echo #
+--echo # Test that SHOW RELAYLOG EVENTS is not allowed without REPLICATION SLAVE ADMIN
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION SLAVE ADMIN ON *.* FROM user1@localhost;
+connect (con1,localhost,user1,,);
+connection con1;
+--disable_ps_protocol
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW RELAYLOG EVENTS;
+--enable_ps_protocol
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+
+--echo #
+--echo # Test that SHOW RELAYLOG EVENTS is allowed with REPLICATION SLAVE ADMIN
+--echo #
+
+CREATE USER user1@localhost IDENTIFIED BY '';
+GRANT REPLICATION SLAVE ADMIN ON *.* TO user1@localhost;
+connect (con1,localhost,user1,,);
+connection con1;
+--disable_ps_protocol
+--disable_result_log
+SHOW RELAYLOG EVENTS;
+--enable_result_log
+--enable_ps_protocol
+disconnect con1;
+connection default;
+DROP USER user1@localhost;
+
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/information_schema_all_engines.result b/mysql-test/main/information_schema_all_engines.result
index 9ba4d20c76d..46a50716c08 100644
--- a/mysql-test/main/information_schema_all_engines.result
+++ b/mysql-test/main/information_schema_all_engines.result
@@ -39,7 +39,6 @@ INNODB_SYS_TABLES
INNODB_SYS_TABLESTATS
INNODB_SYS_VIRTUAL
INNODB_TABLESPACES_ENCRYPTION
-INNODB_TABLESPACES_SCRUBBING
INNODB_TRX
KEY_CACHES
KEY_COLUMN_USAGE
@@ -120,7 +119,6 @@ INNODB_SYS_TABLES TABLE_ID
INNODB_SYS_TABLESTATS TABLE_ID
INNODB_SYS_VIRTUAL TABLE_ID
INNODB_TABLESPACES_ENCRYPTION SPACE
-INNODB_TABLESPACES_SCRUBBING SPACE
INNODB_TRX trx_id
KEY_CACHES KEY_CACHE_NAME
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
@@ -201,7 +199,6 @@ INNODB_SYS_TABLES TABLE_ID
INNODB_SYS_TABLESTATS TABLE_ID
INNODB_SYS_VIRTUAL TABLE_ID
INNODB_TABLESPACES_ENCRYPTION SPACE
-INNODB_TABLESPACES_SCRUBBING SPACE
INNODB_TRX trx_id
KEY_CACHES KEY_CACHE_NAME
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
@@ -287,7 +284,6 @@ INNODB_SYS_TABLES information_schema.INNODB_SYS_TABLES 1
INNODB_SYS_TABLESTATS information_schema.INNODB_SYS_TABLESTATS 1
INNODB_SYS_VIRTUAL information_schema.INNODB_SYS_VIRTUAL 1
INNODB_TABLESPACES_ENCRYPTION information_schema.INNODB_TABLESPACES_ENCRYPTION 1
-INNODB_TABLESPACES_SCRUBBING information_schema.INNODB_TABLESPACES_SCRUBBING 1
INNODB_TRX information_schema.INNODB_TRX 1
KEY_CACHES information_schema.KEY_CACHES 1
KEY_COLUMN_USAGE information_schema.KEY_COLUMN_USAGE 1
@@ -358,7 +354,6 @@ Database: information_schema
| INNODB_SYS_TABLESTATS |
| INNODB_SYS_VIRTUAL |
| INNODB_TABLESPACES_ENCRYPTION |
-| INNODB_TABLESPACES_SCRUBBING |
| INNODB_TRX |
| KEY_CACHES |
| KEY_COLUMN_USAGE |
@@ -429,7 +424,6 @@ Database: INFORMATION_SCHEMA
| INNODB_SYS_TABLESTATS |
| INNODB_SYS_VIRTUAL |
| INNODB_TABLESPACES_ENCRYPTION |
-| INNODB_TABLESPACES_SCRUBBING |
| INNODB_TRX |
| KEY_CACHES |
| KEY_COLUMN_USAGE |
@@ -465,5 +459,5 @@ Wildcard: inf_rmation_schema
| information_schema |
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') GROUP BY TABLE_SCHEMA;
table_schema count(*)
-information_schema 66
+information_schema 65
mysql 31
diff --git a/mysql-test/main/information_schema_db.result b/mysql-test/main/information_schema_db.result
index bf665da4542..b8a18179e75 100644
--- a/mysql-test/main/information_schema_db.result
+++ b/mysql-test/main/information_schema_db.result
@@ -101,7 +101,7 @@ grant insert on v1 to testdb_2@localhost;
create view v5 as select f1 from t1;
grant select, show view on v5 to testdb_2@localhost;
create definer=`no_such_user`@`no_such_host` view v6 as select f1 from t1;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection default;
use testdb_1;
create view v6 as select f1 from t1;
diff --git a/mysql-test/main/mysql-metadata.result b/mysql-test/main/mysql-metadata.result
new file mode 100644
index 00000000000..ce6c77ed7fa
--- /dev/null
+++ b/mysql-test/main/mysql-metadata.result
@@ -0,0 +1,87 @@
+#
+# MDEV-17832 Protocol: extensions for Pluggable types and JSON, GEOMETRY
+#
+SET NAMES utf8;
+CREATE TABLE t1 (
+js0 JSON,
+js1 TEXT CHECK (JSON_VALID(js1)),
+js2 TEXT CHECK (LENGTH(js2) > 0 AND JSON_VALID(js2)),
+js3 TEXT CHECK (LENGTH(js2) > 0 OR JSON_VALID(js2))
+) CHARACTER SET utf8;
+--------------
+SELECT * FROM t1
+--------------
+
+Field 1: `js0`
+Catalog: `def`
+Database: `test`
+Table: `t1`
+Org_table: `t1`
+Type: BLOB (format=json)
+Collation: latin1_swedish_ci (8)
+Length: 4294967295
+Max_length: 0
+Decimals: 0
+Flags: BLOB BINARY
+
+Field 2: `js1`
+Catalog: `def`
+Database: `test`
+Table: `t1`
+Org_table: `t1`
+Type: BLOB (format=json)
+Collation: latin1_swedish_ci (8)
+Length: 65535
+Max_length: 0
+Decimals: 0
+Flags: BLOB
+
+Field 3: `js2`
+Catalog: `def`
+Database: `test`
+Table: `t1`
+Org_table: `t1`
+Type: BLOB (format=json)
+Collation: latin1_swedish_ci (8)
+Length: 65535
+Max_length: 0
+Decimals: 0
+Flags: BLOB
+
+Field 4: `js3`
+Catalog: `def`
+Database: `test`
+Table: `t1`
+Org_table: `t1`
+Type: BLOB
+Collation: latin1_swedish_ci (8)
+Length: 65535
+Max_length: 0
+Decimals: 0
+Flags: BLOB
+
+
+0 rows in set (TIME)
+
+Bye
+--------------
+SELECT JSON_COMPACT(js0) FROM t1
+--------------
+
+Field 1: `JSON_COMPACT(js0)`
+Catalog: `def`
+Database: ``
+Table: ``
+Org_table: ``
+Type: LONG_BLOB (format=json)
+Collation: binary (63)
+Length: 4294967295
+Max_length: 0
+Decimals: 0
+Flags: BINARY
+
+
+0 rows in set (TIME)
+
+Bye
+DROP TABLE t1;
diff --git a/mysql-test/main/mysql-metadata.test b/mysql-test/main/mysql-metadata.test
new file mode 100644
index 00000000000..bab44496f78
--- /dev/null
+++ b/mysql-test/main/mysql-metadata.test
@@ -0,0 +1,22 @@
+-- source include/have_working_dns.inc
+-- source include/not_embedded.inc
+
+--echo #
+--echo # MDEV-17832 Protocol: extensions for Pluggable types and JSON, GEOMETRY
+--echo #
+
+SET NAMES utf8;
+CREATE TABLE t1 (
+ js0 JSON,
+ js1 TEXT CHECK (JSON_VALID(js1)),
+ js2 TEXT CHECK (LENGTH(js2) > 0 AND JSON_VALID(js2)),
+ js3 TEXT CHECK (LENGTH(js2) > 0 OR JSON_VALID(js2))
+) CHARACTER SET utf8;
+
+--replace_regex /0 rows in set [(].*[)]/0 rows in set (TIME)/
+--exec $MYSQL -vvv --column-type-info --database=test -e "SELECT * FROM t1;"
+
+--replace_regex /0 rows in set [(].*[)]/0 rows in set (TIME)/
+--exec $MYSQL -vvv --column-type-info --database=test -e "SELECT JSON_COMPACT(js0) FROM t1;"
+
+DROP TABLE t1;
diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result
index 912bcb2d514..6c209e1b0d6 100644
--- a/mysql-test/main/mysqld--help.result
+++ b/mysql-test/main/mysqld--help.result
@@ -756,13 +756,21 @@ The following specify which files/extra groups are read (specified before remain
--performance-schema-consumer-events-statements-current
Default startup value for the events_statements_current
consumer.
- (Defaults to on; use --skip-performance-schema-consumer-events-statements-current to disable.)
--performance-schema-consumer-events-statements-history
Default startup value for the events_statements_history
consumer.
--performance-schema-consumer-events-statements-history-long
Default startup value for the
events_statements_history_long consumer.
+ --performance-schema-consumer-events-transactions-current
+ Default startup value for the events_transactions_current
+ consumer.
+ --performance-schema-consumer-events-transactions-history
+ Default startup value for the events_transactions_history
+ consumer.
+ --performance-schema-consumer-events-transactions-history-long
+ Default startup value for the
+ events_transactions_history_long consumer.
--performance-schema-consumer-events-waits-current
Default startup value for the events_waits_current
consumer.
@@ -798,6 +806,12 @@ The following specify which files/extra groups are read (specified before remain
--performance-schema-events-statements-history-size=#
Number of rows per thread in EVENTS_STATEMENTS_HISTORY.
Use 0 to disable, -1 for automated sizing.
+ --performance-schema-events-transactions-history-long-size=#
+ Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0
+ to disable, -1 for automated sizing.
+ --performance-schema-events-transactions-history-size=#
+ Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY.
+ Use 0 to disable, -1 for automated sizing.
--performance-schema-events-waits-history-long-size=#
Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to
disable, -1 for automated sizing.
@@ -825,11 +839,25 @@ The following specify which files/extra groups are read (specified before remain
--performance-schema-max-file-instances=#
Maximum number of instrumented files. Use 0 to disable,
-1 for automated sizing.
+ --performance-schema-max-index-stat=#
+ Maximum number of index statistics for instrumented
+ tables. Use 0 to disable, -1 for automated scaling.
+ --performance-schema-max-memory-classes=#
+ Maximum number of memory pool instruments.
+ --performance-schema-max-metadata-locks=#
+ Maximum number of metadata locks. Use 0 to disable, -1
+ for automated scaling.
--performance-schema-max-mutex-classes=#
Maximum number of mutex instruments.
--performance-schema-max-mutex-instances=#
Maximum number of instrumented MUTEX objects. Use 0 to
disable, -1 for automated sizing.
+ --performance-schema-max-prepared-statements-instances=#
+ Maximum number of instrumented prepared statements. Use 0
+ to disable, -1 for automated scaling.
+ --performance-schema-max-program-instances=#
+ Maximum number of instrumented programs. Use 0 to
+ disable, -1 for automated scaling.
--performance-schema-max-rwlock-classes=#
Maximum number of rwlock instruments.
--performance-schema-max-rwlock-instances=#
@@ -840,16 +868,23 @@ The following specify which files/extra groups are read (specified before remain
--performance-schema-max-socket-instances=#
Maximum number of opened instrumented sockets. Use 0 to
disable, -1 for automated sizing.
+ --performance-schema-max-sql-text-length=#
+ Maximum length of displayed sql text.
--performance-schema-max-stage-classes=#
Maximum number of stage instruments.
--performance-schema-max-statement-classes=#
Maximum number of statement instruments.
+ --performance-schema-max-statement-stack=#
+ Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
--performance-schema-max-table-handles=#
Maximum number of opened instrumented tables. Use 0 to
disable, -1 for automated sizing.
--performance-schema-max-table-instances=#
Maximum number of instrumented tables. Use 0 to disable,
-1 for automated sizing.
+ --performance-schema-max-table-lock-stat=#
+ Maximum number of lock statistics for instrumented
+ tables. Use 0 to disable, -1 for automated scaling.
--performance-schema-max-thread-classes=#
Maximum number of thread instruments.
--performance-schema-max-thread-instances=#
@@ -1191,13 +1226,15 @@ The following specify which files/extra groups are read (specified before remain
Alias for slave_parallel_threads
--slave-run-triggers-for-rbr=name
Modes for how triggers in row-base replication on slave
- side will be executed. Legal values are NO (default), YES
- and LOGGING. NO means that trigger for RBR will not be
- running on slave. YES and LOGGING means that triggers
- will be running on slave, if there was not triggers
- running on the master for the statement. LOGGING also
- means results of that the executed triggers work will be
- written to the binlog.
+ side will be executed. Legal values are NO (default),
+ YES, LOGGING and ENFORCE. NO means that trigger for RBR
+ will not be running on slave. YES and LOGGING means that
+ triggers will be running on slave, if there was not
+ triggers running on the master for the statement. LOGGING
+ also means results of that the executed triggers work
+ will be written to the binlog. ENFORCE means that
+ triggers will always be run on the slave, even if there
+ are triggers on the master. ENFORCE implies LOGGING.
--slave-skip-errors=name
Tells the slave thread to continue replication when a
query event returns an error from the provided list
@@ -1615,9 +1652,12 @@ performance-schema-accounts-size -1
performance-schema-consumer-events-stages-current FALSE
performance-schema-consumer-events-stages-history FALSE
performance-schema-consumer-events-stages-history-long FALSE
-performance-schema-consumer-events-statements-current TRUE
+performance-schema-consumer-events-statements-current FALSE
performance-schema-consumer-events-statements-history FALSE
performance-schema-consumer-events-statements-history-long FALSE
+performance-schema-consumer-events-transactions-current FALSE
+performance-schema-consumer-events-transactions-history FALSE
+performance-schema-consumer-events-transactions-history-long FALSE
performance-schema-consumer-events-waits-current FALSE
performance-schema-consumer-events-waits-history FALSE
performance-schema-consumer-events-waits-history-long FALSE
@@ -1629,6 +1669,8 @@ performance-schema-events-stages-history-long-size -1
performance-schema-events-stages-history-size -1
performance-schema-events-statements-history-long-size -1
performance-schema-events-statements-history-size -1
+performance-schema-events-transactions-history-long-size -1
+performance-schema-events-transactions-history-size -1
performance-schema-events-waits-history-long-size -1
performance-schema-events-waits-history-size -1
performance-schema-hosts-size -1
@@ -1636,24 +1678,32 @@ performance-schema-instrument
performance-schema-max-cond-classes 90
performance-schema-max-cond-instances -1
performance-schema-max-digest-length 1024
-performance-schema-max-file-classes 50
+performance-schema-max-file-classes 80
performance-schema-max-file-handles 32768
performance-schema-max-file-instances -1
-performance-schema-max-mutex-classes 200
+performance-schema-max-index-stat -1
+performance-schema-max-memory-classes 320
+performance-schema-max-metadata-locks -1
+performance-schema-max-mutex-classes 210
performance-schema-max-mutex-instances -1
-performance-schema-max-rwlock-classes 40
+performance-schema-max-prepared-statements-instances -1
+performance-schema-max-program-instances -1
+performance-schema-max-rwlock-classes 50
performance-schema-max-rwlock-instances -1
performance-schema-max-socket-classes 10
performance-schema-max-socket-instances -1
+performance-schema-max-sql-text-length 1024
performance-schema-max-stage-classes 160
-performance-schema-max-statement-classes 202
+performance-schema-max-statement-classes 222
+performance-schema-max-statement-stack 10
performance-schema-max-table-handles -1
performance-schema-max-table-instances -1
+performance-schema-max-table-lock-stat -1
performance-schema-max-thread-classes 50
performance-schema-max-thread-instances -1
performance-schema-session-connect-attrs-size -1
-performance-schema-setup-actors-size 100
-performance-schema-setup-objects-size 100
+performance-schema-setup-actors-size -1
+performance-schema-setup-objects-size -1
performance-schema-users-size -1
port 3306
port-open-timeout 0
diff --git a/mysql-test/main/mysqldump.result b/mysql-test/main/mysqldump.result
index b0c69b9afde..f6f55aa935c 100644
--- a/mysql-test/main/mysqldump.result
+++ b/mysql-test/main/mysqldump.result
@@ -3643,8 +3643,8 @@ reset master;
mysqldump: Couldn't execute 'FLUSH /*!40101 LOCAL */ TABLES': Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)
mysqldump: Couldn't execute 'FLUSH /*!40101 LOCAL */ TABLES': Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)
grant RELOAD on *.* to mysqltest_1@localhost;
-mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation (1227)
-mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation (1227)
+mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need (at least one of) the SUPER, BINLOG MONITOR privilege(s) for this operation (1227)
+mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need (at least one of) the SUPER, BINLOG MONITOR privilege(s) for this operation (1227)
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
drop table t1;
drop user mysqltest_1@localhost;
diff --git a/mysql-test/main/order_by.result b/mysql-test/main/order_by.result
index a1b167d6189..4c8c640e03b 100644
--- a/mysql-test/main/order_by.result
+++ b/mysql-test/main/order_by.result
@@ -3471,14 +3471,13 @@ drop table t1,t2,t3,t4;
#
set @save_sql_mode= @@sql_mode;
set sql_mode= 'PAD_CHAR_TO_FULL_LENGTH';
-CREATE TABLE t1 ( a CHAR(255) charset utf8,
-b CHAR(255) charset utf8, c TEXT);
+CREATE TABLE t1 ( a CHAR(255), b CHAR(255), c TEXT);
INSERT INTO t1 VALUES
('1','a', 'a'), ('2','b', 'b'), ('3','c', 'c'), ('4','d','d'),
('5','e', 'e'), ('6','f', 'f'), ('7','g','g'), ('8','h','h'),
('9','i', 'i'), ('10','j','j'), ('11','k','k'), ('12','l','l'),
('13','m','m'), ('14','n','n'), ('15','o','o');
-set sort_buffer_size=517*30;
+set sort_buffer_size=524*15;
select c from t1 order by a,b;
c
a
@@ -3496,5 +3495,305 @@ f
g
h
i
+set sort_buffer_size= default;
set sql_mode= @save_sql_mode;
drop table t1;
+#
+# MDEV-21580: Allow packed sort keys in sort buffer
+#
+#
+# This example should not pack sort keys
+# all fields are fixed-size fields in the ORDER BY clause
+#
+create table t1 (a bigint, b bigint, c bigint);
+insert into t1 select seq, seq, seq from seq_1_to_100;
+# in r_sort_mode it should show sort_key and not packed_sort_key
+ANALYZE FORMAT=JSON select * from t1 order by a,b,c;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 100,
+ "filesort": {
+ "sort_key": "t1.a, t1.b, t1.c",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 100,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,packed_addon_fields",
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 100,
+ "r_rows": 100,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
+select * from t1 order by a,b,c;
+a b c
+1 1 1
+2 2 2
+3 3 3
+4 4 4
+5 5 5
+6 6 6
+7 7 7
+8 8 8
+9 9 9
+10 10 10
+11 11 11
+12 12 12
+13 13 13
+14 14 14
+15 15 15
+16 16 16
+17 17 17
+18 18 18
+19 19 19
+20 20 20
+21 21 21
+22 22 22
+23 23 23
+24 24 24
+25 25 25
+26 26 26
+27 27 27
+28 28 28
+29 29 29
+30 30 30
+31 31 31
+32 32 32
+33 33 33
+34 34 34
+35 35 35
+36 36 36
+37 37 37
+38 38 38
+39 39 39
+40 40 40
+41 41 41
+42 42 42
+43 43 43
+44 44 44
+45 45 45
+46 46 46
+47 47 47
+48 48 48
+49 49 49
+50 50 50
+51 51 51
+52 52 52
+53 53 53
+54 54 54
+55 55 55
+56 56 56
+57 57 57
+58 58 58
+59 59 59
+60 60 60
+61 61 61
+62 62 62
+63 63 63
+64 64 64
+65 65 65
+66 66 66
+67 67 67
+68 68 68
+69 69 69
+70 70 70
+71 71 71
+72 72 72
+73 73 73
+74 74 74
+75 75 75
+76 76 76
+77 77 77
+78 78 78
+79 79 79
+80 80 80
+81 81 81
+82 82 82
+83 83 83
+84 84 84
+85 85 85
+86 86 86
+87 87 87
+88 88 88
+89 89 89
+90 90 90
+91 91 91
+92 92 92
+93 93 93
+94 94 94
+95 95 95
+96 96 96
+97 97 97
+98 98 98
+99 99 99
+100 100 100
+drop table t1;
+#
+# Test with Binary columns (using suffix length to determine ordering)
+# Should show packed_sortkey in the r_sort_mode
+#
+create table t1 (a int, b blob);
+set @save_max_sort_length= @@max_sort_length;
+insert into t1 select 1, CONCAT(repeat('a', @save_max_sort_length), 'A');
+insert into t1 select 2, CONCAT(repeat('a', @save_max_sort_length), 'AB');
+insert into t1 select 3, CONCAT(repeat('a', @save_max_sort_length), 'ABE');
+insert into t1 select 4, CONCAT(repeat('a', @save_max_sort_length), 'APBX');
+insert into t1 select 5, CONCAT(repeat('a', @save_max_sort_length), 'ABAAX');
+show variables like '%sort_buffer_size';
+Variable_name Value
+aria_sort_buffer_size 268434432
+myisam_sort_buffer_size 134216704
+sort_buffer_size 262144
+select a, substr(b, @save_max_sort_length+1) from t1 order by b desc;
+a substr(b, @save_max_sort_length+1)
+5 ABAAX
+4 APBX
+3 ABE
+2 AB
+1 A
+analyze format=json
+select a, substr(b, @save_max_sort_length+1) from t1 order by b desc;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 5,
+ "filesort": {
+ "sort_key": "t1.b desc",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 5,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "packed_sort_key,rowid",
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 5,
+ "r_rows": 5,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
+drop table t1;
+#
+# Packing sort keys with complex collations
+#
+create table t1(a varchar(255) charset utf8, b int, c decimal);
+insert into t1 values ('abc', 1, 1) , ('bcd', 2, 2), ('cde',3, 3);
+insert into t1 values ('def', 4, 4) , ('efg', 5, 5), ('fgh', 6, 6);
+#
+# Should show packed_sortkey in the r_sort_mode
+#
+ANALYZE FORMAT=JSON select a, b, c from t1 order by a, b;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 6,
+ "filesort": {
+ "sort_key": "t1.a, t1.b",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 6,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "packed_sort_key,rowid",
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 6,
+ "r_rows": 6,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
+select a, b, c from t1 order by a, b;
+a b c
+abc 1 1
+bcd 2 2
+cde 3 3
+def 4 4
+efg 5 5
+fgh 6 6
+set @save_max_sort_length= @@max_sort_length;
+set max_sort_length=5;
+#
+# should show sortkey in r_sort_mode as the collation is complex and
+# truncation is not possible
+#
+ANALYZE FORMAT=JSON select a, b, c from t1 order by a, b;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 6,
+ "filesort": {
+ "sort_key": "t1.a, t1.b",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 6,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,packed_addon_fields",
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 6,
+ "r_rows": 6,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
+select a, b, c from t1 order by a, b;
+a b c
+abc 1 1
+bcd 2 2
+cde 3 3
+def 4 4
+efg 5 5
+fgh 6 6
+set max_sort_length= @save_max_sort_length;
+drop table t1;
diff --git a/mysql-test/main/order_by.test b/mysql-test/main/order_by.test
index c283b805bee..d479529d51b 100644
--- a/mysql-test/main/order_by.test
+++ b/mysql-test/main/order_by.test
@@ -9,6 +9,7 @@ drop table if exists t1,t2,t3;
--enable_warnings
call mtr.add_suppression("Out of sort memory; increase server sort buffer size");
+--source include/have_sequence.inc
#
# Test old ORDER BY bug
@@ -2299,17 +2300,89 @@ drop table t1,t2,t3,t4;
set @save_sql_mode= @@sql_mode;
set sql_mode= 'PAD_CHAR_TO_FULL_LENGTH';
-CREATE TABLE t1 ( a CHAR(255) charset utf8,
- b CHAR(255) charset utf8, c TEXT);
+CREATE TABLE t1 ( a CHAR(255), b CHAR(255), c TEXT);
INSERT INTO t1 VALUES
('1','a', 'a'), ('2','b', 'b'), ('3','c', 'c'), ('4','d','d'),
('5','e', 'e'), ('6','f', 'f'), ('7','g','g'), ('8','h','h'),
('9','i', 'i'), ('10','j','j'), ('11','k','k'), ('12','l','l'),
('13','m','m'), ('14','n','n'), ('15','o','o');
-set sort_buffer_size=517*30;
+set sort_buffer_size=524*15;
select c from t1 order by a,b;
-
+set sort_buffer_size= default;
set sql_mode= @save_sql_mode;
+drop table t1;
+
+--echo #
+--echo # MDEV-21580: Allow packed sort keys in sort buffer
+--echo #
+
+--echo #
+--echo # This example should not pack sort keys
+--echo # all fields are fixed-size fields in the ORDER BY clause
+--echo #
+
+create table t1 (a bigint, b bigint, c bigint);
+insert into t1 select seq, seq, seq from seq_1_to_100;
+
+--echo # in r_sort_mode it should show sort_key and not packed_sort_key
+--source include/analyze-format.inc
+ANALYZE FORMAT=JSON select * from t1 order by a,b,c;
+select * from t1 order by a,b,c;
+
+drop table t1;
+
+--echo #
+--echo # Test with Binary columns (using suffix length to determine ordering)
+--echo # Should show packed_sortkey in the r_sort_mode
+--echo #
+
+create table t1 (a int, b blob);
+
+set @save_max_sort_length= @@max_sort_length;
+insert into t1 select 1, CONCAT(repeat('a', @save_max_sort_length), 'A');
+insert into t1 select 2, CONCAT(repeat('a', @save_max_sort_length), 'AB');
+insert into t1 select 3, CONCAT(repeat('a', @save_max_sort_length), 'ABE');
+insert into t1 select 4, CONCAT(repeat('a', @save_max_sort_length), 'APBX');
+insert into t1 select 5, CONCAT(repeat('a', @save_max_sort_length), 'ABAAX');
+
+show variables like '%sort_buffer_size';
+
+select a, substr(b, @save_max_sort_length+1) from t1 order by b desc;
+--source include/analyze-format.inc
+analyze format=json
+select a, substr(b, @save_max_sort_length+1) from t1 order by b desc;
+
+drop table t1;
+
+--echo #
+--echo # Packing sort keys with complex collations
+--echo #
+
+create table t1(a varchar(255) charset utf8, b int, c decimal);
+insert into t1 values ('abc', 1, 1) , ('bcd', 2, 2), ('cde',3, 3);
+insert into t1 values ('def', 4, 4) , ('efg', 5, 5), ('fgh', 6, 6);
+
+--echo #
+--echo # Should show packed_sortkey in the r_sort_mode
+--echo #
+
+--source include/analyze-format.inc
+ANALYZE FORMAT=JSON select a, b, c from t1 order by a, b;
+select a, b, c from t1 order by a, b;
+
+set @save_max_sort_length= @@max_sort_length;
+set max_sort_length=5;
+
+--echo #
+--echo # should show sortkey in r_sort_mode as the collation is complex and
+--echo # truncation is not possible
+--echo #
+
+--source include/analyze-format.inc
+ANALYZE FORMAT=JSON select a, b, c from t1 order by a, b;
+select a, b, c from t1 order by a, b;
+
+set max_sort_length= @save_max_sort_length;
drop table t1;
diff --git a/mysql-test/main/order_by_pack_big.result b/mysql-test/main/order_by_pack_big.result
index 0efc2ff150f..a7cf2436bcc 100644
--- a/mysql-test/main/order_by_pack_big.result
+++ b/mysql-test/main/order_by_pack_big.result
@@ -82,6 +82,42 @@ select id, generate_random_string(a), generate_random_string(b) from t2;
# All records fit in memory
#
set sort_buffer_size=262144*10;
+analyze format=json select id DIV 100 as x,
+MD5(group_concat(substring(names,1,3), substring(address,1,3)
+order by id))
+FROM t3
+GROUP BY x;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 10000,
+ "filesort": {
+ "sort_key": "t3.`id` DIV 100",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 10000,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,packed_addon_fields",
+ "table": {
+ "table_name": "t3",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 10000,
+ "r_rows": 10000,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
flush status;
select id DIV 100 as x,
MD5(group_concat(substring(names,1,3), substring(address,1,3)
@@ -203,6 +239,43 @@ set sort_buffer_size=default;
# Test for merge_many_buff
#
set sort_buffer_size=32768;
+analyze format=json select id DIV 100 as x,
+MD5(group_concat(substring(names,1,3), substring(address,1,3)
+order by id))
+FROM t3
+GROUP BY x;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 10000,
+ "filesort": {
+ "sort_key": "t3.`id` DIV 100",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 10000,
+ "r_sort_passes": 4,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "sort_key,packed_addon_fields",
+ "table": {
+ "table_name": "t3",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 10000,
+ "r_rows": 10000,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
flush status;
select id DIV 100 as x,
MD5(group_concat(substring(names,1,3), substring(address,1,3)
@@ -320,6 +393,104 @@ Sort_range 0
Sort_rows 10000
Sort_scan 1
set sort_buffer_size=default;
+#
+# CASE #1 Packed sort keys with addon fields
+#
+ALTER TABLE t3 ADD INDEX idx(names, address);
+set sort_buffer_size= 2097152;
+ANALYZE FORMAT=JSON SELECT id, names, address FROM t3 ORDER BY names, address;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 10000,
+ "filesort": {
+ "sort_key": "t3.`names`, t3.address",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 10000,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "packed_sort_key,packed_addon_fields",
+ "table": {
+ "table_name": "t3",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 10000,
+ "r_rows": 10000,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
+flush status;
+SELECT id, names, address INTO OUTFILE '$file1' FROM t3 ORDER BY names, address;
+# Sort_merge_passes should be 0
+show status like '%sort%';
+Variable_name Value
+Sort_merge_passes 0
+Sort_priority_queue_sorts 0
+Sort_range 0
+Sort_rows 10000
+Sort_scan 1
+SELECT id, names, address INTO OUTFILE '$file2' FROM t3 FORCE INDEX(idx) ORDER BY names, address;
+#
+# CASE #2 Packed sort keys and ROW_ID
+#
+set @save_max_length_for_sort_data=@@max_length_for_sort_data;
+set max_length_for_sort_data= 300;
+set sort_buffer_size= 1097152;
+ANALYZE FORMAT=JSON SELECT id, names, address FROM t3 ORDER BY names, address;
+ANALYZE
+{
+ "query_block": {
+ "select_id": 1,
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "read_sorted_file": {
+ "r_rows": 10000,
+ "filesort": {
+ "sort_key": "t3.`names`, t3.address",
+ "r_loops": 1,
+ "r_total_time_ms": "REPLACED",
+ "r_used_priority_queue": false,
+ "r_output_rows": 10000,
+ "r_buffer_size": "REPLACED",
+ "r_sort_mode": "packed_sort_key,rowid",
+ "table": {
+ "table_name": "t3",
+ "access_type": "ALL",
+ "r_loops": 1,
+ "rows": 10000,
+ "r_rows": 10000,
+ "r_table_time_ms": "REPLACED",
+ "r_other_time_ms": "REPLACED",
+ "filtered": 100,
+ "r_filtered": 100
+ }
+ }
+ }
+ }
+}
+flush status;
+SELECT id, names, address INTO OUTFILE '$file1' FROM t3 ORDER BY names, address;
+# Sort_merge_passes should be 0
+show status like '%sort%';
+Variable_name Value
+Sort_merge_passes 0
+Sort_priority_queue_sorts 0
+Sort_range 0
+Sort_rows 10000
+Sort_scan 1
+set @@max_length_for_sort_data=@save_max_length_for_sort_data;
+set @@sort_buffer_size=default;
set @@RAND_SEED1= @save_rand_seed1;
set @@RAND_SEED2= @save_rand_seed2;
drop function generate_normal_distribution_sample;
diff --git a/mysql-test/main/order_by_pack_big.test b/mysql-test/main/order_by_pack_big.test
index 89f9f3e539a..dce7bcb905c 100644
--- a/mysql-test/main/order_by_pack_big.test
+++ b/mysql-test/main/order_by_pack_big.test
@@ -109,6 +109,8 @@ let $query= select id DIV 100 as x,
--echo #
set sort_buffer_size=262144*10;
+--source include/analyze-format.inc
+eval analyze format=json $query;
flush status;
eval $query;
show status like '%sort%';
@@ -119,11 +121,61 @@ set sort_buffer_size=default;
--echo #
set sort_buffer_size=32768;
+--source include/analyze-format.inc
+eval analyze format=json $query;
flush status;
eval $query;
show status like '%sort%';
set sort_buffer_size=default;
+--echo #
+--echo # CASE #1 Packed sort keys with addon fields
+--echo #
+
+ALTER TABLE t3 ADD INDEX idx(names, address);
+
+let $file1 = `SELECT CONCAT(@@datadir, "t1.txt")`;
+let $file2 = `SELECT CONCAT(@@datadir, "t2.txt")`;
+
+set sort_buffer_size= 2097152;
+--source include/analyze-format.inc
+eval ANALYZE FORMAT=JSON SELECT id, names, address FROM t3 ORDER BY names, address;
+flush status;
+evalp SELECT id, names, address INTO OUTFILE '$file1' FROM t3 ORDER BY names, address;
+
+--echo # Sort_merge_passes should be 0
+show status like '%sort%';
+
+evalp SELECT id, names, address INTO OUTFILE '$file2' FROM t3 FORCE INDEX(idx) ORDER BY names, address;
+
+diff_files $file1 $file2;
+
+--remove_file $file1
+
+--echo #
+--echo # CASE #2 Packed sort keys and ROW_ID
+--echo #
+
+set @save_max_length_for_sort_data=@@max_length_for_sort_data;
+set max_length_for_sort_data= 300;
+
+set sort_buffer_size= 1097152;
+--source include/analyze-format.inc
+eval ANALYZE FORMAT=JSON SELECT id, names, address FROM t3 ORDER BY names, address;
+flush status;
+evalp SELECT id, names, address INTO OUTFILE '$file1' FROM t3 ORDER BY names, address;
+
+--echo # Sort_merge_passes should be 0
+show status like '%sort%';
+
+diff_files $file1 $file2;
+
+--remove_file $file1
+--remove_file $file2
+
+set @@max_length_for_sort_data=@save_max_length_for_sort_data;
+set @@sort_buffer_size=default;
+
set @@RAND_SEED1= @save_rand_seed1;
set @@RAND_SEED2= @save_rand_seed2;
diff --git a/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.result b/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.result
new file mode 100644
index 00000000000..87cc9ab5a24
--- /dev/null
+++ b/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.result
@@ -0,0 +1,33 @@
+include/master-slave.inc
+[connection master]
+********************************************************************
+* Test case1: Upgrade when repository tables have data. *
+* mysql_upgrade script should report warnings. *
+********************************************************************
+connection master;
+Slave info repository compatibility check: Found data in `mysql`.`slave_master_info` table.
+Warning: Content of `mysql`.`slave_master_info` table will be ignored as MariaDB supports file based info repository.
+Slave info repository compatibility check: Found data in `mysql`.`slave_relay_log_info` table.
+Warning: Content of `mysql`.`slave_relay_log_info` table will be ignored as MariaDB supports file based repository.
+Slave server may not possess the correct replication metadata.
+Execution of CHANGE MASTER as per `mysql`.`slave_master_info` and `mysql`.`slave_relay_log_info` table content is recommended.
+connection slave;
+Slave info repository compatibility check: Found data in `mysql`.`slave_master_info` table.
+Warning: Content of `mysql`.`slave_master_info` table will be ignored as MariaDB supports file based info repository.
+Slave info repository compatibility check: Found data in `mysql`.`slave_relay_log_info` table.
+Warning: Content of `mysql`.`slave_relay_log_info` table will be ignored as MariaDB supports file based repository.
+Slave server may not possess the correct replication metadata.
+Execution of CHANGE MASTER as per `mysql`.`slave_master_info` and `mysql`.`slave_relay_log_info` table content is recommended.
+connection master;
+TRUNCATE TABLE `mysql`.`slave_master_info`;
+TRUNCATE TABLE `mysql`.`slave_relay_log_info`;
+********************************************************************
+* Test case2: Upgrade when repository tables are empty. *
+* mysql_upgrade script should not report any warning. *
+********************************************************************
+connection master;
+connection slave;
+"====== Clean up ======"
+connection master;
+DROP TABLE `mysql`.`slave_master_info`, `mysql`.`slave_relay_log_info`;
+include/rpl_end.inc
diff --git a/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.test b/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.test
new file mode 100644
index 00000000000..24b5f029e8d
--- /dev/null
+++ b/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.test
@@ -0,0 +1,127 @@
+# ==== Purpose ====
+#
+# While upgrading from "mysql" to "mariadb" if slave info repositories are
+# configured to be tables then appropriate warnings should be reported.
+#
+# ==== Implementation ====
+#
+# Steps:
+# 1 - On MariaDB server create `mysql`.`slave_master_info` and
+# `mysql.slave_relay_log_info` tables to simulate upgrade from "mysql"
+# to "mariadb" server. Insert data into these tables.
+# 2 - Execute "mysql_upgrade" script and verify that appropriate warning
+# is reported. i.e Warning is to alert user that the data present in
+# repository tables will be ignored.
+# 3 - Truncate these tables. This simulates repositories being file and
+# the tables are empty.
+# 4 - Execute "mysql_upgrade" script and verify that no warnings are
+# reported.
+#
+# ==== References ====
+#
+# MDEV-10047: table-based master info repository
+#
+
+--source include/have_innodb.inc
+--source include/mysql_upgrade_preparation.inc
+--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
+
+--write_file $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
+--disable_query_log
+--disable_result_log
+SET SQL_LOG_BIN=0;
+# Table structure extracted from MySQL-5.6.47
+CREATE TABLE `mysql`.`slave_master_info` (
+ `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.',
+ `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
+ `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.',
+ `Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'The host name of the master.',
+ `User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.',
+ `User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.',
+ `Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.',
+ `Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
+ `Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
+ `Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
+ `Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
+ `Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.',
+ `Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.',
+ `Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.',
+ `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.',
+ `Heartbeat` float NOT NULL,
+ `Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
+ `Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
+ `Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.',
+ `Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
+ `Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
+ `Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
+ `Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
+ PRIMARY KEY (`Host`,`Port`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information';
+
+INSERT INTO `mysql`.`slave_master_info` VALUES (23,'master-bin.000001', 120, 'localhost', 'root'," ", 13000, 60, 0," "," "," "," "," ",0 , 60," ", " ", '28e10fdd-6289-11ea-aab9-207918567a34',10," "," ", 0 );
+
+# Table structure extracted from MySQL-5.6.47
+CREATE TABLE `mysql`.`slave_relay_log_info` (
+ `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
+ `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
+ `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
+ `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
+ `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
+ `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
+ `Number_of_workers` int(10) unsigned NOT NULL,
+ `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
+ PRIMARY KEY (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information';
+
+INSERT INTO `mysql`.`slave_relay_log_info` VALUES (7,'./slave-relay-bin.000001',4 ," ",0, 0 ,0 , 1);
+SET SQL_LOG_BIN=1;
+--enable_query_log
+--enable_result_log
+EOF
+
+--echo ********************************************************************
+--echo * Test case1: Upgrade when repository tables have data. *
+--echo * mysql_upgrade script should report warnings. *
+--echo ********************************************************************
+--connection master
+--source $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
+--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log 2>&1
+--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log
+
+--connection slave
+--source $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
+--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log 2>&1
+--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log
+
+--connection master
+let $datadir= `select @@datadir`;
+remove_file $datadir/mysql_upgrade_info;
+TRUNCATE TABLE `mysql`.`slave_master_info`;
+TRUNCATE TABLE `mysql`.`slave_relay_log_info`;
+--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log
+--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log
+
+--echo ********************************************************************
+--echo * Test case2: Upgrade when repository tables are empty. *
+--echo * mysql_upgrade script should not report any warning. *
+--echo ********************************************************************
+--connection master
+--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log 2>&1
+--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log
+
+--connection slave
+--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log 2>&1
+--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log
+
+--echo "====== Clean up ======"
+--connection master
+let $datadir= `select @@datadir`;
+remove_file $datadir/mysql_upgrade_info;
+DROP TABLE `mysql`.`slave_master_info`, `mysql`.`slave_relay_log_info`;
+
+--remove_file $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
+--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log
+--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log
+
+--source include/rpl_end.inc
diff --git a/mysql-test/main/sp-security.result b/mysql-test/main/sp-security.result
index 5050955c806..7d2098f62be 100644
--- a/mysql-test/main/sp-security.result
+++ b/mysql-test/main/sp-security.result
@@ -417,7 +417,7 @@ CREATE DATABASE mysqltest;
CREATE USER mysqltest_1@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_1@localhost;
CREATE USER mysqltest_2@localhost;
-GRANT SUPER ON *.* TO mysqltest_2@localhost;
+GRANT SET USER ON *.* TO mysqltest_2@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
connect mysqltest_2_con,localhost,mysqltest_2,,mysqltest;
connect mysqltest_1_con,localhost,mysqltest_1,,mysqltest;
@@ -428,9 +428,9 @@ CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
connection mysqltest_1_con;
USE mysqltest;
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
CREATE DEFINER=root@localhost FUNCTION wl2897_f2() RETURNS INT RETURN 2;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection mysqltest_2_con;
use mysqltest;
CREATE DEFINER='a @ b @ c'@localhost PROCEDURE wl2897_p3() SELECT 3;
diff --git a/mysql-test/main/sp-security.test b/mysql-test/main/sp-security.test
index acc05cafa21..c375815b29a 100644
--- a/mysql-test/main/sp-security.test
+++ b/mysql-test/main/sp-security.test
@@ -594,7 +594,7 @@ CREATE USER mysqltest_1@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_1@localhost;
CREATE USER mysqltest_2@localhost;
-GRANT SUPER ON *.* TO mysqltest_2@localhost;
+GRANT SET USER ON *.* TO mysqltest_2@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
--connect (mysqltest_2_con,localhost,mysqltest_2,,mysqltest)
diff --git a/mysql-test/main/system_mysql_db_error_log-master.opt b/mysql-test/main/system_mysql_db_error_log-master.opt
new file mode 100644
index 00000000000..37a865d29e0
--- /dev/null
+++ b/mysql-test/main/system_mysql_db_error_log-master.opt
@@ -0,0 +1 @@
+--log-error=$MYSQLTEST_VARDIR/tmp/system_mysql_db_error_log.err
diff --git a/mysql-test/main/system_mysql_db_error_log.result b/mysql-test/main/system_mysql_db_error_log.result
new file mode 100644
index 00000000000..7ae82ba19de
--- /dev/null
+++ b/mysql-test/main/system_mysql_db_error_log.result
@@ -0,0 +1,114 @@
+#
+# MDEV-21704 Add a new JSON field "version_id" into mysql.global_priv.priv
+#
+SET @super_acl_100500= 1 << 15;
+SELECT HEX(@super_acl_100500);
+HEX(@super_acl_100500)
+8000
+SET @all_known_privileges_100500= (1 << 30) - 1;
+SELECT HEX(@all_known_privileges_100500);
+HEX(@all_known_privileges_100500)
+3FFFFFFF
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost WITH GRANT OPTION;
+SET @all_known_privileges_current=(SELECT CAST(json_value(Priv, '$.access') AS UNSIGNED) FROM mysql.global_priv WHERE host='localhost' and user='user1');
+DROP USER user1@localhost;
+SELECT HEX(@all_known_privileges_current);
+HEX(@all_known_privileges_current)
+1FFFFFFFFF
+CREATE USER bad_access1@localhost;
+UPDATE
+mysql.global_priv
+SET
+Priv=json_set(Priv, '$.access',@all_known_privileges_current+1)
+WHERE
+host='localhost' and user='bad_access1';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_access1@localhost;
+Grants for bad_access1@localhost
+GRANT USAGE ON *.* TO `bad_access1`@`localhost`
+DROP USER bad_access1@localhost;
+CREATE USER bad_version_id_1000000@localhost;
+GRANT ALL PRIVILEGES ON *.* to bad_version_id_1000000@localhost;
+SHOW GRANTS FOR bad_version_id_1000000@localhost;
+Grants for bad_version_id_1000000@localhost
+GRANT ALL PRIVILEGES ON *.* TO `bad_version_id_1000000`@`localhost`
+UPDATE
+mysql.global_priv
+SET
+Priv=json_set(Priv, '$.version_id',1000000)
+WHERE
+host='localhost' and user='bad_version_id_1000000';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_version_id_1000000@localhost;
+Grants for bad_version_id_1000000@localhost
+GRANT USAGE ON *.* TO `bad_version_id_1000000`@`localhost`
+DROP USER bad_version_id_1000000@localhost;
+CREATE USER bad_version_id_minus_3@localhost;
+GRANT ALL PRIVILEGES ON *.* to bad_version_id_minus_3@localhost;
+SHOW GRANTS FOR bad_version_id_minus_3@localhost;
+Grants for bad_version_id_minus_3@localhost
+GRANT ALL PRIVILEGES ON *.* TO `bad_version_id_minus_3`@`localhost`
+UPDATE
+mysql.global_priv
+SET
+Priv=json_set(Priv, '$.version_id',-3)
+WHERE
+host='localhost' and user='bad_version_id_minus_3';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_version_id_minus_3@localhost;
+Grants for bad_version_id_minus_3@localhost
+GRANT USAGE ON *.* TO `bad_version_id_minus_3`@`localhost`
+DROP USER bad_version_id_minus_3@localhost;
+CREATE USER bad_version_id_100300@localhost;
+GRANT ALL PRIVILEGES ON *.* to bad_version_id_100300@localhost;
+SHOW GRANTS FOR bad_version_id_100300@localhost;
+Grants for bad_version_id_100300@localhost
+GRANT ALL PRIVILEGES ON *.* TO `bad_version_id_100300`@`localhost`
+UPDATE
+mysql.global_priv
+SET
+Priv=json_set(Priv, '$.version_id',100300)
+WHERE
+host='localhost' and user='bad_version_id_100300';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_version_id_100300@localhost;
+Grants for bad_version_id_100300@localhost
+GRANT USAGE ON *.* TO `bad_version_id_100300`@`localhost`
+DROP USER bad_version_id_100300@localhost;
+CREATE USER good_version_id_100400@localhost;
+GRANT ALL PRIVILEGES ON *.* to good_version_id_100400@localhost;
+SHOW GRANTS FOR good_version_id_100400@localhost;
+Grants for good_version_id_100400@localhost
+GRANT ALL PRIVILEGES ON *.* TO `good_version_id_100400`@`localhost`
+UPDATE
+mysql.global_priv
+SET
+Priv=json_set(Priv, '$.version_id',100400, '$.access', @all_known_privileges_100500)
+WHERE
+host='localhost' and user='good_version_id_100400';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR good_version_id_100400@localhost;
+Grants for good_version_id_100400@localhost
+GRANT ALL PRIVILEGES ON *.* TO `good_version_id_100400`@`localhost` WITH GRANT OPTION
+DROP USER good_version_id_100400@localhost;
+CREATE USER good_version_id_100500@localhost;
+GRANT SUPER ON *.* to good_version_id_100500@localhost;
+SHOW GRANTS FOR good_version_id_100500@localhost;
+Grants for good_version_id_100500@localhost
+GRANT SUPER ON *.* TO `good_version_id_100500`@`localhost`
+UPDATE
+mysql.global_priv
+SET
+Priv=json_set(Priv, '$.version_id',100500)
+WHERE
+host='localhost' and user='good_version_id_100500';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR good_version_id_100500@localhost;
+Grants for good_version_id_100500@localhost
+GRANT SUPER, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, BINLOG ADMIN ON *.* TO `good_version_id_100500`@`localhost`
+DROP USER good_version_id_100500@localhost;
+FOUND 1 /Warning.*'user' entry 'bad_access1@localhost' has a wrong 'access' value.*version_id=/ in system_mysql_db_error_log.err
+FOUND 1 /Warning.*'user' entry 'bad_version_id_1000000@localhost' has a wrong 'version_id' value 1000000/ in system_mysql_db_error_log.err
+FOUND 1 /Warning.*'user' entry 'bad_version_id_minus_3@localhost' has a wrong 'version_id' value -3/ in system_mysql_db_error_log.err
+FOUND 1 /Warning.*'user' entry 'bad_version_id_100300@localhost' has a wrong 'version_id' value 100300/ in system_mysql_db_error_log.err
diff --git a/mysql-test/main/system_mysql_db_error_log.test b/mysql-test/main/system_mysql_db_error_log.test
new file mode 100644
index 00000000000..07e281a5507
--- /dev/null
+++ b/mysql-test/main/system_mysql_db_error_log.test
@@ -0,0 +1,113 @@
+--source include/not_embedded.inc
+
+--echo #
+--echo # MDEV-21704 Add a new JSON field "version_id" into mysql.global_priv.priv
+--echo #
+
+SET @super_acl_100500= 1 << 15;
+SELECT HEX(@super_acl_100500);
+
+SET @all_known_privileges_100500= (1 << 30) - 1;
+SELECT HEX(@all_known_privileges_100500);
+
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost WITH GRANT OPTION;
+SET @all_known_privileges_current=(SELECT CAST(json_value(Priv, '$.access') AS UNSIGNED) FROM mysql.global_priv WHERE host='localhost' and user='user1');
+DROP USER user1@localhost;
+SELECT HEX(@all_known_privileges_current);
+
+
+CREATE USER bad_access1@localhost;
+UPDATE
+ mysql.global_priv
+SET
+ Priv=json_set(Priv, '$.access',@all_known_privileges_current+1)
+WHERE
+ host='localhost' and user='bad_access1';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_access1@localhost;
+DROP USER bad_access1@localhost;
+
+
+CREATE USER bad_version_id_1000000@localhost;
+GRANT ALL PRIVILEGES ON *.* to bad_version_id_1000000@localhost;
+SHOW GRANTS FOR bad_version_id_1000000@localhost;
+UPDATE
+ mysql.global_priv
+SET
+ Priv=json_set(Priv, '$.version_id',1000000)
+WHERE
+ host='localhost' and user='bad_version_id_1000000';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_version_id_1000000@localhost;
+DROP USER bad_version_id_1000000@localhost;
+
+
+CREATE USER bad_version_id_minus_3@localhost;
+GRANT ALL PRIVILEGES ON *.* to bad_version_id_minus_3@localhost;
+SHOW GRANTS FOR bad_version_id_minus_3@localhost;
+UPDATE
+ mysql.global_priv
+SET
+ Priv=json_set(Priv, '$.version_id',-3)
+WHERE
+ host='localhost' and user='bad_version_id_minus_3';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_version_id_minus_3@localhost;
+DROP USER bad_version_id_minus_3@localhost;
+
+CREATE USER bad_version_id_100300@localhost;
+GRANT ALL PRIVILEGES ON *.* to bad_version_id_100300@localhost;
+SHOW GRANTS FOR bad_version_id_100300@localhost;
+UPDATE
+ mysql.global_priv
+SET
+ Priv=json_set(Priv, '$.version_id',100300)
+WHERE
+ host='localhost' and user='bad_version_id_100300';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR bad_version_id_100300@localhost;
+DROP USER bad_version_id_100300@localhost;
+
+
+CREATE USER good_version_id_100400@localhost;
+GRANT ALL PRIVILEGES ON *.* to good_version_id_100400@localhost;
+SHOW GRANTS FOR good_version_id_100400@localhost;
+UPDATE
+ mysql.global_priv
+SET
+ Priv=json_set(Priv, '$.version_id',100400, '$.access', @all_known_privileges_100500)
+WHERE
+ host='localhost' and user='good_version_id_100400';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR good_version_id_100400@localhost;
+DROP USER good_version_id_100400@localhost;
+
+
+CREATE USER good_version_id_100500@localhost;
+GRANT SUPER ON *.* to good_version_id_100500@localhost;
+SHOW GRANTS FOR good_version_id_100500@localhost;
+UPDATE
+ mysql.global_priv
+SET
+ Priv=json_set(Priv, '$.version_id',100500)
+WHERE
+ host='localhost' and user='good_version_id_100500';
+FLUSH PRIVILEGES;
+SHOW GRANTS FOR good_version_id_100500@localhost;
+DROP USER good_version_id_100500@localhost;
+
+
+--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/system_mysql_db_error_log.err
+
+--let SEARCH_PATTERN= Warning.*'user' entry 'bad_access1@localhost' has a wrong 'access' value.*version_id=
+--source include/search_pattern_in_file.inc
+
+--let SEARCH_PATTERN= Warning.*'user' entry 'bad_version_id_1000000@localhost' has a wrong 'version_id' value 1000000
+--source include/search_pattern_in_file.inc
+
+--let SEARCH_PATTERN= Warning.*'user' entry 'bad_version_id_minus_3@localhost' has a wrong 'version_id' value -3
+--source include/search_pattern_in_file.inc
+
+--let SEARCH_PATTERN= Warning.*'user' entry 'bad_version_id_100300@localhost' has a wrong 'version_id' value 100300
+--source include/search_pattern_in_file.inc
diff --git a/mysql-test/main/table_value_constr.result b/mysql-test/main/table_value_constr.result
index 54bf9c36491..38e1a54082c 100644
--- a/mysql-test/main/table_value_constr.result
+++ b/mysql-test/main/table_value_constr.result
@@ -2593,7 +2593,7 @@ ERROR 42S22: Unknown column '2' in 'order clause'
create view v1 as with t(a) as (values (2), (1)) select a from t;
show create view v1;
View Create View character_set_client collation_connection
-v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as (values (2),(1))select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(`a`) as (values (2),(1))select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
select * from v1;
a
2
diff --git a/mysql-test/main/trigger_notembedded.result b/mysql-test/main/trigger_notembedded.result
index 94e651b1340..e276ddd1e48 100644
--- a/mysql-test/main/trigger_notembedded.result
+++ b/mysql-test/main/trigger_notembedded.result
@@ -112,10 +112,10 @@ CREATE DEFINER='mysqltest_inv'@'localhost'
TRIGGER trg1 BEFORE INSERT ON t1
FOR EACH ROW
SET @new_sum = 0;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection default;
use mysqltest_db1;
-GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
+GRANT SET USER ON *.* TO mysqltest_dfn@localhost;
disconnect wl2818_definer_con;
connect wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1;
connection wl2818_definer_con;
diff --git a/mysql-test/main/trigger_notembedded.test b/mysql-test/main/trigger_notembedded.test
index 9f89e66bbfe..313faea982c 100644
--- a/mysql-test/main/trigger_notembedded.test
+++ b/mysql-test/main/trigger_notembedded.test
@@ -255,7 +255,7 @@ CREATE DEFINER='mysqltest_inv'@'localhost'
use mysqltest_db1;
-GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
+GRANT SET USER ON *.* TO mysqltest_dfn@localhost;
--disconnect wl2818_definer_con
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
diff --git a/mysql-test/main/type_json.result b/mysql-test/main/type_json.result
index 96e96cca404..2c4f7b7d42b 100644
--- a/mysql-test/main/type_json.result
+++ b/mysql-test/main/type_json.result
@@ -98,3 +98,33 @@ select cast('{a:1}' as text);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'text)' at line 1
select cast('{a:1}' as json);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'json)' at line 1
+#
+# Start of 10.5 tests
+#
+#
+# MDEV-17832 Protocol: extensions for Pluggable types and JSON, GEOMETRY
+#
+SET NAMES utf8;
+CREATE TABLE t1 (
+js0 JSON,
+js1 TEXT CHECK (JSON_VALID(js1)),
+js2 TEXT CHECK (LENGTH(js2) > 0 AND JSON_VALID(js2)),
+js3 TEXT CHECK (LENGTH(js2) > 0 OR JSON_VALID(js2))
+) CHARACTER SET utf8;
+SELECT * FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def test t1 t1 js0 js0 252 (format=json) 4294967295 0 Y 144 0 33
+def test t1 t1 js1 js1 252 (format=json) 196605 0 Y 16 0 33
+def test t1 t1 js2 js2 252 (format=json) 196605 0 Y 16 0 33
+def test t1 t1 js3 js3 252 196605 0 Y 16 0 33
+js0 js1 js2 js3
+SELECT js0, JSON_COMPACT(js0), JSON_COMPACT('{}') FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def test t1 t1 js0 js0 252 (format=json) 4294967295 0 Y 144 0 33
+def JSON_COMPACT(js0) 251 (format=json) 4294967295 0 Y 128 0 63
+def JSON_COMPACT('{}') 253 (format=json) 6 0 Y 128 0 63
+js0 JSON_COMPACT(js0) JSON_COMPACT('{}')
+DROP TABLE t1;
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/type_json.test b/mysql-test/main/type_json.test
index bd13dc1fcf4..7ab0af20e03 100644
--- a/mysql-test/main/type_json.test
+++ b/mysql-test/main/type_json.test
@@ -64,3 +64,30 @@ drop table t1;
select cast('{a:1}' as text);
--error ER_PARSE_ERROR
select cast('{a:1}' as json);
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-17832 Protocol: extensions for Pluggable types and JSON, GEOMETRY
+--echo #
+
+SET NAMES utf8;
+CREATE TABLE t1 (
+ js0 JSON,
+ js1 TEXT CHECK (JSON_VALID(js1)),
+ js2 TEXT CHECK (LENGTH(js2) > 0 AND JSON_VALID(js2)),
+ js3 TEXT CHECK (LENGTH(js2) > 0 OR JSON_VALID(js2))
+) CHARACTER SET utf8;
+--disable_ps_protocol
+--enable_metadata
+SELECT * FROM t1;
+SELECT js0, JSON_COMPACT(js0), JSON_COMPACT('{}') FROM t1;
+--disable_metadata
+--enable_ps_protocol
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/view_grant.result b/mysql-test/main/view_grant.result
index 8af27de141f..2651bc64f19 100644
--- a/mysql-test/main/view_grant.result
+++ b/mysql-test/main/view_grant.result
@@ -22,7 +22,7 @@ grant create view,select on test.* to mysqltest_1@localhost;
connect user1,localhost,mysqltest_1,,test;
connection user1;
create definer=root@localhost view v1 as select * from mysqltest.t1;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
create view v1 as select * from mysqltest.t1;
alter view v1 as select * from mysqltest.t1;
ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'v1'
@@ -833,12 +833,30 @@ connect def,localhost,def_17254,,db17254;
connection def;
CREATE VIEW v1 AS SELECT * FROM t1;
connection root;
+GRANT SELECT ON db17254.v1 TO inv_17254@localhost;
DROP USER def_17254@localhost;
connect inv,localhost,inv_17254,,db17254;
connection inv;
-for a user
+for a user without SET USER
SELECT * FROM v1;
-ERROR 42000: SELECT command denied to user 'inv_17254'@'localhost' for table 'v1'
+ERROR 28000: Access denied for user 'inv_17254'@'localhost' (using password: NO)
+disconnect inv;
+connection root;
+GRANT SET USER ON *.* TO inv_17254@localhost;
+connect inv2,localhost,inv_17254,,db17254;
+connection inv2;
+SHOW GRANTS;
+Grants for inv_17254@localhost
+GRANT SET USER ON *.* TO `inv_17254`@`localhost`
+GRANT SELECT ON `db17254`.`t1` TO `inv_17254`@`localhost`
+GRANT SELECT ON `db17254`.`v1` TO `inv_17254`@`localhost`
+SELECT CURRENT_USER, SYSTEM_USER(), USER();
+CURRENT_USER SYSTEM_USER() USER()
+inv_17254@localhost inv_17254@localhost inv_17254@localhost
+for a user with SET USER
+SELECT * FROM v1;
+ERROR HY000: The user specified as a definer ('def_17254'@'localhost') does not exist
+disconnect inv2;
connection root;
for a superuser
SELECT * FROM v1;
@@ -846,7 +864,6 @@ ERROR HY000: The user specified as a definer ('def_17254'@'localhost') does not
DROP USER inv_17254@localhost;
DROP DATABASE db17254;
disconnect def;
-disconnect inv;
DROP DATABASE IF EXISTS mysqltest_db1;
DROP DATABASE IF EXISTS mysqltest_db2;
DROP USER mysqltest_u1;
@@ -915,7 +932,7 @@ ERROR 42000: CREATE VIEW command denied to user 'u26813'@'localhost' for table '
ALTER VIEW v2 AS SELECT f2 FROM t1;
ERROR 42000: DROP command denied to user 'u26813'@'localhost' for table 'v2'
ALTER VIEW v3 AS SELECT f2 FROM t1;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection root;
SHOW CREATE VIEW v3;
View Create View character_set_client collation_connection
@@ -943,9 +960,9 @@ GRANT SELECT, DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v2 TO u29908_2@loc
GRANT SELECT ON mysqltest_29908.t1 TO u29908_2@localhost;
connect u2,localhost,u29908_2,,mysqltest_29908;
ALTER VIEW v1 AS SELECT f2 FROM t1;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
ALTER VIEW v2 AS SELECT f2 FROM t1;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
SHOW CREATE VIEW v2;
View Create View character_set_client collation_connection
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`u29908_1`@`localhost` SQL SECURITY INVOKER VIEW `v2` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci
diff --git a/mysql-test/main/view_grant.test b/mysql-test/main/view_grant.test
index cc17cae58d1..c9bb9569145 100644
--- a/mysql-test/main/view_grant.test
+++ b/mysql-test/main/view_grant.test
@@ -987,13 +987,27 @@ connection def;
CREATE VIEW v1 AS SELECT * FROM t1;
connection root;
+GRANT SELECT ON db17254.v1 TO inv_17254@localhost;
DROP USER def_17254@localhost;
connect (inv,localhost,inv_17254,,db17254);
connection inv;
---echo for a user
---error ER_TABLEACCESS_DENIED_ERROR
+--echo for a user without SET USER
+--error ER_ACCESS_DENIED_ERROR
+SELECT * FROM v1;
+disconnect inv;
+
+connection root;
+GRANT SET USER ON *.* TO inv_17254@localhost;
+
+connect (inv2,localhost,inv_17254,,db17254);
+connection inv2;
+SHOW GRANTS;
+SELECT CURRENT_USER, SYSTEM_USER(), USER();
+--echo for a user with SET USER
+--error ER_NO_SUCH_USER
SELECT * FROM v1;
+disconnect inv2;
connection root;
--echo for a superuser
@@ -1002,7 +1016,6 @@ SELECT * FROM v1;
DROP USER inv_17254@localhost;
DROP DATABASE db17254;
disconnect def;
-disconnect inv;
#
diff --git a/mysql-test/main/xa.result b/mysql-test/main/xa.result
index f77c0afdec5..5e03c8f75dc 100644
--- a/mysql-test/main/xa.result
+++ b/mysql-test/main/xa.result
@@ -51,7 +51,7 @@ formatID gtrid_length bqual_length data
11 5 5 testb 0@P`
1 5 5 testatestb
xa commit 'testb',0x2030405060,11;
-ERROR XAE04: XAER_NOTA: Unknown XID
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
xa rollback 'testa','testb';
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
@@ -345,3 +345,58 @@ connection default;
XA END 'xid1';
XA ROLLBACK 'xid1';
DROP TABLE t1, t2, t3;
+#
+# MDEV-21766 - Forbid XID with empty 'gtrid'
+#
+CREATE TABLE t1(a INT) ENGINE=InnoDB;
+XA BEGIN '';
+ERROR XAE05: XAER_INVAL: Invalid arguments (or unsupported command)
+XA BEGIN '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+INSERT INTO t1 VALUES(1);
+XA END '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+XA PREPARE '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+XA ROLLBACK '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+SET NAMES utf8;
+XA BEGIN 'Я_упала_с_сеновала_тормозила_головой';
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
+XA BEGIN 'Я_упaлa_c_сеновала_тормозила_головой';
+XA END 'Я_упaлa_c_сеновала_тормозила_головой';
+XA PREPARE 'Я_упaлa_c_сеновала_тормозила_головой';
+XA ROLLBACK 'Я_упaлa_c_сеновала_тормозила_головой';
+SET NAMES default;
+DROP TABLE t1;
+#
+# MDEV-21659 XA rollback foreign_xid is allowed inside active XA
+# MDEV-21854 - xa commit one phase for already prepared transaction
+# must always error out
+#
+BEGIN;
+XA COMMIT 'unknown';
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
+XA COMMIT 'unknown' ONE PHASE;
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
+BEGIN;
+XA ROLLBACK 'unknown';
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
+ROLLBACK;
+XA START 'xid1';
+XA COMMIT 'unknown';
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
+XA COMMIT 'unknown' ONE PHASE;
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
+XA ROLLBACK 'unknown';
+ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
+XA END 'xid1';
+XA PREPARE 'xid1';
+XA COMMIT 'xid1' ONE PHASE;
+ERROR XAE05: XAER_INVAL: Invalid arguments (or unsupported command)
+XA ROLLBACK 'xid1';
+#
+# MDEV-21856 - xid_t::formatID has to be constrained to 4 byte size
+#
+XA START 'gtrid', 'bqual', 0x80000000;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '0x80000000' at line 1
diff --git a/mysql-test/main/xa.test b/mysql-test/main/xa.test
index 176ef6aa760..e23e3c6a428 100644
--- a/mysql-test/main/xa.test
+++ b/mysql-test/main/xa.test
@@ -72,7 +72,7 @@ xa prepare 'testa','testb';
xa recover;
---error ER_XAER_NOTA
+--error ER_XAER_OUTSIDE
xa commit 'testb',0x2030405060,11;
xa rollback 'testa','testb';
@@ -476,5 +476,68 @@ XA END 'xid1';
XA ROLLBACK 'xid1';
DROP TABLE t1, t2, t3;
---source include/wait_until_count_sessions.inc
+--echo #
+--echo # MDEV-21766 - Forbid XID with empty 'gtrid'
+--echo #
+CREATE TABLE t1(a INT) ENGINE=InnoDB;
+
+--error ER_XAER_INVAL
+XA BEGIN '';
+
+XA BEGIN '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+ '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+INSERT INTO t1 VALUES(1);
+XA END '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+ '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+XA PREPARE '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+ '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+XA ROLLBACK '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
+ '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
+
+SET NAMES utf8;
+--error ER_PARSE_ERROR
+XA BEGIN 'Я_упала_с_сеновала_тормозила_головой'; # 36 characters, 67 bytes
+XA BEGIN 'Я_упaлa_c_сеновала_тормозила_головой'; # 36 characters, 64 bytes
+XA END 'Я_упaлa_c_сеновала_тормозила_головой';
+XA PREPARE 'Я_упaлa_c_сеновала_тормозила_головой';
+XA ROLLBACK 'Я_упaлa_c_сеновала_тормозила_головой';
+SET NAMES default;
+
+DROP TABLE t1;
+--echo #
+--echo # MDEV-21659 XA rollback foreign_xid is allowed inside active XA
+--echo # MDEV-21854 - xa commit one phase for already prepared transaction
+--echo # must always error out
+--echo #
+BEGIN;
+--error ER_XAER_OUTSIDE
+XA COMMIT 'unknown';
+--error ER_XAER_OUTSIDE
+XA COMMIT 'unknown' ONE PHASE;
+BEGIN;
+--error ER_XAER_OUTSIDE
+XA ROLLBACK 'unknown';
+ROLLBACK;
+
+XA START 'xid1';
+--error ER_XAER_OUTSIDE
+XA COMMIT 'unknown';
+--error ER_XAER_OUTSIDE
+XA COMMIT 'unknown' ONE PHASE;
+--error ER_XAER_OUTSIDE
+XA ROLLBACK 'unknown';
+XA END 'xid1';
+XA PREPARE 'xid1';
+--error ER_XAER_INVAL
+XA COMMIT 'xid1' ONE PHASE;
+XA ROLLBACK 'xid1';
+
+
+--echo #
+--echo # MDEV-21856 - xid_t::formatID has to be constrained to 4 byte size
+--echo #
+--error ER_PARSE_ERROR
+XA START 'gtrid', 'bqual', 0x80000000;
+
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/std_data/wl5766_data.txt b/mysql-test/std_data/wl5766_data.txt
new file mode 100644
index 00000000000..cab8fb3d41e
--- /dev/null
+++ b/mysql-test/std_data/wl5766_data.txt
@@ -0,0 +1,100000 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4142
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4412
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4421
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4451
+4452
+4453
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4489
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4819
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+5000
+5001
+5002
+5003
+5004
+5005
+5006
+5007
+5008
+5009
+5010
+5011
+5012
+5013
+5014
+5015
+5016
+5017
+5018
+5019
+5020
+5021
+5022
+5023
+5024
+5025
+5026
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
+5045
+5046
+5047
+5048
+5049
+5050
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5058
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5068
+5069
+5070
+5071
+5072
+5073
+5074
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5084
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5098
+5099
+5100
+5101
+5102
+5103
+5104
+5105
+5106
+5107
+5108
+5109
+5110
+5111
+5112
+5113
+5114
+5115
+5116
+5117
+5118
+5119
+5120
+5121
+5122
+5123
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5138
+5139
+5140
+5141
+5142
+5143
+5144
+5145
+5146
+5147
+5148
+5149
+5150
+5151
+5152
+5153
+5154
+5155
+5156
+5157
+5158
+5159
+5160
+5161
+5162
+5163
+5164
+5165
+5166
+5167
+5168
+5169
+5170
+5171
+5172
+5173
+5174
+5175
+5176
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5193
+5194
+5195
+5196
+5197
+5198
+5199
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5207
+5208
+5209
+5210
+5211
+5212
+5213
+5214
+5215
+5216
+5217
+5218
+5219
+5220
+5221
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5232
+5233
+5234
+5235
+5236
+5237
+5238
+5239
+5240
+5241
+5242
+5243
+5244
+5245
+5246
+5247
+5248
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5258
+5259
+5260
+5261
+5262
+5263
+5264
+5265
+5266
+5267
+5268
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5294
+5295
+5296
+5297
+5298
+5299
+5300
+5301
+5302
+5303
+5304
+5305
+5306
+5307
+5308
+5309
+5310
+5311
+5312
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5320
+5321
+5322
+5323
+5324
+5325
+5326
+5327
+5328
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5349
+5350
+5351
+5352
+5353
+5354
+5355
+5356
+5357
+5358
+5359
+5360
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5369
+5370
+5371
+5372
+5373
+5374
+5375
+5376
+5377
+5378
+5379
+5380
+5381
+5382
+5383
+5384
+5385
+5386
+5387
+5388
+5389
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5399
+5400
+5401
+5402
+5403
+5404
+5405
+5406
+5407
+5408
+5409
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5425
+5426
+5427
+5428
+5429
+5430
+5431
+5432
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5441
+5442
+5443
+5444
+5445
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5486
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5500
+5501
+5502
+5503
+5504
+5505
+5506
+5507
+5508
+5509
+5510
+5511
+5512
+5513
+5514
+5515
+5516
+5517
+5518
+5519
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5531
+5532
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5542
+5543
+5544
+5545
+5546
+5547
+5548
+5549
+5550
+5551
+5552
+5553
+5554
+5555
+5556
+5557
+5558
+5559
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5567
+5568
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5576
+5577
+5578
+5579
+5580
+5581
+5582
+5583
+5584
+5585
+5586
+5587
+5588
+5589
+5590
+5591
+5592
+5593
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5607
+5608
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5619
+5620
+5621
+5622
+5623
+5624
+5625
+5626
+5627
+5628
+5629
+5630
+5631
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5647
+5648
+5649
+5650
+5651
+5652
+5653
+5654
+5655
+5656
+5657
+5658
+5659
+5660
+5661
+5662
+5663
+5664
+5665
+5666
+5667
+5668
+5669
+5670
+5671
+5672
+5673
+5674
+5675
+5676
+5677
+5678
+5679
+5680
+5681
+5682
+5683
+5684
+5685
+5686
+5687
+5688
+5689
+5690
+5691
+5692
+5693
+5694
+5695
+5696
+5697
+5698
+5699
+5700
+5701
+5702
+5703
+5704
+5705
+5706
+5707
+5708
+5709
+5710
+5711
+5712
+5713
+5714
+5715
+5716
+5717
+5718
+5719
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5732
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5741
+5742
+5743
+5744
+5745
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5753
+5754
+5755
+5756
+5757
+5758
+5759
+5760
+5761
+5762
+5763
+5764
+5765
+5766
+5767
+5768
+5769
+5770
+5771
+5772
+5773
+5774
+5775
+5776
+5777
+5778
+5779
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5790
+5791
+5792
+5793
+5794
+5795
+5796
+5797
+5798
+5799
+5800
+5801
+5802
+5803
+5804
+5805
+5806
+5807
+5808
+5809
+5810
+5811
+5812
+5813
+5814
+5815
+5816
+5817
+5818
+5819
+5820
+5821
+5822
+5823
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5831
+5832
+5833
+5834
+5835
+5836
+5837
+5838
+5839
+5840
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5850
+5851
+5852
+5853
+5854
+5855
+5856
+5857
+5858
+5859
+5860
+5861
+5862
+5863
+5864
+5865
+5866
+5867
+5868
+5869
+5870
+5871
+5872
+5873
+5874
+5875
+5876
+5877
+5878
+5879
+5880
+5881
+5882
+5883
+5884
+5885
+5886
+5887
+5888
+5889
+5890
+5891
+5892
+5893
+5894
+5895
+5896
+5897
+5898
+5899
+5900
+5901
+5902
+5903
+5904
+5905
+5906
+5907
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5916
+5917
+5918
+5919
+5920
+5921
+5922
+5923
+5924
+5925
+5926
+5927
+5928
+5929
+5930
+5931
+5932
+5933
+5934
+5935
+5936
+5937
+5938
+5939
+5940
+5941
+5942
+5943
+5944
+5945
+5946
+5947
+5948
+5949
+5950
+5951
+5952
+5953
+5954
+5955
+5956
+5957
+5958
+5959
+5960
+5961
+5962
+5963
+5964
+5965
+5966
+5967
+5968
+5969
+5970
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5978
+5979
+5980
+5981
+5982
+5983
+5984
+5985
+5986
+5987
+5988
+5989
+5990
+5991
+5992
+5993
+5994
+5995
+5996
+5997
+5998
+5999
+6000
+6001
+6002
+6003
+6004
+6005
+6006
+6007
+6008
+6009
+6010
+6011
+6012
+6013
+6014
+6015
+6016
+6017
+6018
+6019
+6020
+6021
+6022
+6023
+6024
+6025
+6026
+6027
+6028
+6029
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6037
+6038
+6039
+6040
+6041
+6042
+6043
+6044
+6045
+6046
+6047
+6048
+6049
+6050
+6051
+6052
+6053
+6054
+6055
+6056
+6057
+6058
+6059
+6060
+6061
+6062
+6063
+6064
+6065
+6066
+6067
+6068
+6069
+6070
+6071
+6072
+6073
+6074
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6083
+6084
+6085
+6086
+6087
+6088
+6089
+6090
+6091
+6092
+6093
+6094
+6095
+6096
+6097
+6098
+6099
+6100
+6101
+6102
+6103
+6104
+6105
+6106
+6107
+6108
+6109
+6110
+6111
+6112
+6113
+6114
+6115
+6116
+6117
+6118
+6119
+6120
+6121
+6122
+6123
+6124
+6125
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6134
+6135
+6136
+6137
+6138
+6139
+6140
+6141
+6142
+6143
+6144
+6145
+6146
+6147
+6148
+6149
+6150
+6151
+6152
+6153
+6154
+6155
+6156
+6157
+6158
+6159
+6160
+6161
+6162
+6163
+6164
+6165
+6166
+6167
+6168
+6169
+6170
+6171
+6172
+6173
+6174
+6175
+6176
+6177
+6178
+6179
+6180
+6181
+6182
+6183
+6184
+6185
+6186
+6187
+6188
+6189
+6190
+6191
+6192
+6193
+6194
+6195
+6196
+6197
+6198
+6199
+6200
+6201
+6202
+6203
+6204
+6205
+6206
+6207
+6208
+6209
+6210
+6211
+6212
+6213
+6214
+6215
+6216
+6217
+6218
+6219
+6220
+6221
+6222
+6223
+6224
+6225
+6226
+6227
+6228
+6229
+6230
+6231
+6232
+6233
+6234
+6235
+6236
+6237
+6238
+6239
+6240
+6241
+6242
+6243
+6244
+6245
+6246
+6247
+6248
+6249
+6250
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6259
+6260
+6261
+6262
+6263
+6264
+6265
+6266
+6267
+6268
+6269
+6270
+6271
+6272
+6273
+6274
+6275
+6276
+6277
+6278
+6279
+6280
+6281
+6282
+6283
+6284
+6285
+6286
+6287
+6288
+6289
+6290
+6291
+6292
+6293
+6294
+6295
+6296
+6297
+6298
+6299
+6300
+6301
+6302
+6303
+6304
+6305
+6306
+6307
+6308
+6309
+6310
+6311
+6312
+6313
+6314
+6315
+6316
+6317
+6318
+6319
+6320
+6321
+6322
+6323
+6324
+6325
+6326
+6327
+6328
+6329
+6330
+6331
+6332
+6333
+6334
+6335
+6336
+6337
+6338
+6339
+6340
+6341
+6342
+6343
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6352
+6353
+6354
+6355
+6356
+6357
+6358
+6359
+6360
+6361
+6362
+6363
+6364
+6365
+6366
+6367
+6368
+6369
+6370
+6371
+6372
+6373
+6374
+6375
+6376
+6377
+6378
+6379
+6380
+6381
+6382
+6383
+6384
+6385
+6386
+6387
+6388
+6389
+6390
+6391
+6392
+6393
+6394
+6395
+6396
+6397
+6398
+6399
+6400
+6401
+6402
+6403
+6404
+6405
+6406
+6407
+6408
+6409
+6410
+6411
+6412
+6413
+6414
+6415
+6416
+6417
+6418
+6419
+6420
+6421
+6422
+6423
+6424
+6425
+6426
+6427
+6428
+6429
+6430
+6431
+6432
+6433
+6434
+6435
+6436
+6437
+6438
+6439
+6440
+6441
+6442
+6443
+6444
+6445
+6446
+6447
+6448
+6449
+6450
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6459
+6460
+6461
+6462
+6463
+6464
+6465
+6466
+6467
+6468
+6469
+6470
+6471
+6472
+6473
+6474
+6475
+6476
+6477
+6478
+6479
+6480
+6481
+6482
+6483
+6484
+6485
+6486
+6487
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6495
+6496
+6497
+6498
+6499
+6500
+6501
+6502
+6503
+6504
+6505
+6506
+6507
+6508
+6509
+6510
+6511
+6512
+6513
+6514
+6515
+6516
+6517
+6518
+6519
+6520
+6521
+6522
+6523
+6524
+6525
+6526
+6527
+6528
+6529
+6530
+6531
+6532
+6533
+6534
+6535
+6536
+6537
+6538
+6539
+6540
+6541
+6542
+6543
+6544
+6545
+6546
+6547
+6548
+6549
+6550
+6551
+6552
+6553
+6554
+6555
+6556
+6557
+6558
+6559
+6560
+6561
+6562
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6570
+6571
+6572
+6573
+6574
+6575
+6576
+6577
+6578
+6579
+6580
+6581
+6582
+6583
+6584
+6585
+6586
+6587
+6588
+6589
+6590
+6591
+6592
+6593
+6594
+6595
+6596
+6597
+6598
+6599
+6600
+6601
+6602
+6603
+6604
+6605
+6606
+6607
+6608
+6609
+6610
+6611
+6612
+6613
+6614
+6615
+6616
+6617
+6618
+6619
+6620
+6621
+6622
+6623
+6624
+6625
+6626
+6627
+6628
+6629
+6630
+6631
+6632
+6633
+6634
+6635
+6636
+6637
+6638
+6639
+6640
+6641
+6642
+6643
+6644
+6645
+6646
+6647
+6648
+6649
+6650
+6651
+6652
+6653
+6654
+6655
+6656
+6657
+6658
+6659
+6660
+6661
+6662
+6663
+6664
+6665
+6666
+6667
+6668
+6669
+6670
+6671
+6672
+6673
+6674
+6675
+6676
+6677
+6678
+6679
+6680
+6681
+6682
+6683
+6684
+6685
+6686
+6687
+6688
+6689
+6690
+6691
+6692
+6693
+6694
+6695
+6696
+6697
+6698
+6699
+6700
+6701
+6702
+6703
+6704
+6705
+6706
+6707
+6708
+6709
+6710
+6711
+6712
+6713
+6714
+6715
+6716
+6717
+6718
+6719
+6720
+6721
+6722
+6723
+6724
+6725
+6726
+6727
+6728
+6729
+6730
+6731
+6732
+6733
+6734
+6735
+6736
+6737
+6738
+6739
+6740
+6741
+6742
+6743
+6744
+6745
+6746
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6765
+6766
+6767
+6768
+6769
+6770
+6771
+6772
+6773
+6774
+6775
+6776
+6777
+6778
+6779
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6796
+6797
+6798
+6799
+6800
+6801
+6802
+6803
+6804
+6805
+6806
+6807
+6808
+6809
+6810
+6811
+6812
+6813
+6814
+6815
+6816
+6817
+6818
+6819
+6820
+6821
+6822
+6823
+6824
+6825
+6826
+6827
+6828
+6829
+6830
+6831
+6832
+6833
+6834
+6835
+6836
+6837
+6838
+6839
+6840
+6841
+6842
+6843
+6844
+6845
+6846
+6847
+6848
+6849
+6850
+6851
+6852
+6853
+6854
+6855
+6856
+6857
+6858
+6859
+6860
+6861
+6862
+6863
+6864
+6865
+6866
+6867
+6868
+6869
+6870
+6871
+6872
+6873
+6874
+6875
+6876
+6877
+6878
+6879
+6880
+6881
+6882
+6883
+6884
+6885
+6886
+6887
+6888
+6889
+6890
+6891
+6892
+6893
+6894
+6895
+6896
+6897
+6898
+6899
+6900
+6901
+6902
+6903
+6904
+6905
+6906
+6907
+6908
+6909
+6910
+6911
+6912
+6913
+6914
+6915
+6916
+6917
+6918
+6919
+6920
+6921
+6922
+6923
+6924
+6925
+6926
+6927
+6928
+6929
+6930
+6931
+6932
+6933
+6934
+6935
+6936
+6937
+6938
+6939
+6940
+6941
+6942
+6943
+6944
+6945
+6946
+6947
+6948
+6949
+6950
+6951
+6952
+6953
+6954
+6955
+6956
+6957
+6958
+6959
+6960
+6961
+6962
+6963
+6964
+6965
+6966
+6967
+6968
+6969
+6970
+6971
+6972
+6973
+6974
+6975
+6976
+6977
+6978
+6979
+6980
+6981
+6982
+6983
+6984
+6985
+6986
+6987
+6988
+6989
+6990
+6991
+6992
+6993
+6994
+6995
+6996
+6997
+6998
+6999
+7000
+7001
+7002
+7003
+7004
+7005
+7006
+7007
+7008
+7009
+7010
+7011
+7012
+7013
+7014
+7015
+7016
+7017
+7018
+7019
+7020
+7021
+7022
+7023
+7024
+7025
+7026
+7027
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7035
+7036
+7037
+7038
+7039
+7040
+7041
+7042
+7043
+7044
+7045
+7046
+7047
+7048
+7049
+7050
+7051
+7052
+7053
+7054
+7055
+7056
+7057
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7065
+7066
+7067
+7068
+7069
+7070
+7071
+7072
+7073
+7074
+7075
+7076
+7077
+7078
+7079
+7080
+7081
+7082
+7083
+7084
+7085
+7086
+7087
+7088
+7089
+7090
+7091
+7092
+7093
+7094
+7095
+7096
+7097
+7098
+7099
+7100
+7101
+7102
+7103
+7104
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7112
+7113
+7114
+7115
+7116
+7117
+7118
+7119
+7120
+7121
+7122
+7123
+7124
+7125
+7126
+7127
+7128
+7129
+7130
+7131
+7132
+7133
+7134
+7135
+7136
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7144
+7145
+7146
+7147
+7148
+7149
+7150
+7151
+7152
+7153
+7154
+7155
+7156
+7157
+7158
+7159
+7160
+7161
+7162
+7163
+7164
+7165
+7166
+7167
+7168
+7169
+7170
+7171
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7180
+7181
+7182
+7183
+7184
+7185
+7186
+7187
+7188
+7189
+7190
+7191
+7192
+7193
+7194
+7195
+7196
+7197
+7198
+7199
+7200
+7201
+7202
+7203
+7204
+7205
+7206
+7207
+7208
+7209
+7210
+7211
+7212
+7213
+7214
+7215
+7216
+7217
+7218
+7219
+7220
+7221
+7222
+7223
+7224
+7225
+7226
+7227
+7228
+7229
+7230
+7231
+7232
+7233
+7234
+7235
+7236
+7237
+7238
+7239
+7240
+7241
+7242
+7243
+7244
+7245
+7246
+7247
+7248
+7249
+7250
+7251
+7252
+7253
+7254
+7255
+7256
+7257
+7258
+7259
+7260
+7261
+7262
+7263
+7264
+7265
+7266
+7267
+7268
+7269
+7270
+7271
+7272
+7273
+7274
+7275
+7276
+7277
+7278
+7279
+7280
+7281
+7282
+7283
+7284
+7285
+7286
+7287
+7288
+7289
+7290
+7291
+7292
+7293
+7294
+7295
+7296
+7297
+7298
+7299
+7300
+7301
+7302
+7303
+7304
+7305
+7306
+7307
+7308
+7309
+7310
+7311
+7312
+7313
+7314
+7315
+7316
+7317
+7318
+7319
+7320
+7321
+7322
+7323
+7324
+7325
+7326
+7327
+7328
+7329
+7330
+7331
+7332
+7333
+7334
+7335
+7336
+7337
+7338
+7339
+7340
+7341
+7342
+7343
+7344
+7345
+7346
+7347
+7348
+7349
+7350
+7351
+7352
+7353
+7354
+7355
+7356
+7357
+7358
+7359
+7360
+7361
+7362
+7363
+7364
+7365
+7366
+7367
+7368
+7369
+7370
+7371
+7372
+7373
+7374
+7375
+7376
+7377
+7378
+7379
+7380
+7381
+7382
+7383
+7384
+7385
+7386
+7387
+7388
+7389
+7390
+7391
+7392
+7393
+7394
+7395
+7396
+7397
+7398
+7399
+7400
+7401
+7402
+7403
+7404
+7405
+7406
+7407
+7408
+7409
+7410
+7411
+7412
+7413
+7414
+7415
+7416
+7417
+7418
+7419
+7420
+7421
+7422
+7423
+7424
+7425
+7426
+7427
+7428
+7429
+7430
+7431
+7432
+7433
+7434
+7435
+7436
+7437
+7438
+7439
+7440
+7441
+7442
+7443
+7444
+7445
+7446
+7447
+7448
+7449
+7450
+7451
+7452
+7453
+7454
+7455
+7456
+7457
+7458
+7459
+7460
+7461
+7462
+7463
+7464
+7465
+7466
+7467
+7468
+7469
+7470
+7471
+7472
+7473
+7474
+7475
+7476
+7477
+7478
+7479
+7480
+7481
+7482
+7483
+7484
+7485
+7486
+7487
+7488
+7489
+7490
+7491
+7492
+7493
+7494
+7495
+7496
+7497
+7498
+7499
+7500
+7501
+7502
+7503
+7504
+7505
+7506
+7507
+7508
+7509
+7510
+7511
+7512
+7513
+7514
+7515
+7516
+7517
+7518
+7519
+7520
+7521
+7522
+7523
+7524
+7525
+7526
+7527
+7528
+7529
+7530
+7531
+7532
+7533
+7534
+7535
+7536
+7537
+7538
+7539
+7540
+7541
+7542
+7543
+7544
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7553
+7554
+7555
+7556
+7557
+7558
+7559
+7560
+7561
+7562
+7563
+7564
+7565
+7566
+7567
+7568
+7569
+7570
+7571
+7572
+7573
+7574
+7575
+7576
+7577
+7578
+7579
+7580
+7581
+7582
+7583
+7584
+7585
+7586
+7587
+7588
+7589
+7590
+7591
+7592
+7593
+7594
+7595
+7596
+7597
+7598
+7599
+7600
+7601
+7602
+7603
+7604
+7605
+7606
+7607
+7608
+7609
+7610
+7611
+7612
+7613
+7614
+7615
+7616
+7617
+7618
+7619
+7620
+7621
+7622
+7623
+7624
+7625
+7626
+7627
+7628
+7629
+7630
+7631
+7632
+7633
+7634
+7635
+7636
+7637
+7638
+7639
+7640
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7650
+7651
+7652
+7653
+7654
+7655
+7656
+7657
+7658
+7659
+7660
+7661
+7662
+7663
+7664
+7665
+7666
+7667
+7668
+7669
+7670
+7671
+7672
+7673
+7674
+7675
+7676
+7677
+7678
+7679
+7680
+7681
+7682
+7683
+7684
+7685
+7686
+7687
+7688
+7689
+7690
+7691
+7692
+7693
+7694
+7695
+7696
+7697
+7698
+7699
+7700
+7701
+7702
+7703
+7704
+7705
+7706
+7707
+7708
+7709
+7710
+7711
+7712
+7713
+7714
+7715
+7716
+7717
+7718
+7719
+7720
+7721
+7722
+7723
+7724
+7725
+7726
+7727
+7728
+7729
+7730
+7731
+7732
+7733
+7734
+7735
+7736
+7737
+7738
+7739
+7740
+7741
+7742
+7743
+7744
+7745
+7746
+7747
+7748
+7749
+7750
+7751
+7752
+7753
+7754
+7755
+7756
+7757
+7758
+7759
+7760
+7761
+7762
+7763
+7764
+7765
+7766
+7767
+7768
+7769
+7770
+7771
+7772
+7773
+7774
+7775
+7776
+7777
+7778
+7779
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7790
+7791
+7792
+7793
+7794
+7795
+7796
+7797
+7798
+7799
+7800
+7801
+7802
+7803
+7804
+7805
+7806
+7807
+7808
+7809
+7810
+7811
+7812
+7813
+7814
+7815
+7816
+7817
+7818
+7819
+7820
+7821
+7822
+7823
+7824
+7825
+7826
+7827
+7828
+7829
+7830
+7831
+7832
+7833
+7834
+7835
+7836
+7837
+7838
+7839
+7840
+7841
+7842
+7843
+7844
+7845
+7846
+7847
+7848
+7849
+7850
+7851
+7852
+7853
+7854
+7855
+7856
+7857
+7858
+7859
+7860
+7861
+7862
+7863
+7864
+7865
+7866
+7867
+7868
+7869
+7870
+7871
+7872
+7873
+7874
+7875
+7876
+7877
+7878
+7879
+7880
+7881
+7882
+7883
+7884
+7885
+7886
+7887
+7888
+7889
+7890
+7891
+7892
+7893
+7894
+7895
+7896
+7897
+7898
+7899
+7900
+7901
+7902
+7903
+7904
+7905
+7906
+7907
+7908
+7909
+7910
+7911
+7912
+7913
+7914
+7915
+7916
+7917
+7918
+7919
+7920
+7921
+7922
+7923
+7924
+7925
+7926
+7927
+7928
+7929
+7930
+7931
+7932
+7933
+7934
+7935
+7936
+7937
+7938
+7939
+7940
+7941
+7942
+7943
+7944
+7945
+7946
+7947
+7948
+7949
+7950
+7951
+7952
+7953
+7954
+7955
+7956
+7957
+7958
+7959
+7960
+7961
+7962
+7963
+7964
+7965
+7966
+7967
+7968
+7969
+7970
+7971
+7972
+7973
+7974
+7975
+7976
+7977
+7978
+7979
+7980
+7981
+7982
+7983
+7984
+7985
+7986
+7987
+7988
+7989
+7990
+7991
+7992
+7993
+7994
+7995
+7996
+7997
+7998
+7999
+8000
+8001
+8002
+8003
+8004
+8005
+8006
+8007
+8008
+8009
+8010
+8011
+8012
+8013
+8014
+8015
+8016
+8017
+8018
+8019
+8020
+8021
+8022
+8023
+8024
+8025
+8026
+8027
+8028
+8029
+8030
+8031
+8032
+8033
+8034
+8035
+8036
+8037
+8038
+8039
+8040
+8041
+8042
+8043
+8044
+8045
+8046
+8047
+8048
+8049
+8050
+8051
+8052
+8053
+8054
+8055
+8056
+8057
+8058
+8059
+8060
+8061
+8062
+8063
+8064
+8065
+8066
+8067
+8068
+8069
+8070
+8071
+8072
+8073
+8074
+8075
+8076
+8077
+8078
+8079
+8080
+8081
+8082
+8083
+8084
+8085
+8086
+8087
+8088
+8089
+8090
+8091
+8092
+8093
+8094
+8095
+8096
+8097
+8098
+8099
+8100
+8101
+8102
+8103
+8104
+8105
+8106
+8107
+8108
+8109
+8110
+8111
+8112
+8113
+8114
+8115
+8116
+8117
+8118
+8119
+8120
+8121
+8122
+8123
+8124
+8125
+8126
+8127
+8128
+8129
+8130
+8131
+8132
+8133
+8134
+8135
+8136
+8137
+8138
+8139
+8140
+8141
+8142
+8143
+8144
+8145
+8146
+8147
+8148
+8149
+8150
+8151
+8152
+8153
+8154
+8155
+8156
+8157
+8158
+8159
+8160
+8161
+8162
+8163
+8164
+8165
+8166
+8167
+8168
+8169
+8170
+8171
+8172
+8173
+8174
+8175
+8176
+8177
+8178
+8179
+8180
+8181
+8182
+8183
+8184
+8185
+8186
+8187
+8188
+8189
+8190
+8191
+8192
+8193
+8194
+8195
+8196
+8197
+8198
+8199
+8200
+8201
+8202
+8203
+8204
+8205
+8206
+8207
+8208
+8209
+8210
+8211
+8212
+8213
+8214
+8215
+8216
+8217
+8218
+8219
+8220
+8221
+8222
+8223
+8224
+8225
+8226
+8227
+8228
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8237
+8238
+8239
+8240
+8241
+8242
+8243
+8244
+8245
+8246
+8247
+8248
+8249
+8250
+8251
+8252
+8253
+8254
+8255
+8256
+8257
+8258
+8259
+8260
+8261
+8262
+8263
+8264
+8265
+8266
+8267
+8268
+8269
+8270
+8271
+8272
+8273
+8274
+8275
+8276
+8277
+8278
+8279
+8280
+8281
+8282
+8283
+8284
+8285
+8286
+8287
+8288
+8289
+8290
+8291
+8292
+8293
+8294
+8295
+8296
+8297
+8298
+8299
+8300
+8301
+8302
+8303
+8304
+8305
+8306
+8307
+8308
+8309
+8310
+8311
+8312
+8313
+8314
+8315
+8316
+8317
+8318
+8319
+8320
+8321
+8322
+8323
+8324
+8325
+8326
+8327
+8328
+8329
+8330
+8331
+8332
+8333
+8334
+8335
+8336
+8337
+8338
+8339
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8350
+8351
+8352
+8353
+8354
+8355
+8356
+8357
+8358
+8359
+8360
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8368
+8369
+8370
+8371
+8372
+8373
+8374
+8375
+8376
+8377
+8378
+8379
+8380
+8381
+8382
+8383
+8384
+8385
+8386
+8387
+8388
+8389
+8390
+8391
+8392
+8393
+8394
+8395
+8396
+8397
+8398
+8399
+8400
+8401
+8402
+8403
+8404
+8405
+8406
+8407
+8408
+8409
+8410
+8411
+8412
+8413
+8414
+8415
+8416
+8417
+8418
+8419
+8420
+8421
+8422
+8423
+8424
+8425
+8426
+8427
+8428
+8429
+8430
+8431
+8432
+8433
+8434
+8435
+8436
+8437
+8438
+8439
+8440
+8441
+8442
+8443
+8444
+8445
+8446
+8447
+8448
+8449
+8450
+8451
+8452
+8453
+8454
+8455
+8456
+8457
+8458
+8459
+8460
+8461
+8462
+8463
+8464
+8465
+8466
+8467
+8468
+8469
+8470
+8471
+8472
+8473
+8474
+8475
+8476
+8477
+8478
+8479
+8480
+8481
+8482
+8483
+8484
+8485
+8486
+8487
+8488
+8489
+8490
+8491
+8492
+8493
+8494
+8495
+8496
+8497
+8498
+8499
+8500
+8501
+8502
+8503
+8504
+8505
+8506
+8507
+8508
+8509
+8510
+8511
+8512
+8513
+8514
+8515
+8516
+8517
+8518
+8519
+8520
+8521
+8522
+8523
+8524
+8525
+8526
+8527
+8528
+8529
+8530
+8531
+8532
+8533
+8534
+8535
+8536
+8537
+8538
+8539
+8540
+8541
+8542
+8543
+8544
+8545
+8546
+8547
+8548
+8549
+8550
+8551
+8552
+8553
+8554
+8555
+8556
+8557
+8558
+8559
+8560
+8561
+8562
+8563
+8564
+8565
+8566
+8567
+8568
+8569
+8570
+8571
+8572
+8573
+8574
+8575
+8576
+8577
+8578
+8579
+8580
+8581
+8582
+8583
+8584
+8585
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8595
+8596
+8597
+8598
+8599
+8600
+8601
+8602
+8603
+8604
+8605
+8606
+8607
+8608
+8609
+8610
+8611
+8612
+8613
+8614
+8615
+8616
+8617
+8618
+8619
+8620
+8621
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8629
+8630
+8631
+8632
+8633
+8634
+8635
+8636
+8637
+8638
+8639
+8640
+8641
+8642
+8643
+8644
+8645
+8646
+8647
+8648
+8649
+8650
+8651
+8652
+8653
+8654
+8655
+8656
+8657
+8658
+8659
+8660
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8668
+8669
+8670
+8671
+8672
+8673
+8674
+8675
+8676
+8677
+8678
+8679
+8680
+8681
+8682
+8683
+8684
+8685
+8686
+8687
+8688
+8689
+8690
+8691
+8692
+8693
+8694
+8695
+8696
+8697
+8698
+8699
+8700
+8701
+8702
+8703
+8704
+8705
+8706
+8707
+8708
+8709
+8710
+8711
+8712
+8713
+8714
+8715
+8716
+8717
+8718
+8719
+8720
+8721
+8722
+8723
+8724
+8725
+8726
+8727
+8728
+8729
+8730
+8731
+8732
+8733
+8734
+8735
+8736
+8737
+8738
+8739
+8740
+8741
+8742
+8743
+8744
+8745
+8746
+8747
+8748
+8749
+8750
+8751
+8752
+8753
+8754
+8755
+8756
+8757
+8758
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8766
+8767
+8768
+8769
+8770
+8771
+8772
+8773
+8774
+8775
+8776
+8777
+8778
+8779
+8780
+8781
+8782
+8783
+8784
+8785
+8786
+8787
+8788
+8789
+8790
+8791
+8792
+8793
+8794
+8795
+8796
+8797
+8798
+8799
+8800
+8801
+8802
+8803
+8804
+8805
+8806
+8807
+8808
+8809
+8810
+8811
+8812
+8813
+8814
+8815
+8816
+8817
+8818
+8819
+8820
+8821
+8822
+8823
+8824
+8825
+8826
+8827
+8828
+8829
+8830
+8831
+8832
+8833
+8834
+8835
+8836
+8837
+8838
+8839
+8840
+8841
+8842
+8843
+8844
+8845
+8846
+8847
+8848
+8849
+8850
+8851
+8852
+8853
+8854
+8855
+8856
+8857
+8858
+8859
+8860
+8861
+8862
+8863
+8864
+8865
+8866
+8867
+8868
+8869
+8870
+8871
+8872
+8873
+8874
+8875
+8876
+8877
+8878
+8879
+8880
+8881
+8882
+8883
+8884
+8885
+8886
+8887
+8888
+8889
+8890
+8891
+8892
+8893
+8894
+8895
+8896
+8897
+8898
+8899
+8900
+8901
+8902
+8903
+8904
+8905
+8906
+8907
+8908
+8909
+8910
+8911
+8912
+8913
+8914
+8915
+8916
+8917
+8918
+8919
+8920
+8921
+8922
+8923
+8924
+8925
+8926
+8927
+8928
+8929
+8930
+8931
+8932
+8933
+8934
+8935
+8936
+8937
+8938
+8939
+8940
+8941
+8942
+8943
+8944
+8945
+8946
+8947
+8948
+8949
+8950
+8951
+8952
+8953
+8954
+8955
+8956
+8957
+8958
+8959
+8960
+8961
+8962
+8963
+8964
+8965
+8966
+8967
+8968
+8969
+8970
+8971
+8972
+8973
+8974
+8975
+8976
+8977
+8978
+8979
+8980
+8981
+8982
+8983
+8984
+8985
+8986
+8987
+8988
+8989
+8990
+8991
+8992
+8993
+8994
+8995
+8996
+8997
+8998
+8999
+9000
+9001
+9002
+9003
+9004
+9005
+9006
+9007
+9008
+9009
+9010
+9011
+9012
+9013
+9014
+9015
+9016
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9029
+9030
+9031
+9032
+9033
+9034
+9035
+9036
+9037
+9038
+9039
+9040
+9041
+9042
+9043
+9044
+9045
+9046
+9047
+9048
+9049
+9050
+9051
+9052
+9053
+9054
+9055
+9056
+9057
+9058
+9059
+9060
+9061
+9062
+9063
+9064
+9065
+9066
+9067
+9068
+9069
+9070
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9079
+9080
+9081
+9082
+9083
+9084
+9085
+9086
+9087
+9088
+9089
+9090
+9091
+9092
+9093
+9094
+9095
+9096
+9097
+9098
+9099
+9100
+9101
+9102
+9103
+9104
+9105
+9106
+9107
+9108
+9109
+9110
+9111
+9112
+9113
+9114
+9115
+9116
+9117
+9118
+9119
+9120
+9121
+9122
+9123
+9124
+9125
+9126
+9127
+9128
+9129
+9130
+9131
+9132
+9133
+9134
+9135
+9136
+9137
+9138
+9139
+9140
+9141
+9142
+9143
+9144
+9145
+9146
+9147
+9148
+9149
+9150
+9151
+9152
+9153
+9154
+9155
+9156
+9157
+9158
+9159
+9160
+9161
+9162
+9163
+9164
+9165
+9166
+9167
+9168
+9169
+9170
+9171
+9172
+9173
+9174
+9175
+9176
+9177
+9178
+9179
+9180
+9181
+9182
+9183
+9184
+9185
+9186
+9187
+9188
+9189
+9190
+9191
+9192
+9193
+9194
+9195
+9196
+9197
+9198
+9199
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9208
+9209
+9210
+9211
+9212
+9213
+9214
+9215
+9216
+9217
+9218
+9219
+9220
+9221
+9222
+9223
+9224
+9225
+9226
+9227
+9228
+9229
+9230
+9231
+9232
+9233
+9234
+9235
+9236
+9237
+9238
+9239
+9240
+9241
+9242
+9243
+9244
+9245
+9246
+9247
+9248
+9249
+9250
+9251
+9252
+9253
+9254
+9255
+9256
+9257
+9258
+9259
+9260
+9261
+9262
+9263
+9264
+9265
+9266
+9267
+9268
+9269
+9270
+9271
+9272
+9273
+9274
+9275
+9276
+9277
+9278
+9279
+9280
+9281
+9282
+9283
+9284
+9285
+9286
+9287
+9288
+9289
+9290
+9291
+9292
+9293
+9294
+9295
+9296
+9297
+9298
+9299
+9300
+9301
+9302
+9303
+9304
+9305
+9306
+9307
+9308
+9309
+9310
+9311
+9312
+9313
+9314
+9315
+9316
+9317
+9318
+9319
+9320
+9321
+9322
+9323
+9324
+9325
+9326
+9327
+9328
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9337
+9338
+9339
+9340
+9341
+9342
+9343
+9344
+9345
+9346
+9347
+9348
+9349
+9350
+9351
+9352
+9353
+9354
+9355
+9356
+9357
+9358
+9359
+9360
+9361
+9362
+9363
+9364
+9365
+9366
+9367
+9368
+9369
+9370
+9371
+9372
+9373
+9374
+9375
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9383
+9384
+9385
+9386
+9387
+9388
+9389
+9390
+9391
+9392
+9393
+9394
+9395
+9396
+9397
+9398
+9399
+9400
+9401
+9402
+9403
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9411
+9412
+9413
+9414
+9415
+9416
+9417
+9418
+9419
+9420
+9421
+9422
+9423
+9424
+9425
+9426
+9427
+9428
+9429
+9430
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9438
+9439
+9440
+9441
+9442
+9443
+9444
+9445
+9446
+9447
+9448
+9449
+9450
+9451
+9452
+9453
+9454
+9455
+9456
+9457
+9458
+9459
+9460
+9461
+9462
+9463
+9464
+9465
+9466
+9467
+9468
+9469
+9470
+9471
+9472
+9473
+9474
+9475
+9476
+9477
+9478
+9479
+9480
+9481
+9482
+9483
+9484
+9485
+9486
+9487
+9488
+9489
+9490
+9491
+9492
+9493
+9494
+9495
+9496
+9497
+9498
+9499
+9500
+9501
+9502
+9503
+9504
+9505
+9506
+9507
+9508
+9509
+9510
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9520
+9521
+9522
+9523
+9524
+9525
+9526
+9527
+9528
+9529
+9530
+9531
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9539
+9540
+9541
+9542
+9543
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9551
+9552
+9553
+9554
+9555
+9556
+9557
+9558
+9559
+9560
+9561
+9562
+9563
+9564
+9565
+9566
+9567
+9568
+9569
+9570
+9571
+9572
+9573
+9574
+9575
+9576
+9577
+9578
+9579
+9580
+9581
+9582
+9583
+9584
+9585
+9586
+9587
+9588
+9589
+9590
+9591
+9592
+9593
+9594
+9595
+9596
+9597
+9598
+9599
+9600
+9601
+9602
+9603
+9604
+9605
+9606
+9607
+9608
+9609
+9610
+9611
+9612
+9613
+9614
+9615
+9616
+9617
+9618
+9619
+9620
+9621
+9622
+9623
+9624
+9625
+9626
+9627
+9628
+9629
+9630
+9631
+9632
+9633
+9634
+9635
+9636
+9637
+9638
+9639
+9640
+9641
+9642
+9643
+9644
+9645
+9646
+9647
+9648
+9649
+9650
+9651
+9652
+9653
+9654
+9655
+9656
+9657
+9658
+9659
+9660
+9661
+9662
+9663
+9664
+9665
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9673
+9674
+9675
+9676
+9677
+9678
+9679
+9680
+9681
+9682
+9683
+9684
+9685
+9686
+9687
+9688
+9689
+9690
+9691
+9692
+9693
+9694
+9695
+9696
+9697
+9698
+9699
+9700
+9701
+9702
+9703
+9704
+9705
+9706
+9707
+9708
+9709
+9710
+9711
+9712
+9713
+9714
+9715
+9716
+9717
+9718
+9719
+9720
+9721
+9722
+9723
+9724
+9725
+9726
+9727
+9728
+9729
+9730
+9731
+9732
+9733
+9734
+9735
+9736
+9737
+9738
+9739
+9740
+9741
+9742
+9743
+9744
+9745
+9746
+9747
+9748
+9749
+9750
+9751
+9752
+9753
+9754
+9755
+9756
+9757
+9758
+9759
+9760
+9761
+9762
+9763
+9764
+9765
+9766
+9767
+9768
+9769
+9770
+9771
+9772
+9773
+9774
+9775
+9776
+9777
+9778
+9779
+9780
+9781
+9782
+9783
+9784
+9785
+9786
+9787
+9788
+9789
+9790
+9791
+9792
+9793
+9794
+9795
+9796
+9797
+9798
+9799
+9800
+9801
+9802
+9803
+9804
+9805
+9806
+9807
+9808
+9809
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9818
+9819
+9820
+9821
+9822
+9823
+9824
+9825
+9826
+9827
+9828
+9829
+9830
+9831
+9832
+9833
+9834
+9835
+9836
+9837
+9838
+9839
+9840
+9841
+9842
+9843
+9844
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9855
+9856
+9857
+9858
+9859
+9860
+9861
+9862
+9863
+9864
+9865
+9866
+9867
+9868
+9869
+9870
+9871
+9872
+9873
+9874
+9875
+9876
+9877
+9878
+9879
+9880
+9881
+9882
+9883
+9884
+9885
+9886
+9887
+9888
+9889
+9890
+9891
+9892
+9893
+9894
+9895
+9896
+9897
+9898
+9899
+9900
+9901
+9902
+9903
+9904
+9905
+9906
+9907
+9908
+9909
+9910
+9911
+9912
+9913
+9914
+9915
+9916
+9917
+9918
+9919
+9920
+9921
+9922
+9923
+9924
+9925
+9926
+9927
+9928
+9929
+9930
+9931
+9932
+9933
+9934
+9935
+9936
+9937
+9938
+9939
+9940
+9941
+9942
+9943
+9944
+9945
+9946
+9947
+9948
+9949
+9950
+9951
+9952
+9953
+9954
+9955
+9956
+9957
+9958
+9959
+9960
+9961
+9962
+9963
+9964
+9965
+9966
+9967
+9968
+9969
+9970
+9971
+9972
+9973
+9974
+9975
+9976
+9977
+9978
+9979
+9980
+9981
+9982
+9983
+9984
+9985
+9986
+9987
+9988
+9989
+9990
+9991
+9992
+9993
+9994
+9995
+9996
+9997
+9998
+9999
+10000
+10001
+10002
+10003
+10004
+10005
+10006
+10007
+10008
+10009
+10010
+10011
+10012
+10013
+10014
+10015
+10016
+10017
+10018
+10019
+10020
+10021
+10022
+10023
+10024
+10025
+10026
+10027
+10028
+10029
+10030
+10031
+10032
+10033
+10034
+10035
+10036
+10037
+10038
+10039
+10040
+10041
+10042
+10043
+10044
+10045
+10046
+10047
+10048
+10049
+10050
+10051
+10052
+10053
+10054
+10055
+10056
+10057
+10058
+10059
+10060
+10061
+10062
+10063
+10064
+10065
+10066
+10067
+10068
+10069
+10070
+10071
+10072
+10073
+10074
+10075
+10076
+10077
+10078
+10079
+10080
+10081
+10082
+10083
+10084
+10085
+10086
+10087
+10088
+10089
+10090
+10091
+10092
+10093
+10094
+10095
+10096
+10097
+10098
+10099
+10100
+10101
+10102
+10103
+10104
+10105
+10106
+10107
+10108
+10109
+10110
+10111
+10112
+10113
+10114
+10115
+10116
+10117
+10118
+10119
+10120
+10121
+10122
+10123
+10124
+10125
+10126
+10127
+10128
+10129
+10130
+10131
+10132
+10133
+10134
+10135
+10136
+10137
+10138
+10139
+10140
+10141
+10142
+10143
+10144
+10145
+10146
+10147
+10148
+10149
+10150
+10151
+10152
+10153
+10154
+10155
+10156
+10157
+10158
+10159
+10160
+10161
+10162
+10163
+10164
+10165
+10166
+10167
+10168
+10169
+10170
+10171
+10172
+10173
+10174
+10175
+10176
+10177
+10178
+10179
+10180
+10181
+10182
+10183
+10184
+10185
+10186
+10187
+10188
+10189
+10190
+10191
+10192
+10193
+10194
+10195
+10196
+10197
+10198
+10199
+10200
+10201
+10202
+10203
+10204
+10205
+10206
+10207
+10208
+10209
+10210
+10211
+10212
+10213
+10214
+10215
+10216
+10217
+10218
+10219
+10220
+10221
+10222
+10223
+10224
+10225
+10226
+10227
+10228
+10229
+10230
+10231
+10232
+10233
+10234
+10235
+10236
+10237
+10238
+10239
+10240
+10241
+10242
+10243
+10244
+10245
+10246
+10247
+10248
+10249
+10250
+10251
+10252
+10253
+10254
+10255
+10256
+10257
+10258
+10259
+10260
+10261
+10262
+10263
+10264
+10265
+10266
+10267
+10268
+10269
+10270
+10271
+10272
+10273
+10274
+10275
+10276
+10277
+10278
+10279
+10280
+10281
+10282
+10283
+10284
+10285
+10286
+10287
+10288
+10289
+10290
+10291
+10292
+10293
+10294
+10295
+10296
+10297
+10298
+10299
+10300
+10301
+10302
+10303
+10304
+10305
+10306
+10307
+10308
+10309
+10310
+10311
+10312
+10313
+10314
+10315
+10316
+10317
+10318
+10319
+10320
+10321
+10322
+10323
+10324
+10325
+10326
+10327
+10328
+10329
+10330
+10331
+10332
+10333
+10334
+10335
+10336
+10337
+10338
+10339
+10340
+10341
+10342
+10343
+10344
+10345
+10346
+10347
+10348
+10349
+10350
+10351
+10352
+10353
+10354
+10355
+10356
+10357
+10358
+10359
+10360
+10361
+10362
+10363
+10364
+10365
+10366
+10367
+10368
+10369
+10370
+10371
+10372
+10373
+10374
+10375
+10376
+10377
+10378
+10379
+10380
+10381
+10382
+10383
+10384
+10385
+10386
+10387
+10388
+10389
+10390
+10391
+10392
+10393
+10394
+10395
+10396
+10397
+10398
+10399
+10400
+10401
+10402
+10403
+10404
+10405
+10406
+10407
+10408
+10409
+10410
+10411
+10412
+10413
+10414
+10415
+10416
+10417
+10418
+10419
+10420
+10421
+10422
+10423
+10424
+10425
+10426
+10427
+10428
+10429
+10430
+10431
+10432
+10433
+10434
+10435
+10436
+10437
+10438
+10439
+10440
+10441
+10442
+10443
+10444
+10445
+10446
+10447
+10448
+10449
+10450
+10451
+10452
+10453
+10454
+10455
+10456
+10457
+10458
+10459
+10460
+10461
+10462
+10463
+10464
+10465
+10466
+10467
+10468
+10469
+10470
+10471
+10472
+10473
+10474
+10475
+10476
+10477
+10478
+10479
+10480
+10481
+10482
+10483
+10484
+10485
+10486
+10487
+10488
+10489
+10490
+10491
+10492
+10493
+10494
+10495
+10496
+10497
+10498
+10499
+10500
+10501
+10502
+10503
+10504
+10505
+10506
+10507
+10508
+10509
+10510
+10511
+10512
+10513
+10514
+10515
+10516
+10517
+10518
+10519
+10520
+10521
+10522
+10523
+10524
+10525
+10526
+10527
+10528
+10529
+10530
+10531
+10532
+10533
+10534
+10535
+10536
+10537
+10538
+10539
+10540
+10541
+10542
+10543
+10544
+10545
+10546
+10547
+10548
+10549
+10550
+10551
+10552
+10553
+10554
+10555
+10556
+10557
+10558
+10559
+10560
+10561
+10562
+10563
+10564
+10565
+10566
+10567
+10568
+10569
+10570
+10571
+10572
+10573
+10574
+10575
+10576
+10577
+10578
+10579
+10580
+10581
+10582
+10583
+10584
+10585
+10586
+10587
+10588
+10589
+10590
+10591
+10592
+10593
+10594
+10595
+10596
+10597
+10598
+10599
+10600
+10601
+10602
+10603
+10604
+10605
+10606
+10607
+10608
+10609
+10610
+10611
+10612
+10613
+10614
+10615
+10616
+10617
+10618
+10619
+10620
+10621
+10622
+10623
+10624
+10625
+10626
+10627
+10628
+10629
+10630
+10631
+10632
+10633
+10634
+10635
+10636
+10637
+10638
+10639
+10640
+10641
+10642
+10643
+10644
+10645
+10646
+10647
+10648
+10649
+10650
+10651
+10652
+10653
+10654
+10655
+10656
+10657
+10658
+10659
+10660
+10661
+10662
+10663
+10664
+10665
+10666
+10667
+10668
+10669
+10670
+10671
+10672
+10673
+10674
+10675
+10676
+10677
+10678
+10679
+10680
+10681
+10682
+10683
+10684
+10685
+10686
+10687
+10688
+10689
+10690
+10691
+10692
+10693
+10694
+10695
+10696
+10697
+10698
+10699
+10700
+10701
+10702
+10703
+10704
+10705
+10706
+10707
+10708
+10709
+10710
+10711
+10712
+10713
+10714
+10715
+10716
+10717
+10718
+10719
+10720
+10721
+10722
+10723
+10724
+10725
+10726
+10727
+10728
+10729
+10730
+10731
+10732
+10733
+10734
+10735
+10736
+10737
+10738
+10739
+10740
+10741
+10742
+10743
+10744
+10745
+10746
+10747
+10748
+10749
+10750
+10751
+10752
+10753
+10754
+10755
+10756
+10757
+10758
+10759
+10760
+10761
+10762
+10763
+10764
+10765
+10766
+10767
+10768
+10769
+10770
+10771
+10772
+10773
+10774
+10775
+10776
+10777
+10778
+10779
+10780
+10781
+10782
+10783
+10784
+10785
+10786
+10787
+10788
+10789
+10790
+10791
+10792
+10793
+10794
+10795
+10796
+10797
+10798
+10799
+10800
+10801
+10802
+10803
+10804
+10805
+10806
+10807
+10808
+10809
+10810
+10811
+10812
+10813
+10814
+10815
+10816
+10817
+10818
+10819
+10820
+10821
+10822
+10823
+10824
+10825
+10826
+10827
+10828
+10829
+10830
+10831
+10832
+10833
+10834
+10835
+10836
+10837
+10838
+10839
+10840
+10841
+10842
+10843
+10844
+10845
+10846
+10847
+10848
+10849
+10850
+10851
+10852
+10853
+10854
+10855
+10856
+10857
+10858
+10859
+10860
+10861
+10862
+10863
+10864
+10865
+10866
+10867
+10868
+10869
+10870
+10871
+10872
+10873
+10874
+10875
+10876
+10877
+10878
+10879
+10880
+10881
+10882
+10883
+10884
+10885
+10886
+10887
+10888
+10889
+10890
+10891
+10892
+10893
+10894
+10895
+10896
+10897
+10898
+10899
+10900
+10901
+10902
+10903
+10904
+10905
+10906
+10907
+10908
+10909
+10910
+10911
+10912
+10913
+10914
+10915
+10916
+10917
+10918
+10919
+10920
+10921
+10922
+10923
+10924
+10925
+10926
+10927
+10928
+10929
+10930
+10931
+10932
+10933
+10934
+10935
+10936
+10937
+10938
+10939
+10940
+10941
+10942
+10943
+10944
+10945
+10946
+10947
+10948
+10949
+10950
+10951
+10952
+10953
+10954
+10955
+10956
+10957
+10958
+10959
+10960
+10961
+10962
+10963
+10964
+10965
+10966
+10967
+10968
+10969
+10970
+10971
+10972
+10973
+10974
+10975
+10976
+10977
+10978
+10979
+10980
+10981
+10982
+10983
+10984
+10985
+10986
+10987
+10988
+10989
+10990
+10991
+10992
+10993
+10994
+10995
+10996
+10997
+10998
+10999
+11000
+11001
+11002
+11003
+11004
+11005
+11006
+11007
+11008
+11009
+11010
+11011
+11012
+11013
+11014
+11015
+11016
+11017
+11018
+11019
+11020
+11021
+11022
+11023
+11024
+11025
+11026
+11027
+11028
+11029
+11030
+11031
+11032
+11033
+11034
+11035
+11036
+11037
+11038
+11039
+11040
+11041
+11042
+11043
+11044
+11045
+11046
+11047
+11048
+11049
+11050
+11051
+11052
+11053
+11054
+11055
+11056
+11057
+11058
+11059
+11060
+11061
+11062
+11063
+11064
+11065
+11066
+11067
+11068
+11069
+11070
+11071
+11072
+11073
+11074
+11075
+11076
+11077
+11078
+11079
+11080
+11081
+11082
+11083
+11084
+11085
+11086
+11087
+11088
+11089
+11090
+11091
+11092
+11093
+11094
+11095
+11096
+11097
+11098
+11099
+11100
+11101
+11102
+11103
+11104
+11105
+11106
+11107
+11108
+11109
+11110
+11111
+11112
+11113
+11114
+11115
+11116
+11117
+11118
+11119
+11120
+11121
+11122
+11123
+11124
+11125
+11126
+11127
+11128
+11129
+11130
+11131
+11132
+11133
+11134
+11135
+11136
+11137
+11138
+11139
+11140
+11141
+11142
+11143
+11144
+11145
+11146
+11147
+11148
+11149
+11150
+11151
+11152
+11153
+11154
+11155
+11156
+11157
+11158
+11159
+11160
+11161
+11162
+11163
+11164
+11165
+11166
+11167
+11168
+11169
+11170
+11171
+11172
+11173
+11174
+11175
+11176
+11177
+11178
+11179
+11180
+11181
+11182
+11183
+11184
+11185
+11186
+11187
+11188
+11189
+11190
+11191
+11192
+11193
+11194
+11195
+11196
+11197
+11198
+11199
+11200
+11201
+11202
+11203
+11204
+11205
+11206
+11207
+11208
+11209
+11210
+11211
+11212
+11213
+11214
+11215
+11216
+11217
+11218
+11219
+11220
+11221
+11222
+11223
+11224
+11225
+11226
+11227
+11228
+11229
+11230
+11231
+11232
+11233
+11234
+11235
+11236
+11237
+11238
+11239
+11240
+11241
+11242
+11243
+11244
+11245
+11246
+11247
+11248
+11249
+11250
+11251
+11252
+11253
+11254
+11255
+11256
+11257
+11258
+11259
+11260
+11261
+11262
+11263
+11264
+11265
+11266
+11267
+11268
+11269
+11270
+11271
+11272
+11273
+11274
+11275
+11276
+11277
+11278
+11279
+11280
+11281
+11282
+11283
+11284
+11285
+11286
+11287
+11288
+11289
+11290
+11291
+11292
+11293
+11294
+11295
+11296
+11297
+11298
+11299
+11300
+11301
+11302
+11303
+11304
+11305
+11306
+11307
+11308
+11309
+11310
+11311
+11312
+11313
+11314
+11315
+11316
+11317
+11318
+11319
+11320
+11321
+11322
+11323
+11324
+11325
+11326
+11327
+11328
+11329
+11330
+11331
+11332
+11333
+11334
+11335
+11336
+11337
+11338
+11339
+11340
+11341
+11342
+11343
+11344
+11345
+11346
+11347
+11348
+11349
+11350
+11351
+11352
+11353
+11354
+11355
+11356
+11357
+11358
+11359
+11360
+11361
+11362
+11363
+11364
+11365
+11366
+11367
+11368
+11369
+11370
+11371
+11372
+11373
+11374
+11375
+11376
+11377
+11378
+11379
+11380
+11381
+11382
+11383
+11384
+11385
+11386
+11387
+11388
+11389
+11390
+11391
+11392
+11393
+11394
+11395
+11396
+11397
+11398
+11399
+11400
+11401
+11402
+11403
+11404
+11405
+11406
+11407
+11408
+11409
+11410
+11411
+11412
+11413
+11414
+11415
+11416
+11417
+11418
+11419
+11420
+11421
+11422
+11423
+11424
+11425
+11426
+11427
+11428
+11429
+11430
+11431
+11432
+11433
+11434
+11435
+11436
+11437
+11438
+11439
+11440
+11441
+11442
+11443
+11444
+11445
+11446
+11447
+11448
+11449
+11450
+11451
+11452
+11453
+11454
+11455
+11456
+11457
+11458
+11459
+11460
+11461
+11462
+11463
+11464
+11465
+11466
+11467
+11468
+11469
+11470
+11471
+11472
+11473
+11474
+11475
+11476
+11477
+11478
+11479
+11480
+11481
+11482
+11483
+11484
+11485
+11486
+11487
+11488
+11489
+11490
+11491
+11492
+11493
+11494
+11495
+11496
+11497
+11498
+11499
+11500
+11501
+11502
+11503
+11504
+11505
+11506
+11507
+11508
+11509
+11510
+11511
+11512
+11513
+11514
+11515
+11516
+11517
+11518
+11519
+11520
+11521
+11522
+11523
+11524
+11525
+11526
+11527
+11528
+11529
+11530
+11531
+11532
+11533
+11534
+11535
+11536
+11537
+11538
+11539
+11540
+11541
+11542
+11543
+11544
+11545
+11546
+11547
+11548
+11549
+11550
+11551
+11552
+11553
+11554
+11555
+11556
+11557
+11558
+11559
+11560
+11561
+11562
+11563
+11564
+11565
+11566
+11567
+11568
+11569
+11570
+11571
+11572
+11573
+11574
+11575
+11576
+11577
+11578
+11579
+11580
+11581
+11582
+11583
+11584
+11585
+11586
+11587
+11588
+11589
+11590
+11591
+11592
+11593
+11594
+11595
+11596
+11597
+11598
+11599
+11600
+11601
+11602
+11603
+11604
+11605
+11606
+11607
+11608
+11609
+11610
+11611
+11612
+11613
+11614
+11615
+11616
+11617
+11618
+11619
+11620
+11621
+11622
+11623
+11624
+11625
+11626
+11627
+11628
+11629
+11630
+11631
+11632
+11633
+11634
+11635
+11636
+11637
+11638
+11639
+11640
+11641
+11642
+11643
+11644
+11645
+11646
+11647
+11648
+11649
+11650
+11651
+11652
+11653
+11654
+11655
+11656
+11657
+11658
+11659
+11660
+11661
+11662
+11663
+11664
+11665
+11666
+11667
+11668
+11669
+11670
+11671
+11672
+11673
+11674
+11675
+11676
+11677
+11678
+11679
+11680
+11681
+11682
+11683
+11684
+11685
+11686
+11687
+11688
+11689
+11690
+11691
+11692
+11693
+11694
+11695
+11696
+11697
+11698
+11699
+11700
+11701
+11702
+11703
+11704
+11705
+11706
+11707
+11708
+11709
+11710
+11711
+11712
+11713
+11714
+11715
+11716
+11717
+11718
+11719
+11720
+11721
+11722
+11723
+11724
+11725
+11726
+11727
+11728
+11729
+11730
+11731
+11732
+11733
+11734
+11735
+11736
+11737
+11738
+11739
+11740
+11741
+11742
+11743
+11744
+11745
+11746
+11747
+11748
+11749
+11750
+11751
+11752
+11753
+11754
+11755
+11756
+11757
+11758
+11759
+11760
+11761
+11762
+11763
+11764
+11765
+11766
+11767
+11768
+11769
+11770
+11771
+11772
+11773
+11774
+11775
+11776
+11777
+11778
+11779
+11780
+11781
+11782
+11783
+11784
+11785
+11786
+11787
+11788
+11789
+11790
+11791
+11792
+11793
+11794
+11795
+11796
+11797
+11798
+11799
+11800
+11801
+11802
+11803
+11804
+11805
+11806
+11807
+11808
+11809
+11810
+11811
+11812
+11813
+11814
+11815
+11816
+11817
+11818
+11819
+11820
+11821
+11822
+11823
+11824
+11825
+11826
+11827
+11828
+11829
+11830
+11831
+11832
+11833
+11834
+11835
+11836
+11837
+11838
+11839
+11840
+11841
+11842
+11843
+11844
+11845
+11846
+11847
+11848
+11849
+11850
+11851
+11852
+11853
+11854
+11855
+11856
+11857
+11858
+11859
+11860
+11861
+11862
+11863
+11864
+11865
+11866
+11867
+11868
+11869
+11870
+11871
+11872
+11873
+11874
+11875
+11876
+11877
+11878
+11879
+11880
+11881
+11882
+11883
+11884
+11885
+11886
+11887
+11888
+11889
+11890
+11891
+11892
+11893
+11894
+11895
+11896
+11897
+11898
+11899
+11900
+11901
+11902
+11903
+11904
+11905
+11906
+11907
+11908
+11909
+11910
+11911
+11912
+11913
+11914
+11915
+11916
+11917
+11918
+11919
+11920
+11921
+11922
+11923
+11924
+11925
+11926
+11927
+11928
+11929
+11930
+11931
+11932
+11933
+11934
+11935
+11936
+11937
+11938
+11939
+11940
+11941
+11942
+11943
+11944
+11945
+11946
+11947
+11948
+11949
+11950
+11951
+11952
+11953
+11954
+11955
+11956
+11957
+11958
+11959
+11960
+11961
+11962
+11963
+11964
+11965
+11966
+11967
+11968
+11969
+11970
+11971
+11972
+11973
+11974
+11975
+11976
+11977
+11978
+11979
+11980
+11981
+11982
+11983
+11984
+11985
+11986
+11987
+11988
+11989
+11990
+11991
+11992
+11993
+11994
+11995
+11996
+11997
+11998
+11999
+12000
+12001
+12002
+12003
+12004
+12005
+12006
+12007
+12008
+12009
+12010
+12011
+12012
+12013
+12014
+12015
+12016
+12017
+12018
+12019
+12020
+12021
+12022
+12023
+12024
+12025
+12026
+12027
+12028
+12029
+12030
+12031
+12032
+12033
+12034
+12035
+12036
+12037
+12038
+12039
+12040
+12041
+12042
+12043
+12044
+12045
+12046
+12047
+12048
+12049
+12050
+12051
+12052
+12053
+12054
+12055
+12056
+12057
+12058
+12059
+12060
+12061
+12062
+12063
+12064
+12065
+12066
+12067
+12068
+12069
+12070
+12071
+12072
+12073
+12074
+12075
+12076
+12077
+12078
+12079
+12080
+12081
+12082
+12083
+12084
+12085
+12086
+12087
+12088
+12089
+12090
+12091
+12092
+12093
+12094
+12095
+12096
+12097
+12098
+12099
+12100
+12101
+12102
+12103
+12104
+12105
+12106
+12107
+12108
+12109
+12110
+12111
+12112
+12113
+12114
+12115
+12116
+12117
+12118
+12119
+12120
+12121
+12122
+12123
+12124
+12125
+12126
+12127
+12128
+12129
+12130
+12131
+12132
+12133
+12134
+12135
+12136
+12137
+12138
+12139
+12140
+12141
+12142
+12143
+12144
+12145
+12146
+12147
+12148
+12149
+12150
+12151
+12152
+12153
+12154
+12155
+12156
+12157
+12158
+12159
+12160
+12161
+12162
+12163
+12164
+12165
+12166
+12167
+12168
+12169
+12170
+12171
+12172
+12173
+12174
+12175
+12176
+12177
+12178
+12179
+12180
+12181
+12182
+12183
+12184
+12185
+12186
+12187
+12188
+12189
+12190
+12191
+12192
+12193
+12194
+12195
+12196
+12197
+12198
+12199
+12200
+12201
+12202
+12203
+12204
+12205
+12206
+12207
+12208
+12209
+12210
+12211
+12212
+12213
+12214
+12215
+12216
+12217
+12218
+12219
+12220
+12221
+12222
+12223
+12224
+12225
+12226
+12227
+12228
+12229
+12230
+12231
+12232
+12233
+12234
+12235
+12236
+12237
+12238
+12239
+12240
+12241
+12242
+12243
+12244
+12245
+12246
+12247
+12248
+12249
+12250
+12251
+12252
+12253
+12254
+12255
+12256
+12257
+12258
+12259
+12260
+12261
+12262
+12263
+12264
+12265
+12266
+12267
+12268
+12269
+12270
+12271
+12272
+12273
+12274
+12275
+12276
+12277
+12278
+12279
+12280
+12281
+12282
+12283
+12284
+12285
+12286
+12287
+12288
+12289
+12290
+12291
+12292
+12293
+12294
+12295
+12296
+12297
+12298
+12299
+12300
+12301
+12302
+12303
+12304
+12305
+12306
+12307
+12308
+12309
+12310
+12311
+12312
+12313
+12314
+12315
+12316
+12317
+12318
+12319
+12320
+12321
+12322
+12323
+12324
+12325
+12326
+12327
+12328
+12329
+12330
+12331
+12332
+12333
+12334
+12335
+12336
+12337
+12338
+12339
+12340
+12341
+12342
+12343
+12344
+12345
+12346
+12347
+12348
+12349
+12350
+12351
+12352
+12353
+12354
+12355
+12356
+12357
+12358
+12359
+12360
+12361
+12362
+12363
+12364
+12365
+12366
+12367
+12368
+12369
+12370
+12371
+12372
+12373
+12374
+12375
+12376
+12377
+12378
+12379
+12380
+12381
+12382
+12383
+12384
+12385
+12386
+12387
+12388
+12389
+12390
+12391
+12392
+12393
+12394
+12395
+12396
+12397
+12398
+12399
+12400
+12401
+12402
+12403
+12404
+12405
+12406
+12407
+12408
+12409
+12410
+12411
+12412
+12413
+12414
+12415
+12416
+12417
+12418
+12419
+12420
+12421
+12422
+12423
+12424
+12425
+12426
+12427
+12428
+12429
+12430
+12431
+12432
+12433
+12434
+12435
+12436
+12437
+12438
+12439
+12440
+12441
+12442
+12443
+12444
+12445
+12446
+12447
+12448
+12449
+12450
+12451
+12452
+12453
+12454
+12455
+12456
+12457
+12458
+12459
+12460
+12461
+12462
+12463
+12464
+12465
+12466
+12467
+12468
+12469
+12470
+12471
+12472
+12473
+12474
+12475
+12476
+12477
+12478
+12479
+12480
+12481
+12482
+12483
+12484
+12485
+12486
+12487
+12488
+12489
+12490
+12491
+12492
+12493
+12494
+12495
+12496
+12497
+12498
+12499
+12500
+12501
+12502
+12503
+12504
+12505
+12506
+12507
+12508
+12509
+12510
+12511
+12512
+12513
+12514
+12515
+12516
+12517
+12518
+12519
+12520
+12521
+12522
+12523
+12524
+12525
+12526
+12527
+12528
+12529
+12530
+12531
+12532
+12533
+12534
+12535
+12536
+12537
+12538
+12539
+12540
+12541
+12542
+12543
+12544
+12545
+12546
+12547
+12548
+12549
+12550
+12551
+12552
+12553
+12554
+12555
+12556
+12557
+12558
+12559
+12560
+12561
+12562
+12563
+12564
+12565
+12566
+12567
+12568
+12569
+12570
+12571
+12572
+12573
+12574
+12575
+12576
+12577
+12578
+12579
+12580
+12581
+12582
+12583
+12584
+12585
+12586
+12587
+12588
+12589
+12590
+12591
+12592
+12593
+12594
+12595
+12596
+12597
+12598
+12599
+12600
+12601
+12602
+12603
+12604
+12605
+12606
+12607
+12608
+12609
+12610
+12611
+12612
+12613
+12614
+12615
+12616
+12617
+12618
+12619
+12620
+12621
+12622
+12623
+12624
+12625
+12626
+12627
+12628
+12629
+12630
+12631
+12632
+12633
+12634
+12635
+12636
+12637
+12638
+12639
+12640
+12641
+12642
+12643
+12644
+12645
+12646
+12647
+12648
+12649
+12650
+12651
+12652
+12653
+12654
+12655
+12656
+12657
+12658
+12659
+12660
+12661
+12662
+12663
+12664
+12665
+12666
+12667
+12668
+12669
+12670
+12671
+12672
+12673
+12674
+12675
+12676
+12677
+12678
+12679
+12680
+12681
+12682
+12683
+12684
+12685
+12686
+12687
+12688
+12689
+12690
+12691
+12692
+12693
+12694
+12695
+12696
+12697
+12698
+12699
+12700
+12701
+12702
+12703
+12704
+12705
+12706
+12707
+12708
+12709
+12710
+12711
+12712
+12713
+12714
+12715
+12716
+12717
+12718
+12719
+12720
+12721
+12722
+12723
+12724
+12725
+12726
+12727
+12728
+12729
+12730
+12731
+12732
+12733
+12734
+12735
+12736
+12737
+12738
+12739
+12740
+12741
+12742
+12743
+12744
+12745
+12746
+12747
+12748
+12749
+12750
+12751
+12752
+12753
+12754
+12755
+12756
+12757
+12758
+12759
+12760
+12761
+12762
+12763
+12764
+12765
+12766
+12767
+12768
+12769
+12770
+12771
+12772
+12773
+12774
+12775
+12776
+12777
+12778
+12779
+12780
+12781
+12782
+12783
+12784
+12785
+12786
+12787
+12788
+12789
+12790
+12791
+12792
+12793
+12794
+12795
+12796
+12797
+12798
+12799
+12800
+12801
+12802
+12803
+12804
+12805
+12806
+12807
+12808
+12809
+12810
+12811
+12812
+12813
+12814
+12815
+12816
+12817
+12818
+12819
+12820
+12821
+12822
+12823
+12824
+12825
+12826
+12827
+12828
+12829
+12830
+12831
+12832
+12833
+12834
+12835
+12836
+12837
+12838
+12839
+12840
+12841
+12842
+12843
+12844
+12845
+12846
+12847
+12848
+12849
+12850
+12851
+12852
+12853
+12854
+12855
+12856
+12857
+12858
+12859
+12860
+12861
+12862
+12863
+12864
+12865
+12866
+12867
+12868
+12869
+12870
+12871
+12872
+12873
+12874
+12875
+12876
+12877
+12878
+12879
+12880
+12881
+12882
+12883
+12884
+12885
+12886
+12887
+12888
+12889
+12890
+12891
+12892
+12893
+12894
+12895
+12896
+12897
+12898
+12899
+12900
+12901
+12902
+12903
+12904
+12905
+12906
+12907
+12908
+12909
+12910
+12911
+12912
+12913
+12914
+12915
+12916
+12917
+12918
+12919
+12920
+12921
+12922
+12923
+12924
+12925
+12926
+12927
+12928
+12929
+12930
+12931
+12932
+12933
+12934
+12935
+12936
+12937
+12938
+12939
+12940
+12941
+12942
+12943
+12944
+12945
+12946
+12947
+12948
+12949
+12950
+12951
+12952
+12953
+12954
+12955
+12956
+12957
+12958
+12959
+12960
+12961
+12962
+12963
+12964
+12965
+12966
+12967
+12968
+12969
+12970
+12971
+12972
+12973
+12974
+12975
+12976
+12977
+12978
+12979
+12980
+12981
+12982
+12983
+12984
+12985
+12986
+12987
+12988
+12989
+12990
+12991
+12992
+12993
+12994
+12995
+12996
+12997
+12998
+12999
+13000
+13001
+13002
+13003
+13004
+13005
+13006
+13007
+13008
+13009
+13010
+13011
+13012
+13013
+13014
+13015
+13016
+13017
+13018
+13019
+13020
+13021
+13022
+13023
+13024
+13025
+13026
+13027
+13028
+13029
+13030
+13031
+13032
+13033
+13034
+13035
+13036
+13037
+13038
+13039
+13040
+13041
+13042
+13043
+13044
+13045
+13046
+13047
+13048
+13049
+13050
+13051
+13052
+13053
+13054
+13055
+13056
+13057
+13058
+13059
+13060
+13061
+13062
+13063
+13064
+13065
+13066
+13067
+13068
+13069
+13070
+13071
+13072
+13073
+13074
+13075
+13076
+13077
+13078
+13079
+13080
+13081
+13082
+13083
+13084
+13085
+13086
+13087
+13088
+13089
+13090
+13091
+13092
+13093
+13094
+13095
+13096
+13097
+13098
+13099
+13100
+13101
+13102
+13103
+13104
+13105
+13106
+13107
+13108
+13109
+13110
+13111
+13112
+13113
+13114
+13115
+13116
+13117
+13118
+13119
+13120
+13121
+13122
+13123
+13124
+13125
+13126
+13127
+13128
+13129
+13130
+13131
+13132
+13133
+13134
+13135
+13136
+13137
+13138
+13139
+13140
+13141
+13142
+13143
+13144
+13145
+13146
+13147
+13148
+13149
+13150
+13151
+13152
+13153
+13154
+13155
+13156
+13157
+13158
+13159
+13160
+13161
+13162
+13163
+13164
+13165
+13166
+13167
+13168
+13169
+13170
+13171
+13172
+13173
+13174
+13175
+13176
+13177
+13178
+13179
+13180
+13181
+13182
+13183
+13184
+13185
+13186
+13187
+13188
+13189
+13190
+13191
+13192
+13193
+13194
+13195
+13196
+13197
+13198
+13199
+13200
+13201
+13202
+13203
+13204
+13205
+13206
+13207
+13208
+13209
+13210
+13211
+13212
+13213
+13214
+13215
+13216
+13217
+13218
+13219
+13220
+13221
+13222
+13223
+13224
+13225
+13226
+13227
+13228
+13229
+13230
+13231
+13232
+13233
+13234
+13235
+13236
+13237
+13238
+13239
+13240
+13241
+13242
+13243
+13244
+13245
+13246
+13247
+13248
+13249
+13250
+13251
+13252
+13253
+13254
+13255
+13256
+13257
+13258
+13259
+13260
+13261
+13262
+13263
+13264
+13265
+13266
+13267
+13268
+13269
+13270
+13271
+13272
+13273
+13274
+13275
+13276
+13277
+13278
+13279
+13280
+13281
+13282
+13283
+13284
+13285
+13286
+13287
+13288
+13289
+13290
+13291
+13292
+13293
+13294
+13295
+13296
+13297
+13298
+13299
+13300
+13301
+13302
+13303
+13304
+13305
+13306
+13307
+13308
+13309
+13310
+13311
+13312
+13313
+13314
+13315
+13316
+13317
+13318
+13319
+13320
+13321
+13322
+13323
+13324
+13325
+13326
+13327
+13328
+13329
+13330
+13331
+13332
+13333
+13334
+13335
+13336
+13337
+13338
+13339
+13340
+13341
+13342
+13343
+13344
+13345
+13346
+13347
+13348
+13349
+13350
+13351
+13352
+13353
+13354
+13355
+13356
+13357
+13358
+13359
+13360
+13361
+13362
+13363
+13364
+13365
+13366
+13367
+13368
+13369
+13370
+13371
+13372
+13373
+13374
+13375
+13376
+13377
+13378
+13379
+13380
+13381
+13382
+13383
+13384
+13385
+13386
+13387
+13388
+13389
+13390
+13391
+13392
+13393
+13394
+13395
+13396
+13397
+13398
+13399
+13400
+13401
+13402
+13403
+13404
+13405
+13406
+13407
+13408
+13409
+13410
+13411
+13412
+13413
+13414
+13415
+13416
+13417
+13418
+13419
+13420
+13421
+13422
+13423
+13424
+13425
+13426
+13427
+13428
+13429
+13430
+13431
+13432
+13433
+13434
+13435
+13436
+13437
+13438
+13439
+13440
+13441
+13442
+13443
+13444
+13445
+13446
+13447
+13448
+13449
+13450
+13451
+13452
+13453
+13454
+13455
+13456
+13457
+13458
+13459
+13460
+13461
+13462
+13463
+13464
+13465
+13466
+13467
+13468
+13469
+13470
+13471
+13472
+13473
+13474
+13475
+13476
+13477
+13478
+13479
+13480
+13481
+13482
+13483
+13484
+13485
+13486
+13487
+13488
+13489
+13490
+13491
+13492
+13493
+13494
+13495
+13496
+13497
+13498
+13499
+13500
+13501
+13502
+13503
+13504
+13505
+13506
+13507
+13508
+13509
+13510
+13511
+13512
+13513
+13514
+13515
+13516
+13517
+13518
+13519
+13520
+13521
+13522
+13523
+13524
+13525
+13526
+13527
+13528
+13529
+13530
+13531
+13532
+13533
+13534
+13535
+13536
+13537
+13538
+13539
+13540
+13541
+13542
+13543
+13544
+13545
+13546
+13547
+13548
+13549
+13550
+13551
+13552
+13553
+13554
+13555
+13556
+13557
+13558
+13559
+13560
+13561
+13562
+13563
+13564
+13565
+13566
+13567
+13568
+13569
+13570
+13571
+13572
+13573
+13574
+13575
+13576
+13577
+13578
+13579
+13580
+13581
+13582
+13583
+13584
+13585
+13586
+13587
+13588
+13589
+13590
+13591
+13592
+13593
+13594
+13595
+13596
+13597
+13598
+13599
+13600
+13601
+13602
+13603
+13604
+13605
+13606
+13607
+13608
+13609
+13610
+13611
+13612
+13613
+13614
+13615
+13616
+13617
+13618
+13619
+13620
+13621
+13622
+13623
+13624
+13625
+13626
+13627
+13628
+13629
+13630
+13631
+13632
+13633
+13634
+13635
+13636
+13637
+13638
+13639
+13640
+13641
+13642
+13643
+13644
+13645
+13646
+13647
+13648
+13649
+13650
+13651
+13652
+13653
+13654
+13655
+13656
+13657
+13658
+13659
+13660
+13661
+13662
+13663
+13664
+13665
+13666
+13667
+13668
+13669
+13670
+13671
+13672
+13673
+13674
+13675
+13676
+13677
+13678
+13679
+13680
+13681
+13682
+13683
+13684
+13685
+13686
+13687
+13688
+13689
+13690
+13691
+13692
+13693
+13694
+13695
+13696
+13697
+13698
+13699
+13700
+13701
+13702
+13703
+13704
+13705
+13706
+13707
+13708
+13709
+13710
+13711
+13712
+13713
+13714
+13715
+13716
+13717
+13718
+13719
+13720
+13721
+13722
+13723
+13724
+13725
+13726
+13727
+13728
+13729
+13730
+13731
+13732
+13733
+13734
+13735
+13736
+13737
+13738
+13739
+13740
+13741
+13742
+13743
+13744
+13745
+13746
+13747
+13748
+13749
+13750
+13751
+13752
+13753
+13754
+13755
+13756
+13757
+13758
+13759
+13760
+13761
+13762
+13763
+13764
+13765
+13766
+13767
+13768
+13769
+13770
+13771
+13772
+13773
+13774
+13775
+13776
+13777
+13778
+13779
+13780
+13781
+13782
+13783
+13784
+13785
+13786
+13787
+13788
+13789
+13790
+13791
+13792
+13793
+13794
+13795
+13796
+13797
+13798
+13799
+13800
+13801
+13802
+13803
+13804
+13805
+13806
+13807
+13808
+13809
+13810
+13811
+13812
+13813
+13814
+13815
+13816
+13817
+13818
+13819
+13820
+13821
+13822
+13823
+13824
+13825
+13826
+13827
+13828
+13829
+13830
+13831
+13832
+13833
+13834
+13835
+13836
+13837
+13838
+13839
+13840
+13841
+13842
+13843
+13844
+13845
+13846
+13847
+13848
+13849
+13850
+13851
+13852
+13853
+13854
+13855
+13856
+13857
+13858
+13859
+13860
+13861
+13862
+13863
+13864
+13865
+13866
+13867
+13868
+13869
+13870
+13871
+13872
+13873
+13874
+13875
+13876
+13877
+13878
+13879
+13880
+13881
+13882
+13883
+13884
+13885
+13886
+13887
+13888
+13889
+13890
+13891
+13892
+13893
+13894
+13895
+13896
+13897
+13898
+13899
+13900
+13901
+13902
+13903
+13904
+13905
+13906
+13907
+13908
+13909
+13910
+13911
+13912
+13913
+13914
+13915
+13916
+13917
+13918
+13919
+13920
+13921
+13922
+13923
+13924
+13925
+13926
+13927
+13928
+13929
+13930
+13931
+13932
+13933
+13934
+13935
+13936
+13937
+13938
+13939
+13940
+13941
+13942
+13943
+13944
+13945
+13946
+13947
+13948
+13949
+13950
+13951
+13952
+13953
+13954
+13955
+13956
+13957
+13958
+13959
+13960
+13961
+13962
+13963
+13964
+13965
+13966
+13967
+13968
+13969
+13970
+13971
+13972
+13973
+13974
+13975
+13976
+13977
+13978
+13979
+13980
+13981
+13982
+13983
+13984
+13985
+13986
+13987
+13988
+13989
+13990
+13991
+13992
+13993
+13994
+13995
+13996
+13997
+13998
+13999
+14000
+14001
+14002
+14003
+14004
+14005
+14006
+14007
+14008
+14009
+14010
+14011
+14012
+14013
+14014
+14015
+14016
+14017
+14018
+14019
+14020
+14021
+14022
+14023
+14024
+14025
+14026
+14027
+14028
+14029
+14030
+14031
+14032
+14033
+14034
+14035
+14036
+14037
+14038
+14039
+14040
+14041
+14042
+14043
+14044
+14045
+14046
+14047
+14048
+14049
+14050
+14051
+14052
+14053
+14054
+14055
+14056
+14057
+14058
+14059
+14060
+14061
+14062
+14063
+14064
+14065
+14066
+14067
+14068
+14069
+14070
+14071
+14072
+14073
+14074
+14075
+14076
+14077
+14078
+14079
+14080
+14081
+14082
+14083
+14084
+14085
+14086
+14087
+14088
+14089
+14090
+14091
+14092
+14093
+14094
+14095
+14096
+14097
+14098
+14099
+14100
+14101
+14102
+14103
+14104
+14105
+14106
+14107
+14108
+14109
+14110
+14111
+14112
+14113
+14114
+14115
+14116
+14117
+14118
+14119
+14120
+14121
+14122
+14123
+14124
+14125
+14126
+14127
+14128
+14129
+14130
+14131
+14132
+14133
+14134
+14135
+14136
+14137
+14138
+14139
+14140
+14141
+14142
+14143
+14144
+14145
+14146
+14147
+14148
+14149
+14150
+14151
+14152
+14153
+14154
+14155
+14156
+14157
+14158
+14159
+14160
+14161
+14162
+14163
+14164
+14165
+14166
+14167
+14168
+14169
+14170
+14171
+14172
+14173
+14174
+14175
+14176
+14177
+14178
+14179
+14180
+14181
+14182
+14183
+14184
+14185
+14186
+14187
+14188
+14189
+14190
+14191
+14192
+14193
+14194
+14195
+14196
+14197
+14198
+14199
+14200
+14201
+14202
+14203
+14204
+14205
+14206
+14207
+14208
+14209
+14210
+14211
+14212
+14213
+14214
+14215
+14216
+14217
+14218
+14219
+14220
+14221
+14222
+14223
+14224
+14225
+14226
+14227
+14228
+14229
+14230
+14231
+14232
+14233
+14234
+14235
+14236
+14237
+14238
+14239
+14240
+14241
+14242
+14243
+14244
+14245
+14246
+14247
+14248
+14249
+14250
+14251
+14252
+14253
+14254
+14255
+14256
+14257
+14258
+14259
+14260
+14261
+14262
+14263
+14264
+14265
+14266
+14267
+14268
+14269
+14270
+14271
+14272
+14273
+14274
+14275
+14276
+14277
+14278
+14279
+14280
+14281
+14282
+14283
+14284
+14285
+14286
+14287
+14288
+14289
+14290
+14291
+14292
+14293
+14294
+14295
+14296
+14297
+14298
+14299
+14300
+14301
+14302
+14303
+14304
+14305
+14306
+14307
+14308
+14309
+14310
+14311
+14312
+14313
+14314
+14315
+14316
+14317
+14318
+14319
+14320
+14321
+14322
+14323
+14324
+14325
+14326
+14327
+14328
+14329
+14330
+14331
+14332
+14333
+14334
+14335
+14336
+14337
+14338
+14339
+14340
+14341
+14342
+14343
+14344
+14345
+14346
+14347
+14348
+14349
+14350
+14351
+14352
+14353
+14354
+14355
+14356
+14357
+14358
+14359
+14360
+14361
+14362
+14363
+14364
+14365
+14366
+14367
+14368
+14369
+14370
+14371
+14372
+14373
+14374
+14375
+14376
+14377
+14378
+14379
+14380
+14381
+14382
+14383
+14384
+14385
+14386
+14387
+14388
+14389
+14390
+14391
+14392
+14393
+14394
+14395
+14396
+14397
+14398
+14399
+14400
+14401
+14402
+14403
+14404
+14405
+14406
+14407
+14408
+14409
+14410
+14411
+14412
+14413
+14414
+14415
+14416
+14417
+14418
+14419
+14420
+14421
+14422
+14423
+14424
+14425
+14426
+14427
+14428
+14429
+14430
+14431
+14432
+14433
+14434
+14435
+14436
+14437
+14438
+14439
+14440
+14441
+14442
+14443
+14444
+14445
+14446
+14447
+14448
+14449
+14450
+14451
+14452
+14453
+14454
+14455
+14456
+14457
+14458
+14459
+14460
+14461
+14462
+14463
+14464
+14465
+14466
+14467
+14468
+14469
+14470
+14471
+14472
+14473
+14474
+14475
+14476
+14477
+14478
+14479
+14480
+14481
+14482
+14483
+14484
+14485
+14486
+14487
+14488
+14489
+14490
+14491
+14492
+14493
+14494
+14495
+14496
+14497
+14498
+14499
+14500
+14501
+14502
+14503
+14504
+14505
+14506
+14507
+14508
+14509
+14510
+14511
+14512
+14513
+14514
+14515
+14516
+14517
+14518
+14519
+14520
+14521
+14522
+14523
+14524
+14525
+14526
+14527
+14528
+14529
+14530
+14531
+14532
+14533
+14534
+14535
+14536
+14537
+14538
+14539
+14540
+14541
+14542
+14543
+14544
+14545
+14546
+14547
+14548
+14549
+14550
+14551
+14552
+14553
+14554
+14555
+14556
+14557
+14558
+14559
+14560
+14561
+14562
+14563
+14564
+14565
+14566
+14567
+14568
+14569
+14570
+14571
+14572
+14573
+14574
+14575
+14576
+14577
+14578
+14579
+14580
+14581
+14582
+14583
+14584
+14585
+14586
+14587
+14588
+14589
+14590
+14591
+14592
+14593
+14594
+14595
+14596
+14597
+14598
+14599
+14600
+14601
+14602
+14603
+14604
+14605
+14606
+14607
+14608
+14609
+14610
+14611
+14612
+14613
+14614
+14615
+14616
+14617
+14618
+14619
+14620
+14621
+14622
+14623
+14624
+14625
+14626
+14627
+14628
+14629
+14630
+14631
+14632
+14633
+14634
+14635
+14636
+14637
+14638
+14639
+14640
+14641
+14642
+14643
+14644
+14645
+14646
+14647
+14648
+14649
+14650
+14651
+14652
+14653
+14654
+14655
+14656
+14657
+14658
+14659
+14660
+14661
+14662
+14663
+14664
+14665
+14666
+14667
+14668
+14669
+14670
+14671
+14672
+14673
+14674
+14675
+14676
+14677
+14678
+14679
+14680
+14681
+14682
+14683
+14684
+14685
+14686
+14687
+14688
+14689
+14690
+14691
+14692
+14693
+14694
+14695
+14696
+14697
+14698
+14699
+14700
+14701
+14702
+14703
+14704
+14705
+14706
+14707
+14708
+14709
+14710
+14711
+14712
+14713
+14714
+14715
+14716
+14717
+14718
+14719
+14720
+14721
+14722
+14723
+14724
+14725
+14726
+14727
+14728
+14729
+14730
+14731
+14732
+14733
+14734
+14735
+14736
+14737
+14738
+14739
+14740
+14741
+14742
+14743
+14744
+14745
+14746
+14747
+14748
+14749
+14750
+14751
+14752
+14753
+14754
+14755
+14756
+14757
+14758
+14759
+14760
+14761
+14762
+14763
+14764
+14765
+14766
+14767
+14768
+14769
+14770
+14771
+14772
+14773
+14774
+14775
+14776
+14777
+14778
+14779
+14780
+14781
+14782
+14783
+14784
+14785
+14786
+14787
+14788
+14789
+14790
+14791
+14792
+14793
+14794
+14795
+14796
+14797
+14798
+14799
+14800
+14801
+14802
+14803
+14804
+14805
+14806
+14807
+14808
+14809
+14810
+14811
+14812
+14813
+14814
+14815
+14816
+14817
+14818
+14819
+14820
+14821
+14822
+14823
+14824
+14825
+14826
+14827
+14828
+14829
+14830
+14831
+14832
+14833
+14834
+14835
+14836
+14837
+14838
+14839
+14840
+14841
+14842
+14843
+14844
+14845
+14846
+14847
+14848
+14849
+14850
+14851
+14852
+14853
+14854
+14855
+14856
+14857
+14858
+14859
+14860
+14861
+14862
+14863
+14864
+14865
+14866
+14867
+14868
+14869
+14870
+14871
+14872
+14873
+14874
+14875
+14876
+14877
+14878
+14879
+14880
+14881
+14882
+14883
+14884
+14885
+14886
+14887
+14888
+14889
+14890
+14891
+14892
+14893
+14894
+14895
+14896
+14897
+14898
+14899
+14900
+14901
+14902
+14903
+14904
+14905
+14906
+14907
+14908
+14909
+14910
+14911
+14912
+14913
+14914
+14915
+14916
+14917
+14918
+14919
+14920
+14921
+14922
+14923
+14924
+14925
+14926
+14927
+14928
+14929
+14930
+14931
+14932
+14933
+14934
+14935
+14936
+14937
+14938
+14939
+14940
+14941
+14942
+14943
+14944
+14945
+14946
+14947
+14948
+14949
+14950
+14951
+14952
+14953
+14954
+14955
+14956
+14957
+14958
+14959
+14960
+14961
+14962
+14963
+14964
+14965
+14966
+14967
+14968
+14969
+14970
+14971
+14972
+14973
+14974
+14975
+14976
+14977
+14978
+14979
+14980
+14981
+14982
+14983
+14984
+14985
+14986
+14987
+14988
+14989
+14990
+14991
+14992
+14993
+14994
+14995
+14996
+14997
+14998
+14999
+15000
+15001
+15002
+15003
+15004
+15005
+15006
+15007
+15008
+15009
+15010
+15011
+15012
+15013
+15014
+15015
+15016
+15017
+15018
+15019
+15020
+15021
+15022
+15023
+15024
+15025
+15026
+15027
+15028
+15029
+15030
+15031
+15032
+15033
+15034
+15035
+15036
+15037
+15038
+15039
+15040
+15041
+15042
+15043
+15044
+15045
+15046
+15047
+15048
+15049
+15050
+15051
+15052
+15053
+15054
+15055
+15056
+15057
+15058
+15059
+15060
+15061
+15062
+15063
+15064
+15065
+15066
+15067
+15068
+15069
+15070
+15071
+15072
+15073
+15074
+15075
+15076
+15077
+15078
+15079
+15080
+15081
+15082
+15083
+15084
+15085
+15086
+15087
+15088
+15089
+15090
+15091
+15092
+15093
+15094
+15095
+15096
+15097
+15098
+15099
+15100
+15101
+15102
+15103
+15104
+15105
+15106
+15107
+15108
+15109
+15110
+15111
+15112
+15113
+15114
+15115
+15116
+15117
+15118
+15119
+15120
+15121
+15122
+15123
+15124
+15125
+15126
+15127
+15128
+15129
+15130
+15131
+15132
+15133
+15134
+15135
+15136
+15137
+15138
+15139
+15140
+15141
+15142
+15143
+15144
+15145
+15146
+15147
+15148
+15149
+15150
+15151
+15152
+15153
+15154
+15155
+15156
+15157
+15158
+15159
+15160
+15161
+15162
+15163
+15164
+15165
+15166
+15167
+15168
+15169
+15170
+15171
+15172
+15173
+15174
+15175
+15176
+15177
+15178
+15179
+15180
+15181
+15182
+15183
+15184
+15185
+15186
+15187
+15188
+15189
+15190
+15191
+15192
+15193
+15194
+15195
+15196
+15197
+15198
+15199
+15200
+15201
+15202
+15203
+15204
+15205
+15206
+15207
+15208
+15209
+15210
+15211
+15212
+15213
+15214
+15215
+15216
+15217
+15218
+15219
+15220
+15221
+15222
+15223
+15224
+15225
+15226
+15227
+15228
+15229
+15230
+15231
+15232
+15233
+15234
+15235
+15236
+15237
+15238
+15239
+15240
+15241
+15242
+15243
+15244
+15245
+15246
+15247
+15248
+15249
+15250
+15251
+15252
+15253
+15254
+15255
+15256
+15257
+15258
+15259
+15260
+15261
+15262
+15263
+15264
+15265
+15266
+15267
+15268
+15269
+15270
+15271
+15272
+15273
+15274
+15275
+15276
+15277
+15278
+15279
+15280
+15281
+15282
+15283
+15284
+15285
+15286
+15287
+15288
+15289
+15290
+15291
+15292
+15293
+15294
+15295
+15296
+15297
+15298
+15299
+15300
+15301
+15302
+15303
+15304
+15305
+15306
+15307
+15308
+15309
+15310
+15311
+15312
+15313
+15314
+15315
+15316
+15317
+15318
+15319
+15320
+15321
+15322
+15323
+15324
+15325
+15326
+15327
+15328
+15329
+15330
+15331
+15332
+15333
+15334
+15335
+15336
+15337
+15338
+15339
+15340
+15341
+15342
+15343
+15344
+15345
+15346
+15347
+15348
+15349
+15350
+15351
+15352
+15353
+15354
+15355
+15356
+15357
+15358
+15359
+15360
+15361
+15362
+15363
+15364
+15365
+15366
+15367
+15368
+15369
+15370
+15371
+15372
+15373
+15374
+15375
+15376
+15377
+15378
+15379
+15380
+15381
+15382
+15383
+15384
+15385
+15386
+15387
+15388
+15389
+15390
+15391
+15392
+15393
+15394
+15395
+15396
+15397
+15398
+15399
+15400
+15401
+15402
+15403
+15404
+15405
+15406
+15407
+15408
+15409
+15410
+15411
+15412
+15413
+15414
+15415
+15416
+15417
+15418
+15419
+15420
+15421
+15422
+15423
+15424
+15425
+15426
+15427
+15428
+15429
+15430
+15431
+15432
+15433
+15434
+15435
+15436
+15437
+15438
+15439
+15440
+15441
+15442
+15443
+15444
+15445
+15446
+15447
+15448
+15449
+15450
+15451
+15452
+15453
+15454
+15455
+15456
+15457
+15458
+15459
+15460
+15461
+15462
+15463
+15464
+15465
+15466
+15467
+15468
+15469
+15470
+15471
+15472
+15473
+15474
+15475
+15476
+15477
+15478
+15479
+15480
+15481
+15482
+15483
+15484
+15485
+15486
+15487
+15488
+15489
+15490
+15491
+15492
+15493
+15494
+15495
+15496
+15497
+15498
+15499
+15500
+15501
+15502
+15503
+15504
+15505
+15506
+15507
+15508
+15509
+15510
+15511
+15512
+15513
+15514
+15515
+15516
+15517
+15518
+15519
+15520
+15521
+15522
+15523
+15524
+15525
+15526
+15527
+15528
+15529
+15530
+15531
+15532
+15533
+15534
+15535
+15536
+15537
+15538
+15539
+15540
+15541
+15542
+15543
+15544
+15545
+15546
+15547
+15548
+15549
+15550
+15551
+15552
+15553
+15554
+15555
+15556
+15557
+15558
+15559
+15560
+15561
+15562
+15563
+15564
+15565
+15566
+15567
+15568
+15569
+15570
+15571
+15572
+15573
+15574
+15575
+15576
+15577
+15578
+15579
+15580
+15581
+15582
+15583
+15584
+15585
+15586
+15587
+15588
+15589
+15590
+15591
+15592
+15593
+15594
+15595
+15596
+15597
+15598
+15599
+15600
+15601
+15602
+15603
+15604
+15605
+15606
+15607
+15608
+15609
+15610
+15611
+15612
+15613
+15614
+15615
+15616
+15617
+15618
+15619
+15620
+15621
+15622
+15623
+15624
+15625
+15626
+15627
+15628
+15629
+15630
+15631
+15632
+15633
+15634
+15635
+15636
+15637
+15638
+15639
+15640
+15641
+15642
+15643
+15644
+15645
+15646
+15647
+15648
+15649
+15650
+15651
+15652
+15653
+15654
+15655
+15656
+15657
+15658
+15659
+15660
+15661
+15662
+15663
+15664
+15665
+15666
+15667
+15668
+15669
+15670
+15671
+15672
+15673
+15674
+15675
+15676
+15677
+15678
+15679
+15680
+15681
+15682
+15683
+15684
+15685
+15686
+15687
+15688
+15689
+15690
+15691
+15692
+15693
+15694
+15695
+15696
+15697
+15698
+15699
+15700
+15701
+15702
+15703
+15704
+15705
+15706
+15707
+15708
+15709
+15710
+15711
+15712
+15713
+15714
+15715
+15716
+15717
+15718
+15719
+15720
+15721
+15722
+15723
+15724
+15725
+15726
+15727
+15728
+15729
+15730
+15731
+15732
+15733
+15734
+15735
+15736
+15737
+15738
+15739
+15740
+15741
+15742
+15743
+15744
+15745
+15746
+15747
+15748
+15749
+15750
+15751
+15752
+15753
+15754
+15755
+15756
+15757
+15758
+15759
+15760
+15761
+15762
+15763
+15764
+15765
+15766
+15767
+15768
+15769
+15770
+15771
+15772
+15773
+15774
+15775
+15776
+15777
+15778
+15779
+15780
+15781
+15782
+15783
+15784
+15785
+15786
+15787
+15788
+15789
+15790
+15791
+15792
+15793
+15794
+15795
+15796
+15797
+15798
+15799
+15800
+15801
+15802
+15803
+15804
+15805
+15806
+15807
+15808
+15809
+15810
+15811
+15812
+15813
+15814
+15815
+15816
+15817
+15818
+15819
+15820
+15821
+15822
+15823
+15824
+15825
+15826
+15827
+15828
+15829
+15830
+15831
+15832
+15833
+15834
+15835
+15836
+15837
+15838
+15839
+15840
+15841
+15842
+15843
+15844
+15845
+15846
+15847
+15848
+15849
+15850
+15851
+15852
+15853
+15854
+15855
+15856
+15857
+15858
+15859
+15860
+15861
+15862
+15863
+15864
+15865
+15866
+15867
+15868
+15869
+15870
+15871
+15872
+15873
+15874
+15875
+15876
+15877
+15878
+15879
+15880
+15881
+15882
+15883
+15884
+15885
+15886
+15887
+15888
+15889
+15890
+15891
+15892
+15893
+15894
+15895
+15896
+15897
+15898
+15899
+15900
+15901
+15902
+15903
+15904
+15905
+15906
+15907
+15908
+15909
+15910
+15911
+15912
+15913
+15914
+15915
+15916
+15917
+15918
+15919
+15920
+15921
+15922
+15923
+15924
+15925
+15926
+15927
+15928
+15929
+15930
+15931
+15932
+15933
+15934
+15935
+15936
+15937
+15938
+15939
+15940
+15941
+15942
+15943
+15944
+15945
+15946
+15947
+15948
+15949
+15950
+15951
+15952
+15953
+15954
+15955
+15956
+15957
+15958
+15959
+15960
+15961
+15962
+15963
+15964
+15965
+15966
+15967
+15968
+15969
+15970
+15971
+15972
+15973
+15974
+15975
+15976
+15977
+15978
+15979
+15980
+15981
+15982
+15983
+15984
+15985
+15986
+15987
+15988
+15989
+15990
+15991
+15992
+15993
+15994
+15995
+15996
+15997
+15998
+15999
+16000
+16001
+16002
+16003
+16004
+16005
+16006
+16007
+16008
+16009
+16010
+16011
+16012
+16013
+16014
+16015
+16016
+16017
+16018
+16019
+16020
+16021
+16022
+16023
+16024
+16025
+16026
+16027
+16028
+16029
+16030
+16031
+16032
+16033
+16034
+16035
+16036
+16037
+16038
+16039
+16040
+16041
+16042
+16043
+16044
+16045
+16046
+16047
+16048
+16049
+16050
+16051
+16052
+16053
+16054
+16055
+16056
+16057
+16058
+16059
+16060
+16061
+16062
+16063
+16064
+16065
+16066
+16067
+16068
+16069
+16070
+16071
+16072
+16073
+16074
+16075
+16076
+16077
+16078
+16079
+16080
+16081
+16082
+16083
+16084
+16085
+16086
+16087
+16088
+16089
+16090
+16091
+16092
+16093
+16094
+16095
+16096
+16097
+16098
+16099
+16100
+16101
+16102
+16103
+16104
+16105
+16106
+16107
+16108
+16109
+16110
+16111
+16112
+16113
+16114
+16115
+16116
+16117
+16118
+16119
+16120
+16121
+16122
+16123
+16124
+16125
+16126
+16127
+16128
+16129
+16130
+16131
+16132
+16133
+16134
+16135
+16136
+16137
+16138
+16139
+16140
+16141
+16142
+16143
+16144
+16145
+16146
+16147
+16148
+16149
+16150
+16151
+16152
+16153
+16154
+16155
+16156
+16157
+16158
+16159
+16160
+16161
+16162
+16163
+16164
+16165
+16166
+16167
+16168
+16169
+16170
+16171
+16172
+16173
+16174
+16175
+16176
+16177
+16178
+16179
+16180
+16181
+16182
+16183
+16184
+16185
+16186
+16187
+16188
+16189
+16190
+16191
+16192
+16193
+16194
+16195
+16196
+16197
+16198
+16199
+16200
+16201
+16202
+16203
+16204
+16205
+16206
+16207
+16208
+16209
+16210
+16211
+16212
+16213
+16214
+16215
+16216
+16217
+16218
+16219
+16220
+16221
+16222
+16223
+16224
+16225
+16226
+16227
+16228
+16229
+16230
+16231
+16232
+16233
+16234
+16235
+16236
+16237
+16238
+16239
+16240
+16241
+16242
+16243
+16244
+16245
+16246
+16247
+16248
+16249
+16250
+16251
+16252
+16253
+16254
+16255
+16256
+16257
+16258
+16259
+16260
+16261
+16262
+16263
+16264
+16265
+16266
+16267
+16268
+16269
+16270
+16271
+16272
+16273
+16274
+16275
+16276
+16277
+16278
+16279
+16280
+16281
+16282
+16283
+16284
+16285
+16286
+16287
+16288
+16289
+16290
+16291
+16292
+16293
+16294
+16295
+16296
+16297
+16298
+16299
+16300
+16301
+16302
+16303
+16304
+16305
+16306
+16307
+16308
+16309
+16310
+16311
+16312
+16313
+16314
+16315
+16316
+16317
+16318
+16319
+16320
+16321
+16322
+16323
+16324
+16325
+16326
+16327
+16328
+16329
+16330
+16331
+16332
+16333
+16334
+16335
+16336
+16337
+16338
+16339
+16340
+16341
+16342
+16343
+16344
+16345
+16346
+16347
+16348
+16349
+16350
+16351
+16352
+16353
+16354
+16355
+16356
+16357
+16358
+16359
+16360
+16361
+16362
+16363
+16364
+16365
+16366
+16367
+16368
+16369
+16370
+16371
+16372
+16373
+16374
+16375
+16376
+16377
+16378
+16379
+16380
+16381
+16382
+16383
+16384
+16385
+16386
+16387
+16388
+16389
+16390
+16391
+16392
+16393
+16394
+16395
+16396
+16397
+16398
+16399
+16400
+16401
+16402
+16403
+16404
+16405
+16406
+16407
+16408
+16409
+16410
+16411
+16412
+16413
+16414
+16415
+16416
+16417
+16418
+16419
+16420
+16421
+16422
+16423
+16424
+16425
+16426
+16427
+16428
+16429
+16430
+16431
+16432
+16433
+16434
+16435
+16436
+16437
+16438
+16439
+16440
+16441
+16442
+16443
+16444
+16445
+16446
+16447
+16448
+16449
+16450
+16451
+16452
+16453
+16454
+16455
+16456
+16457
+16458
+16459
+16460
+16461
+16462
+16463
+16464
+16465
+16466
+16467
+16468
+16469
+16470
+16471
+16472
+16473
+16474
+16475
+16476
+16477
+16478
+16479
+16480
+16481
+16482
+16483
+16484
+16485
+16486
+16487
+16488
+16489
+16490
+16491
+16492
+16493
+16494
+16495
+16496
+16497
+16498
+16499
+16500
+16501
+16502
+16503
+16504
+16505
+16506
+16507
+16508
+16509
+16510
+16511
+16512
+16513
+16514
+16515
+16516
+16517
+16518
+16519
+16520
+16521
+16522
+16523
+16524
+16525
+16526
+16527
+16528
+16529
+16530
+16531
+16532
+16533
+16534
+16535
+16536
+16537
+16538
+16539
+16540
+16541
+16542
+16543
+16544
+16545
+16546
+16547
+16548
+16549
+16550
+16551
+16552
+16553
+16554
+16555
+16556
+16557
+16558
+16559
+16560
+16561
+16562
+16563
+16564
+16565
+16566
+16567
+16568
+16569
+16570
+16571
+16572
+16573
+16574
+16575
+16576
+16577
+16578
+16579
+16580
+16581
+16582
+16583
+16584
+16585
+16586
+16587
+16588
+16589
+16590
+16591
+16592
+16593
+16594
+16595
+16596
+16597
+16598
+16599
+16600
+16601
+16602
+16603
+16604
+16605
+16606
+16607
+16608
+16609
+16610
+16611
+16612
+16613
+16614
+16615
+16616
+16617
+16618
+16619
+16620
+16621
+16622
+16623
+16624
+16625
+16626
+16627
+16628
+16629
+16630
+16631
+16632
+16633
+16634
+16635
+16636
+16637
+16638
+16639
+16640
+16641
+16642
+16643
+16644
+16645
+16646
+16647
+16648
+16649
+16650
+16651
+16652
+16653
+16654
+16655
+16656
+16657
+16658
+16659
+16660
+16661
+16662
+16663
+16664
+16665
+16666
+16667
+16668
+16669
+16670
+16671
+16672
+16673
+16674
+16675
+16676
+16677
+16678
+16679
+16680
+16681
+16682
+16683
+16684
+16685
+16686
+16687
+16688
+16689
+16690
+16691
+16692
+16693
+16694
+16695
+16696
+16697
+16698
+16699
+16700
+16701
+16702
+16703
+16704
+16705
+16706
+16707
+16708
+16709
+16710
+16711
+16712
+16713
+16714
+16715
+16716
+16717
+16718
+16719
+16720
+16721
+16722
+16723
+16724
+16725
+16726
+16727
+16728
+16729
+16730
+16731
+16732
+16733
+16734
+16735
+16736
+16737
+16738
+16739
+16740
+16741
+16742
+16743
+16744
+16745
+16746
+16747
+16748
+16749
+16750
+16751
+16752
+16753
+16754
+16755
+16756
+16757
+16758
+16759
+16760
+16761
+16762
+16763
+16764
+16765
+16766
+16767
+16768
+16769
+16770
+16771
+16772
+16773
+16774
+16775
+16776
+16777
+16778
+16779
+16780
+16781
+16782
+16783
+16784
+16785
+16786
+16787
+16788
+16789
+16790
+16791
+16792
+16793
+16794
+16795
+16796
+16797
+16798
+16799
+16800
+16801
+16802
+16803
+16804
+16805
+16806
+16807
+16808
+16809
+16810
+16811
+16812
+16813
+16814
+16815
+16816
+16817
+16818
+16819
+16820
+16821
+16822
+16823
+16824
+16825
+16826
+16827
+16828
+16829
+16830
+16831
+16832
+16833
+16834
+16835
+16836
+16837
+16838
+16839
+16840
+16841
+16842
+16843
+16844
+16845
+16846
+16847
+16848
+16849
+16850
+16851
+16852
+16853
+16854
+16855
+16856
+16857
+16858
+16859
+16860
+16861
+16862
+16863
+16864
+16865
+16866
+16867
+16868
+16869
+16870
+16871
+16872
+16873
+16874
+16875
+16876
+16877
+16878
+16879
+16880
+16881
+16882
+16883
+16884
+16885
+16886
+16887
+16888
+16889
+16890
+16891
+16892
+16893
+16894
+16895
+16896
+16897
+16898
+16899
+16900
+16901
+16902
+16903
+16904
+16905
+16906
+16907
+16908
+16909
+16910
+16911
+16912
+16913
+16914
+16915
+16916
+16917
+16918
+16919
+16920
+16921
+16922
+16923
+16924
+16925
+16926
+16927
+16928
+16929
+16930
+16931
+16932
+16933
+16934
+16935
+16936
+16937
+16938
+16939
+16940
+16941
+16942
+16943
+16944
+16945
+16946
+16947
+16948
+16949
+16950
+16951
+16952
+16953
+16954
+16955
+16956
+16957
+16958
+16959
+16960
+16961
+16962
+16963
+16964
+16965
+16966
+16967
+16968
+16969
+16970
+16971
+16972
+16973
+16974
+16975
+16976
+16977
+16978
+16979
+16980
+16981
+16982
+16983
+16984
+16985
+16986
+16987
+16988
+16989
+16990
+16991
+16992
+16993
+16994
+16995
+16996
+16997
+16998
+16999
+17000
+17001
+17002
+17003
+17004
+17005
+17006
+17007
+17008
+17009
+17010
+17011
+17012
+17013
+17014
+17015
+17016
+17017
+17018
+17019
+17020
+17021
+17022
+17023
+17024
+17025
+17026
+17027
+17028
+17029
+17030
+17031
+17032
+17033
+17034
+17035
+17036
+17037
+17038
+17039
+17040
+17041
+17042
+17043
+17044
+17045
+17046
+17047
+17048
+17049
+17050
+17051
+17052
+17053
+17054
+17055
+17056
+17057
+17058
+17059
+17060
+17061
+17062
+17063
+17064
+17065
+17066
+17067
+17068
+17069
+17070
+17071
+17072
+17073
+17074
+17075
+17076
+17077
+17078
+17079
+17080
+17081
+17082
+17083
+17084
+17085
+17086
+17087
+17088
+17089
+17090
+17091
+17092
+17093
+17094
+17095
+17096
+17097
+17098
+17099
+17100
+17101
+17102
+17103
+17104
+17105
+17106
+17107
+17108
+17109
+17110
+17111
+17112
+17113
+17114
+17115
+17116
+17117
+17118
+17119
+17120
+17121
+17122
+17123
+17124
+17125
+17126
+17127
+17128
+17129
+17130
+17131
+17132
+17133
+17134
+17135
+17136
+17137
+17138
+17139
+17140
+17141
+17142
+17143
+17144
+17145
+17146
+17147
+17148
+17149
+17150
+17151
+17152
+17153
+17154
+17155
+17156
+17157
+17158
+17159
+17160
+17161
+17162
+17163
+17164
+17165
+17166
+17167
+17168
+17169
+17170
+17171
+17172
+17173
+17174
+17175
+17176
+17177
+17178
+17179
+17180
+17181
+17182
+17183
+17184
+17185
+17186
+17187
+17188
+17189
+17190
+17191
+17192
+17193
+17194
+17195
+17196
+17197
+17198
+17199
+17200
+17201
+17202
+17203
+17204
+17205
+17206
+17207
+17208
+17209
+17210
+17211
+17212
+17213
+17214
+17215
+17216
+17217
+17218
+17219
+17220
+17221
+17222
+17223
+17224
+17225
+17226
+17227
+17228
+17229
+17230
+17231
+17232
+17233
+17234
+17235
+17236
+17237
+17238
+17239
+17240
+17241
+17242
+17243
+17244
+17245
+17246
+17247
+17248
+17249
+17250
+17251
+17252
+17253
+17254
+17255
+17256
+17257
+17258
+17259
+17260
+17261
+17262
+17263
+17264
+17265
+17266
+17267
+17268
+17269
+17270
+17271
+17272
+17273
+17274
+17275
+17276
+17277
+17278
+17279
+17280
+17281
+17282
+17283
+17284
+17285
+17286
+17287
+17288
+17289
+17290
+17291
+17292
+17293
+17294
+17295
+17296
+17297
+17298
+17299
+17300
+17301
+17302
+17303
+17304
+17305
+17306
+17307
+17308
+17309
+17310
+17311
+17312
+17313
+17314
+17315
+17316
+17317
+17318
+17319
+17320
+17321
+17322
+17323
+17324
+17325
+17326
+17327
+17328
+17329
+17330
+17331
+17332
+17333
+17334
+17335
+17336
+17337
+17338
+17339
+17340
+17341
+17342
+17343
+17344
+17345
+17346
+17347
+17348
+17349
+17350
+17351
+17352
+17353
+17354
+17355
+17356
+17357
+17358
+17359
+17360
+17361
+17362
+17363
+17364
+17365
+17366
+17367
+17368
+17369
+17370
+17371
+17372
+17373
+17374
+17375
+17376
+17377
+17378
+17379
+17380
+17381
+17382
+17383
+17384
+17385
+17386
+17387
+17388
+17389
+17390
+17391
+17392
+17393
+17394
+17395
+17396
+17397
+17398
+17399
+17400
+17401
+17402
+17403
+17404
+17405
+17406
+17407
+17408
+17409
+17410
+17411
+17412
+17413
+17414
+17415
+17416
+17417
+17418
+17419
+17420
+17421
+17422
+17423
+17424
+17425
+17426
+17427
+17428
+17429
+17430
+17431
+17432
+17433
+17434
+17435
+17436
+17437
+17438
+17439
+17440
+17441
+17442
+17443
+17444
+17445
+17446
+17447
+17448
+17449
+17450
+17451
+17452
+17453
+17454
+17455
+17456
+17457
+17458
+17459
+17460
+17461
+17462
+17463
+17464
+17465
+17466
+17467
+17468
+17469
+17470
+17471
+17472
+17473
+17474
+17475
+17476
+17477
+17478
+17479
+17480
+17481
+17482
+17483
+17484
+17485
+17486
+17487
+17488
+17489
+17490
+17491
+17492
+17493
+17494
+17495
+17496
+17497
+17498
+17499
+17500
+17501
+17502
+17503
+17504
+17505
+17506
+17507
+17508
+17509
+17510
+17511
+17512
+17513
+17514
+17515
+17516
+17517
+17518
+17519
+17520
+17521
+17522
+17523
+17524
+17525
+17526
+17527
+17528
+17529
+17530
+17531
+17532
+17533
+17534
+17535
+17536
+17537
+17538
+17539
+17540
+17541
+17542
+17543
+17544
+17545
+17546
+17547
+17548
+17549
+17550
+17551
+17552
+17553
+17554
+17555
+17556
+17557
+17558
+17559
+17560
+17561
+17562
+17563
+17564
+17565
+17566
+17567
+17568
+17569
+17570
+17571
+17572
+17573
+17574
+17575
+17576
+17577
+17578
+17579
+17580
+17581
+17582
+17583
+17584
+17585
+17586
+17587
+17588
+17589
+17590
+17591
+17592
+17593
+17594
+17595
+17596
+17597
+17598
+17599
+17600
+17601
+17602
+17603
+17604
+17605
+17606
+17607
+17608
+17609
+17610
+17611
+17612
+17613
+17614
+17615
+17616
+17617
+17618
+17619
+17620
+17621
+17622
+17623
+17624
+17625
+17626
+17627
+17628
+17629
+17630
+17631
+17632
+17633
+17634
+17635
+17636
+17637
+17638
+17639
+17640
+17641
+17642
+17643
+17644
+17645
+17646
+17647
+17648
+17649
+17650
+17651
+17652
+17653
+17654
+17655
+17656
+17657
+17658
+17659
+17660
+17661
+17662
+17663
+17664
+17665
+17666
+17667
+17668
+17669
+17670
+17671
+17672
+17673
+17674
+17675
+17676
+17677
+17678
+17679
+17680
+17681
+17682
+17683
+17684
+17685
+17686
+17687
+17688
+17689
+17690
+17691
+17692
+17693
+17694
+17695
+17696
+17697
+17698
+17699
+17700
+17701
+17702
+17703
+17704
+17705
+17706
+17707
+17708
+17709
+17710
+17711
+17712
+17713
+17714
+17715
+17716
+17717
+17718
+17719
+17720
+17721
+17722
+17723
+17724
+17725
+17726
+17727
+17728
+17729
+17730
+17731
+17732
+17733
+17734
+17735
+17736
+17737
+17738
+17739
+17740
+17741
+17742
+17743
+17744
+17745
+17746
+17747
+17748
+17749
+17750
+17751
+17752
+17753
+17754
+17755
+17756
+17757
+17758
+17759
+17760
+17761
+17762
+17763
+17764
+17765
+17766
+17767
+17768
+17769
+17770
+17771
+17772
+17773
+17774
+17775
+17776
+17777
+17778
+17779
+17780
+17781
+17782
+17783
+17784
+17785
+17786
+17787
+17788
+17789
+17790
+17791
+17792
+17793
+17794
+17795
+17796
+17797
+17798
+17799
+17800
+17801
+17802
+17803
+17804
+17805
+17806
+17807
+17808
+17809
+17810
+17811
+17812
+17813
+17814
+17815
+17816
+17817
+17818
+17819
+17820
+17821
+17822
+17823
+17824
+17825
+17826
+17827
+17828
+17829
+17830
+17831
+17832
+17833
+17834
+17835
+17836
+17837
+17838
+17839
+17840
+17841
+17842
+17843
+17844
+17845
+17846
+17847
+17848
+17849
+17850
+17851
+17852
+17853
+17854
+17855
+17856
+17857
+17858
+17859
+17860
+17861
+17862
+17863
+17864
+17865
+17866
+17867
+17868
+17869
+17870
+17871
+17872
+17873
+17874
+17875
+17876
+17877
+17878
+17879
+17880
+17881
+17882
+17883
+17884
+17885
+17886
+17887
+17888
+17889
+17890
+17891
+17892
+17893
+17894
+17895
+17896
+17897
+17898
+17899
+17900
+17901
+17902
+17903
+17904
+17905
+17906
+17907
+17908
+17909
+17910
+17911
+17912
+17913
+17914
+17915
+17916
+17917
+17918
+17919
+17920
+17921
+17922
+17923
+17924
+17925
+17926
+17927
+17928
+17929
+17930
+17931
+17932
+17933
+17934
+17935
+17936
+17937
+17938
+17939
+17940
+17941
+17942
+17943
+17944
+17945
+17946
+17947
+17948
+17949
+17950
+17951
+17952
+17953
+17954
+17955
+17956
+17957
+17958
+17959
+17960
+17961
+17962
+17963
+17964
+17965
+17966
+17967
+17968
+17969
+17970
+17971
+17972
+17973
+17974
+17975
+17976
+17977
+17978
+17979
+17980
+17981
+17982
+17983
+17984
+17985
+17986
+17987
+17988
+17989
+17990
+17991
+17992
+17993
+17994
+17995
+17996
+17997
+17998
+17999
+18000
+18001
+18002
+18003
+18004
+18005
+18006
+18007
+18008
+18009
+18010
+18011
+18012
+18013
+18014
+18015
+18016
+18017
+18018
+18019
+18020
+18021
+18022
+18023
+18024
+18025
+18026
+18027
+18028
+18029
+18030
+18031
+18032
+18033
+18034
+18035
+18036
+18037
+18038
+18039
+18040
+18041
+18042
+18043
+18044
+18045
+18046
+18047
+18048
+18049
+18050
+18051
+18052
+18053
+18054
+18055
+18056
+18057
+18058
+18059
+18060
+18061
+18062
+18063
+18064
+18065
+18066
+18067
+18068
+18069
+18070
+18071
+18072
+18073
+18074
+18075
+18076
+18077
+18078
+18079
+18080
+18081
+18082
+18083
+18084
+18085
+18086
+18087
+18088
+18089
+18090
+18091
+18092
+18093
+18094
+18095
+18096
+18097
+18098
+18099
+18100
+18101
+18102
+18103
+18104
+18105
+18106
+18107
+18108
+18109
+18110
+18111
+18112
+18113
+18114
+18115
+18116
+18117
+18118
+18119
+18120
+18121
+18122
+18123
+18124
+18125
+18126
+18127
+18128
+18129
+18130
+18131
+18132
+18133
+18134
+18135
+18136
+18137
+18138
+18139
+18140
+18141
+18142
+18143
+18144
+18145
+18146
+18147
+18148
+18149
+18150
+18151
+18152
+18153
+18154
+18155
+18156
+18157
+18158
+18159
+18160
+18161
+18162
+18163
+18164
+18165
+18166
+18167
+18168
+18169
+18170
+18171
+18172
+18173
+18174
+18175
+18176
+18177
+18178
+18179
+18180
+18181
+18182
+18183
+18184
+18185
+18186
+18187
+18188
+18189
+18190
+18191
+18192
+18193
+18194
+18195
+18196
+18197
+18198
+18199
+18200
+18201
+18202
+18203
+18204
+18205
+18206
+18207
+18208
+18209
+18210
+18211
+18212
+18213
+18214
+18215
+18216
+18217
+18218
+18219
+18220
+18221
+18222
+18223
+18224
+18225
+18226
+18227
+18228
+18229
+18230
+18231
+18232
+18233
+18234
+18235
+18236
+18237
+18238
+18239
+18240
+18241
+18242
+18243
+18244
+18245
+18246
+18247
+18248
+18249
+18250
+18251
+18252
+18253
+18254
+18255
+18256
+18257
+18258
+18259
+18260
+18261
+18262
+18263
+18264
+18265
+18266
+18267
+18268
+18269
+18270
+18271
+18272
+18273
+18274
+18275
+18276
+18277
+18278
+18279
+18280
+18281
+18282
+18283
+18284
+18285
+18286
+18287
+18288
+18289
+18290
+18291
+18292
+18293
+18294
+18295
+18296
+18297
+18298
+18299
+18300
+18301
+18302
+18303
+18304
+18305
+18306
+18307
+18308
+18309
+18310
+18311
+18312
+18313
+18314
+18315
+18316
+18317
+18318
+18319
+18320
+18321
+18322
+18323
+18324
+18325
+18326
+18327
+18328
+18329
+18330
+18331
+18332
+18333
+18334
+18335
+18336
+18337
+18338
+18339
+18340
+18341
+18342
+18343
+18344
+18345
+18346
+18347
+18348
+18349
+18350
+18351
+18352
+18353
+18354
+18355
+18356
+18357
+18358
+18359
+18360
+18361
+18362
+18363
+18364
+18365
+18366
+18367
+18368
+18369
+18370
+18371
+18372
+18373
+18374
+18375
+18376
+18377
+18378
+18379
+18380
+18381
+18382
+18383
+18384
+18385
+18386
+18387
+18388
+18389
+18390
+18391
+18392
+18393
+18394
+18395
+18396
+18397
+18398
+18399
+18400
+18401
+18402
+18403
+18404
+18405
+18406
+18407
+18408
+18409
+18410
+18411
+18412
+18413
+18414
+18415
+18416
+18417
+18418
+18419
+18420
+18421
+18422
+18423
+18424
+18425
+18426
+18427
+18428
+18429
+18430
+18431
+18432
+18433
+18434
+18435
+18436
+18437
+18438
+18439
+18440
+18441
+18442
+18443
+18444
+18445
+18446
+18447
+18448
+18449
+18450
+18451
+18452
+18453
+18454
+18455
+18456
+18457
+18458
+18459
+18460
+18461
+18462
+18463
+18464
+18465
+18466
+18467
+18468
+18469
+18470
+18471
+18472
+18473
+18474
+18475
+18476
+18477
+18478
+18479
+18480
+18481
+18482
+18483
+18484
+18485
+18486
+18487
+18488
+18489
+18490
+18491
+18492
+18493
+18494
+18495
+18496
+18497
+18498
+18499
+18500
+18501
+18502
+18503
+18504
+18505
+18506
+18507
+18508
+18509
+18510
+18511
+18512
+18513
+18514
+18515
+18516
+18517
+18518
+18519
+18520
+18521
+18522
+18523
+18524
+18525
+18526
+18527
+18528
+18529
+18530
+18531
+18532
+18533
+18534
+18535
+18536
+18537
+18538
+18539
+18540
+18541
+18542
+18543
+18544
+18545
+18546
+18547
+18548
+18549
+18550
+18551
+18552
+18553
+18554
+18555
+18556
+18557
+18558
+18559
+18560
+18561
+18562
+18563
+18564
+18565
+18566
+18567
+18568
+18569
+18570
+18571
+18572
+18573
+18574
+18575
+18576
+18577
+18578
+18579
+18580
+18581
+18582
+18583
+18584
+18585
+18586
+18587
+18588
+18589
+18590
+18591
+18592
+18593
+18594
+18595
+18596
+18597
+18598
+18599
+18600
+18601
+18602
+18603
+18604
+18605
+18606
+18607
+18608
+18609
+18610
+18611
+18612
+18613
+18614
+18615
+18616
+18617
+18618
+18619
+18620
+18621
+18622
+18623
+18624
+18625
+18626
+18627
+18628
+18629
+18630
+18631
+18632
+18633
+18634
+18635
+18636
+18637
+18638
+18639
+18640
+18641
+18642
+18643
+18644
+18645
+18646
+18647
+18648
+18649
+18650
+18651
+18652
+18653
+18654
+18655
+18656
+18657
+18658
+18659
+18660
+18661
+18662
+18663
+18664
+18665
+18666
+18667
+18668
+18669
+18670
+18671
+18672
+18673
+18674
+18675
+18676
+18677
+18678
+18679
+18680
+18681
+18682
+18683
+18684
+18685
+18686
+18687
+18688
+18689
+18690
+18691
+18692
+18693
+18694
+18695
+18696
+18697
+18698
+18699
+18700
+18701
+18702
+18703
+18704
+18705
+18706
+18707
+18708
+18709
+18710
+18711
+18712
+18713
+18714
+18715
+18716
+18717
+18718
+18719
+18720
+18721
+18722
+18723
+18724
+18725
+18726
+18727
+18728
+18729
+18730
+18731
+18732
+18733
+18734
+18735
+18736
+18737
+18738
+18739
+18740
+18741
+18742
+18743
+18744
+18745
+18746
+18747
+18748
+18749
+18750
+18751
+18752
+18753
+18754
+18755
+18756
+18757
+18758
+18759
+18760
+18761
+18762
+18763
+18764
+18765
+18766
+18767
+18768
+18769
+18770
+18771
+18772
+18773
+18774
+18775
+18776
+18777
+18778
+18779
+18780
+18781
+18782
+18783
+18784
+18785
+18786
+18787
+18788
+18789
+18790
+18791
+18792
+18793
+18794
+18795
+18796
+18797
+18798
+18799
+18800
+18801
+18802
+18803
+18804
+18805
+18806
+18807
+18808
+18809
+18810
+18811
+18812
+18813
+18814
+18815
+18816
+18817
+18818
+18819
+18820
+18821
+18822
+18823
+18824
+18825
+18826
+18827
+18828
+18829
+18830
+18831
+18832
+18833
+18834
+18835
+18836
+18837
+18838
+18839
+18840
+18841
+18842
+18843
+18844
+18845
+18846
+18847
+18848
+18849
+18850
+18851
+18852
+18853
+18854
+18855
+18856
+18857
+18858
+18859
+18860
+18861
+18862
+18863
+18864
+18865
+18866
+18867
+18868
+18869
+18870
+18871
+18872
+18873
+18874
+18875
+18876
+18877
+18878
+18879
+18880
+18881
+18882
+18883
+18884
+18885
+18886
+18887
+18888
+18889
+18890
+18891
+18892
+18893
+18894
+18895
+18896
+18897
+18898
+18899
+18900
+18901
+18902
+18903
+18904
+18905
+18906
+18907
+18908
+18909
+18910
+18911
+18912
+18913
+18914
+18915
+18916
+18917
+18918
+18919
+18920
+18921
+18922
+18923
+18924
+18925
+18926
+18927
+18928
+18929
+18930
+18931
+18932
+18933
+18934
+18935
+18936
+18937
+18938
+18939
+18940
+18941
+18942
+18943
+18944
+18945
+18946
+18947
+18948
+18949
+18950
+18951
+18952
+18953
+18954
+18955
+18956
+18957
+18958
+18959
+18960
+18961
+18962
+18963
+18964
+18965
+18966
+18967
+18968
+18969
+18970
+18971
+18972
+18973
+18974
+18975
+18976
+18977
+18978
+18979
+18980
+18981
+18982
+18983
+18984
+18985
+18986
+18987
+18988
+18989
+18990
+18991
+18992
+18993
+18994
+18995
+18996
+18997
+18998
+18999
+19000
+19001
+19002
+19003
+19004
+19005
+19006
+19007
+19008
+19009
+19010
+19011
+19012
+19013
+19014
+19015
+19016
+19017
+19018
+19019
+19020
+19021
+19022
+19023
+19024
+19025
+19026
+19027
+19028
+19029
+19030
+19031
+19032
+19033
+19034
+19035
+19036
+19037
+19038
+19039
+19040
+19041
+19042
+19043
+19044
+19045
+19046
+19047
+19048
+19049
+19050
+19051
+19052
+19053
+19054
+19055
+19056
+19057
+19058
+19059
+19060
+19061
+19062
+19063
+19064
+19065
+19066
+19067
+19068
+19069
+19070
+19071
+19072
+19073
+19074
+19075
+19076
+19077
+19078
+19079
+19080
+19081
+19082
+19083
+19084
+19085
+19086
+19087
+19088
+19089
+19090
+19091
+19092
+19093
+19094
+19095
+19096
+19097
+19098
+19099
+19100
+19101
+19102
+19103
+19104
+19105
+19106
+19107
+19108
+19109
+19110
+19111
+19112
+19113
+19114
+19115
+19116
+19117
+19118
+19119
+19120
+19121
+19122
+19123
+19124
+19125
+19126
+19127
+19128
+19129
+19130
+19131
+19132
+19133
+19134
+19135
+19136
+19137
+19138
+19139
+19140
+19141
+19142
+19143
+19144
+19145
+19146
+19147
+19148
+19149
+19150
+19151
+19152
+19153
+19154
+19155
+19156
+19157
+19158
+19159
+19160
+19161
+19162
+19163
+19164
+19165
+19166
+19167
+19168
+19169
+19170
+19171
+19172
+19173
+19174
+19175
+19176
+19177
+19178
+19179
+19180
+19181
+19182
+19183
+19184
+19185
+19186
+19187
+19188
+19189
+19190
+19191
+19192
+19193
+19194
+19195
+19196
+19197
+19198
+19199
+19200
+19201
+19202
+19203
+19204
+19205
+19206
+19207
+19208
+19209
+19210
+19211
+19212
+19213
+19214
+19215
+19216
+19217
+19218
+19219
+19220
+19221
+19222
+19223
+19224
+19225
+19226
+19227
+19228
+19229
+19230
+19231
+19232
+19233
+19234
+19235
+19236
+19237
+19238
+19239
+19240
+19241
+19242
+19243
+19244
+19245
+19246
+19247
+19248
+19249
+19250
+19251
+19252
+19253
+19254
+19255
+19256
+19257
+19258
+19259
+19260
+19261
+19262
+19263
+19264
+19265
+19266
+19267
+19268
+19269
+19270
+19271
+19272
+19273
+19274
+19275
+19276
+19277
+19278
+19279
+19280
+19281
+19282
+19283
+19284
+19285
+19286
+19287
+19288
+19289
+19290
+19291
+19292
+19293
+19294
+19295
+19296
+19297
+19298
+19299
+19300
+19301
+19302
+19303
+19304
+19305
+19306
+19307
+19308
+19309
+19310
+19311
+19312
+19313
+19314
+19315
+19316
+19317
+19318
+19319
+19320
+19321
+19322
+19323
+19324
+19325
+19326
+19327
+19328
+19329
+19330
+19331
+19332
+19333
+19334
+19335
+19336
+19337
+19338
+19339
+19340
+19341
+19342
+19343
+19344
+19345
+19346
+19347
+19348
+19349
+19350
+19351
+19352
+19353
+19354
+19355
+19356
+19357
+19358
+19359
+19360
+19361
+19362
+19363
+19364
+19365
+19366
+19367
+19368
+19369
+19370
+19371
+19372
+19373
+19374
+19375
+19376
+19377
+19378
+19379
+19380
+19381
+19382
+19383
+19384
+19385
+19386
+19387
+19388
+19389
+19390
+19391
+19392
+19393
+19394
+19395
+19396
+19397
+19398
+19399
+19400
+19401
+19402
+19403
+19404
+19405
+19406
+19407
+19408
+19409
+19410
+19411
+19412
+19413
+19414
+19415
+19416
+19417
+19418
+19419
+19420
+19421
+19422
+19423
+19424
+19425
+19426
+19427
+19428
+19429
+19430
+19431
+19432
+19433
+19434
+19435
+19436
+19437
+19438
+19439
+19440
+19441
+19442
+19443
+19444
+19445
+19446
+19447
+19448
+19449
+19450
+19451
+19452
+19453
+19454
+19455
+19456
+19457
+19458
+19459
+19460
+19461
+19462
+19463
+19464
+19465
+19466
+19467
+19468
+19469
+19470
+19471
+19472
+19473
+19474
+19475
+19476
+19477
+19478
+19479
+19480
+19481
+19482
+19483
+19484
+19485
+19486
+19487
+19488
+19489
+19490
+19491
+19492
+19493
+19494
+19495
+19496
+19497
+19498
+19499
+19500
+19501
+19502
+19503
+19504
+19505
+19506
+19507
+19508
+19509
+19510
+19511
+19512
+19513
+19514
+19515
+19516
+19517
+19518
+19519
+19520
+19521
+19522
+19523
+19524
+19525
+19526
+19527
+19528
+19529
+19530
+19531
+19532
+19533
+19534
+19535
+19536
+19537
+19538
+19539
+19540
+19541
+19542
+19543
+19544
+19545
+19546
+19547
+19548
+19549
+19550
+19551
+19552
+19553
+19554
+19555
+19556
+19557
+19558
+19559
+19560
+19561
+19562
+19563
+19564
+19565
+19566
+19567
+19568
+19569
+19570
+19571
+19572
+19573
+19574
+19575
+19576
+19577
+19578
+19579
+19580
+19581
+19582
+19583
+19584
+19585
+19586
+19587
+19588
+19589
+19590
+19591
+19592
+19593
+19594
+19595
+19596
+19597
+19598
+19599
+19600
+19601
+19602
+19603
+19604
+19605
+19606
+19607
+19608
+19609
+19610
+19611
+19612
+19613
+19614
+19615
+19616
+19617
+19618
+19619
+19620
+19621
+19622
+19623
+19624
+19625
+19626
+19627
+19628
+19629
+19630
+19631
+19632
+19633
+19634
+19635
+19636
+19637
+19638
+19639
+19640
+19641
+19642
+19643
+19644
+19645
+19646
+19647
+19648
+19649
+19650
+19651
+19652
+19653
+19654
+19655
+19656
+19657
+19658
+19659
+19660
+19661
+19662
+19663
+19664
+19665
+19666
+19667
+19668
+19669
+19670
+19671
+19672
+19673
+19674
+19675
+19676
+19677
+19678
+19679
+19680
+19681
+19682
+19683
+19684
+19685
+19686
+19687
+19688
+19689
+19690
+19691
+19692
+19693
+19694
+19695
+19696
+19697
+19698
+19699
+19700
+19701
+19702
+19703
+19704
+19705
+19706
+19707
+19708
+19709
+19710
+19711
+19712
+19713
+19714
+19715
+19716
+19717
+19718
+19719
+19720
+19721
+19722
+19723
+19724
+19725
+19726
+19727
+19728
+19729
+19730
+19731
+19732
+19733
+19734
+19735
+19736
+19737
+19738
+19739
+19740
+19741
+19742
+19743
+19744
+19745
+19746
+19747
+19748
+19749
+19750
+19751
+19752
+19753
+19754
+19755
+19756
+19757
+19758
+19759
+19760
+19761
+19762
+19763
+19764
+19765
+19766
+19767
+19768
+19769
+19770
+19771
+19772
+19773
+19774
+19775
+19776
+19777
+19778
+19779
+19780
+19781
+19782
+19783
+19784
+19785
+19786
+19787
+19788
+19789
+19790
+19791
+19792
+19793
+19794
+19795
+19796
+19797
+19798
+19799
+19800
+19801
+19802
+19803
+19804
+19805
+19806
+19807
+19808
+19809
+19810
+19811
+19812
+19813
+19814
+19815
+19816
+19817
+19818
+19819
+19820
+19821
+19822
+19823
+19824
+19825
+19826
+19827
+19828
+19829
+19830
+19831
+19832
+19833
+19834
+19835
+19836
+19837
+19838
+19839
+19840
+19841
+19842
+19843
+19844
+19845
+19846
+19847
+19848
+19849
+19850
+19851
+19852
+19853
+19854
+19855
+19856
+19857
+19858
+19859
+19860
+19861
+19862
+19863
+19864
+19865
+19866
+19867
+19868
+19869
+19870
+19871
+19872
+19873
+19874
+19875
+19876
+19877
+19878
+19879
+19880
+19881
+19882
+19883
+19884
+19885
+19886
+19887
+19888
+19889
+19890
+19891
+19892
+19893
+19894
+19895
+19896
+19897
+19898
+19899
+19900
+19901
+19902
+19903
+19904
+19905
+19906
+19907
+19908
+19909
+19910
+19911
+19912
+19913
+19914
+19915
+19916
+19917
+19918
+19919
+19920
+19921
+19922
+19923
+19924
+19925
+19926
+19927
+19928
+19929
+19930
+19931
+19932
+19933
+19934
+19935
+19936
+19937
+19938
+19939
+19940
+19941
+19942
+19943
+19944
+19945
+19946
+19947
+19948
+19949
+19950
+19951
+19952
+19953
+19954
+19955
+19956
+19957
+19958
+19959
+19960
+19961
+19962
+19963
+19964
+19965
+19966
+19967
+19968
+19969
+19970
+19971
+19972
+19973
+19974
+19975
+19976
+19977
+19978
+19979
+19980
+19981
+19982
+19983
+19984
+19985
+19986
+19987
+19988
+19989
+19990
+19991
+19992
+19993
+19994
+19995
+19996
+19997
+19998
+19999
+20000
+20001
+20002
+20003
+20004
+20005
+20006
+20007
+20008
+20009
+20010
+20011
+20012
+20013
+20014
+20015
+20016
+20017
+20018
+20019
+20020
+20021
+20022
+20023
+20024
+20025
+20026
+20027
+20028
+20029
+20030
+20031
+20032
+20033
+20034
+20035
+20036
+20037
+20038
+20039
+20040
+20041
+20042
+20043
+20044
+20045
+20046
+20047
+20048
+20049
+20050
+20051
+20052
+20053
+20054
+20055
+20056
+20057
+20058
+20059
+20060
+20061
+20062
+20063
+20064
+20065
+20066
+20067
+20068
+20069
+20070
+20071
+20072
+20073
+20074
+20075
+20076
+20077
+20078
+20079
+20080
+20081
+20082
+20083
+20084
+20085
+20086
+20087
+20088
+20089
+20090
+20091
+20092
+20093
+20094
+20095
+20096
+20097
+20098
+20099
+20100
+20101
+20102
+20103
+20104
+20105
+20106
+20107
+20108
+20109
+20110
+20111
+20112
+20113
+20114
+20115
+20116
+20117
+20118
+20119
+20120
+20121
+20122
+20123
+20124
+20125
+20126
+20127
+20128
+20129
+20130
+20131
+20132
+20133
+20134
+20135
+20136
+20137
+20138
+20139
+20140
+20141
+20142
+20143
+20144
+20145
+20146
+20147
+20148
+20149
+20150
+20151
+20152
+20153
+20154
+20155
+20156
+20157
+20158
+20159
+20160
+20161
+20162
+20163
+20164
+20165
+20166
+20167
+20168
+20169
+20170
+20171
+20172
+20173
+20174
+20175
+20176
+20177
+20178
+20179
+20180
+20181
+20182
+20183
+20184
+20185
+20186
+20187
+20188
+20189
+20190
+20191
+20192
+20193
+20194
+20195
+20196
+20197
+20198
+20199
+20200
+20201
+20202
+20203
+20204
+20205
+20206
+20207
+20208
+20209
+20210
+20211
+20212
+20213
+20214
+20215
+20216
+20217
+20218
+20219
+20220
+20221
+20222
+20223
+20224
+20225
+20226
+20227
+20228
+20229
+20230
+20231
+20232
+20233
+20234
+20235
+20236
+20237
+20238
+20239
+20240
+20241
+20242
+20243
+20244
+20245
+20246
+20247
+20248
+20249
+20250
+20251
+20252
+20253
+20254
+20255
+20256
+20257
+20258
+20259
+20260
+20261
+20262
+20263
+20264
+20265
+20266
+20267
+20268
+20269
+20270
+20271
+20272
+20273
+20274
+20275
+20276
+20277
+20278
+20279
+20280
+20281
+20282
+20283
+20284
+20285
+20286
+20287
+20288
+20289
+20290
+20291
+20292
+20293
+20294
+20295
+20296
+20297
+20298
+20299
+20300
+20301
+20302
+20303
+20304
+20305
+20306
+20307
+20308
+20309
+20310
+20311
+20312
+20313
+20314
+20315
+20316
+20317
+20318
+20319
+20320
+20321
+20322
+20323
+20324
+20325
+20326
+20327
+20328
+20329
+20330
+20331
+20332
+20333
+20334
+20335
+20336
+20337
+20338
+20339
+20340
+20341
+20342
+20343
+20344
+20345
+20346
+20347
+20348
+20349
+20350
+20351
+20352
+20353
+20354
+20355
+20356
+20357
+20358
+20359
+20360
+20361
+20362
+20363
+20364
+20365
+20366
+20367
+20368
+20369
+20370
+20371
+20372
+20373
+20374
+20375
+20376
+20377
+20378
+20379
+20380
+20381
+20382
+20383
+20384
+20385
+20386
+20387
+20388
+20389
+20390
+20391
+20392
+20393
+20394
+20395
+20396
+20397
+20398
+20399
+20400
+20401
+20402
+20403
+20404
+20405
+20406
+20407
+20408
+20409
+20410
+20411
+20412
+20413
+20414
+20415
+20416
+20417
+20418
+20419
+20420
+20421
+20422
+20423
+20424
+20425
+20426
+20427
+20428
+20429
+20430
+20431
+20432
+20433
+20434
+20435
+20436
+20437
+20438
+20439
+20440
+20441
+20442
+20443
+20444
+20445
+20446
+20447
+20448
+20449
+20450
+20451
+20452
+20453
+20454
+20455
+20456
+20457
+20458
+20459
+20460
+20461
+20462
+20463
+20464
+20465
+20466
+20467
+20468
+20469
+20470
+20471
+20472
+20473
+20474
+20475
+20476
+20477
+20478
+20479
+20480
+20481
+20482
+20483
+20484
+20485
+20486
+20487
+20488
+20489
+20490
+20491
+20492
+20493
+20494
+20495
+20496
+20497
+20498
+20499
+20500
+20501
+20502
+20503
+20504
+20505
+20506
+20507
+20508
+20509
+20510
+20511
+20512
+20513
+20514
+20515
+20516
+20517
+20518
+20519
+20520
+20521
+20522
+20523
+20524
+20525
+20526
+20527
+20528
+20529
+20530
+20531
+20532
+20533
+20534
+20535
+20536
+20537
+20538
+20539
+20540
+20541
+20542
+20543
+20544
+20545
+20546
+20547
+20548
+20549
+20550
+20551
+20552
+20553
+20554
+20555
+20556
+20557
+20558
+20559
+20560
+20561
+20562
+20563
+20564
+20565
+20566
+20567
+20568
+20569
+20570
+20571
+20572
+20573
+20574
+20575
+20576
+20577
+20578
+20579
+20580
+20581
+20582
+20583
+20584
+20585
+20586
+20587
+20588
+20589
+20590
+20591
+20592
+20593
+20594
+20595
+20596
+20597
+20598
+20599
+20600
+20601
+20602
+20603
+20604
+20605
+20606
+20607
+20608
+20609
+20610
+20611
+20612
+20613
+20614
+20615
+20616
+20617
+20618
+20619
+20620
+20621
+20622
+20623
+20624
+20625
+20626
+20627
+20628
+20629
+20630
+20631
+20632
+20633
+20634
+20635
+20636
+20637
+20638
+20639
+20640
+20641
+20642
+20643
+20644
+20645
+20646
+20647
+20648
+20649
+20650
+20651
+20652
+20653
+20654
+20655
+20656
+20657
+20658
+20659
+20660
+20661
+20662
+20663
+20664
+20665
+20666
+20667
+20668
+20669
+20670
+20671
+20672
+20673
+20674
+20675
+20676
+20677
+20678
+20679
+20680
+20681
+20682
+20683
+20684
+20685
+20686
+20687
+20688
+20689
+20690
+20691
+20692
+20693
+20694
+20695
+20696
+20697
+20698
+20699
+20700
+20701
+20702
+20703
+20704
+20705
+20706
+20707
+20708
+20709
+20710
+20711
+20712
+20713
+20714
+20715
+20716
+20717
+20718
+20719
+20720
+20721
+20722
+20723
+20724
+20725
+20726
+20727
+20728
+20729
+20730
+20731
+20732
+20733
+20734
+20735
+20736
+20737
+20738
+20739
+20740
+20741
+20742
+20743
+20744
+20745
+20746
+20747
+20748
+20749
+20750
+20751
+20752
+20753
+20754
+20755
+20756
+20757
+20758
+20759
+20760
+20761
+20762
+20763
+20764
+20765
+20766
+20767
+20768
+20769
+20770
+20771
+20772
+20773
+20774
+20775
+20776
+20777
+20778
+20779
+20780
+20781
+20782
+20783
+20784
+20785
+20786
+20787
+20788
+20789
+20790
+20791
+20792
+20793
+20794
+20795
+20796
+20797
+20798
+20799
+20800
+20801
+20802
+20803
+20804
+20805
+20806
+20807
+20808
+20809
+20810
+20811
+20812
+20813
+20814
+20815
+20816
+20817
+20818
+20819
+20820
+20821
+20822
+20823
+20824
+20825
+20826
+20827
+20828
+20829
+20830
+20831
+20832
+20833
+20834
+20835
+20836
+20837
+20838
+20839
+20840
+20841
+20842
+20843
+20844
+20845
+20846
+20847
+20848
+20849
+20850
+20851
+20852
+20853
+20854
+20855
+20856
+20857
+20858
+20859
+20860
+20861
+20862
+20863
+20864
+20865
+20866
+20867
+20868
+20869
+20870
+20871
+20872
+20873
+20874
+20875
+20876
+20877
+20878
+20879
+20880
+20881
+20882
+20883
+20884
+20885
+20886
+20887
+20888
+20889
+20890
+20891
+20892
+20893
+20894
+20895
+20896
+20897
+20898
+20899
+20900
+20901
+20902
+20903
+20904
+20905
+20906
+20907
+20908
+20909
+20910
+20911
+20912
+20913
+20914
+20915
+20916
+20917
+20918
+20919
+20920
+20921
+20922
+20923
+20924
+20925
+20926
+20927
+20928
+20929
+20930
+20931
+20932
+20933
+20934
+20935
+20936
+20937
+20938
+20939
+20940
+20941
+20942
+20943
+20944
+20945
+20946
+20947
+20948
+20949
+20950
+20951
+20952
+20953
+20954
+20955
+20956
+20957
+20958
+20959
+20960
+20961
+20962
+20963
+20964
+20965
+20966
+20967
+20968
+20969
+20970
+20971
+20972
+20973
+20974
+20975
+20976
+20977
+20978
+20979
+20980
+20981
+20982
+20983
+20984
+20985
+20986
+20987
+20988
+20989
+20990
+20991
+20992
+20993
+20994
+20995
+20996
+20997
+20998
+20999
+21000
+21001
+21002
+21003
+21004
+21005
+21006
+21007
+21008
+21009
+21010
+21011
+21012
+21013
+21014
+21015
+21016
+21017
+21018
+21019
+21020
+21021
+21022
+21023
+21024
+21025
+21026
+21027
+21028
+21029
+21030
+21031
+21032
+21033
+21034
+21035
+21036
+21037
+21038
+21039
+21040
+21041
+21042
+21043
+21044
+21045
+21046
+21047
+21048
+21049
+21050
+21051
+21052
+21053
+21054
+21055
+21056
+21057
+21058
+21059
+21060
+21061
+21062
+21063
+21064
+21065
+21066
+21067
+21068
+21069
+21070
+21071
+21072
+21073
+21074
+21075
+21076
+21077
+21078
+21079
+21080
+21081
+21082
+21083
+21084
+21085
+21086
+21087
+21088
+21089
+21090
+21091
+21092
+21093
+21094
+21095
+21096
+21097
+21098
+21099
+21100
+21101
+21102
+21103
+21104
+21105
+21106
+21107
+21108
+21109
+21110
+21111
+21112
+21113
+21114
+21115
+21116
+21117
+21118
+21119
+21120
+21121
+21122
+21123
+21124
+21125
+21126
+21127
+21128
+21129
+21130
+21131
+21132
+21133
+21134
+21135
+21136
+21137
+21138
+21139
+21140
+21141
+21142
+21143
+21144
+21145
+21146
+21147
+21148
+21149
+21150
+21151
+21152
+21153
+21154
+21155
+21156
+21157
+21158
+21159
+21160
+21161
+21162
+21163
+21164
+21165
+21166
+21167
+21168
+21169
+21170
+21171
+21172
+21173
+21174
+21175
+21176
+21177
+21178
+21179
+21180
+21181
+21182
+21183
+21184
+21185
+21186
+21187
+21188
+21189
+21190
+21191
+21192
+21193
+21194
+21195
+21196
+21197
+21198
+21199
+21200
+21201
+21202
+21203
+21204
+21205
+21206
+21207
+21208
+21209
+21210
+21211
+21212
+21213
+21214
+21215
+21216
+21217
+21218
+21219
+21220
+21221
+21222
+21223
+21224
+21225
+21226
+21227
+21228
+21229
+21230
+21231
+21232
+21233
+21234
+21235
+21236
+21237
+21238
+21239
+21240
+21241
+21242
+21243
+21244
+21245
+21246
+21247
+21248
+21249
+21250
+21251
+21252
+21253
+21254
+21255
+21256
+21257
+21258
+21259
+21260
+21261
+21262
+21263
+21264
+21265
+21266
+21267
+21268
+21269
+21270
+21271
+21272
+21273
+21274
+21275
+21276
+21277
+21278
+21279
+21280
+21281
+21282
+21283
+21284
+21285
+21286
+21287
+21288
+21289
+21290
+21291
+21292
+21293
+21294
+21295
+21296
+21297
+21298
+21299
+21300
+21301
+21302
+21303
+21304
+21305
+21306
+21307
+21308
+21309
+21310
+21311
+21312
+21313
+21314
+21315
+21316
+21317
+21318
+21319
+21320
+21321
+21322
+21323
+21324
+21325
+21326
+21327
+21328
+21329
+21330
+21331
+21332
+21333
+21334
+21335
+21336
+21337
+21338
+21339
+21340
+21341
+21342
+21343
+21344
+21345
+21346
+21347
+21348
+21349
+21350
+21351
+21352
+21353
+21354
+21355
+21356
+21357
+21358
+21359
+21360
+21361
+21362
+21363
+21364
+21365
+21366
+21367
+21368
+21369
+21370
+21371
+21372
+21373
+21374
+21375
+21376
+21377
+21378
+21379
+21380
+21381
+21382
+21383
+21384
+21385
+21386
+21387
+21388
+21389
+21390
+21391
+21392
+21393
+21394
+21395
+21396
+21397
+21398
+21399
+21400
+21401
+21402
+21403
+21404
+21405
+21406
+21407
+21408
+21409
+21410
+21411
+21412
+21413
+21414
+21415
+21416
+21417
+21418
+21419
+21420
+21421
+21422
+21423
+21424
+21425
+21426
+21427
+21428
+21429
+21430
+21431
+21432
+21433
+21434
+21435
+21436
+21437
+21438
+21439
+21440
+21441
+21442
+21443
+21444
+21445
+21446
+21447
+21448
+21449
+21450
+21451
+21452
+21453
+21454
+21455
+21456
+21457
+21458
+21459
+21460
+21461
+21462
+21463
+21464
+21465
+21466
+21467
+21468
+21469
+21470
+21471
+21472
+21473
+21474
+21475
+21476
+21477
+21478
+21479
+21480
+21481
+21482
+21483
+21484
+21485
+21486
+21487
+21488
+21489
+21490
+21491
+21492
+21493
+21494
+21495
+21496
+21497
+21498
+21499
+21500
+21501
+21502
+21503
+21504
+21505
+21506
+21507
+21508
+21509
+21510
+21511
+21512
+21513
+21514
+21515
+21516
+21517
+21518
+21519
+21520
+21521
+21522
+21523
+21524
+21525
+21526
+21527
+21528
+21529
+21530
+21531
+21532
+21533
+21534
+21535
+21536
+21537
+21538
+21539
+21540
+21541
+21542
+21543
+21544
+21545
+21546
+21547
+21548
+21549
+21550
+21551
+21552
+21553
+21554
+21555
+21556
+21557
+21558
+21559
+21560
+21561
+21562
+21563
+21564
+21565
+21566
+21567
+21568
+21569
+21570
+21571
+21572
+21573
+21574
+21575
+21576
+21577
+21578
+21579
+21580
+21581
+21582
+21583
+21584
+21585
+21586
+21587
+21588
+21589
+21590
+21591
+21592
+21593
+21594
+21595
+21596
+21597
+21598
+21599
+21600
+21601
+21602
+21603
+21604
+21605
+21606
+21607
+21608
+21609
+21610
+21611
+21612
+21613
+21614
+21615
+21616
+21617
+21618
+21619
+21620
+21621
+21622
+21623
+21624
+21625
+21626
+21627
+21628
+21629
+21630
+21631
+21632
+21633
+21634
+21635
+21636
+21637
+21638
+21639
+21640
+21641
+21642
+21643
+21644
+21645
+21646
+21647
+21648
+21649
+21650
+21651
+21652
+21653
+21654
+21655
+21656
+21657
+21658
+21659
+21660
+21661
+21662
+21663
+21664
+21665
+21666
+21667
+21668
+21669
+21670
+21671
+21672
+21673
+21674
+21675
+21676
+21677
+21678
+21679
+21680
+21681
+21682
+21683
+21684
+21685
+21686
+21687
+21688
+21689
+21690
+21691
+21692
+21693
+21694
+21695
+21696
+21697
+21698
+21699
+21700
+21701
+21702
+21703
+21704
+21705
+21706
+21707
+21708
+21709
+21710
+21711
+21712
+21713
+21714
+21715
+21716
+21717
+21718
+21719
+21720
+21721
+21722
+21723
+21724
+21725
+21726
+21727
+21728
+21729
+21730
+21731
+21732
+21733
+21734
+21735
+21736
+21737
+21738
+21739
+21740
+21741
+21742
+21743
+21744
+21745
+21746
+21747
+21748
+21749
+21750
+21751
+21752
+21753
+21754
+21755
+21756
+21757
+21758
+21759
+21760
+21761
+21762
+21763
+21764
+21765
+21766
+21767
+21768
+21769
+21770
+21771
+21772
+21773
+21774
+21775
+21776
+21777
+21778
+21779
+21780
+21781
+21782
+21783
+21784
+21785
+21786
+21787
+21788
+21789
+21790
+21791
+21792
+21793
+21794
+21795
+21796
+21797
+21798
+21799
+21800
+21801
+21802
+21803
+21804
+21805
+21806
+21807
+21808
+21809
+21810
+21811
+21812
+21813
+21814
+21815
+21816
+21817
+21818
+21819
+21820
+21821
+21822
+21823
+21824
+21825
+21826
+21827
+21828
+21829
+21830
+21831
+21832
+21833
+21834
+21835
+21836
+21837
+21838
+21839
+21840
+21841
+21842
+21843
+21844
+21845
+21846
+21847
+21848
+21849
+21850
+21851
+21852
+21853
+21854
+21855
+21856
+21857
+21858
+21859
+21860
+21861
+21862
+21863
+21864
+21865
+21866
+21867
+21868
+21869
+21870
+21871
+21872
+21873
+21874
+21875
+21876
+21877
+21878
+21879
+21880
+21881
+21882
+21883
+21884
+21885
+21886
+21887
+21888
+21889
+21890
+21891
+21892
+21893
+21894
+21895
+21896
+21897
+21898
+21899
+21900
+21901
+21902
+21903
+21904
+21905
+21906
+21907
+21908
+21909
+21910
+21911
+21912
+21913
+21914
+21915
+21916
+21917
+21918
+21919
+21920
+21921
+21922
+21923
+21924
+21925
+21926
+21927
+21928
+21929
+21930
+21931
+21932
+21933
+21934
+21935
+21936
+21937
+21938
+21939
+21940
+21941
+21942
+21943
+21944
+21945
+21946
+21947
+21948
+21949
+21950
+21951
+21952
+21953
+21954
+21955
+21956
+21957
+21958
+21959
+21960
+21961
+21962
+21963
+21964
+21965
+21966
+21967
+21968
+21969
+21970
+21971
+21972
+21973
+21974
+21975
+21976
+21977
+21978
+21979
+21980
+21981
+21982
+21983
+21984
+21985
+21986
+21987
+21988
+21989
+21990
+21991
+21992
+21993
+21994
+21995
+21996
+21997
+21998
+21999
+22000
+22001
+22002
+22003
+22004
+22005
+22006
+22007
+22008
+22009
+22010
+22011
+22012
+22013
+22014
+22015
+22016
+22017
+22018
+22019
+22020
+22021
+22022
+22023
+22024
+22025
+22026
+22027
+22028
+22029
+22030
+22031
+22032
+22033
+22034
+22035
+22036
+22037
+22038
+22039
+22040
+22041
+22042
+22043
+22044
+22045
+22046
+22047
+22048
+22049
+22050
+22051
+22052
+22053
+22054
+22055
+22056
+22057
+22058
+22059
+22060
+22061
+22062
+22063
+22064
+22065
+22066
+22067
+22068
+22069
+22070
+22071
+22072
+22073
+22074
+22075
+22076
+22077
+22078
+22079
+22080
+22081
+22082
+22083
+22084
+22085
+22086
+22087
+22088
+22089
+22090
+22091
+22092
+22093
+22094
+22095
+22096
+22097
+22098
+22099
+22100
+22101
+22102
+22103
+22104
+22105
+22106
+22107
+22108
+22109
+22110
+22111
+22112
+22113
+22114
+22115
+22116
+22117
+22118
+22119
+22120
+22121
+22122
+22123
+22124
+22125
+22126
+22127
+22128
+22129
+22130
+22131
+22132
+22133
+22134
+22135
+22136
+22137
+22138
+22139
+22140
+22141
+22142
+22143
+22144
+22145
+22146
+22147
+22148
+22149
+22150
+22151
+22152
+22153
+22154
+22155
+22156
+22157
+22158
+22159
+22160
+22161
+22162
+22163
+22164
+22165
+22166
+22167
+22168
+22169
+22170
+22171
+22172
+22173
+22174
+22175
+22176
+22177
+22178
+22179
+22180
+22181
+22182
+22183
+22184
+22185
+22186
+22187
+22188
+22189
+22190
+22191
+22192
+22193
+22194
+22195
+22196
+22197
+22198
+22199
+22200
+22201
+22202
+22203
+22204
+22205
+22206
+22207
+22208
+22209
+22210
+22211
+22212
+22213
+22214
+22215
+22216
+22217
+22218
+22219
+22220
+22221
+22222
+22223
+22224
+22225
+22226
+22227
+22228
+22229
+22230
+22231
+22232
+22233
+22234
+22235
+22236
+22237
+22238
+22239
+22240
+22241
+22242
+22243
+22244
+22245
+22246
+22247
+22248
+22249
+22250
+22251
+22252
+22253
+22254
+22255
+22256
+22257
+22258
+22259
+22260
+22261
+22262
+22263
+22264
+22265
+22266
+22267
+22268
+22269
+22270
+22271
+22272
+22273
+22274
+22275
+22276
+22277
+22278
+22279
+22280
+22281
+22282
+22283
+22284
+22285
+22286
+22287
+22288
+22289
+22290
+22291
+22292
+22293
+22294
+22295
+22296
+22297
+22298
+22299
+22300
+22301
+22302
+22303
+22304
+22305
+22306
+22307
+22308
+22309
+22310
+22311
+22312
+22313
+22314
+22315
+22316
+22317
+22318
+22319
+22320
+22321
+22322
+22323
+22324
+22325
+22326
+22327
+22328
+22329
+22330
+22331
+22332
+22333
+22334
+22335
+22336
+22337
+22338
+22339
+22340
+22341
+22342
+22343
+22344
+22345
+22346
+22347
+22348
+22349
+22350
+22351
+22352
+22353
+22354
+22355
+22356
+22357
+22358
+22359
+22360
+22361
+22362
+22363
+22364
+22365
+22366
+22367
+22368
+22369
+22370
+22371
+22372
+22373
+22374
+22375
+22376
+22377
+22378
+22379
+22380
+22381
+22382
+22383
+22384
+22385
+22386
+22387
+22388
+22389
+22390
+22391
+22392
+22393
+22394
+22395
+22396
+22397
+22398
+22399
+22400
+22401
+22402
+22403
+22404
+22405
+22406
+22407
+22408
+22409
+22410
+22411
+22412
+22413
+22414
+22415
+22416
+22417
+22418
+22419
+22420
+22421
+22422
+22423
+22424
+22425
+22426
+22427
+22428
+22429
+22430
+22431
+22432
+22433
+22434
+22435
+22436
+22437
+22438
+22439
+22440
+22441
+22442
+22443
+22444
+22445
+22446
+22447
+22448
+22449
+22450
+22451
+22452
+22453
+22454
+22455
+22456
+22457
+22458
+22459
+22460
+22461
+22462
+22463
+22464
+22465
+22466
+22467
+22468
+22469
+22470
+22471
+22472
+22473
+22474
+22475
+22476
+22477
+22478
+22479
+22480
+22481
+22482
+22483
+22484
+22485
+22486
+22487
+22488
+22489
+22490
+22491
+22492
+22493
+22494
+22495
+22496
+22497
+22498
+22499
+22500
+22501
+22502
+22503
+22504
+22505
+22506
+22507
+22508
+22509
+22510
+22511
+22512
+22513
+22514
+22515
+22516
+22517
+22518
+22519
+22520
+22521
+22522
+22523
+22524
+22525
+22526
+22527
+22528
+22529
+22530
+22531
+22532
+22533
+22534
+22535
+22536
+22537
+22538
+22539
+22540
+22541
+22542
+22543
+22544
+22545
+22546
+22547
+22548
+22549
+22550
+22551
+22552
+22553
+22554
+22555
+22556
+22557
+22558
+22559
+22560
+22561
+22562
+22563
+22564
+22565
+22566
+22567
+22568
+22569
+22570
+22571
+22572
+22573
+22574
+22575
+22576
+22577
+22578
+22579
+22580
+22581
+22582
+22583
+22584
+22585
+22586
+22587
+22588
+22589
+22590
+22591
+22592
+22593
+22594
+22595
+22596
+22597
+22598
+22599
+22600
+22601
+22602
+22603
+22604
+22605
+22606
+22607
+22608
+22609
+22610
+22611
+22612
+22613
+22614
+22615
+22616
+22617
+22618
+22619
+22620
+22621
+22622
+22623
+22624
+22625
+22626
+22627
+22628
+22629
+22630
+22631
+22632
+22633
+22634
+22635
+22636
+22637
+22638
+22639
+22640
+22641
+22642
+22643
+22644
+22645
+22646
+22647
+22648
+22649
+22650
+22651
+22652
+22653
+22654
+22655
+22656
+22657
+22658
+22659
+22660
+22661
+22662
+22663
+22664
+22665
+22666
+22667
+22668
+22669
+22670
+22671
+22672
+22673
+22674
+22675
+22676
+22677
+22678
+22679
+22680
+22681
+22682
+22683
+22684
+22685
+22686
+22687
+22688
+22689
+22690
+22691
+22692
+22693
+22694
+22695
+22696
+22697
+22698
+22699
+22700
+22701
+22702
+22703
+22704
+22705
+22706
+22707
+22708
+22709
+22710
+22711
+22712
+22713
+22714
+22715
+22716
+22717
+22718
+22719
+22720
+22721
+22722
+22723
+22724
+22725
+22726
+22727
+22728
+22729
+22730
+22731
+22732
+22733
+22734
+22735
+22736
+22737
+22738
+22739
+22740
+22741
+22742
+22743
+22744
+22745
+22746
+22747
+22748
+22749
+22750
+22751
+22752
+22753
+22754
+22755
+22756
+22757
+22758
+22759
+22760
+22761
+22762
+22763
+22764
+22765
+22766
+22767
+22768
+22769
+22770
+22771
+22772
+22773
+22774
+22775
+22776
+22777
+22778
+22779
+22780
+22781
+22782
+22783
+22784
+22785
+22786
+22787
+22788
+22789
+22790
+22791
+22792
+22793
+22794
+22795
+22796
+22797
+22798
+22799
+22800
+22801
+22802
+22803
+22804
+22805
+22806
+22807
+22808
+22809
+22810
+22811
+22812
+22813
+22814
+22815
+22816
+22817
+22818
+22819
+22820
+22821
+22822
+22823
+22824
+22825
+22826
+22827
+22828
+22829
+22830
+22831
+22832
+22833
+22834
+22835
+22836
+22837
+22838
+22839
+22840
+22841
+22842
+22843
+22844
+22845
+22846
+22847
+22848
+22849
+22850
+22851
+22852
+22853
+22854
+22855
+22856
+22857
+22858
+22859
+22860
+22861
+22862
+22863
+22864
+22865
+22866
+22867
+22868
+22869
+22870
+22871
+22872
+22873
+22874
+22875
+22876
+22877
+22878
+22879
+22880
+22881
+22882
+22883
+22884
+22885
+22886
+22887
+22888
+22889
+22890
+22891
+22892
+22893
+22894
+22895
+22896
+22897
+22898
+22899
+22900
+22901
+22902
+22903
+22904
+22905
+22906
+22907
+22908
+22909
+22910
+22911
+22912
+22913
+22914
+22915
+22916
+22917
+22918
+22919
+22920
+22921
+22922
+22923
+22924
+22925
+22926
+22927
+22928
+22929
+22930
+22931
+22932
+22933
+22934
+22935
+22936
+22937
+22938
+22939
+22940
+22941
+22942
+22943
+22944
+22945
+22946
+22947
+22948
+22949
+22950
+22951
+22952
+22953
+22954
+22955
+22956
+22957
+22958
+22959
+22960
+22961
+22962
+22963
+22964
+22965
+22966
+22967
+22968
+22969
+22970
+22971
+22972
+22973
+22974
+22975
+22976
+22977
+22978
+22979
+22980
+22981
+22982
+22983
+22984
+22985
+22986
+22987
+22988
+22989
+22990
+22991
+22992
+22993
+22994
+22995
+22996
+22997
+22998
+22999
+23000
+23001
+23002
+23003
+23004
+23005
+23006
+23007
+23008
+23009
+23010
+23011
+23012
+23013
+23014
+23015
+23016
+23017
+23018
+23019
+23020
+23021
+23022
+23023
+23024
+23025
+23026
+23027
+23028
+23029
+23030
+23031
+23032
+23033
+23034
+23035
+23036
+23037
+23038
+23039
+23040
+23041
+23042
+23043
+23044
+23045
+23046
+23047
+23048
+23049
+23050
+23051
+23052
+23053
+23054
+23055
+23056
+23057
+23058
+23059
+23060
+23061
+23062
+23063
+23064
+23065
+23066
+23067
+23068
+23069
+23070
+23071
+23072
+23073
+23074
+23075
+23076
+23077
+23078
+23079
+23080
+23081
+23082
+23083
+23084
+23085
+23086
+23087
+23088
+23089
+23090
+23091
+23092
+23093
+23094
+23095
+23096
+23097
+23098
+23099
+23100
+23101
+23102
+23103
+23104
+23105
+23106
+23107
+23108
+23109
+23110
+23111
+23112
+23113
+23114
+23115
+23116
+23117
+23118
+23119
+23120
+23121
+23122
+23123
+23124
+23125
+23126
+23127
+23128
+23129
+23130
+23131
+23132
+23133
+23134
+23135
+23136
+23137
+23138
+23139
+23140
+23141
+23142
+23143
+23144
+23145
+23146
+23147
+23148
+23149
+23150
+23151
+23152
+23153
+23154
+23155
+23156
+23157
+23158
+23159
+23160
+23161
+23162
+23163
+23164
+23165
+23166
+23167
+23168
+23169
+23170
+23171
+23172
+23173
+23174
+23175
+23176
+23177
+23178
+23179
+23180
+23181
+23182
+23183
+23184
+23185
+23186
+23187
+23188
+23189
+23190
+23191
+23192
+23193
+23194
+23195
+23196
+23197
+23198
+23199
+23200
+23201
+23202
+23203
+23204
+23205
+23206
+23207
+23208
+23209
+23210
+23211
+23212
+23213
+23214
+23215
+23216
+23217
+23218
+23219
+23220
+23221
+23222
+23223
+23224
+23225
+23226
+23227
+23228
+23229
+23230
+23231
+23232
+23233
+23234
+23235
+23236
+23237
+23238
+23239
+23240
+23241
+23242
+23243
+23244
+23245
+23246
+23247
+23248
+23249
+23250
+23251
+23252
+23253
+23254
+23255
+23256
+23257
+23258
+23259
+23260
+23261
+23262
+23263
+23264
+23265
+23266
+23267
+23268
+23269
+23270
+23271
+23272
+23273
+23274
+23275
+23276
+23277
+23278
+23279
+23280
+23281
+23282
+23283
+23284
+23285
+23286
+23287
+23288
+23289
+23290
+23291
+23292
+23293
+23294
+23295
+23296
+23297
+23298
+23299
+23300
+23301
+23302
+23303
+23304
+23305
+23306
+23307
+23308
+23309
+23310
+23311
+23312
+23313
+23314
+23315
+23316
+23317
+23318
+23319
+23320
+23321
+23322
+23323
+23324
+23325
+23326
+23327
+23328
+23329
+23330
+23331
+23332
+23333
+23334
+23335
+23336
+23337
+23338
+23339
+23340
+23341
+23342
+23343
+23344
+23345
+23346
+23347
+23348
+23349
+23350
+23351
+23352
+23353
+23354
+23355
+23356
+23357
+23358
+23359
+23360
+23361
+23362
+23363
+23364
+23365
+23366
+23367
+23368
+23369
+23370
+23371
+23372
+23373
+23374
+23375
+23376
+23377
+23378
+23379
+23380
+23381
+23382
+23383
+23384
+23385
+23386
+23387
+23388
+23389
+23390
+23391
+23392
+23393
+23394
+23395
+23396
+23397
+23398
+23399
+23400
+23401
+23402
+23403
+23404
+23405
+23406
+23407
+23408
+23409
+23410
+23411
+23412
+23413
+23414
+23415
+23416
+23417
+23418
+23419
+23420
+23421
+23422
+23423
+23424
+23425
+23426
+23427
+23428
+23429
+23430
+23431
+23432
+23433
+23434
+23435
+23436
+23437
+23438
+23439
+23440
+23441
+23442
+23443
+23444
+23445
+23446
+23447
+23448
+23449
+23450
+23451
+23452
+23453
+23454
+23455
+23456
+23457
+23458
+23459
+23460
+23461
+23462
+23463
+23464
+23465
+23466
+23467
+23468
+23469
+23470
+23471
+23472
+23473
+23474
+23475
+23476
+23477
+23478
+23479
+23480
+23481
+23482
+23483
+23484
+23485
+23486
+23487
+23488
+23489
+23490
+23491
+23492
+23493
+23494
+23495
+23496
+23497
+23498
+23499
+23500
+23501
+23502
+23503
+23504
+23505
+23506
+23507
+23508
+23509
+23510
+23511
+23512
+23513
+23514
+23515
+23516
+23517
+23518
+23519
+23520
+23521
+23522
+23523
+23524
+23525
+23526
+23527
+23528
+23529
+23530
+23531
+23532
+23533
+23534
+23535
+23536
+23537
+23538
+23539
+23540
+23541
+23542
+23543
+23544
+23545
+23546
+23547
+23548
+23549
+23550
+23551
+23552
+23553
+23554
+23555
+23556
+23557
+23558
+23559
+23560
+23561
+23562
+23563
+23564
+23565
+23566
+23567
+23568
+23569
+23570
+23571
+23572
+23573
+23574
+23575
+23576
+23577
+23578
+23579
+23580
+23581
+23582
+23583
+23584
+23585
+23586
+23587
+23588
+23589
+23590
+23591
+23592
+23593
+23594
+23595
+23596
+23597
+23598
+23599
+23600
+23601
+23602
+23603
+23604
+23605
+23606
+23607
+23608
+23609
+23610
+23611
+23612
+23613
+23614
+23615
+23616
+23617
+23618
+23619
+23620
+23621
+23622
+23623
+23624
+23625
+23626
+23627
+23628
+23629
+23630
+23631
+23632
+23633
+23634
+23635
+23636
+23637
+23638
+23639
+23640
+23641
+23642
+23643
+23644
+23645
+23646
+23647
+23648
+23649
+23650
+23651
+23652
+23653
+23654
+23655
+23656
+23657
+23658
+23659
+23660
+23661
+23662
+23663
+23664
+23665
+23666
+23667
+23668
+23669
+23670
+23671
+23672
+23673
+23674
+23675
+23676
+23677
+23678
+23679
+23680
+23681
+23682
+23683
+23684
+23685
+23686
+23687
+23688
+23689
+23690
+23691
+23692
+23693
+23694
+23695
+23696
+23697
+23698
+23699
+23700
+23701
+23702
+23703
+23704
+23705
+23706
+23707
+23708
+23709
+23710
+23711
+23712
+23713
+23714
+23715
+23716
+23717
+23718
+23719
+23720
+23721
+23722
+23723
+23724
+23725
+23726
+23727
+23728
+23729
+23730
+23731
+23732
+23733
+23734
+23735
+23736
+23737
+23738
+23739
+23740
+23741
+23742
+23743
+23744
+23745
+23746
+23747
+23748
+23749
+23750
+23751
+23752
+23753
+23754
+23755
+23756
+23757
+23758
+23759
+23760
+23761
+23762
+23763
+23764
+23765
+23766
+23767
+23768
+23769
+23770
+23771
+23772
+23773
+23774
+23775
+23776
+23777
+23778
+23779
+23780
+23781
+23782
+23783
+23784
+23785
+23786
+23787
+23788
+23789
+23790
+23791
+23792
+23793
+23794
+23795
+23796
+23797
+23798
+23799
+23800
+23801
+23802
+23803
+23804
+23805
+23806
+23807
+23808
+23809
+23810
+23811
+23812
+23813
+23814
+23815
+23816
+23817
+23818
+23819
+23820
+23821
+23822
+23823
+23824
+23825
+23826
+23827
+23828
+23829
+23830
+23831
+23832
+23833
+23834
+23835
+23836
+23837
+23838
+23839
+23840
+23841
+23842
+23843
+23844
+23845
+23846
+23847
+23848
+23849
+23850
+23851
+23852
+23853
+23854
+23855
+23856
+23857
+23858
+23859
+23860
+23861
+23862
+23863
+23864
+23865
+23866
+23867
+23868
+23869
+23870
+23871
+23872
+23873
+23874
+23875
+23876
+23877
+23878
+23879
+23880
+23881
+23882
+23883
+23884
+23885
+23886
+23887
+23888
+23889
+23890
+23891
+23892
+23893
+23894
+23895
+23896
+23897
+23898
+23899
+23900
+23901
+23902
+23903
+23904
+23905
+23906
+23907
+23908
+23909
+23910
+23911
+23912
+23913
+23914
+23915
+23916
+23917
+23918
+23919
+23920
+23921
+23922
+23923
+23924
+23925
+23926
+23927
+23928
+23929
+23930
+23931
+23932
+23933
+23934
+23935
+23936
+23937
+23938
+23939
+23940
+23941
+23942
+23943
+23944
+23945
+23946
+23947
+23948
+23949
+23950
+23951
+23952
+23953
+23954
+23955
+23956
+23957
+23958
+23959
+23960
+23961
+23962
+23963
+23964
+23965
+23966
+23967
+23968
+23969
+23970
+23971
+23972
+23973
+23974
+23975
+23976
+23977
+23978
+23979
+23980
+23981
+23982
+23983
+23984
+23985
+23986
+23987
+23988
+23989
+23990
+23991
+23992
+23993
+23994
+23995
+23996
+23997
+23998
+23999
+24000
+24001
+24002
+24003
+24004
+24005
+24006
+24007
+24008
+24009
+24010
+24011
+24012
+24013
+24014
+24015
+24016
+24017
+24018
+24019
+24020
+24021
+24022
+24023
+24024
+24025
+24026
+24027
+24028
+24029
+24030
+24031
+24032
+24033
+24034
+24035
+24036
+24037
+24038
+24039
+24040
+24041
+24042
+24043
+24044
+24045
+24046
+24047
+24048
+24049
+24050
+24051
+24052
+24053
+24054
+24055
+24056
+24057
+24058
+24059
+24060
+24061
+24062
+24063
+24064
+24065
+24066
+24067
+24068
+24069
+24070
+24071
+24072
+24073
+24074
+24075
+24076
+24077
+24078
+24079
+24080
+24081
+24082
+24083
+24084
+24085
+24086
+24087
+24088
+24089
+24090
+24091
+24092
+24093
+24094
+24095
+24096
+24097
+24098
+24099
+24100
+24101
+24102
+24103
+24104
+24105
+24106
+24107
+24108
+24109
+24110
+24111
+24112
+24113
+24114
+24115
+24116
+24117
+24118
+24119
+24120
+24121
+24122
+24123
+24124
+24125
+24126
+24127
+24128
+24129
+24130
+24131
+24132
+24133
+24134
+24135
+24136
+24137
+24138
+24139
+24140
+24141
+24142
+24143
+24144
+24145
+24146
+24147
+24148
+24149
+24150
+24151
+24152
+24153
+24154
+24155
+24156
+24157
+24158
+24159
+24160
+24161
+24162
+24163
+24164
+24165
+24166
+24167
+24168
+24169
+24170
+24171
+24172
+24173
+24174
+24175
+24176
+24177
+24178
+24179
+24180
+24181
+24182
+24183
+24184
+24185
+24186
+24187
+24188
+24189
+24190
+24191
+24192
+24193
+24194
+24195
+24196
+24197
+24198
+24199
+24200
+24201
+24202
+24203
+24204
+24205
+24206
+24207
+24208
+24209
+24210
+24211
+24212
+24213
+24214
+24215
+24216
+24217
+24218
+24219
+24220
+24221
+24222
+24223
+24224
+24225
+24226
+24227
+24228
+24229
+24230
+24231
+24232
+24233
+24234
+24235
+24236
+24237
+24238
+24239
+24240
+24241
+24242
+24243
+24244
+24245
+24246
+24247
+24248
+24249
+24250
+24251
+24252
+24253
+24254
+24255
+24256
+24257
+24258
+24259
+24260
+24261
+24262
+24263
+24264
+24265
+24266
+24267
+24268
+24269
+24270
+24271
+24272
+24273
+24274
+24275
+24276
+24277
+24278
+24279
+24280
+24281
+24282
+24283
+24284
+24285
+24286
+24287
+24288
+24289
+24290
+24291
+24292
+24293
+24294
+24295
+24296
+24297
+24298
+24299
+24300
+24301
+24302
+24303
+24304
+24305
+24306
+24307
+24308
+24309
+24310
+24311
+24312
+24313
+24314
+24315
+24316
+24317
+24318
+24319
+24320
+24321
+24322
+24323
+24324
+24325
+24326
+24327
+24328
+24329
+24330
+24331
+24332
+24333
+24334
+24335
+24336
+24337
+24338
+24339
+24340
+24341
+24342
+24343
+24344
+24345
+24346
+24347
+24348
+24349
+24350
+24351
+24352
+24353
+24354
+24355
+24356
+24357
+24358
+24359
+24360
+24361
+24362
+24363
+24364
+24365
+24366
+24367
+24368
+24369
+24370
+24371
+24372
+24373
+24374
+24375
+24376
+24377
+24378
+24379
+24380
+24381
+24382
+24383
+24384
+24385
+24386
+24387
+24388
+24389
+24390
+24391
+24392
+24393
+24394
+24395
+24396
+24397
+24398
+24399
+24400
+24401
+24402
+24403
+24404
+24405
+24406
+24407
+24408
+24409
+24410
+24411
+24412
+24413
+24414
+24415
+24416
+24417
+24418
+24419
+24420
+24421
+24422
+24423
+24424
+24425
+24426
+24427
+24428
+24429
+24430
+24431
+24432
+24433
+24434
+24435
+24436
+24437
+24438
+24439
+24440
+24441
+24442
+24443
+24444
+24445
+24446
+24447
+24448
+24449
+24450
+24451
+24452
+24453
+24454
+24455
+24456
+24457
+24458
+24459
+24460
+24461
+24462
+24463
+24464
+24465
+24466
+24467
+24468
+24469
+24470
+24471
+24472
+24473
+24474
+24475
+24476
+24477
+24478
+24479
+24480
+24481
+24482
+24483
+24484
+24485
+24486
+24487
+24488
+24489
+24490
+24491
+24492
+24493
+24494
+24495
+24496
+24497
+24498
+24499
+24500
+24501
+24502
+24503
+24504
+24505
+24506
+24507
+24508
+24509
+24510
+24511
+24512
+24513
+24514
+24515
+24516
+24517
+24518
+24519
+24520
+24521
+24522
+24523
+24524
+24525
+24526
+24527
+24528
+24529
+24530
+24531
+24532
+24533
+24534
+24535
+24536
+24537
+24538
+24539
+24540
+24541
+24542
+24543
+24544
+24545
+24546
+24547
+24548
+24549
+24550
+24551
+24552
+24553
+24554
+24555
+24556
+24557
+24558
+24559
+24560
+24561
+24562
+24563
+24564
+24565
+24566
+24567
+24568
+24569
+24570
+24571
+24572
+24573
+24574
+24575
+24576
+24577
+24578
+24579
+24580
+24581
+24582
+24583
+24584
+24585
+24586
+24587
+24588
+24589
+24590
+24591
+24592
+24593
+24594
+24595
+24596
+24597
+24598
+24599
+24600
+24601
+24602
+24603
+24604
+24605
+24606
+24607
+24608
+24609
+24610
+24611
+24612
+24613
+24614
+24615
+24616
+24617
+24618
+24619
+24620
+24621
+24622
+24623
+24624
+24625
+24626
+24627
+24628
+24629
+24630
+24631
+24632
+24633
+24634
+24635
+24636
+24637
+24638
+24639
+24640
+24641
+24642
+24643
+24644
+24645
+24646
+24647
+24648
+24649
+24650
+24651
+24652
+24653
+24654
+24655
+24656
+24657
+24658
+24659
+24660
+24661
+24662
+24663
+24664
+24665
+24666
+24667
+24668
+24669
+24670
+24671
+24672
+24673
+24674
+24675
+24676
+24677
+24678
+24679
+24680
+24681
+24682
+24683
+24684
+24685
+24686
+24687
+24688
+24689
+24690
+24691
+24692
+24693
+24694
+24695
+24696
+24697
+24698
+24699
+24700
+24701
+24702
+24703
+24704
+24705
+24706
+24707
+24708
+24709
+24710
+24711
+24712
+24713
+24714
+24715
+24716
+24717
+24718
+24719
+24720
+24721
+24722
+24723
+24724
+24725
+24726
+24727
+24728
+24729
+24730
+24731
+24732
+24733
+24734
+24735
+24736
+24737
+24738
+24739
+24740
+24741
+24742
+24743
+24744
+24745
+24746
+24747
+24748
+24749
+24750
+24751
+24752
+24753
+24754
+24755
+24756
+24757
+24758
+24759
+24760
+24761
+24762
+24763
+24764
+24765
+24766
+24767
+24768
+24769
+24770
+24771
+24772
+24773
+24774
+24775
+24776
+24777
+24778
+24779
+24780
+24781
+24782
+24783
+24784
+24785
+24786
+24787
+24788
+24789
+24790
+24791
+24792
+24793
+24794
+24795
+24796
+24797
+24798
+24799
+24800
+24801
+24802
+24803
+24804
+24805
+24806
+24807
+24808
+24809
+24810
+24811
+24812
+24813
+24814
+24815
+24816
+24817
+24818
+24819
+24820
+24821
+24822
+24823
+24824
+24825
+24826
+24827
+24828
+24829
+24830
+24831
+24832
+24833
+24834
+24835
+24836
+24837
+24838
+24839
+24840
+24841
+24842
+24843
+24844
+24845
+24846
+24847
+24848
+24849
+24850
+24851
+24852
+24853
+24854
+24855
+24856
+24857
+24858
+24859
+24860
+24861
+24862
+24863
+24864
+24865
+24866
+24867
+24868
+24869
+24870
+24871
+24872
+24873
+24874
+24875
+24876
+24877
+24878
+24879
+24880
+24881
+24882
+24883
+24884
+24885
+24886
+24887
+24888
+24889
+24890
+24891
+24892
+24893
+24894
+24895
+24896
+24897
+24898
+24899
+24900
+24901
+24902
+24903
+24904
+24905
+24906
+24907
+24908
+24909
+24910
+24911
+24912
+24913
+24914
+24915
+24916
+24917
+24918
+24919
+24920
+24921
+24922
+24923
+24924
+24925
+24926
+24927
+24928
+24929
+24930
+24931
+24932
+24933
+24934
+24935
+24936
+24937
+24938
+24939
+24940
+24941
+24942
+24943
+24944
+24945
+24946
+24947
+24948
+24949
+24950
+24951
+24952
+24953
+24954
+24955
+24956
+24957
+24958
+24959
+24960
+24961
+24962
+24963
+24964
+24965
+24966
+24967
+24968
+24969
+24970
+24971
+24972
+24973
+24974
+24975
+24976
+24977
+24978
+24979
+24980
+24981
+24982
+24983
+24984
+24985
+24986
+24987
+24988
+24989
+24990
+24991
+24992
+24993
+24994
+24995
+24996
+24997
+24998
+24999
+25000
+25001
+25002
+25003
+25004
+25005
+25006
+25007
+25008
+25009
+25010
+25011
+25012
+25013
+25014
+25015
+25016
+25017
+25018
+25019
+25020
+25021
+25022
+25023
+25024
+25025
+25026
+25027
+25028
+25029
+25030
+25031
+25032
+25033
+25034
+25035
+25036
+25037
+25038
+25039
+25040
+25041
+25042
+25043
+25044
+25045
+25046
+25047
+25048
+25049
+25050
+25051
+25052
+25053
+25054
+25055
+25056
+25057
+25058
+25059
+25060
+25061
+25062
+25063
+25064
+25065
+25066
+25067
+25068
+25069
+25070
+25071
+25072
+25073
+25074
+25075
+25076
+25077
+25078
+25079
+25080
+25081
+25082
+25083
+25084
+25085
+25086
+25087
+25088
+25089
+25090
+25091
+25092
+25093
+25094
+25095
+25096
+25097
+25098
+25099
+25100
+25101
+25102
+25103
+25104
+25105
+25106
+25107
+25108
+25109
+25110
+25111
+25112
+25113
+25114
+25115
+25116
+25117
+25118
+25119
+25120
+25121
+25122
+25123
+25124
+25125
+25126
+25127
+25128
+25129
+25130
+25131
+25132
+25133
+25134
+25135
+25136
+25137
+25138
+25139
+25140
+25141
+25142
+25143
+25144
+25145
+25146
+25147
+25148
+25149
+25150
+25151
+25152
+25153
+25154
+25155
+25156
+25157
+25158
+25159
+25160
+25161
+25162
+25163
+25164
+25165
+25166
+25167
+25168
+25169
+25170
+25171
+25172
+25173
+25174
+25175
+25176
+25177
+25178
+25179
+25180
+25181
+25182
+25183
+25184
+25185
+25186
+25187
+25188
+25189
+25190
+25191
+25192
+25193
+25194
+25195
+25196
+25197
+25198
+25199
+25200
+25201
+25202
+25203
+25204
+25205
+25206
+25207
+25208
+25209
+25210
+25211
+25212
+25213
+25214
+25215
+25216
+25217
+25218
+25219
+25220
+25221
+25222
+25223
+25224
+25225
+25226
+25227
+25228
+25229
+25230
+25231
+25232
+25233
+25234
+25235
+25236
+25237
+25238
+25239
+25240
+25241
+25242
+25243
+25244
+25245
+25246
+25247
+25248
+25249
+25250
+25251
+25252
+25253
+25254
+25255
+25256
+25257
+25258
+25259
+25260
+25261
+25262
+25263
+25264
+25265
+25266
+25267
+25268
+25269
+25270
+25271
+25272
+25273
+25274
+25275
+25276
+25277
+25278
+25279
+25280
+25281
+25282
+25283
+25284
+25285
+25286
+25287
+25288
+25289
+25290
+25291
+25292
+25293
+25294
+25295
+25296
+25297
+25298
+25299
+25300
+25301
+25302
+25303
+25304
+25305
+25306
+25307
+25308
+25309
+25310
+25311
+25312
+25313
+25314
+25315
+25316
+25317
+25318
+25319
+25320
+25321
+25322
+25323
+25324
+25325
+25326
+25327
+25328
+25329
+25330
+25331
+25332
+25333
+25334
+25335
+25336
+25337
+25338
+25339
+25340
+25341
+25342
+25343
+25344
+25345
+25346
+25347
+25348
+25349
+25350
+25351
+25352
+25353
+25354
+25355
+25356
+25357
+25358
+25359
+25360
+25361
+25362
+25363
+25364
+25365
+25366
+25367
+25368
+25369
+25370
+25371
+25372
+25373
+25374
+25375
+25376
+25377
+25378
+25379
+25380
+25381
+25382
+25383
+25384
+25385
+25386
+25387
+25388
+25389
+25390
+25391
+25392
+25393
+25394
+25395
+25396
+25397
+25398
+25399
+25400
+25401
+25402
+25403
+25404
+25405
+25406
+25407
+25408
+25409
+25410
+25411
+25412
+25413
+25414
+25415
+25416
+25417
+25418
+25419
+25420
+25421
+25422
+25423
+25424
+25425
+25426
+25427
+25428
+25429
+25430
+25431
+25432
+25433
+25434
+25435
+25436
+25437
+25438
+25439
+25440
+25441
+25442
+25443
+25444
+25445
+25446
+25447
+25448
+25449
+25450
+25451
+25452
+25453
+25454
+25455
+25456
+25457
+25458
+25459
+25460
+25461
+25462
+25463
+25464
+25465
+25466
+25467
+25468
+25469
+25470
+25471
+25472
+25473
+25474
+25475
+25476
+25477
+25478
+25479
+25480
+25481
+25482
+25483
+25484
+25485
+25486
+25487
+25488
+25489
+25490
+25491
+25492
+25493
+25494
+25495
+25496
+25497
+25498
+25499
+25500
+25501
+25502
+25503
+25504
+25505
+25506
+25507
+25508
+25509
+25510
+25511
+25512
+25513
+25514
+25515
+25516
+25517
+25518
+25519
+25520
+25521
+25522
+25523
+25524
+25525
+25526
+25527
+25528
+25529
+25530
+25531
+25532
+25533
+25534
+25535
+25536
+25537
+25538
+25539
+25540
+25541
+25542
+25543
+25544
+25545
+25546
+25547
+25548
+25549
+25550
+25551
+25552
+25553
+25554
+25555
+25556
+25557
+25558
+25559
+25560
+25561
+25562
+25563
+25564
+25565
+25566
+25567
+25568
+25569
+25570
+25571
+25572
+25573
+25574
+25575
+25576
+25577
+25578
+25579
+25580
+25581
+25582
+25583
+25584
+25585
+25586
+25587
+25588
+25589
+25590
+25591
+25592
+25593
+25594
+25595
+25596
+25597
+25598
+25599
+25600
+25601
+25602
+25603
+25604
+25605
+25606
+25607
+25608
+25609
+25610
+25611
+25612
+25613
+25614
+25615
+25616
+25617
+25618
+25619
+25620
+25621
+25622
+25623
+25624
+25625
+25626
+25627
+25628
+25629
+25630
+25631
+25632
+25633
+25634
+25635
+25636
+25637
+25638
+25639
+25640
+25641
+25642
+25643
+25644
+25645
+25646
+25647
+25648
+25649
+25650
+25651
+25652
+25653
+25654
+25655
+25656
+25657
+25658
+25659
+25660
+25661
+25662
+25663
+25664
+25665
+25666
+25667
+25668
+25669
+25670
+25671
+25672
+25673
+25674
+25675
+25676
+25677
+25678
+25679
+25680
+25681
+25682
+25683
+25684
+25685
+25686
+25687
+25688
+25689
+25690
+25691
+25692
+25693
+25694
+25695
+25696
+25697
+25698
+25699
+25700
+25701
+25702
+25703
+25704
+25705
+25706
+25707
+25708
+25709
+25710
+25711
+25712
+25713
+25714
+25715
+25716
+25717
+25718
+25719
+25720
+25721
+25722
+25723
+25724
+25725
+25726
+25727
+25728
+25729
+25730
+25731
+25732
+25733
+25734
+25735
+25736
+25737
+25738
+25739
+25740
+25741
+25742
+25743
+25744
+25745
+25746
+25747
+25748
+25749
+25750
+25751
+25752
+25753
+25754
+25755
+25756
+25757
+25758
+25759
+25760
+25761
+25762
+25763
+25764
+25765
+25766
+25767
+25768
+25769
+25770
+25771
+25772
+25773
+25774
+25775
+25776
+25777
+25778
+25779
+25780
+25781
+25782
+25783
+25784
+25785
+25786
+25787
+25788
+25789
+25790
+25791
+25792
+25793
+25794
+25795
+25796
+25797
+25798
+25799
+25800
+25801
+25802
+25803
+25804
+25805
+25806
+25807
+25808
+25809
+25810
+25811
+25812
+25813
+25814
+25815
+25816
+25817
+25818
+25819
+25820
+25821
+25822
+25823
+25824
+25825
+25826
+25827
+25828
+25829
+25830
+25831
+25832
+25833
+25834
+25835
+25836
+25837
+25838
+25839
+25840
+25841
+25842
+25843
+25844
+25845
+25846
+25847
+25848
+25849
+25850
+25851
+25852
+25853
+25854
+25855
+25856
+25857
+25858
+25859
+25860
+25861
+25862
+25863
+25864
+25865
+25866
+25867
+25868
+25869
+25870
+25871
+25872
+25873
+25874
+25875
+25876
+25877
+25878
+25879
+25880
+25881
+25882
+25883
+25884
+25885
+25886
+25887
+25888
+25889
+25890
+25891
+25892
+25893
+25894
+25895
+25896
+25897
+25898
+25899
+25900
+25901
+25902
+25903
+25904
+25905
+25906
+25907
+25908
+25909
+25910
+25911
+25912
+25913
+25914
+25915
+25916
+25917
+25918
+25919
+25920
+25921
+25922
+25923
+25924
+25925
+25926
+25927
+25928
+25929
+25930
+25931
+25932
+25933
+25934
+25935
+25936
+25937
+25938
+25939
+25940
+25941
+25942
+25943
+25944
+25945
+25946
+25947
+25948
+25949
+25950
+25951
+25952
+25953
+25954
+25955
+25956
+25957
+25958
+25959
+25960
+25961
+25962
+25963
+25964
+25965
+25966
+25967
+25968
+25969
+25970
+25971
+25972
+25973
+25974
+25975
+25976
+25977
+25978
+25979
+25980
+25981
+25982
+25983
+25984
+25985
+25986
+25987
+25988
+25989
+25990
+25991
+25992
+25993
+25994
+25995
+25996
+25997
+25998
+25999
+26000
+26001
+26002
+26003
+26004
+26005
+26006
+26007
+26008
+26009
+26010
+26011
+26012
+26013
+26014
+26015
+26016
+26017
+26018
+26019
+26020
+26021
+26022
+26023
+26024
+26025
+26026
+26027
+26028
+26029
+26030
+26031
+26032
+26033
+26034
+26035
+26036
+26037
+26038
+26039
+26040
+26041
+26042
+26043
+26044
+26045
+26046
+26047
+26048
+26049
+26050
+26051
+26052
+26053
+26054
+26055
+26056
+26057
+26058
+26059
+26060
+26061
+26062
+26063
+26064
+26065
+26066
+26067
+26068
+26069
+26070
+26071
+26072
+26073
+26074
+26075
+26076
+26077
+26078
+26079
+26080
+26081
+26082
+26083
+26084
+26085
+26086
+26087
+26088
+26089
+26090
+26091
+26092
+26093
+26094
+26095
+26096
+26097
+26098
+26099
+26100
+26101
+26102
+26103
+26104
+26105
+26106
+26107
+26108
+26109
+26110
+26111
+26112
+26113
+26114
+26115
+26116
+26117
+26118
+26119
+26120
+26121
+26122
+26123
+26124
+26125
+26126
+26127
+26128
+26129
+26130
+26131
+26132
+26133
+26134
+26135
+26136
+26137
+26138
+26139
+26140
+26141
+26142
+26143
+26144
+26145
+26146
+26147
+26148
+26149
+26150
+26151
+26152
+26153
+26154
+26155
+26156
+26157
+26158
+26159
+26160
+26161
+26162
+26163
+26164
+26165
+26166
+26167
+26168
+26169
+26170
+26171
+26172
+26173
+26174
+26175
+26176
+26177
+26178
+26179
+26180
+26181
+26182
+26183
+26184
+26185
+26186
+26187
+26188
+26189
+26190
+26191
+26192
+26193
+26194
+26195
+26196
+26197
+26198
+26199
+26200
+26201
+26202
+26203
+26204
+26205
+26206
+26207
+26208
+26209
+26210
+26211
+26212
+26213
+26214
+26215
+26216
+26217
+26218
+26219
+26220
+26221
+26222
+26223
+26224
+26225
+26226
+26227
+26228
+26229
+26230
+26231
+26232
+26233
+26234
+26235
+26236
+26237
+26238
+26239
+26240
+26241
+26242
+26243
+26244
+26245
+26246
+26247
+26248
+26249
+26250
+26251
+26252
+26253
+26254
+26255
+26256
+26257
+26258
+26259
+26260
+26261
+26262
+26263
+26264
+26265
+26266
+26267
+26268
+26269
+26270
+26271
+26272
+26273
+26274
+26275
+26276
+26277
+26278
+26279
+26280
+26281
+26282
+26283
+26284
+26285
+26286
+26287
+26288
+26289
+26290
+26291
+26292
+26293
+26294
+26295
+26296
+26297
+26298
+26299
+26300
+26301
+26302
+26303
+26304
+26305
+26306
+26307
+26308
+26309
+26310
+26311
+26312
+26313
+26314
+26315
+26316
+26317
+26318
+26319
+26320
+26321
+26322
+26323
+26324
+26325
+26326
+26327
+26328
+26329
+26330
+26331
+26332
+26333
+26334
+26335
+26336
+26337
+26338
+26339
+26340
+26341
+26342
+26343
+26344
+26345
+26346
+26347
+26348
+26349
+26350
+26351
+26352
+26353
+26354
+26355
+26356
+26357
+26358
+26359
+26360
+26361
+26362
+26363
+26364
+26365
+26366
+26367
+26368
+26369
+26370
+26371
+26372
+26373
+26374
+26375
+26376
+26377
+26378
+26379
+26380
+26381
+26382
+26383
+26384
+26385
+26386
+26387
+26388
+26389
+26390
+26391
+26392
+26393
+26394
+26395
+26396
+26397
+26398
+26399
+26400
+26401
+26402
+26403
+26404
+26405
+26406
+26407
+26408
+26409
+26410
+26411
+26412
+26413
+26414
+26415
+26416
+26417
+26418
+26419
+26420
+26421
+26422
+26423
+26424
+26425
+26426
+26427
+26428
+26429
+26430
+26431
+26432
+26433
+26434
+26435
+26436
+26437
+26438
+26439
+26440
+26441
+26442
+26443
+26444
+26445
+26446
+26447
+26448
+26449
+26450
+26451
+26452
+26453
+26454
+26455
+26456
+26457
+26458
+26459
+26460
+26461
+26462
+26463
+26464
+26465
+26466
+26467
+26468
+26469
+26470
+26471
+26472
+26473
+26474
+26475
+26476
+26477
+26478
+26479
+26480
+26481
+26482
+26483
+26484
+26485
+26486
+26487
+26488
+26489
+26490
+26491
+26492
+26493
+26494
+26495
+26496
+26497
+26498
+26499
+26500
+26501
+26502
+26503
+26504
+26505
+26506
+26507
+26508
+26509
+26510
+26511
+26512
+26513
+26514
+26515
+26516
+26517
+26518
+26519
+26520
+26521
+26522
+26523
+26524
+26525
+26526
+26527
+26528
+26529
+26530
+26531
+26532
+26533
+26534
+26535
+26536
+26537
+26538
+26539
+26540
+26541
+26542
+26543
+26544
+26545
+26546
+26547
+26548
+26549
+26550
+26551
+26552
+26553
+26554
+26555
+26556
+26557
+26558
+26559
+26560
+26561
+26562
+26563
+26564
+26565
+26566
+26567
+26568
+26569
+26570
+26571
+26572
+26573
+26574
+26575
+26576
+26577
+26578
+26579
+26580
+26581
+26582
+26583
+26584
+26585
+26586
+26587
+26588
+26589
+26590
+26591
+26592
+26593
+26594
+26595
+26596
+26597
+26598
+26599
+26600
+26601
+26602
+26603
+26604
+26605
+26606
+26607
+26608
+26609
+26610
+26611
+26612
+26613
+26614
+26615
+26616
+26617
+26618
+26619
+26620
+26621
+26622
+26623
+26624
+26625
+26626
+26627
+26628
+26629
+26630
+26631
+26632
+26633
+26634
+26635
+26636
+26637
+26638
+26639
+26640
+26641
+26642
+26643
+26644
+26645
+26646
+26647
+26648
+26649
+26650
+26651
+26652
+26653
+26654
+26655
+26656
+26657
+26658
+26659
+26660
+26661
+26662
+26663
+26664
+26665
+26666
+26667
+26668
+26669
+26670
+26671
+26672
+26673
+26674
+26675
+26676
+26677
+26678
+26679
+26680
+26681
+26682
+26683
+26684
+26685
+26686
+26687
+26688
+26689
+26690
+26691
+26692
+26693
+26694
+26695
+26696
+26697
+26698
+26699
+26700
+26701
+26702
+26703
+26704
+26705
+26706
+26707
+26708
+26709
+26710
+26711
+26712
+26713
+26714
+26715
+26716
+26717
+26718
+26719
+26720
+26721
+26722
+26723
+26724
+26725
+26726
+26727
+26728
+26729
+26730
+26731
+26732
+26733
+26734
+26735
+26736
+26737
+26738
+26739
+26740
+26741
+26742
+26743
+26744
+26745
+26746
+26747
+26748
+26749
+26750
+26751
+26752
+26753
+26754
+26755
+26756
+26757
+26758
+26759
+26760
+26761
+26762
+26763
+26764
+26765
+26766
+26767
+26768
+26769
+26770
+26771
+26772
+26773
+26774
+26775
+26776
+26777
+26778
+26779
+26780
+26781
+26782
+26783
+26784
+26785
+26786
+26787
+26788
+26789
+26790
+26791
+26792
+26793
+26794
+26795
+26796
+26797
+26798
+26799
+26800
+26801
+26802
+26803
+26804
+26805
+26806
+26807
+26808
+26809
+26810
+26811
+26812
+26813
+26814
+26815
+26816
+26817
+26818
+26819
+26820
+26821
+26822
+26823
+26824
+26825
+26826
+26827
+26828
+26829
+26830
+26831
+26832
+26833
+26834
+26835
+26836
+26837
+26838
+26839
+26840
+26841
+26842
+26843
+26844
+26845
+26846
+26847
+26848
+26849
+26850
+26851
+26852
+26853
+26854
+26855
+26856
+26857
+26858
+26859
+26860
+26861
+26862
+26863
+26864
+26865
+26866
+26867
+26868
+26869
+26870
+26871
+26872
+26873
+26874
+26875
+26876
+26877
+26878
+26879
+26880
+26881
+26882
+26883
+26884
+26885
+26886
+26887
+26888
+26889
+26890
+26891
+26892
+26893
+26894
+26895
+26896
+26897
+26898
+26899
+26900
+26901
+26902
+26903
+26904
+26905
+26906
+26907
+26908
+26909
+26910
+26911
+26912
+26913
+26914
+26915
+26916
+26917
+26918
+26919
+26920
+26921
+26922
+26923
+26924
+26925
+26926
+26927
+26928
+26929
+26930
+26931
+26932
+26933
+26934
+26935
+26936
+26937
+26938
+26939
+26940
+26941
+26942
+26943
+26944
+26945
+26946
+26947
+26948
+26949
+26950
+26951
+26952
+26953
+26954
+26955
+26956
+26957
+26958
+26959
+26960
+26961
+26962
+26963
+26964
+26965
+26966
+26967
+26968
+26969
+26970
+26971
+26972
+26973
+26974
+26975
+26976
+26977
+26978
+26979
+26980
+26981
+26982
+26983
+26984
+26985
+26986
+26987
+26988
+26989
+26990
+26991
+26992
+26993
+26994
+26995
+26996
+26997
+26998
+26999
+27000
+27001
+27002
+27003
+27004
+27005
+27006
+27007
+27008
+27009
+27010
+27011
+27012
+27013
+27014
+27015
+27016
+27017
+27018
+27019
+27020
+27021
+27022
+27023
+27024
+27025
+27026
+27027
+27028
+27029
+27030
+27031
+27032
+27033
+27034
+27035
+27036
+27037
+27038
+27039
+27040
+27041
+27042
+27043
+27044
+27045
+27046
+27047
+27048
+27049
+27050
+27051
+27052
+27053
+27054
+27055
+27056
+27057
+27058
+27059
+27060
+27061
+27062
+27063
+27064
+27065
+27066
+27067
+27068
+27069
+27070
+27071
+27072
+27073
+27074
+27075
+27076
+27077
+27078
+27079
+27080
+27081
+27082
+27083
+27084
+27085
+27086
+27087
+27088
+27089
+27090
+27091
+27092
+27093
+27094
+27095
+27096
+27097
+27098
+27099
+27100
+27101
+27102
+27103
+27104
+27105
+27106
+27107
+27108
+27109
+27110
+27111
+27112
+27113
+27114
+27115
+27116
+27117
+27118
+27119
+27120
+27121
+27122
+27123
+27124
+27125
+27126
+27127
+27128
+27129
+27130
+27131
+27132
+27133
+27134
+27135
+27136
+27137
+27138
+27139
+27140
+27141
+27142
+27143
+27144
+27145
+27146
+27147
+27148
+27149
+27150
+27151
+27152
+27153
+27154
+27155
+27156
+27157
+27158
+27159
+27160
+27161
+27162
+27163
+27164
+27165
+27166
+27167
+27168
+27169
+27170
+27171
+27172
+27173
+27174
+27175
+27176
+27177
+27178
+27179
+27180
+27181
+27182
+27183
+27184
+27185
+27186
+27187
+27188
+27189
+27190
+27191
+27192
+27193
+27194
+27195
+27196
+27197
+27198
+27199
+27200
+27201
+27202
+27203
+27204
+27205
+27206
+27207
+27208
+27209
+27210
+27211
+27212
+27213
+27214
+27215
+27216
+27217
+27218
+27219
+27220
+27221
+27222
+27223
+27224
+27225
+27226
+27227
+27228
+27229
+27230
+27231
+27232
+27233
+27234
+27235
+27236
+27237
+27238
+27239
+27240
+27241
+27242
+27243
+27244
+27245
+27246
+27247
+27248
+27249
+27250
+27251
+27252
+27253
+27254
+27255
+27256
+27257
+27258
+27259
+27260
+27261
+27262
+27263
+27264
+27265
+27266
+27267
+27268
+27269
+27270
+27271
+27272
+27273
+27274
+27275
+27276
+27277
+27278
+27279
+27280
+27281
+27282
+27283
+27284
+27285
+27286
+27287
+27288
+27289
+27290
+27291
+27292
+27293
+27294
+27295
+27296
+27297
+27298
+27299
+27300
+27301
+27302
+27303
+27304
+27305
+27306
+27307
+27308
+27309
+27310
+27311
+27312
+27313
+27314
+27315
+27316
+27317
+27318
+27319
+27320
+27321
+27322
+27323
+27324
+27325
+27326
+27327
+27328
+27329
+27330
+27331
+27332
+27333
+27334
+27335
+27336
+27337
+27338
+27339
+27340
+27341
+27342
+27343
+27344
+27345
+27346
+27347
+27348
+27349
+27350
+27351
+27352
+27353
+27354
+27355
+27356
+27357
+27358
+27359
+27360
+27361
+27362
+27363
+27364
+27365
+27366
+27367
+27368
+27369
+27370
+27371
+27372
+27373
+27374
+27375
+27376
+27377
+27378
+27379
+27380
+27381
+27382
+27383
+27384
+27385
+27386
+27387
+27388
+27389
+27390
+27391
+27392
+27393
+27394
+27395
+27396
+27397
+27398
+27399
+27400
+27401
+27402
+27403
+27404
+27405
+27406
+27407
+27408
+27409
+27410
+27411
+27412
+27413
+27414
+27415
+27416
+27417
+27418
+27419
+27420
+27421
+27422
+27423
+27424
+27425
+27426
+27427
+27428
+27429
+27430
+27431
+27432
+27433
+27434
+27435
+27436
+27437
+27438
+27439
+27440
+27441
+27442
+27443
+27444
+27445
+27446
+27447
+27448
+27449
+27450
+27451
+27452
+27453
+27454
+27455
+27456
+27457
+27458
+27459
+27460
+27461
+27462
+27463
+27464
+27465
+27466
+27467
+27468
+27469
+27470
+27471
+27472
+27473
+27474
+27475
+27476
+27477
+27478
+27479
+27480
+27481
+27482
+27483
+27484
+27485
+27486
+27487
+27488
+27489
+27490
+27491
+27492
+27493
+27494
+27495
+27496
+27497
+27498
+27499
+27500
+27501
+27502
+27503
+27504
+27505
+27506
+27507
+27508
+27509
+27510
+27511
+27512
+27513
+27514
+27515
+27516
+27517
+27518
+27519
+27520
+27521
+27522
+27523
+27524
+27525
+27526
+27527
+27528
+27529
+27530
+27531
+27532
+27533
+27534
+27535
+27536
+27537
+27538
+27539
+27540
+27541
+27542
+27543
+27544
+27545
+27546
+27547
+27548
+27549
+27550
+27551
+27552
+27553
+27554
+27555
+27556
+27557
+27558
+27559
+27560
+27561
+27562
+27563
+27564
+27565
+27566
+27567
+27568
+27569
+27570
+27571
+27572
+27573
+27574
+27575
+27576
+27577
+27578
+27579
+27580
+27581
+27582
+27583
+27584
+27585
+27586
+27587
+27588
+27589
+27590
+27591
+27592
+27593
+27594
+27595
+27596
+27597
+27598
+27599
+27600
+27601
+27602
+27603
+27604
+27605
+27606
+27607
+27608
+27609
+27610
+27611
+27612
+27613
+27614
+27615
+27616
+27617
+27618
+27619
+27620
+27621
+27622
+27623
+27624
+27625
+27626
+27627
+27628
+27629
+27630
+27631
+27632
+27633
+27634
+27635
+27636
+27637
+27638
+27639
+27640
+27641
+27642
+27643
+27644
+27645
+27646
+27647
+27648
+27649
+27650
+27651
+27652
+27653
+27654
+27655
+27656
+27657
+27658
+27659
+27660
+27661
+27662
+27663
+27664
+27665
+27666
+27667
+27668
+27669
+27670
+27671
+27672
+27673
+27674
+27675
+27676
+27677
+27678
+27679
+27680
+27681
+27682
+27683
+27684
+27685
+27686
+27687
+27688
+27689
+27690
+27691
+27692
+27693
+27694
+27695
+27696
+27697
+27698
+27699
+27700
+27701
+27702
+27703
+27704
+27705
+27706
+27707
+27708
+27709
+27710
+27711
+27712
+27713
+27714
+27715
+27716
+27717
+27718
+27719
+27720
+27721
+27722
+27723
+27724
+27725
+27726
+27727
+27728
+27729
+27730
+27731
+27732
+27733
+27734
+27735
+27736
+27737
+27738
+27739
+27740
+27741
+27742
+27743
+27744
+27745
+27746
+27747
+27748
+27749
+27750
+27751
+27752
+27753
+27754
+27755
+27756
+27757
+27758
+27759
+27760
+27761
+27762
+27763
+27764
+27765
+27766
+27767
+27768
+27769
+27770
+27771
+27772
+27773
+27774
+27775
+27776
+27777
+27778
+27779
+27780
+27781
+27782
+27783
+27784
+27785
+27786
+27787
+27788
+27789
+27790
+27791
+27792
+27793
+27794
+27795
+27796
+27797
+27798
+27799
+27800
+27801
+27802
+27803
+27804
+27805
+27806
+27807
+27808
+27809
+27810
+27811
+27812
+27813
+27814
+27815
+27816
+27817
+27818
+27819
+27820
+27821
+27822
+27823
+27824
+27825
+27826
+27827
+27828
+27829
+27830
+27831
+27832
+27833
+27834
+27835
+27836
+27837
+27838
+27839
+27840
+27841
+27842
+27843
+27844
+27845
+27846
+27847
+27848
+27849
+27850
+27851
+27852
+27853
+27854
+27855
+27856
+27857
+27858
+27859
+27860
+27861
+27862
+27863
+27864
+27865
+27866
+27867
+27868
+27869
+27870
+27871
+27872
+27873
+27874
+27875
+27876
+27877
+27878
+27879
+27880
+27881
+27882
+27883
+27884
+27885
+27886
+27887
+27888
+27889
+27890
+27891
+27892
+27893
+27894
+27895
+27896
+27897
+27898
+27899
+27900
+27901
+27902
+27903
+27904
+27905
+27906
+27907
+27908
+27909
+27910
+27911
+27912
+27913
+27914
+27915
+27916
+27917
+27918
+27919
+27920
+27921
+27922
+27923
+27924
+27925
+27926
+27927
+27928
+27929
+27930
+27931
+27932
+27933
+27934
+27935
+27936
+27937
+27938
+27939
+27940
+27941
+27942
+27943
+27944
+27945
+27946
+27947
+27948
+27949
+27950
+27951
+27952
+27953
+27954
+27955
+27956
+27957
+27958
+27959
+27960
+27961
+27962
+27963
+27964
+27965
+27966
+27967
+27968
+27969
+27970
+27971
+27972
+27973
+27974
+27975
+27976
+27977
+27978
+27979
+27980
+27981
+27982
+27983
+27984
+27985
+27986
+27987
+27988
+27989
+27990
+27991
+27992
+27993
+27994
+27995
+27996
+27997
+27998
+27999
+28000
+28001
+28002
+28003
+28004
+28005
+28006
+28007
+28008
+28009
+28010
+28011
+28012
+28013
+28014
+28015
+28016
+28017
+28018
+28019
+28020
+28021
+28022
+28023
+28024
+28025
+28026
+28027
+28028
+28029
+28030
+28031
+28032
+28033
+28034
+28035
+28036
+28037
+28038
+28039
+28040
+28041
+28042
+28043
+28044
+28045
+28046
+28047
+28048
+28049
+28050
+28051
+28052
+28053
+28054
+28055
+28056
+28057
+28058
+28059
+28060
+28061
+28062
+28063
+28064
+28065
+28066
+28067
+28068
+28069
+28070
+28071
+28072
+28073
+28074
+28075
+28076
+28077
+28078
+28079
+28080
+28081
+28082
+28083
+28084
+28085
+28086
+28087
+28088
+28089
+28090
+28091
+28092
+28093
+28094
+28095
+28096
+28097
+28098
+28099
+28100
+28101
+28102
+28103
+28104
+28105
+28106
+28107
+28108
+28109
+28110
+28111
+28112
+28113
+28114
+28115
+28116
+28117
+28118
+28119
+28120
+28121
+28122
+28123
+28124
+28125
+28126
+28127
+28128
+28129
+28130
+28131
+28132
+28133
+28134
+28135
+28136
+28137
+28138
+28139
+28140
+28141
+28142
+28143
+28144
+28145
+28146
+28147
+28148
+28149
+28150
+28151
+28152
+28153
+28154
+28155
+28156
+28157
+28158
+28159
+28160
+28161
+28162
+28163
+28164
+28165
+28166
+28167
+28168
+28169
+28170
+28171
+28172
+28173
+28174
+28175
+28176
+28177
+28178
+28179
+28180
+28181
+28182
+28183
+28184
+28185
+28186
+28187
+28188
+28189
+28190
+28191
+28192
+28193
+28194
+28195
+28196
+28197
+28198
+28199
+28200
+28201
+28202
+28203
+28204
+28205
+28206
+28207
+28208
+28209
+28210
+28211
+28212
+28213
+28214
+28215
+28216
+28217
+28218
+28219
+28220
+28221
+28222
+28223
+28224
+28225
+28226
+28227
+28228
+28229
+28230
+28231
+28232
+28233
+28234
+28235
+28236
+28237
+28238
+28239
+28240
+28241
+28242
+28243
+28244
+28245
+28246
+28247
+28248
+28249
+28250
+28251
+28252
+28253
+28254
+28255
+28256
+28257
+28258
+28259
+28260
+28261
+28262
+28263
+28264
+28265
+28266
+28267
+28268
+28269
+28270
+28271
+28272
+28273
+28274
+28275
+28276
+28277
+28278
+28279
+28280
+28281
+28282
+28283
+28284
+28285
+28286
+28287
+28288
+28289
+28290
+28291
+28292
+28293
+28294
+28295
+28296
+28297
+28298
+28299
+28300
+28301
+28302
+28303
+28304
+28305
+28306
+28307
+28308
+28309
+28310
+28311
+28312
+28313
+28314
+28315
+28316
+28317
+28318
+28319
+28320
+28321
+28322
+28323
+28324
+28325
+28326
+28327
+28328
+28329
+28330
+28331
+28332
+28333
+28334
+28335
+28336
+28337
+28338
+28339
+28340
+28341
+28342
+28343
+28344
+28345
+28346
+28347
+28348
+28349
+28350
+28351
+28352
+28353
+28354
+28355
+28356
+28357
+28358
+28359
+28360
+28361
+28362
+28363
+28364
+28365
+28366
+28367
+28368
+28369
+28370
+28371
+28372
+28373
+28374
+28375
+28376
+28377
+28378
+28379
+28380
+28381
+28382
+28383
+28384
+28385
+28386
+28387
+28388
+28389
+28390
+28391
+28392
+28393
+28394
+28395
+28396
+28397
+28398
+28399
+28400
+28401
+28402
+28403
+28404
+28405
+28406
+28407
+28408
+28409
+28410
+28411
+28412
+28413
+28414
+28415
+28416
+28417
+28418
+28419
+28420
+28421
+28422
+28423
+28424
+28425
+28426
+28427
+28428
+28429
+28430
+28431
+28432
+28433
+28434
+28435
+28436
+28437
+28438
+28439
+28440
+28441
+28442
+28443
+28444
+28445
+28446
+28447
+28448
+28449
+28450
+28451
+28452
+28453
+28454
+28455
+28456
+28457
+28458
+28459
+28460
+28461
+28462
+28463
+28464
+28465
+28466
+28467
+28468
+28469
+28470
+28471
+28472
+28473
+28474
+28475
+28476
+28477
+28478
+28479
+28480
+28481
+28482
+28483
+28484
+28485
+28486
+28487
+28488
+28489
+28490
+28491
+28492
+28493
+28494
+28495
+28496
+28497
+28498
+28499
+28500
+28501
+28502
+28503
+28504
+28505
+28506
+28507
+28508
+28509
+28510
+28511
+28512
+28513
+28514
+28515
+28516
+28517
+28518
+28519
+28520
+28521
+28522
+28523
+28524
+28525
+28526
+28527
+28528
+28529
+28530
+28531
+28532
+28533
+28534
+28535
+28536
+28537
+28538
+28539
+28540
+28541
+28542
+28543
+28544
+28545
+28546
+28547
+28548
+28549
+28550
+28551
+28552
+28553
+28554
+28555
+28556
+28557
+28558
+28559
+28560
+28561
+28562
+28563
+28564
+28565
+28566
+28567
+28568
+28569
+28570
+28571
+28572
+28573
+28574
+28575
+28576
+28577
+28578
+28579
+28580
+28581
+28582
+28583
+28584
+28585
+28586
+28587
+28588
+28589
+28590
+28591
+28592
+28593
+28594
+28595
+28596
+28597
+28598
+28599
+28600
+28601
+28602
+28603
+28604
+28605
+28606
+28607
+28608
+28609
+28610
+28611
+28612
+28613
+28614
+28615
+28616
+28617
+28618
+28619
+28620
+28621
+28622
+28623
+28624
+28625
+28626
+28627
+28628
+28629
+28630
+28631
+28632
+28633
+28634
+28635
+28636
+28637
+28638
+28639
+28640
+28641
+28642
+28643
+28644
+28645
+28646
+28647
+28648
+28649
+28650
+28651
+28652
+28653
+28654
+28655
+28656
+28657
+28658
+28659
+28660
+28661
+28662
+28663
+28664
+28665
+28666
+28667
+28668
+28669
+28670
+28671
+28672
+28673
+28674
+28675
+28676
+28677
+28678
+28679
+28680
+28681
+28682
+28683
+28684
+28685
+28686
+28687
+28688
+28689
+28690
+28691
+28692
+28693
+28694
+28695
+28696
+28697
+28698
+28699
+28700
+28701
+28702
+28703
+28704
+28705
+28706
+28707
+28708
+28709
+28710
+28711
+28712
+28713
+28714
+28715
+28716
+28717
+28718
+28719
+28720
+28721
+28722
+28723
+28724
+28725
+28726
+28727
+28728
+28729
+28730
+28731
+28732
+28733
+28734
+28735
+28736
+28737
+28738
+28739
+28740
+28741
+28742
+28743
+28744
+28745
+28746
+28747
+28748
+28749
+28750
+28751
+28752
+28753
+28754
+28755
+28756
+28757
+28758
+28759
+28760
+28761
+28762
+28763
+28764
+28765
+28766
+28767
+28768
+28769
+28770
+28771
+28772
+28773
+28774
+28775
+28776
+28777
+28778
+28779
+28780
+28781
+28782
+28783
+28784
+28785
+28786
+28787
+28788
+28789
+28790
+28791
+28792
+28793
+28794
+28795
+28796
+28797
+28798
+28799
+28800
+28801
+28802
+28803
+28804
+28805
+28806
+28807
+28808
+28809
+28810
+28811
+28812
+28813
+28814
+28815
+28816
+28817
+28818
+28819
+28820
+28821
+28822
+28823
+28824
+28825
+28826
+28827
+28828
+28829
+28830
+28831
+28832
+28833
+28834
+28835
+28836
+28837
+28838
+28839
+28840
+28841
+28842
+28843
+28844
+28845
+28846
+28847
+28848
+28849
+28850
+28851
+28852
+28853
+28854
+28855
+28856
+28857
+28858
+28859
+28860
+28861
+28862
+28863
+28864
+28865
+28866
+28867
+28868
+28869
+28870
+28871
+28872
+28873
+28874
+28875
+28876
+28877
+28878
+28879
+28880
+28881
+28882
+28883
+28884
+28885
+28886
+28887
+28888
+28889
+28890
+28891
+28892
+28893
+28894
+28895
+28896
+28897
+28898
+28899
+28900
+28901
+28902
+28903
+28904
+28905
+28906
+28907
+28908
+28909
+28910
+28911
+28912
+28913
+28914
+28915
+28916
+28917
+28918
+28919
+28920
+28921
+28922
+28923
+28924
+28925
+28926
+28927
+28928
+28929
+28930
+28931
+28932
+28933
+28934
+28935
+28936
+28937
+28938
+28939
+28940
+28941
+28942
+28943
+28944
+28945
+28946
+28947
+28948
+28949
+28950
+28951
+28952
+28953
+28954
+28955
+28956
+28957
+28958
+28959
+28960
+28961
+28962
+28963
+28964
+28965
+28966
+28967
+28968
+28969
+28970
+28971
+28972
+28973
+28974
+28975
+28976
+28977
+28978
+28979
+28980
+28981
+28982
+28983
+28984
+28985
+28986
+28987
+28988
+28989
+28990
+28991
+28992
+28993
+28994
+28995
+28996
+28997
+28998
+28999
+29000
+29001
+29002
+29003
+29004
+29005
+29006
+29007
+29008
+29009
+29010
+29011
+29012
+29013
+29014
+29015
+29016
+29017
+29018
+29019
+29020
+29021
+29022
+29023
+29024
+29025
+29026
+29027
+29028
+29029
+29030
+29031
+29032
+29033
+29034
+29035
+29036
+29037
+29038
+29039
+29040
+29041
+29042
+29043
+29044
+29045
+29046
+29047
+29048
+29049
+29050
+29051
+29052
+29053
+29054
+29055
+29056
+29057
+29058
+29059
+29060
+29061
+29062
+29063
+29064
+29065
+29066
+29067
+29068
+29069
+29070
+29071
+29072
+29073
+29074
+29075
+29076
+29077
+29078
+29079
+29080
+29081
+29082
+29083
+29084
+29085
+29086
+29087
+29088
+29089
+29090
+29091
+29092
+29093
+29094
+29095
+29096
+29097
+29098
+29099
+29100
+29101
+29102
+29103
+29104
+29105
+29106
+29107
+29108
+29109
+29110
+29111
+29112
+29113
+29114
+29115
+29116
+29117
+29118
+29119
+29120
+29121
+29122
+29123
+29124
+29125
+29126
+29127
+29128
+29129
+29130
+29131
+29132
+29133
+29134
+29135
+29136
+29137
+29138
+29139
+29140
+29141
+29142
+29143
+29144
+29145
+29146
+29147
+29148
+29149
+29150
+29151
+29152
+29153
+29154
+29155
+29156
+29157
+29158
+29159
+29160
+29161
+29162
+29163
+29164
+29165
+29166
+29167
+29168
+29169
+29170
+29171
+29172
+29173
+29174
+29175
+29176
+29177
+29178
+29179
+29180
+29181
+29182
+29183
+29184
+29185
+29186
+29187
+29188
+29189
+29190
+29191
+29192
+29193
+29194
+29195
+29196
+29197
+29198
+29199
+29200
+29201
+29202
+29203
+29204
+29205
+29206
+29207
+29208
+29209
+29210
+29211
+29212
+29213
+29214
+29215
+29216
+29217
+29218
+29219
+29220
+29221
+29222
+29223
+29224
+29225
+29226
+29227
+29228
+29229
+29230
+29231
+29232
+29233
+29234
+29235
+29236
+29237
+29238
+29239
+29240
+29241
+29242
+29243
+29244
+29245
+29246
+29247
+29248
+29249
+29250
+29251
+29252
+29253
+29254
+29255
+29256
+29257
+29258
+29259
+29260
+29261
+29262
+29263
+29264
+29265
+29266
+29267
+29268
+29269
+29270
+29271
+29272
+29273
+29274
+29275
+29276
+29277
+29278
+29279
+29280
+29281
+29282
+29283
+29284
+29285
+29286
+29287
+29288
+29289
+29290
+29291
+29292
+29293
+29294
+29295
+29296
+29297
+29298
+29299
+29300
+29301
+29302
+29303
+29304
+29305
+29306
+29307
+29308
+29309
+29310
+29311
+29312
+29313
+29314
+29315
+29316
+29317
+29318
+29319
+29320
+29321
+29322
+29323
+29324
+29325
+29326
+29327
+29328
+29329
+29330
+29331
+29332
+29333
+29334
+29335
+29336
+29337
+29338
+29339
+29340
+29341
+29342
+29343
+29344
+29345
+29346
+29347
+29348
+29349
+29350
+29351
+29352
+29353
+29354
+29355
+29356
+29357
+29358
+29359
+29360
+29361
+29362
+29363
+29364
+29365
+29366
+29367
+29368
+29369
+29370
+29371
+29372
+29373
+29374
+29375
+29376
+29377
+29378
+29379
+29380
+29381
+29382
+29383
+29384
+29385
+29386
+29387
+29388
+29389
+29390
+29391
+29392
+29393
+29394
+29395
+29396
+29397
+29398
+29399
+29400
+29401
+29402
+29403
+29404
+29405
+29406
+29407
+29408
+29409
+29410
+29411
+29412
+29413
+29414
+29415
+29416
+29417
+29418
+29419
+29420
+29421
+29422
+29423
+29424
+29425
+29426
+29427
+29428
+29429
+29430
+29431
+29432
+29433
+29434
+29435
+29436
+29437
+29438
+29439
+29440
+29441
+29442
+29443
+29444
+29445
+29446
+29447
+29448
+29449
+29450
+29451
+29452
+29453
+29454
+29455
+29456
+29457
+29458
+29459
+29460
+29461
+29462
+29463
+29464
+29465
+29466
+29467
+29468
+29469
+29470
+29471
+29472
+29473
+29474
+29475
+29476
+29477
+29478
+29479
+29480
+29481
+29482
+29483
+29484
+29485
+29486
+29487
+29488
+29489
+29490
+29491
+29492
+29493
+29494
+29495
+29496
+29497
+29498
+29499
+29500
+29501
+29502
+29503
+29504
+29505
+29506
+29507
+29508
+29509
+29510
+29511
+29512
+29513
+29514
+29515
+29516
+29517
+29518
+29519
+29520
+29521
+29522
+29523
+29524
+29525
+29526
+29527
+29528
+29529
+29530
+29531
+29532
+29533
+29534
+29535
+29536
+29537
+29538
+29539
+29540
+29541
+29542
+29543
+29544
+29545
+29546
+29547
+29548
+29549
+29550
+29551
+29552
+29553
+29554
+29555
+29556
+29557
+29558
+29559
+29560
+29561
+29562
+29563
+29564
+29565
+29566
+29567
+29568
+29569
+29570
+29571
+29572
+29573
+29574
+29575
+29576
+29577
+29578
+29579
+29580
+29581
+29582
+29583
+29584
+29585
+29586
+29587
+29588
+29589
+29590
+29591
+29592
+29593
+29594
+29595
+29596
+29597
+29598
+29599
+29600
+29601
+29602
+29603
+29604
+29605
+29606
+29607
+29608
+29609
+29610
+29611
+29612
+29613
+29614
+29615
+29616
+29617
+29618
+29619
+29620
+29621
+29622
+29623
+29624
+29625
+29626
+29627
+29628
+29629
+29630
+29631
+29632
+29633
+29634
+29635
+29636
+29637
+29638
+29639
+29640
+29641
+29642
+29643
+29644
+29645
+29646
+29647
+29648
+29649
+29650
+29651
+29652
+29653
+29654
+29655
+29656
+29657
+29658
+29659
+29660
+29661
+29662
+29663
+29664
+29665
+29666
+29667
+29668
+29669
+29670
+29671
+29672
+29673
+29674
+29675
+29676
+29677
+29678
+29679
+29680
+29681
+29682
+29683
+29684
+29685
+29686
+29687
+29688
+29689
+29690
+29691
+29692
+29693
+29694
+29695
+29696
+29697
+29698
+29699
+29700
+29701
+29702
+29703
+29704
+29705
+29706
+29707
+29708
+29709
+29710
+29711
+29712
+29713
+29714
+29715
+29716
+29717
+29718
+29719
+29720
+29721
+29722
+29723
+29724
+29725
+29726
+29727
+29728
+29729
+29730
+29731
+29732
+29733
+29734
+29735
+29736
+29737
+29738
+29739
+29740
+29741
+29742
+29743
+29744
+29745
+29746
+29747
+29748
+29749
+29750
+29751
+29752
+29753
+29754
+29755
+29756
+29757
+29758
+29759
+29760
+29761
+29762
+29763
+29764
+29765
+29766
+29767
+29768
+29769
+29770
+29771
+29772
+29773
+29774
+29775
+29776
+29777
+29778
+29779
+29780
+29781
+29782
+29783
+29784
+29785
+29786
+29787
+29788
+29789
+29790
+29791
+29792
+29793
+29794
+29795
+29796
+29797
+29798
+29799
+29800
+29801
+29802
+29803
+29804
+29805
+29806
+29807
+29808
+29809
+29810
+29811
+29812
+29813
+29814
+29815
+29816
+29817
+29818
+29819
+29820
+29821
+29822
+29823
+29824
+29825
+29826
+29827
+29828
+29829
+29830
+29831
+29832
+29833
+29834
+29835
+29836
+29837
+29838
+29839
+29840
+29841
+29842
+29843
+29844
+29845
+29846
+29847
+29848
+29849
+29850
+29851
+29852
+29853
+29854
+29855
+29856
+29857
+29858
+29859
+29860
+29861
+29862
+29863
+29864
+29865
+29866
+29867
+29868
+29869
+29870
+29871
+29872
+29873
+29874
+29875
+29876
+29877
+29878
+29879
+29880
+29881
+29882
+29883
+29884
+29885
+29886
+29887
+29888
+29889
+29890
+29891
+29892
+29893
+29894
+29895
+29896
+29897
+29898
+29899
+29900
+29901
+29902
+29903
+29904
+29905
+29906
+29907
+29908
+29909
+29910
+29911
+29912
+29913
+29914
+29915
+29916
+29917
+29918
+29919
+29920
+29921
+29922
+29923
+29924
+29925
+29926
+29927
+29928
+29929
+29930
+29931
+29932
+29933
+29934
+29935
+29936
+29937
+29938
+29939
+29940
+29941
+29942
+29943
+29944
+29945
+29946
+29947
+29948
+29949
+29950
+29951
+29952
+29953
+29954
+29955
+29956
+29957
+29958
+29959
+29960
+29961
+29962
+29963
+29964
+29965
+29966
+29967
+29968
+29969
+29970
+29971
+29972
+29973
+29974
+29975
+29976
+29977
+29978
+29979
+29980
+29981
+29982
+29983
+29984
+29985
+29986
+29987
+29988
+29989
+29990
+29991
+29992
+29993
+29994
+29995
+29996
+29997
+29998
+29999
+30000
+30001
+30002
+30003
+30004
+30005
+30006
+30007
+30008
+30009
+30010
+30011
+30012
+30013
+30014
+30015
+30016
+30017
+30018
+30019
+30020
+30021
+30022
+30023
+30024
+30025
+30026
+30027
+30028
+30029
+30030
+30031
+30032
+30033
+30034
+30035
+30036
+30037
+30038
+30039
+30040
+30041
+30042
+30043
+30044
+30045
+30046
+30047
+30048
+30049
+30050
+30051
+30052
+30053
+30054
+30055
+30056
+30057
+30058
+30059
+30060
+30061
+30062
+30063
+30064
+30065
+30066
+30067
+30068
+30069
+30070
+30071
+30072
+30073
+30074
+30075
+30076
+30077
+30078
+30079
+30080
+30081
+30082
+30083
+30084
+30085
+30086
+30087
+30088
+30089
+30090
+30091
+30092
+30093
+30094
+30095
+30096
+30097
+30098
+30099
+30100
+30101
+30102
+30103
+30104
+30105
+30106
+30107
+30108
+30109
+30110
+30111
+30112
+30113
+30114
+30115
+30116
+30117
+30118
+30119
+30120
+30121
+30122
+30123
+30124
+30125
+30126
+30127
+30128
+30129
+30130
+30131
+30132
+30133
+30134
+30135
+30136
+30137
+30138
+30139
+30140
+30141
+30142
+30143
+30144
+30145
+30146
+30147
+30148
+30149
+30150
+30151
+30152
+30153
+30154
+30155
+30156
+30157
+30158
+30159
+30160
+30161
+30162
+30163
+30164
+30165
+30166
+30167
+30168
+30169
+30170
+30171
+30172
+30173
+30174
+30175
+30176
+30177
+30178
+30179
+30180
+30181
+30182
+30183
+30184
+30185
+30186
+30187
+30188
+30189
+30190
+30191
+30192
+30193
+30194
+30195
+30196
+30197
+30198
+30199
+30200
+30201
+30202
+30203
+30204
+30205
+30206
+30207
+30208
+30209
+30210
+30211
+30212
+30213
+30214
+30215
+30216
+30217
+30218
+30219
+30220
+30221
+30222
+30223
+30224
+30225
+30226
+30227
+30228
+30229
+30230
+30231
+30232
+30233
+30234
+30235
+30236
+30237
+30238
+30239
+30240
+30241
+30242
+30243
+30244
+30245
+30246
+30247
+30248
+30249
+30250
+30251
+30252
+30253
+30254
+30255
+30256
+30257
+30258
+30259
+30260
+30261
+30262
+30263
+30264
+30265
+30266
+30267
+30268
+30269
+30270
+30271
+30272
+30273
+30274
+30275
+30276
+30277
+30278
+30279
+30280
+30281
+30282
+30283
+30284
+30285
+30286
+30287
+30288
+30289
+30290
+30291
+30292
+30293
+30294
+30295
+30296
+30297
+30298
+30299
+30300
+30301
+30302
+30303
+30304
+30305
+30306
+30307
+30308
+30309
+30310
+30311
+30312
+30313
+30314
+30315
+30316
+30317
+30318
+30319
+30320
+30321
+30322
+30323
+30324
+30325
+30326
+30327
+30328
+30329
+30330
+30331
+30332
+30333
+30334
+30335
+30336
+30337
+30338
+30339
+30340
+30341
+30342
+30343
+30344
+30345
+30346
+30347
+30348
+30349
+30350
+30351
+30352
+30353
+30354
+30355
+30356
+30357
+30358
+30359
+30360
+30361
+30362
+30363
+30364
+30365
+30366
+30367
+30368
+30369
+30370
+30371
+30372
+30373
+30374
+30375
+30376
+30377
+30378
+30379
+30380
+30381
+30382
+30383
+30384
+30385
+30386
+30387
+30388
+30389
+30390
+30391
+30392
+30393
+30394
+30395
+30396
+30397
+30398
+30399
+30400
+30401
+30402
+30403
+30404
+30405
+30406
+30407
+30408
+30409
+30410
+30411
+30412
+30413
+30414
+30415
+30416
+30417
+30418
+30419
+30420
+30421
+30422
+30423
+30424
+30425
+30426
+30427
+30428
+30429
+30430
+30431
+30432
+30433
+30434
+30435
+30436
+30437
+30438
+30439
+30440
+30441
+30442
+30443
+30444
+30445
+30446
+30447
+30448
+30449
+30450
+30451
+30452
+30453
+30454
+30455
+30456
+30457
+30458
+30459
+30460
+30461
+30462
+30463
+30464
+30465
+30466
+30467
+30468
+30469
+30470
+30471
+30472
+30473
+30474
+30475
+30476
+30477
+30478
+30479
+30480
+30481
+30482
+30483
+30484
+30485
+30486
+30487
+30488
+30489
+30490
+30491
+30492
+30493
+30494
+30495
+30496
+30497
+30498
+30499
+30500
+30501
+30502
+30503
+30504
+30505
+30506
+30507
+30508
+30509
+30510
+30511
+30512
+30513
+30514
+30515
+30516
+30517
+30518
+30519
+30520
+30521
+30522
+30523
+30524
+30525
+30526
+30527
+30528
+30529
+30530
+30531
+30532
+30533
+30534
+30535
+30536
+30537
+30538
+30539
+30540
+30541
+30542
+30543
+30544
+30545
+30546
+30547
+30548
+30549
+30550
+30551
+30552
+30553
+30554
+30555
+30556
+30557
+30558
+30559
+30560
+30561
+30562
+30563
+30564
+30565
+30566
+30567
+30568
+30569
+30570
+30571
+30572
+30573
+30574
+30575
+30576
+30577
+30578
+30579
+30580
+30581
+30582
+30583
+30584
+30585
+30586
+30587
+30588
+30589
+30590
+30591
+30592
+30593
+30594
+30595
+30596
+30597
+30598
+30599
+30600
+30601
+30602
+30603
+30604
+30605
+30606
+30607
+30608
+30609
+30610
+30611
+30612
+30613
+30614
+30615
+30616
+30617
+30618
+30619
+30620
+30621
+30622
+30623
+30624
+30625
+30626
+30627
+30628
+30629
+30630
+30631
+30632
+30633
+30634
+30635
+30636
+30637
+30638
+30639
+30640
+30641
+30642
+30643
+30644
+30645
+30646
+30647
+30648
+30649
+30650
+30651
+30652
+30653
+30654
+30655
+30656
+30657
+30658
+30659
+30660
+30661
+30662
+30663
+30664
+30665
+30666
+30667
+30668
+30669
+30670
+30671
+30672
+30673
+30674
+30675
+30676
+30677
+30678
+30679
+30680
+30681
+30682
+30683
+30684
+30685
+30686
+30687
+30688
+30689
+30690
+30691
+30692
+30693
+30694
+30695
+30696
+30697
+30698
+30699
+30700
+30701
+30702
+30703
+30704
+30705
+30706
+30707
+30708
+30709
+30710
+30711
+30712
+30713
+30714
+30715
+30716
+30717
+30718
+30719
+30720
+30721
+30722
+30723
+30724
+30725
+30726
+30727
+30728
+30729
+30730
+30731
+30732
+30733
+30734
+30735
+30736
+30737
+30738
+30739
+30740
+30741
+30742
+30743
+30744
+30745
+30746
+30747
+30748
+30749
+30750
+30751
+30752
+30753
+30754
+30755
+30756
+30757
+30758
+30759
+30760
+30761
+30762
+30763
+30764
+30765
+30766
+30767
+30768
+30769
+30770
+30771
+30772
+30773
+30774
+30775
+30776
+30777
+30778
+30779
+30780
+30781
+30782
+30783
+30784
+30785
+30786
+30787
+30788
+30789
+30790
+30791
+30792
+30793
+30794
+30795
+30796
+30797
+30798
+30799
+30800
+30801
+30802
+30803
+30804
+30805
+30806
+30807
+30808
+30809
+30810
+30811
+30812
+30813
+30814
+30815
+30816
+30817
+30818
+30819
+30820
+30821
+30822
+30823
+30824
+30825
+30826
+30827
+30828
+30829
+30830
+30831
+30832
+30833
+30834
+30835
+30836
+30837
+30838
+30839
+30840
+30841
+30842
+30843
+30844
+30845
+30846
+30847
+30848
+30849
+30850
+30851
+30852
+30853
+30854
+30855
+30856
+30857
+30858
+30859
+30860
+30861
+30862
+30863
+30864
+30865
+30866
+30867
+30868
+30869
+30870
+30871
+30872
+30873
+30874
+30875
+30876
+30877
+30878
+30879
+30880
+30881
+30882
+30883
+30884
+30885
+30886
+30887
+30888
+30889
+30890
+30891
+30892
+30893
+30894
+30895
+30896
+30897
+30898
+30899
+30900
+30901
+30902
+30903
+30904
+30905
+30906
+30907
+30908
+30909
+30910
+30911
+30912
+30913
+30914
+30915
+30916
+30917
+30918
+30919
+30920
+30921
+30922
+30923
+30924
+30925
+30926
+30927
+30928
+30929
+30930
+30931
+30932
+30933
+30934
+30935
+30936
+30937
+30938
+30939
+30940
+30941
+30942
+30943
+30944
+30945
+30946
+30947
+30948
+30949
+30950
+30951
+30952
+30953
+30954
+30955
+30956
+30957
+30958
+30959
+30960
+30961
+30962
+30963
+30964
+30965
+30966
+30967
+30968
+30969
+30970
+30971
+30972
+30973
+30974
+30975
+30976
+30977
+30978
+30979
+30980
+30981
+30982
+30983
+30984
+30985
+30986
+30987
+30988
+30989
+30990
+30991
+30992
+30993
+30994
+30995
+30996
+30997
+30998
+30999
+31000
+31001
+31002
+31003
+31004
+31005
+31006
+31007
+31008
+31009
+31010
+31011
+31012
+31013
+31014
+31015
+31016
+31017
+31018
+31019
+31020
+31021
+31022
+31023
+31024
+31025
+31026
+31027
+31028
+31029
+31030
+31031
+31032
+31033
+31034
+31035
+31036
+31037
+31038
+31039
+31040
+31041
+31042
+31043
+31044
+31045
+31046
+31047
+31048
+31049
+31050
+31051
+31052
+31053
+31054
+31055
+31056
+31057
+31058
+31059
+31060
+31061
+31062
+31063
+31064
+31065
+31066
+31067
+31068
+31069
+31070
+31071
+31072
+31073
+31074
+31075
+31076
+31077
+31078
+31079
+31080
+31081
+31082
+31083
+31084
+31085
+31086
+31087
+31088
+31089
+31090
+31091
+31092
+31093
+31094
+31095
+31096
+31097
+31098
+31099
+31100
+31101
+31102
+31103
+31104
+31105
+31106
+31107
+31108
+31109
+31110
+31111
+31112
+31113
+31114
+31115
+31116
+31117
+31118
+31119
+31120
+31121
+31122
+31123
+31124
+31125
+31126
+31127
+31128
+31129
+31130
+31131
+31132
+31133
+31134
+31135
+31136
+31137
+31138
+31139
+31140
+31141
+31142
+31143
+31144
+31145
+31146
+31147
+31148
+31149
+31150
+31151
+31152
+31153
+31154
+31155
+31156
+31157
+31158
+31159
+31160
+31161
+31162
+31163
+31164
+31165
+31166
+31167
+31168
+31169
+31170
+31171
+31172
+31173
+31174
+31175
+31176
+31177
+31178
+31179
+31180
+31181
+31182
+31183
+31184
+31185
+31186
+31187
+31188
+31189
+31190
+31191
+31192
+31193
+31194
+31195
+31196
+31197
+31198
+31199
+31200
+31201
+31202
+31203
+31204
+31205
+31206
+31207
+31208
+31209
+31210
+31211
+31212
+31213
+31214
+31215
+31216
+31217
+31218
+31219
+31220
+31221
+31222
+31223
+31224
+31225
+31226
+31227
+31228
+31229
+31230
+31231
+31232
+31233
+31234
+31235
+31236
+31237
+31238
+31239
+31240
+31241
+31242
+31243
+31244
+31245
+31246
+31247
+31248
+31249
+31250
+31251
+31252
+31253
+31254
+31255
+31256
+31257
+31258
+31259
+31260
+31261
+31262
+31263
+31264
+31265
+31266
+31267
+31268
+31269
+31270
+31271
+31272
+31273
+31274
+31275
+31276
+31277
+31278
+31279
+31280
+31281
+31282
+31283
+31284
+31285
+31286
+31287
+31288
+31289
+31290
+31291
+31292
+31293
+31294
+31295
+31296
+31297
+31298
+31299
+31300
+31301
+31302
+31303
+31304
+31305
+31306
+31307
+31308
+31309
+31310
+31311
+31312
+31313
+31314
+31315
+31316
+31317
+31318
+31319
+31320
+31321
+31322
+31323
+31324
+31325
+31326
+31327
+31328
+31329
+31330
+31331
+31332
+31333
+31334
+31335
+31336
+31337
+31338
+31339
+31340
+31341
+31342
+31343
+31344
+31345
+31346
+31347
+31348
+31349
+31350
+31351
+31352
+31353
+31354
+31355
+31356
+31357
+31358
+31359
+31360
+31361
+31362
+31363
+31364
+31365
+31366
+31367
+31368
+31369
+31370
+31371
+31372
+31373
+31374
+31375
+31376
+31377
+31378
+31379
+31380
+31381
+31382
+31383
+31384
+31385
+31386
+31387
+31388
+31389
+31390
+31391
+31392
+31393
+31394
+31395
+31396
+31397
+31398
+31399
+31400
+31401
+31402
+31403
+31404
+31405
+31406
+31407
+31408
+31409
+31410
+31411
+31412
+31413
+31414
+31415
+31416
+31417
+31418
+31419
+31420
+31421
+31422
+31423
+31424
+31425
+31426
+31427
+31428
+31429
+31430
+31431
+31432
+31433
+31434
+31435
+31436
+31437
+31438
+31439
+31440
+31441
+31442
+31443
+31444
+31445
+31446
+31447
+31448
+31449
+31450
+31451
+31452
+31453
+31454
+31455
+31456
+31457
+31458
+31459
+31460
+31461
+31462
+31463
+31464
+31465
+31466
+31467
+31468
+31469
+31470
+31471
+31472
+31473
+31474
+31475
+31476
+31477
+31478
+31479
+31480
+31481
+31482
+31483
+31484
+31485
+31486
+31487
+31488
+31489
+31490
+31491
+31492
+31493
+31494
+31495
+31496
+31497
+31498
+31499
+31500
+31501
+31502
+31503
+31504
+31505
+31506
+31507
+31508
+31509
+31510
+31511
+31512
+31513
+31514
+31515
+31516
+31517
+31518
+31519
+31520
+31521
+31522
+31523
+31524
+31525
+31526
+31527
+31528
+31529
+31530
+31531
+31532
+31533
+31534
+31535
+31536
+31537
+31538
+31539
+31540
+31541
+31542
+31543
+31544
+31545
+31546
+31547
+31548
+31549
+31550
+31551
+31552
+31553
+31554
+31555
+31556
+31557
+31558
+31559
+31560
+31561
+31562
+31563
+31564
+31565
+31566
+31567
+31568
+31569
+31570
+31571
+31572
+31573
+31574
+31575
+31576
+31577
+31578
+31579
+31580
+31581
+31582
+31583
+31584
+31585
+31586
+31587
+31588
+31589
+31590
+31591
+31592
+31593
+31594
+31595
+31596
+31597
+31598
+31599
+31600
+31601
+31602
+31603
+31604
+31605
+31606
+31607
+31608
+31609
+31610
+31611
+31612
+31613
+31614
+31615
+31616
+31617
+31618
+31619
+31620
+31621
+31622
+31623
+31624
+31625
+31626
+31627
+31628
+31629
+31630
+31631
+31632
+31633
+31634
+31635
+31636
+31637
+31638
+31639
+31640
+31641
+31642
+31643
+31644
+31645
+31646
+31647
+31648
+31649
+31650
+31651
+31652
+31653
+31654
+31655
+31656
+31657
+31658
+31659
+31660
+31661
+31662
+31663
+31664
+31665
+31666
+31667
+31668
+31669
+31670
+31671
+31672
+31673
+31674
+31675
+31676
+31677
+31678
+31679
+31680
+31681
+31682
+31683
+31684
+31685
+31686
+31687
+31688
+31689
+31690
+31691
+31692
+31693
+31694
+31695
+31696
+31697
+31698
+31699
+31700
+31701
+31702
+31703
+31704
+31705
+31706
+31707
+31708
+31709
+31710
+31711
+31712
+31713
+31714
+31715
+31716
+31717
+31718
+31719
+31720
+31721
+31722
+31723
+31724
+31725
+31726
+31727
+31728
+31729
+31730
+31731
+31732
+31733
+31734
+31735
+31736
+31737
+31738
+31739
+31740
+31741
+31742
+31743
+31744
+31745
+31746
+31747
+31748
+31749
+31750
+31751
+31752
+31753
+31754
+31755
+31756
+31757
+31758
+31759
+31760
+31761
+31762
+31763
+31764
+31765
+31766
+31767
+31768
+31769
+31770
+31771
+31772
+31773
+31774
+31775
+31776
+31777
+31778
+31779
+31780
+31781
+31782
+31783
+31784
+31785
+31786
+31787
+31788
+31789
+31790
+31791
+31792
+31793
+31794
+31795
+31796
+31797
+31798
+31799
+31800
+31801
+31802
+31803
+31804
+31805
+31806
+31807
+31808
+31809
+31810
+31811
+31812
+31813
+31814
+31815
+31816
+31817
+31818
+31819
+31820
+31821
+31822
+31823
+31824
+31825
+31826
+31827
+31828
+31829
+31830
+31831
+31832
+31833
+31834
+31835
+31836
+31837
+31838
+31839
+31840
+31841
+31842
+31843
+31844
+31845
+31846
+31847
+31848
+31849
+31850
+31851
+31852
+31853
+31854
+31855
+31856
+31857
+31858
+31859
+31860
+31861
+31862
+31863
+31864
+31865
+31866
+31867
+31868
+31869
+31870
+31871
+31872
+31873
+31874
+31875
+31876
+31877
+31878
+31879
+31880
+31881
+31882
+31883
+31884
+31885
+31886
+31887
+31888
+31889
+31890
+31891
+31892
+31893
+31894
+31895
+31896
+31897
+31898
+31899
+31900
+31901
+31902
+31903
+31904
+31905
+31906
+31907
+31908
+31909
+31910
+31911
+31912
+31913
+31914
+31915
+31916
+31917
+31918
+31919
+31920
+31921
+31922
+31923
+31924
+31925
+31926
+31927
+31928
+31929
+31930
+31931
+31932
+31933
+31934
+31935
+31936
+31937
+31938
+31939
+31940
+31941
+31942
+31943
+31944
+31945
+31946
+31947
+31948
+31949
+31950
+31951
+31952
+31953
+31954
+31955
+31956
+31957
+31958
+31959
+31960
+31961
+31962
+31963
+31964
+31965
+31966
+31967
+31968
+31969
+31970
+31971
+31972
+31973
+31974
+31975
+31976
+31977
+31978
+31979
+31980
+31981
+31982
+31983
+31984
+31985
+31986
+31987
+31988
+31989
+31990
+31991
+31992
+31993
+31994
+31995
+31996
+31997
+31998
+31999
+32000
+32001
+32002
+32003
+32004
+32005
+32006
+32007
+32008
+32009
+32010
+32011
+32012
+32013
+32014
+32015
+32016
+32017
+32018
+32019
+32020
+32021
+32022
+32023
+32024
+32025
+32026
+32027
+32028
+32029
+32030
+32031
+32032
+32033
+32034
+32035
+32036
+32037
+32038
+32039
+32040
+32041
+32042
+32043
+32044
+32045
+32046
+32047
+32048
+32049
+32050
+32051
+32052
+32053
+32054
+32055
+32056
+32057
+32058
+32059
+32060
+32061
+32062
+32063
+32064
+32065
+32066
+32067
+32068
+32069
+32070
+32071
+32072
+32073
+32074
+32075
+32076
+32077
+32078
+32079
+32080
+32081
+32082
+32083
+32084
+32085
+32086
+32087
+32088
+32089
+32090
+32091
+32092
+32093
+32094
+32095
+32096
+32097
+32098
+32099
+32100
+32101
+32102
+32103
+32104
+32105
+32106
+32107
+32108
+32109
+32110
+32111
+32112
+32113
+32114
+32115
+32116
+32117
+32118
+32119
+32120
+32121
+32122
+32123
+32124
+32125
+32126
+32127
+32128
+32129
+32130
+32131
+32132
+32133
+32134
+32135
+32136
+32137
+32138
+32139
+32140
+32141
+32142
+32143
+32144
+32145
+32146
+32147
+32148
+32149
+32150
+32151
+32152
+32153
+32154
+32155
+32156
+32157
+32158
+32159
+32160
+32161
+32162
+32163
+32164
+32165
+32166
+32167
+32168
+32169
+32170
+32171
+32172
+32173
+32174
+32175
+32176
+32177
+32178
+32179
+32180
+32181
+32182
+32183
+32184
+32185
+32186
+32187
+32188
+32189
+32190
+32191
+32192
+32193
+32194
+32195
+32196
+32197
+32198
+32199
+32200
+32201
+32202
+32203
+32204
+32205
+32206
+32207
+32208
+32209
+32210
+32211
+32212
+32213
+32214
+32215
+32216
+32217
+32218
+32219
+32220
+32221
+32222
+32223
+32224
+32225
+32226
+32227
+32228
+32229
+32230
+32231
+32232
+32233
+32234
+32235
+32236
+32237
+32238
+32239
+32240
+32241
+32242
+32243
+32244
+32245
+32246
+32247
+32248
+32249
+32250
+32251
+32252
+32253
+32254
+32255
+32256
+32257
+32258
+32259
+32260
+32261
+32262
+32263
+32264
+32265
+32266
+32267
+32268
+32269
+32270
+32271
+32272
+32273
+32274
+32275
+32276
+32277
+32278
+32279
+32280
+32281
+32282
+32283
+32284
+32285
+32286
+32287
+32288
+32289
+32290
+32291
+32292
+32293
+32294
+32295
+32296
+32297
+32298
+32299
+32300
+32301
+32302
+32303
+32304
+32305
+32306
+32307
+32308
+32309
+32310
+32311
+32312
+32313
+32314
+32315
+32316
+32317
+32318
+32319
+32320
+32321
+32322
+32323
+32324
+32325
+32326
+32327
+32328
+32329
+32330
+32331
+32332
+32333
+32334
+32335
+32336
+32337
+32338
+32339
+32340
+32341
+32342
+32343
+32344
+32345
+32346
+32347
+32348
+32349
+32350
+32351
+32352
+32353
+32354
+32355
+32356
+32357
+32358
+32359
+32360
+32361
+32362
+32363
+32364
+32365
+32366
+32367
+32368
+32369
+32370
+32371
+32372
+32373
+32374
+32375
+32376
+32377
+32378
+32379
+32380
+32381
+32382
+32383
+32384
+32385
+32386
+32387
+32388
+32389
+32390
+32391
+32392
+32393
+32394
+32395
+32396
+32397
+32398
+32399
+32400
+32401
+32402
+32403
+32404
+32405
+32406
+32407
+32408
+32409
+32410
+32411
+32412
+32413
+32414
+32415
+32416
+32417
+32418
+32419
+32420
+32421
+32422
+32423
+32424
+32425
+32426
+32427
+32428
+32429
+32430
+32431
+32432
+32433
+32434
+32435
+32436
+32437
+32438
+32439
+32440
+32441
+32442
+32443
+32444
+32445
+32446
+32447
+32448
+32449
+32450
+32451
+32452
+32453
+32454
+32455
+32456
+32457
+32458
+32459
+32460
+32461
+32462
+32463
+32464
+32465
+32466
+32467
+32468
+32469
+32470
+32471
+32472
+32473
+32474
+32475
+32476
+32477
+32478
+32479
+32480
+32481
+32482
+32483
+32484
+32485
+32486
+32487
+32488
+32489
+32490
+32491
+32492
+32493
+32494
+32495
+32496
+32497
+32498
+32499
+32500
+32501
+32502
+32503
+32504
+32505
+32506
+32507
+32508
+32509
+32510
+32511
+32512
+32513
+32514
+32515
+32516
+32517
+32518
+32519
+32520
+32521
+32522
+32523
+32524
+32525
+32526
+32527
+32528
+32529
+32530
+32531
+32532
+32533
+32534
+32535
+32536
+32537
+32538
+32539
+32540
+32541
+32542
+32543
+32544
+32545
+32546
+32547
+32548
+32549
+32550
+32551
+32552
+32553
+32554
+32555
+32556
+32557
+32558
+32559
+32560
+32561
+32562
+32563
+32564
+32565
+32566
+32567
+32568
+32569
+32570
+32571
+32572
+32573
+32574
+32575
+32576
+32577
+32578
+32579
+32580
+32581
+32582
+32583
+32584
+32585
+32586
+32587
+32588
+32589
+32590
+32591
+32592
+32593
+32594
+32595
+32596
+32597
+32598
+32599
+32600
+32601
+32602
+32603
+32604
+32605
+32606
+32607
+32608
+32609
+32610
+32611
+32612
+32613
+32614
+32615
+32616
+32617
+32618
+32619
+32620
+32621
+32622
+32623
+32624
+32625
+32626
+32627
+32628
+32629
+32630
+32631
+32632
+32633
+32634
+32635
+32636
+32637
+32638
+32639
+32640
+32641
+32642
+32643
+32644
+32645
+32646
+32647
+32648
+32649
+32650
+32651
+32652
+32653
+32654
+32655
+32656
+32657
+32658
+32659
+32660
+32661
+32662
+32663
+32664
+32665
+32666
+32667
+32668
+32669
+32670
+32671
+32672
+32673
+32674
+32675
+32676
+32677
+32678
+32679
+32680
+32681
+32682
+32683
+32684
+32685
+32686
+32687
+32688
+32689
+32690
+32691
+32692
+32693
+32694
+32695
+32696
+32697
+32698
+32699
+32700
+32701
+32702
+32703
+32704
+32705
+32706
+32707
+32708
+32709
+32710
+32711
+32712
+32713
+32714
+32715
+32716
+32717
+32718
+32719
+32720
+32721
+32722
+32723
+32724
+32725
+32726
+32727
+32728
+32729
+32730
+32731
+32732
+32733
+32734
+32735
+32736
+32737
+32738
+32739
+32740
+32741
+32742
+32743
+32744
+32745
+32746
+32747
+32748
+32749
+32750
+32751
+32752
+32753
+32754
+32755
+32756
+32757
+32758
+32759
+32760
+32761
+32762
+32763
+32764
+32765
+32766
+32767
+32768
+32769
+32770
+32771
+32772
+32773
+32774
+32775
+32776
+32777
+32778
+32779
+32780
+32781
+32782
+32783
+32784
+32785
+32786
+32787
+32788
+32789
+32790
+32791
+32792
+32793
+32794
+32795
+32796
+32797
+32798
+32799
+32800
+32801
+32802
+32803
+32804
+32805
+32806
+32807
+32808
+32809
+32810
+32811
+32812
+32813
+32814
+32815
+32816
+32817
+32818
+32819
+32820
+32821
+32822
+32823
+32824
+32825
+32826
+32827
+32828
+32829
+32830
+32831
+32832
+32833
+32834
+32835
+32836
+32837
+32838
+32839
+32840
+32841
+32842
+32843
+32844
+32845
+32846
+32847
+32848
+32849
+32850
+32851
+32852
+32853
+32854
+32855
+32856
+32857
+32858
+32859
+32860
+32861
+32862
+32863
+32864
+32865
+32866
+32867
+32868
+32869
+32870
+32871
+32872
+32873
+32874
+32875
+32876
+32877
+32878
+32879
+32880
+32881
+32882
+32883
+32884
+32885
+32886
+32887
+32888
+32889
+32890
+32891
+32892
+32893
+32894
+32895
+32896
+32897
+32898
+32899
+32900
+32901
+32902
+32903
+32904
+32905
+32906
+32907
+32908
+32909
+32910
+32911
+32912
+32913
+32914
+32915
+32916
+32917
+32918
+32919
+32920
+32921
+32922
+32923
+32924
+32925
+32926
+32927
+32928
+32929
+32930
+32931
+32932
+32933
+32934
+32935
+32936
+32937
+32938
+32939
+32940
+32941
+32942
+32943
+32944
+32945
+32946
+32947
+32948
+32949
+32950
+32951
+32952
+32953
+32954
+32955
+32956
+32957
+32958
+32959
+32960
+32961
+32962
+32963
+32964
+32965
+32966
+32967
+32968
+32969
+32970
+32971
+32972
+32973
+32974
+32975
+32976
+32977
+32978
+32979
+32980
+32981
+32982
+32983
+32984
+32985
+32986
+32987
+32988
+32989
+32990
+32991
+32992
+32993
+32994
+32995
+32996
+32997
+32998
+32999
+33000
+33001
+33002
+33003
+33004
+33005
+33006
+33007
+33008
+33009
+33010
+33011
+33012
+33013
+33014
+33015
+33016
+33017
+33018
+33019
+33020
+33021
+33022
+33023
+33024
+33025
+33026
+33027
+33028
+33029
+33030
+33031
+33032
+33033
+33034
+33035
+33036
+33037
+33038
+33039
+33040
+33041
+33042
+33043
+33044
+33045
+33046
+33047
+33048
+33049
+33050
+33051
+33052
+33053
+33054
+33055
+33056
+33057
+33058
+33059
+33060
+33061
+33062
+33063
+33064
+33065
+33066
+33067
+33068
+33069
+33070
+33071
+33072
+33073
+33074
+33075
+33076
+33077
+33078
+33079
+33080
+33081
+33082
+33083
+33084
+33085
+33086
+33087
+33088
+33089
+33090
+33091
+33092
+33093
+33094
+33095
+33096
+33097
+33098
+33099
+33100
+33101
+33102
+33103
+33104
+33105
+33106
+33107
+33108
+33109
+33110
+33111
+33112
+33113
+33114
+33115
+33116
+33117
+33118
+33119
+33120
+33121
+33122
+33123
+33124
+33125
+33126
+33127
+33128
+33129
+33130
+33131
+33132
+33133
+33134
+33135
+33136
+33137
+33138
+33139
+33140
+33141
+33142
+33143
+33144
+33145
+33146
+33147
+33148
+33149
+33150
+33151
+33152
+33153
+33154
+33155
+33156
+33157
+33158
+33159
+33160
+33161
+33162
+33163
+33164
+33165
+33166
+33167
+33168
+33169
+33170
+33171
+33172
+33173
+33174
+33175
+33176
+33177
+33178
+33179
+33180
+33181
+33182
+33183
+33184
+33185
+33186
+33187
+33188
+33189
+33190
+33191
+33192
+33193
+33194
+33195
+33196
+33197
+33198
+33199
+33200
+33201
+33202
+33203
+33204
+33205
+33206
+33207
+33208
+33209
+33210
+33211
+33212
+33213
+33214
+33215
+33216
+33217
+33218
+33219
+33220
+33221
+33222
+33223
+33224
+33225
+33226
+33227
+33228
+33229
+33230
+33231
+33232
+33233
+33234
+33235
+33236
+33237
+33238
+33239
+33240
+33241
+33242
+33243
+33244
+33245
+33246
+33247
+33248
+33249
+33250
+33251
+33252
+33253
+33254
+33255
+33256
+33257
+33258
+33259
+33260
+33261
+33262
+33263
+33264
+33265
+33266
+33267
+33268
+33269
+33270
+33271
+33272
+33273
+33274
+33275
+33276
+33277
+33278
+33279
+33280
+33281
+33282
+33283
+33284
+33285
+33286
+33287
+33288
+33289
+33290
+33291
+33292
+33293
+33294
+33295
+33296
+33297
+33298
+33299
+33300
+33301
+33302
+33303
+33304
+33305
+33306
+33307
+33308
+33309
+33310
+33311
+33312
+33313
+33314
+33315
+33316
+33317
+33318
+33319
+33320
+33321
+33322
+33323
+33324
+33325
+33326
+33327
+33328
+33329
+33330
+33331
+33332
+33333
+33334
+33335
+33336
+33337
+33338
+33339
+33340
+33341
+33342
+33343
+33344
+33345
+33346
+33347
+33348
+33349
+33350
+33351
+33352
+33353
+33354
+33355
+33356
+33357
+33358
+33359
+33360
+33361
+33362
+33363
+33364
+33365
+33366
+33367
+33368
+33369
+33370
+33371
+33372
+33373
+33374
+33375
+33376
+33377
+33378
+33379
+33380
+33381
+33382
+33383
+33384
+33385
+33386
+33387
+33388
+33389
+33390
+33391
+33392
+33393
+33394
+33395
+33396
+33397
+33398
+33399
+33400
+33401
+33402
+33403
+33404
+33405
+33406
+33407
+33408
+33409
+33410
+33411
+33412
+33413
+33414
+33415
+33416
+33417
+33418
+33419
+33420
+33421
+33422
+33423
+33424
+33425
+33426
+33427
+33428
+33429
+33430
+33431
+33432
+33433
+33434
+33435
+33436
+33437
+33438
+33439
+33440
+33441
+33442
+33443
+33444
+33445
+33446
+33447
+33448
+33449
+33450
+33451
+33452
+33453
+33454
+33455
+33456
+33457
+33458
+33459
+33460
+33461
+33462
+33463
+33464
+33465
+33466
+33467
+33468
+33469
+33470
+33471
+33472
+33473
+33474
+33475
+33476
+33477
+33478
+33479
+33480
+33481
+33482
+33483
+33484
+33485
+33486
+33487
+33488
+33489
+33490
+33491
+33492
+33493
+33494
+33495
+33496
+33497
+33498
+33499
+33500
+33501
+33502
+33503
+33504
+33505
+33506
+33507
+33508
+33509
+33510
+33511
+33512
+33513
+33514
+33515
+33516
+33517
+33518
+33519
+33520
+33521
+33522
+33523
+33524
+33525
+33526
+33527
+33528
+33529
+33530
+33531
+33532
+33533
+33534
+33535
+33536
+33537
+33538
+33539
+33540
+33541
+33542
+33543
+33544
+33545
+33546
+33547
+33548
+33549
+33550
+33551
+33552
+33553
+33554
+33555
+33556
+33557
+33558
+33559
+33560
+33561
+33562
+33563
+33564
+33565
+33566
+33567
+33568
+33569
+33570
+33571
+33572
+33573
+33574
+33575
+33576
+33577
+33578
+33579
+33580
+33581
+33582
+33583
+33584
+33585
+33586
+33587
+33588
+33589
+33590
+33591
+33592
+33593
+33594
+33595
+33596
+33597
+33598
+33599
+33600
+33601
+33602
+33603
+33604
+33605
+33606
+33607
+33608
+33609
+33610
+33611
+33612
+33613
+33614
+33615
+33616
+33617
+33618
+33619
+33620
+33621
+33622
+33623
+33624
+33625
+33626
+33627
+33628
+33629
+33630
+33631
+33632
+33633
+33634
+33635
+33636
+33637
+33638
+33639
+33640
+33641
+33642
+33643
+33644
+33645
+33646
+33647
+33648
+33649
+33650
+33651
+33652
+33653
+33654
+33655
+33656
+33657
+33658
+33659
+33660
+33661
+33662
+33663
+33664
+33665
+33666
+33667
+33668
+33669
+33670
+33671
+33672
+33673
+33674
+33675
+33676
+33677
+33678
+33679
+33680
+33681
+33682
+33683
+33684
+33685
+33686
+33687
+33688
+33689
+33690
+33691
+33692
+33693
+33694
+33695
+33696
+33697
+33698
+33699
+33700
+33701
+33702
+33703
+33704
+33705
+33706
+33707
+33708
+33709
+33710
+33711
+33712
+33713
+33714
+33715
+33716
+33717
+33718
+33719
+33720
+33721
+33722
+33723
+33724
+33725
+33726
+33727
+33728
+33729
+33730
+33731
+33732
+33733
+33734
+33735
+33736
+33737
+33738
+33739
+33740
+33741
+33742
+33743
+33744
+33745
+33746
+33747
+33748
+33749
+33750
+33751
+33752
+33753
+33754
+33755
+33756
+33757
+33758
+33759
+33760
+33761
+33762
+33763
+33764
+33765
+33766
+33767
+33768
+33769
+33770
+33771
+33772
+33773
+33774
+33775
+33776
+33777
+33778
+33779
+33780
+33781
+33782
+33783
+33784
+33785
+33786
+33787
+33788
+33789
+33790
+33791
+33792
+33793
+33794
+33795
+33796
+33797
+33798
+33799
+33800
+33801
+33802
+33803
+33804
+33805
+33806
+33807
+33808
+33809
+33810
+33811
+33812
+33813
+33814
+33815
+33816
+33817
+33818
+33819
+33820
+33821
+33822
+33823
+33824
+33825
+33826
+33827
+33828
+33829
+33830
+33831
+33832
+33833
+33834
+33835
+33836
+33837
+33838
+33839
+33840
+33841
+33842
+33843
+33844
+33845
+33846
+33847
+33848
+33849
+33850
+33851
+33852
+33853
+33854
+33855
+33856
+33857
+33858
+33859
+33860
+33861
+33862
+33863
+33864
+33865
+33866
+33867
+33868
+33869
+33870
+33871
+33872
+33873
+33874
+33875
+33876
+33877
+33878
+33879
+33880
+33881
+33882
+33883
+33884
+33885
+33886
+33887
+33888
+33889
+33890
+33891
+33892
+33893
+33894
+33895
+33896
+33897
+33898
+33899
+33900
+33901
+33902
+33903
+33904
+33905
+33906
+33907
+33908
+33909
+33910
+33911
+33912
+33913
+33914
+33915
+33916
+33917
+33918
+33919
+33920
+33921
+33922
+33923
+33924
+33925
+33926
+33927
+33928
+33929
+33930
+33931
+33932
+33933
+33934
+33935
+33936
+33937
+33938
+33939
+33940
+33941
+33942
+33943
+33944
+33945
+33946
+33947
+33948
+33949
+33950
+33951
+33952
+33953
+33954
+33955
+33956
+33957
+33958
+33959
+33960
+33961
+33962
+33963
+33964
+33965
+33966
+33967
+33968
+33969
+33970
+33971
+33972
+33973
+33974
+33975
+33976
+33977
+33978
+33979
+33980
+33981
+33982
+33983
+33984
+33985
+33986
+33987
+33988
+33989
+33990
+33991
+33992
+33993
+33994
+33995
+33996
+33997
+33998
+33999
+34000
+34001
+34002
+34003
+34004
+34005
+34006
+34007
+34008
+34009
+34010
+34011
+34012
+34013
+34014
+34015
+34016
+34017
+34018
+34019
+34020
+34021
+34022
+34023
+34024
+34025
+34026
+34027
+34028
+34029
+34030
+34031
+34032
+34033
+34034
+34035
+34036
+34037
+34038
+34039
+34040
+34041
+34042
+34043
+34044
+34045
+34046
+34047
+34048
+34049
+34050
+34051
+34052
+34053
+34054
+34055
+34056
+34057
+34058
+34059
+34060
+34061
+34062
+34063
+34064
+34065
+34066
+34067
+34068
+34069
+34070
+34071
+34072
+34073
+34074
+34075
+34076
+34077
+34078
+34079
+34080
+34081
+34082
+34083
+34084
+34085
+34086
+34087
+34088
+34089
+34090
+34091
+34092
+34093
+34094
+34095
+34096
+34097
+34098
+34099
+34100
+34101
+34102
+34103
+34104
+34105
+34106
+34107
+34108
+34109
+34110
+34111
+34112
+34113
+34114
+34115
+34116
+34117
+34118
+34119
+34120
+34121
+34122
+34123
+34124
+34125
+34126
+34127
+34128
+34129
+34130
+34131
+34132
+34133
+34134
+34135
+34136
+34137
+34138
+34139
+34140
+34141
+34142
+34143
+34144
+34145
+34146
+34147
+34148
+34149
+34150
+34151
+34152
+34153
+34154
+34155
+34156
+34157
+34158
+34159
+34160
+34161
+34162
+34163
+34164
+34165
+34166
+34167
+34168
+34169
+34170
+34171
+34172
+34173
+34174
+34175
+34176
+34177
+34178
+34179
+34180
+34181
+34182
+34183
+34184
+34185
+34186
+34187
+34188
+34189
+34190
+34191
+34192
+34193
+34194
+34195
+34196
+34197
+34198
+34199
+34200
+34201
+34202
+34203
+34204
+34205
+34206
+34207
+34208
+34209
+34210
+34211
+34212
+34213
+34214
+34215
+34216
+34217
+34218
+34219
+34220
+34221
+34222
+34223
+34224
+34225
+34226
+34227
+34228
+34229
+34230
+34231
+34232
+34233
+34234
+34235
+34236
+34237
+34238
+34239
+34240
+34241
+34242
+34243
+34244
+34245
+34246
+34247
+34248
+34249
+34250
+34251
+34252
+34253
+34254
+34255
+34256
+34257
+34258
+34259
+34260
+34261
+34262
+34263
+34264
+34265
+34266
+34267
+34268
+34269
+34270
+34271
+34272
+34273
+34274
+34275
+34276
+34277
+34278
+34279
+34280
+34281
+34282
+34283
+34284
+34285
+34286
+34287
+34288
+34289
+34290
+34291
+34292
+34293
+34294
+34295
+34296
+34297
+34298
+34299
+34300
+34301
+34302
+34303
+34304
+34305
+34306
+34307
+34308
+34309
+34310
+34311
+34312
+34313
+34314
+34315
+34316
+34317
+34318
+34319
+34320
+34321
+34322
+34323
+34324
+34325
+34326
+34327
+34328
+34329
+34330
+34331
+34332
+34333
+34334
+34335
+34336
+34337
+34338
+34339
+34340
+34341
+34342
+34343
+34344
+34345
+34346
+34347
+34348
+34349
+34350
+34351
+34352
+34353
+34354
+34355
+34356
+34357
+34358
+34359
+34360
+34361
+34362
+34363
+34364
+34365
+34366
+34367
+34368
+34369
+34370
+34371
+34372
+34373
+34374
+34375
+34376
+34377
+34378
+34379
+34380
+34381
+34382
+34383
+34384
+34385
+34386
+34387
+34388
+34389
+34390
+34391
+34392
+34393
+34394
+34395
+34396
+34397
+34398
+34399
+34400
+34401
+34402
+34403
+34404
+34405
+34406
+34407
+34408
+34409
+34410
+34411
+34412
+34413
+34414
+34415
+34416
+34417
+34418
+34419
+34420
+34421
+34422
+34423
+34424
+34425
+34426
+34427
+34428
+34429
+34430
+34431
+34432
+34433
+34434
+34435
+34436
+34437
+34438
+34439
+34440
+34441
+34442
+34443
+34444
+34445
+34446
+34447
+34448
+34449
+34450
+34451
+34452
+34453
+34454
+34455
+34456
+34457
+34458
+34459
+34460
+34461
+34462
+34463
+34464
+34465
+34466
+34467
+34468
+34469
+34470
+34471
+34472
+34473
+34474
+34475
+34476
+34477
+34478
+34479
+34480
+34481
+34482
+34483
+34484
+34485
+34486
+34487
+34488
+34489
+34490
+34491
+34492
+34493
+34494
+34495
+34496
+34497
+34498
+34499
+34500
+34501
+34502
+34503
+34504
+34505
+34506
+34507
+34508
+34509
+34510
+34511
+34512
+34513
+34514
+34515
+34516
+34517
+34518
+34519
+34520
+34521
+34522
+34523
+34524
+34525
+34526
+34527
+34528
+34529
+34530
+34531
+34532
+34533
+34534
+34535
+34536
+34537
+34538
+34539
+34540
+34541
+34542
+34543
+34544
+34545
+34546
+34547
+34548
+34549
+34550
+34551
+34552
+34553
+34554
+34555
+34556
+34557
+34558
+34559
+34560
+34561
+34562
+34563
+34564
+34565
+34566
+34567
+34568
+34569
+34570
+34571
+34572
+34573
+34574
+34575
+34576
+34577
+34578
+34579
+34580
+34581
+34582
+34583
+34584
+34585
+34586
+34587
+34588
+34589
+34590
+34591
+34592
+34593
+34594
+34595
+34596
+34597
+34598
+34599
+34600
+34601
+34602
+34603
+34604
+34605
+34606
+34607
+34608
+34609
+34610
+34611
+34612
+34613
+34614
+34615
+34616
+34617
+34618
+34619
+34620
+34621
+34622
+34623
+34624
+34625
+34626
+34627
+34628
+34629
+34630
+34631
+34632
+34633
+34634
+34635
+34636
+34637
+34638
+34639
+34640
+34641
+34642
+34643
+34644
+34645
+34646
+34647
+34648
+34649
+34650
+34651
+34652
+34653
+34654
+34655
+34656
+34657
+34658
+34659
+34660
+34661
+34662
+34663
+34664
+34665
+34666
+34667
+34668
+34669
+34670
+34671
+34672
+34673
+34674
+34675
+34676
+34677
+34678
+34679
+34680
+34681
+34682
+34683
+34684
+34685
+34686
+34687
+34688
+34689
+34690
+34691
+34692
+34693
+34694
+34695
+34696
+34697
+34698
+34699
+34700
+34701
+34702
+34703
+34704
+34705
+34706
+34707
+34708
+34709
+34710
+34711
+34712
+34713
+34714
+34715
+34716
+34717
+34718
+34719
+34720
+34721
+34722
+34723
+34724
+34725
+34726
+34727
+34728
+34729
+34730
+34731
+34732
+34733
+34734
+34735
+34736
+34737
+34738
+34739
+34740
+34741
+34742
+34743
+34744
+34745
+34746
+34747
+34748
+34749
+34750
+34751
+34752
+34753
+34754
+34755
+34756
+34757
+34758
+34759
+34760
+34761
+34762
+34763
+34764
+34765
+34766
+34767
+34768
+34769
+34770
+34771
+34772
+34773
+34774
+34775
+34776
+34777
+34778
+34779
+34780
+34781
+34782
+34783
+34784
+34785
+34786
+34787
+34788
+34789
+34790
+34791
+34792
+34793
+34794
+34795
+34796
+34797
+34798
+34799
+34800
+34801
+34802
+34803
+34804
+34805
+34806
+34807
+34808
+34809
+34810
+34811
+34812
+34813
+34814
+34815
+34816
+34817
+34818
+34819
+34820
+34821
+34822
+34823
+34824
+34825
+34826
+34827
+34828
+34829
+34830
+34831
+34832
+34833
+34834
+34835
+34836
+34837
+34838
+34839
+34840
+34841
+34842
+34843
+34844
+34845
+34846
+34847
+34848
+34849
+34850
+34851
+34852
+34853
+34854
+34855
+34856
+34857
+34858
+34859
+34860
+34861
+34862
+34863
+34864
+34865
+34866
+34867
+34868
+34869
+34870
+34871
+34872
+34873
+34874
+34875
+34876
+34877
+34878
+34879
+34880
+34881
+34882
+34883
+34884
+34885
+34886
+34887
+34888
+34889
+34890
+34891
+34892
+34893
+34894
+34895
+34896
+34897
+34898
+34899
+34900
+34901
+34902
+34903
+34904
+34905
+34906
+34907
+34908
+34909
+34910
+34911
+34912
+34913
+34914
+34915
+34916
+34917
+34918
+34919
+34920
+34921
+34922
+34923
+34924
+34925
+34926
+34927
+34928
+34929
+34930
+34931
+34932
+34933
+34934
+34935
+34936
+34937
+34938
+34939
+34940
+34941
+34942
+34943
+34944
+34945
+34946
+34947
+34948
+34949
+34950
+34951
+34952
+34953
+34954
+34955
+34956
+34957
+34958
+34959
+34960
+34961
+34962
+34963
+34964
+34965
+34966
+34967
+34968
+34969
+34970
+34971
+34972
+34973
+34974
+34975
+34976
+34977
+34978
+34979
+34980
+34981
+34982
+34983
+34984
+34985
+34986
+34987
+34988
+34989
+34990
+34991
+34992
+34993
+34994
+34995
+34996
+34997
+34998
+34999
+35000
+35001
+35002
+35003
+35004
+35005
+35006
+35007
+35008
+35009
+35010
+35011
+35012
+35013
+35014
+35015
+35016
+35017
+35018
+35019
+35020
+35021
+35022
+35023
+35024
+35025
+35026
+35027
+35028
+35029
+35030
+35031
+35032
+35033
+35034
+35035
+35036
+35037
+35038
+35039
+35040
+35041
+35042
+35043
+35044
+35045
+35046
+35047
+35048
+35049
+35050
+35051
+35052
+35053
+35054
+35055
+35056
+35057
+35058
+35059
+35060
+35061
+35062
+35063
+35064
+35065
+35066
+35067
+35068
+35069
+35070
+35071
+35072
+35073
+35074
+35075
+35076
+35077
+35078
+35079
+35080
+35081
+35082
+35083
+35084
+35085
+35086
+35087
+35088
+35089
+35090
+35091
+35092
+35093
+35094
+35095
+35096
+35097
+35098
+35099
+35100
+35101
+35102
+35103
+35104
+35105
+35106
+35107
+35108
+35109
+35110
+35111
+35112
+35113
+35114
+35115
+35116
+35117
+35118
+35119
+35120
+35121
+35122
+35123
+35124
+35125
+35126
+35127
+35128
+35129
+35130
+35131
+35132
+35133
+35134
+35135
+35136
+35137
+35138
+35139
+35140
+35141
+35142
+35143
+35144
+35145
+35146
+35147
+35148
+35149
+35150
+35151
+35152
+35153
+35154
+35155
+35156
+35157
+35158
+35159
+35160
+35161
+35162
+35163
+35164
+35165
+35166
+35167
+35168
+35169
+35170
+35171
+35172
+35173
+35174
+35175
+35176
+35177
+35178
+35179
+35180
+35181
+35182
+35183
+35184
+35185
+35186
+35187
+35188
+35189
+35190
+35191
+35192
+35193
+35194
+35195
+35196
+35197
+35198
+35199
+35200
+35201
+35202
+35203
+35204
+35205
+35206
+35207
+35208
+35209
+35210
+35211
+35212
+35213
+35214
+35215
+35216
+35217
+35218
+35219
+35220
+35221
+35222
+35223
+35224
+35225
+35226
+35227
+35228
+35229
+35230
+35231
+35232
+35233
+35234
+35235
+35236
+35237
+35238
+35239
+35240
+35241
+35242
+35243
+35244
+35245
+35246
+35247
+35248
+35249
+35250
+35251
+35252
+35253
+35254
+35255
+35256
+35257
+35258
+35259
+35260
+35261
+35262
+35263
+35264
+35265
+35266
+35267
+35268
+35269
+35270
+35271
+35272
+35273
+35274
+35275
+35276
+35277
+35278
+35279
+35280
+35281
+35282
+35283
+35284
+35285
+35286
+35287
+35288
+35289
+35290
+35291
+35292
+35293
+35294
+35295
+35296
+35297
+35298
+35299
+35300
+35301
+35302
+35303
+35304
+35305
+35306
+35307
+35308
+35309
+35310
+35311
+35312
+35313
+35314
+35315
+35316
+35317
+35318
+35319
+35320
+35321
+35322
+35323
+35324
+35325
+35326
+35327
+35328
+35329
+35330
+35331
+35332
+35333
+35334
+35335
+35336
+35337
+35338
+35339
+35340
+35341
+35342
+35343
+35344
+35345
+35346
+35347
+35348
+35349
+35350
+35351
+35352
+35353
+35354
+35355
+35356
+35357
+35358
+35359
+35360
+35361
+35362
+35363
+35364
+35365
+35366
+35367
+35368
+35369
+35370
+35371
+35372
+35373
+35374
+35375
+35376
+35377
+35378
+35379
+35380
+35381
+35382
+35383
+35384
+35385
+35386
+35387
+35388
+35389
+35390
+35391
+35392
+35393
+35394
+35395
+35396
+35397
+35398
+35399
+35400
+35401
+35402
+35403
+35404
+35405
+35406
+35407
+35408
+35409
+35410
+35411
+35412
+35413
+35414
+35415
+35416
+35417
+35418
+35419
+35420
+35421
+35422
+35423
+35424
+35425
+35426
+35427
+35428
+35429
+35430
+35431
+35432
+35433
+35434
+35435
+35436
+35437
+35438
+35439
+35440
+35441
+35442
+35443
+35444
+35445
+35446
+35447
+35448
+35449
+35450
+35451
+35452
+35453
+35454
+35455
+35456
+35457
+35458
+35459
+35460
+35461
+35462
+35463
+35464
+35465
+35466
+35467
+35468
+35469
+35470
+35471
+35472
+35473
+35474
+35475
+35476
+35477
+35478
+35479
+35480
+35481
+35482
+35483
+35484
+35485
+35486
+35487
+35488
+35489
+35490
+35491
+35492
+35493
+35494
+35495
+35496
+35497
+35498
+35499
+35500
+35501
+35502
+35503
+35504
+35505
+35506
+35507
+35508
+35509
+35510
+35511
+35512
+35513
+35514
+35515
+35516
+35517
+35518
+35519
+35520
+35521
+35522
+35523
+35524
+35525
+35526
+35527
+35528
+35529
+35530
+35531
+35532
+35533
+35534
+35535
+35536
+35537
+35538
+35539
+35540
+35541
+35542
+35543
+35544
+35545
+35546
+35547
+35548
+35549
+35550
+35551
+35552
+35553
+35554
+35555
+35556
+35557
+35558
+35559
+35560
+35561
+35562
+35563
+35564
+35565
+35566
+35567
+35568
+35569
+35570
+35571
+35572
+35573
+35574
+35575
+35576
+35577
+35578
+35579
+35580
+35581
+35582
+35583
+35584
+35585
+35586
+35587
+35588
+35589
+35590
+35591
+35592
+35593
+35594
+35595
+35596
+35597
+35598
+35599
+35600
+35601
+35602
+35603
+35604
+35605
+35606
+35607
+35608
+35609
+35610
+35611
+35612
+35613
+35614
+35615
+35616
+35617
+35618
+35619
+35620
+35621
+35622
+35623
+35624
+35625
+35626
+35627
+35628
+35629
+35630
+35631
+35632
+35633
+35634
+35635
+35636
+35637
+35638
+35639
+35640
+35641
+35642
+35643
+35644
+35645
+35646
+35647
+35648
+35649
+35650
+35651
+35652
+35653
+35654
+35655
+35656
+35657
+35658
+35659
+35660
+35661
+35662
+35663
+35664
+35665
+35666
+35667
+35668
+35669
+35670
+35671
+35672
+35673
+35674
+35675
+35676
+35677
+35678
+35679
+35680
+35681
+35682
+35683
+35684
+35685
+35686
+35687
+35688
+35689
+35690
+35691
+35692
+35693
+35694
+35695
+35696
+35697
+35698
+35699
+35700
+35701
+35702
+35703
+35704
+35705
+35706
+35707
+35708
+35709
+35710
+35711
+35712
+35713
+35714
+35715
+35716
+35717
+35718
+35719
+35720
+35721
+35722
+35723
+35724
+35725
+35726
+35727
+35728
+35729
+35730
+35731
+35732
+35733
+35734
+35735
+35736
+35737
+35738
+35739
+35740
+35741
+35742
+35743
+35744
+35745
+35746
+35747
+35748
+35749
+35750
+35751
+35752
+35753
+35754
+35755
+35756
+35757
+35758
+35759
+35760
+35761
+35762
+35763
+35764
+35765
+35766
+35767
+35768
+35769
+35770
+35771
+35772
+35773
+35774
+35775
+35776
+35777
+35778
+35779
+35780
+35781
+35782
+35783
+35784
+35785
+35786
+35787
+35788
+35789
+35790
+35791
+35792
+35793
+35794
+35795
+35796
+35797
+35798
+35799
+35800
+35801
+35802
+35803
+35804
+35805
+35806
+35807
+35808
+35809
+35810
+35811
+35812
+35813
+35814
+35815
+35816
+35817
+35818
+35819
+35820
+35821
+35822
+35823
+35824
+35825
+35826
+35827
+35828
+35829
+35830
+35831
+35832
+35833
+35834
+35835
+35836
+35837
+35838
+35839
+35840
+35841
+35842
+35843
+35844
+35845
+35846
+35847
+35848
+35849
+35850
+35851
+35852
+35853
+35854
+35855
+35856
+35857
+35858
+35859
+35860
+35861
+35862
+35863
+35864
+35865
+35866
+35867
+35868
+35869
+35870
+35871
+35872
+35873
+35874
+35875
+35876
+35877
+35878
+35879
+35880
+35881
+35882
+35883
+35884
+35885
+35886
+35887
+35888
+35889
+35890
+35891
+35892
+35893
+35894
+35895
+35896
+35897
+35898
+35899
+35900
+35901
+35902
+35903
+35904
+35905
+35906
+35907
+35908
+35909
+35910
+35911
+35912
+35913
+35914
+35915
+35916
+35917
+35918
+35919
+35920
+35921
+35922
+35923
+35924
+35925
+35926
+35927
+35928
+35929
+35930
+35931
+35932
+35933
+35934
+35935
+35936
+35937
+35938
+35939
+35940
+35941
+35942
+35943
+35944
+35945
+35946
+35947
+35948
+35949
+35950
+35951
+35952
+35953
+35954
+35955
+35956
+35957
+35958
+35959
+35960
+35961
+35962
+35963
+35964
+35965
+35966
+35967
+35968
+35969
+35970
+35971
+35972
+35973
+35974
+35975
+35976
+35977
+35978
+35979
+35980
+35981
+35982
+35983
+35984
+35985
+35986
+35987
+35988
+35989
+35990
+35991
+35992
+35993
+35994
+35995
+35996
+35997
+35998
+35999
+36000
+36001
+36002
+36003
+36004
+36005
+36006
+36007
+36008
+36009
+36010
+36011
+36012
+36013
+36014
+36015
+36016
+36017
+36018
+36019
+36020
+36021
+36022
+36023
+36024
+36025
+36026
+36027
+36028
+36029
+36030
+36031
+36032
+36033
+36034
+36035
+36036
+36037
+36038
+36039
+36040
+36041
+36042
+36043
+36044
+36045
+36046
+36047
+36048
+36049
+36050
+36051
+36052
+36053
+36054
+36055
+36056
+36057
+36058
+36059
+36060
+36061
+36062
+36063
+36064
+36065
+36066
+36067
+36068
+36069
+36070
+36071
+36072
+36073
+36074
+36075
+36076
+36077
+36078
+36079
+36080
+36081
+36082
+36083
+36084
+36085
+36086
+36087
+36088
+36089
+36090
+36091
+36092
+36093
+36094
+36095
+36096
+36097
+36098
+36099
+36100
+36101
+36102
+36103
+36104
+36105
+36106
+36107
+36108
+36109
+36110
+36111
+36112
+36113
+36114
+36115
+36116
+36117
+36118
+36119
+36120
+36121
+36122
+36123
+36124
+36125
+36126
+36127
+36128
+36129
+36130
+36131
+36132
+36133
+36134
+36135
+36136
+36137
+36138
+36139
+36140
+36141
+36142
+36143
+36144
+36145
+36146
+36147
+36148
+36149
+36150
+36151
+36152
+36153
+36154
+36155
+36156
+36157
+36158
+36159
+36160
+36161
+36162
+36163
+36164
+36165
+36166
+36167
+36168
+36169
+36170
+36171
+36172
+36173
+36174
+36175
+36176
+36177
+36178
+36179
+36180
+36181
+36182
+36183
+36184
+36185
+36186
+36187
+36188
+36189
+36190
+36191
+36192
+36193
+36194
+36195
+36196
+36197
+36198
+36199
+36200
+36201
+36202
+36203
+36204
+36205
+36206
+36207
+36208
+36209
+36210
+36211
+36212
+36213
+36214
+36215
+36216
+36217
+36218
+36219
+36220
+36221
+36222
+36223
+36224
+36225
+36226
+36227
+36228
+36229
+36230
+36231
+36232
+36233
+36234
+36235
+36236
+36237
+36238
+36239
+36240
+36241
+36242
+36243
+36244
+36245
+36246
+36247
+36248
+36249
+36250
+36251
+36252
+36253
+36254
+36255
+36256
+36257
+36258
+36259
+36260
+36261
+36262
+36263
+36264
+36265
+36266
+36267
+36268
+36269
+36270
+36271
+36272
+36273
+36274
+36275
+36276
+36277
+36278
+36279
+36280
+36281
+36282
+36283
+36284
+36285
+36286
+36287
+36288
+36289
+36290
+36291
+36292
+36293
+36294
+36295
+36296
+36297
+36298
+36299
+36300
+36301
+36302
+36303
+36304
+36305
+36306
+36307
+36308
+36309
+36310
+36311
+36312
+36313
+36314
+36315
+36316
+36317
+36318
+36319
+36320
+36321
+36322
+36323
+36324
+36325
+36326
+36327
+36328
+36329
+36330
+36331
+36332
+36333
+36334
+36335
+36336
+36337
+36338
+36339
+36340
+36341
+36342
+36343
+36344
+36345
+36346
+36347
+36348
+36349
+36350
+36351
+36352
+36353
+36354
+36355
+36356
+36357
+36358
+36359
+36360
+36361
+36362
+36363
+36364
+36365
+36366
+36367
+36368
+36369
+36370
+36371
+36372
+36373
+36374
+36375
+36376
+36377
+36378
+36379
+36380
+36381
+36382
+36383
+36384
+36385
+36386
+36387
+36388
+36389
+36390
+36391
+36392
+36393
+36394
+36395
+36396
+36397
+36398
+36399
+36400
+36401
+36402
+36403
+36404
+36405
+36406
+36407
+36408
+36409
+36410
+36411
+36412
+36413
+36414
+36415
+36416
+36417
+36418
+36419
+36420
+36421
+36422
+36423
+36424
+36425
+36426
+36427
+36428
+36429
+36430
+36431
+36432
+36433
+36434
+36435
+36436
+36437
+36438
+36439
+36440
+36441
+36442
+36443
+36444
+36445
+36446
+36447
+36448
+36449
+36450
+36451
+36452
+36453
+36454
+36455
+36456
+36457
+36458
+36459
+36460
+36461
+36462
+36463
+36464
+36465
+36466
+36467
+36468
+36469
+36470
+36471
+36472
+36473
+36474
+36475
+36476
+36477
+36478
+36479
+36480
+36481
+36482
+36483
+36484
+36485
+36486
+36487
+36488
+36489
+36490
+36491
+36492
+36493
+36494
+36495
+36496
+36497
+36498
+36499
+36500
+36501
+36502
+36503
+36504
+36505
+36506
+36507
+36508
+36509
+36510
+36511
+36512
+36513
+36514
+36515
+36516
+36517
+36518
+36519
+36520
+36521
+36522
+36523
+36524
+36525
+36526
+36527
+36528
+36529
+36530
+36531
+36532
+36533
+36534
+36535
+36536
+36537
+36538
+36539
+36540
+36541
+36542
+36543
+36544
+36545
+36546
+36547
+36548
+36549
+36550
+36551
+36552
+36553
+36554
+36555
+36556
+36557
+36558
+36559
+36560
+36561
+36562
+36563
+36564
+36565
+36566
+36567
+36568
+36569
+36570
+36571
+36572
+36573
+36574
+36575
+36576
+36577
+36578
+36579
+36580
+36581
+36582
+36583
+36584
+36585
+36586
+36587
+36588
+36589
+36590
+36591
+36592
+36593
+36594
+36595
+36596
+36597
+36598
+36599
+36600
+36601
+36602
+36603
+36604
+36605
+36606
+36607
+36608
+36609
+36610
+36611
+36612
+36613
+36614
+36615
+36616
+36617
+36618
+36619
+36620
+36621
+36622
+36623
+36624
+36625
+36626
+36627
+36628
+36629
+36630
+36631
+36632
+36633
+36634
+36635
+36636
+36637
+36638
+36639
+36640
+36641
+36642
+36643
+36644
+36645
+36646
+36647
+36648
+36649
+36650
+36651
+36652
+36653
+36654
+36655
+36656
+36657
+36658
+36659
+36660
+36661
+36662
+36663
+36664
+36665
+36666
+36667
+36668
+36669
+36670
+36671
+36672
+36673
+36674
+36675
+36676
+36677
+36678
+36679
+36680
+36681
+36682
+36683
+36684
+36685
+36686
+36687
+36688
+36689
+36690
+36691
+36692
+36693
+36694
+36695
+36696
+36697
+36698
+36699
+36700
+36701
+36702
+36703
+36704
+36705
+36706
+36707
+36708
+36709
+36710
+36711
+36712
+36713
+36714
+36715
+36716
+36717
+36718
+36719
+36720
+36721
+36722
+36723
+36724
+36725
+36726
+36727
+36728
+36729
+36730
+36731
+36732
+36733
+36734
+36735
+36736
+36737
+36738
+36739
+36740
+36741
+36742
+36743
+36744
+36745
+36746
+36747
+36748
+36749
+36750
+36751
+36752
+36753
+36754
+36755
+36756
+36757
+36758
+36759
+36760
+36761
+36762
+36763
+36764
+36765
+36766
+36767
+36768
+36769
+36770
+36771
+36772
+36773
+36774
+36775
+36776
+36777
+36778
+36779
+36780
+36781
+36782
+36783
+36784
+36785
+36786
+36787
+36788
+36789
+36790
+36791
+36792
+36793
+36794
+36795
+36796
+36797
+36798
+36799
+36800
+36801
+36802
+36803
+36804
+36805
+36806
+36807
+36808
+36809
+36810
+36811
+36812
+36813
+36814
+36815
+36816
+36817
+36818
+36819
+36820
+36821
+36822
+36823
+36824
+36825
+36826
+36827
+36828
+36829
+36830
+36831
+36832
+36833
+36834
+36835
+36836
+36837
+36838
+36839
+36840
+36841
+36842
+36843
+36844
+36845
+36846
+36847
+36848
+36849
+36850
+36851
+36852
+36853
+36854
+36855
+36856
+36857
+36858
+36859
+36860
+36861
+36862
+36863
+36864
+36865
+36866
+36867
+36868
+36869
+36870
+36871
+36872
+36873
+36874
+36875
+36876
+36877
+36878
+36879
+36880
+36881
+36882
+36883
+36884
+36885
+36886
+36887
+36888
+36889
+36890
+36891
+36892
+36893
+36894
+36895
+36896
+36897
+36898
+36899
+36900
+36901
+36902
+36903
+36904
+36905
+36906
+36907
+36908
+36909
+36910
+36911
+36912
+36913
+36914
+36915
+36916
+36917
+36918
+36919
+36920
+36921
+36922
+36923
+36924
+36925
+36926
+36927
+36928
+36929
+36930
+36931
+36932
+36933
+36934
+36935
+36936
+36937
+36938
+36939
+36940
+36941
+36942
+36943
+36944
+36945
+36946
+36947
+36948
+36949
+36950
+36951
+36952
+36953
+36954
+36955
+36956
+36957
+36958
+36959
+36960
+36961
+36962
+36963
+36964
+36965
+36966
+36967
+36968
+36969
+36970
+36971
+36972
+36973
+36974
+36975
+36976
+36977
+36978
+36979
+36980
+36981
+36982
+36983
+36984
+36985
+36986
+36987
+36988
+36989
+36990
+36991
+36992
+36993
+36994
+36995
+36996
+36997
+36998
+36999
+37000
+37001
+37002
+37003
+37004
+37005
+37006
+37007
+37008
+37009
+37010
+37011
+37012
+37013
+37014
+37015
+37016
+37017
+37018
+37019
+37020
+37021
+37022
+37023
+37024
+37025
+37026
+37027
+37028
+37029
+37030
+37031
+37032
+37033
+37034
+37035
+37036
+37037
+37038
+37039
+37040
+37041
+37042
+37043
+37044
+37045
+37046
+37047
+37048
+37049
+37050
+37051
+37052
+37053
+37054
+37055
+37056
+37057
+37058
+37059
+37060
+37061
+37062
+37063
+37064
+37065
+37066
+37067
+37068
+37069
+37070
+37071
+37072
+37073
+37074
+37075
+37076
+37077
+37078
+37079
+37080
+37081
+37082
+37083
+37084
+37085
+37086
+37087
+37088
+37089
+37090
+37091
+37092
+37093
+37094
+37095
+37096
+37097
+37098
+37099
+37100
+37101
+37102
+37103
+37104
+37105
+37106
+37107
+37108
+37109
+37110
+37111
+37112
+37113
+37114
+37115
+37116
+37117
+37118
+37119
+37120
+37121
+37122
+37123
+37124
+37125
+37126
+37127
+37128
+37129
+37130
+37131
+37132
+37133
+37134
+37135
+37136
+37137
+37138
+37139
+37140
+37141
+37142
+37143
+37144
+37145
+37146
+37147
+37148
+37149
+37150
+37151
+37152
+37153
+37154
+37155
+37156
+37157
+37158
+37159
+37160
+37161
+37162
+37163
+37164
+37165
+37166
+37167
+37168
+37169
+37170
+37171
+37172
+37173
+37174
+37175
+37176
+37177
+37178
+37179
+37180
+37181
+37182
+37183
+37184
+37185
+37186
+37187
+37188
+37189
+37190
+37191
+37192
+37193
+37194
+37195
+37196
+37197
+37198
+37199
+37200
+37201
+37202
+37203
+37204
+37205
+37206
+37207
+37208
+37209
+37210
+37211
+37212
+37213
+37214
+37215
+37216
+37217
+37218
+37219
+37220
+37221
+37222
+37223
+37224
+37225
+37226
+37227
+37228
+37229
+37230
+37231
+37232
+37233
+37234
+37235
+37236
+37237
+37238
+37239
+37240
+37241
+37242
+37243
+37244
+37245
+37246
+37247
+37248
+37249
+37250
+37251
+37252
+37253
+37254
+37255
+37256
+37257
+37258
+37259
+37260
+37261
+37262
+37263
+37264
+37265
+37266
+37267
+37268
+37269
+37270
+37271
+37272
+37273
+37274
+37275
+37276
+37277
+37278
+37279
+37280
+37281
+37282
+37283
+37284
+37285
+37286
+37287
+37288
+37289
+37290
+37291
+37292
+37293
+37294
+37295
+37296
+37297
+37298
+37299
+37300
+37301
+37302
+37303
+37304
+37305
+37306
+37307
+37308
+37309
+37310
+37311
+37312
+37313
+37314
+37315
+37316
+37317
+37318
+37319
+37320
+37321
+37322
+37323
+37324
+37325
+37326
+37327
+37328
+37329
+37330
+37331
+37332
+37333
+37334
+37335
+37336
+37337
+37338
+37339
+37340
+37341
+37342
+37343
+37344
+37345
+37346
+37347
+37348
+37349
+37350
+37351
+37352
+37353
+37354
+37355
+37356
+37357
+37358
+37359
+37360
+37361
+37362
+37363
+37364
+37365
+37366
+37367
+37368
+37369
+37370
+37371
+37372
+37373
+37374
+37375
+37376
+37377
+37378
+37379
+37380
+37381
+37382
+37383
+37384
+37385
+37386
+37387
+37388
+37389
+37390
+37391
+37392
+37393
+37394
+37395
+37396
+37397
+37398
+37399
+37400
+37401
+37402
+37403
+37404
+37405
+37406
+37407
+37408
+37409
+37410
+37411
+37412
+37413
+37414
+37415
+37416
+37417
+37418
+37419
+37420
+37421
+37422
+37423
+37424
+37425
+37426
+37427
+37428
+37429
+37430
+37431
+37432
+37433
+37434
+37435
+37436
+37437
+37438
+37439
+37440
+37441
+37442
+37443
+37444
+37445
+37446
+37447
+37448
+37449
+37450
+37451
+37452
+37453
+37454
+37455
+37456
+37457
+37458
+37459
+37460
+37461
+37462
+37463
+37464
+37465
+37466
+37467
+37468
+37469
+37470
+37471
+37472
+37473
+37474
+37475
+37476
+37477
+37478
+37479
+37480
+37481
+37482
+37483
+37484
+37485
+37486
+37487
+37488
+37489
+37490
+37491
+37492
+37493
+37494
+37495
+37496
+37497
+37498
+37499
+37500
+37501
+37502
+37503
+37504
+37505
+37506
+37507
+37508
+37509
+37510
+37511
+37512
+37513
+37514
+37515
+37516
+37517
+37518
+37519
+37520
+37521
+37522
+37523
+37524
+37525
+37526
+37527
+37528
+37529
+37530
+37531
+37532
+37533
+37534
+37535
+37536
+37537
+37538
+37539
+37540
+37541
+37542
+37543
+37544
+37545
+37546
+37547
+37548
+37549
+37550
+37551
+37552
+37553
+37554
+37555
+37556
+37557
+37558
+37559
+37560
+37561
+37562
+37563
+37564
+37565
+37566
+37567
+37568
+37569
+37570
+37571
+37572
+37573
+37574
+37575
+37576
+37577
+37578
+37579
+37580
+37581
+37582
+37583
+37584
+37585
+37586
+37587
+37588
+37589
+37590
+37591
+37592
+37593
+37594
+37595
+37596
+37597
+37598
+37599
+37600
+37601
+37602
+37603
+37604
+37605
+37606
+37607
+37608
+37609
+37610
+37611
+37612
+37613
+37614
+37615
+37616
+37617
+37618
+37619
+37620
+37621
+37622
+37623
+37624
+37625
+37626
+37627
+37628
+37629
+37630
+37631
+37632
+37633
+37634
+37635
+37636
+37637
+37638
+37639
+37640
+37641
+37642
+37643
+37644
+37645
+37646
+37647
+37648
+37649
+37650
+37651
+37652
+37653
+37654
+37655
+37656
+37657
+37658
+37659
+37660
+37661
+37662
+37663
+37664
+37665
+37666
+37667
+37668
+37669
+37670
+37671
+37672
+37673
+37674
+37675
+37676
+37677
+37678
+37679
+37680
+37681
+37682
+37683
+37684
+37685
+37686
+37687
+37688
+37689
+37690
+37691
+37692
+37693
+37694
+37695
+37696
+37697
+37698
+37699
+37700
+37701
+37702
+37703
+37704
+37705
+37706
+37707
+37708
+37709
+37710
+37711
+37712
+37713
+37714
+37715
+37716
+37717
+37718
+37719
+37720
+37721
+37722
+37723
+37724
+37725
+37726
+37727
+37728
+37729
+37730
+37731
+37732
+37733
+37734
+37735
+37736
+37737
+37738
+37739
+37740
+37741
+37742
+37743
+37744
+37745
+37746
+37747
+37748
+37749
+37750
+37751
+37752
+37753
+37754
+37755
+37756
+37757
+37758
+37759
+37760
+37761
+37762
+37763
+37764
+37765
+37766
+37767
+37768
+37769
+37770
+37771
+37772
+37773
+37774
+37775
+37776
+37777
+37778
+37779
+37780
+37781
+37782
+37783
+37784
+37785
+37786
+37787
+37788
+37789
+37790
+37791
+37792
+37793
+37794
+37795
+37796
+37797
+37798
+37799
+37800
+37801
+37802
+37803
+37804
+37805
+37806
+37807
+37808
+37809
+37810
+37811
+37812
+37813
+37814
+37815
+37816
+37817
+37818
+37819
+37820
+37821
+37822
+37823
+37824
+37825
+37826
+37827
+37828
+37829
+37830
+37831
+37832
+37833
+37834
+37835
+37836
+37837
+37838
+37839
+37840
+37841
+37842
+37843
+37844
+37845
+37846
+37847
+37848
+37849
+37850
+37851
+37852
+37853
+37854
+37855
+37856
+37857
+37858
+37859
+37860
+37861
+37862
+37863
+37864
+37865
+37866
+37867
+37868
+37869
+37870
+37871
+37872
+37873
+37874
+37875
+37876
+37877
+37878
+37879
+37880
+37881
+37882
+37883
+37884
+37885
+37886
+37887
+37888
+37889
+37890
+37891
+37892
+37893
+37894
+37895
+37896
+37897
+37898
+37899
+37900
+37901
+37902
+37903
+37904
+37905
+37906
+37907
+37908
+37909
+37910
+37911
+37912
+37913
+37914
+37915
+37916
+37917
+37918
+37919
+37920
+37921
+37922
+37923
+37924
+37925
+37926
+37927
+37928
+37929
+37930
+37931
+37932
+37933
+37934
+37935
+37936
+37937
+37938
+37939
+37940
+37941
+37942
+37943
+37944
+37945
+37946
+37947
+37948
+37949
+37950
+37951
+37952
+37953
+37954
+37955
+37956
+37957
+37958
+37959
+37960
+37961
+37962
+37963
+37964
+37965
+37966
+37967
+37968
+37969
+37970
+37971
+37972
+37973
+37974
+37975
+37976
+37977
+37978
+37979
+37980
+37981
+37982
+37983
+37984
+37985
+37986
+37987
+37988
+37989
+37990
+37991
+37992
+37993
+37994
+37995
+37996
+37997
+37998
+37999
+38000
+38001
+38002
+38003
+38004
+38005
+38006
+38007
+38008
+38009
+38010
+38011
+38012
+38013
+38014
+38015
+38016
+38017
+38018
+38019
+38020
+38021
+38022
+38023
+38024
+38025
+38026
+38027
+38028
+38029
+38030
+38031
+38032
+38033
+38034
+38035
+38036
+38037
+38038
+38039
+38040
+38041
+38042
+38043
+38044
+38045
+38046
+38047
+38048
+38049
+38050
+38051
+38052
+38053
+38054
+38055
+38056
+38057
+38058
+38059
+38060
+38061
+38062
+38063
+38064
+38065
+38066
+38067
+38068
+38069
+38070
+38071
+38072
+38073
+38074
+38075
+38076
+38077
+38078
+38079
+38080
+38081
+38082
+38083
+38084
+38085
+38086
+38087
+38088
+38089
+38090
+38091
+38092
+38093
+38094
+38095
+38096
+38097
+38098
+38099
+38100
+38101
+38102
+38103
+38104
+38105
+38106
+38107
+38108
+38109
+38110
+38111
+38112
+38113
+38114
+38115
+38116
+38117
+38118
+38119
+38120
+38121
+38122
+38123
+38124
+38125
+38126
+38127
+38128
+38129
+38130
+38131
+38132
+38133
+38134
+38135
+38136
+38137
+38138
+38139
+38140
+38141
+38142
+38143
+38144
+38145
+38146
+38147
+38148
+38149
+38150
+38151
+38152
+38153
+38154
+38155
+38156
+38157
+38158
+38159
+38160
+38161
+38162
+38163
+38164
+38165
+38166
+38167
+38168
+38169
+38170
+38171
+38172
+38173
+38174
+38175
+38176
+38177
+38178
+38179
+38180
+38181
+38182
+38183
+38184
+38185
+38186
+38187
+38188
+38189
+38190
+38191
+38192
+38193
+38194
+38195
+38196
+38197
+38198
+38199
+38200
+38201
+38202
+38203
+38204
+38205
+38206
+38207
+38208
+38209
+38210
+38211
+38212
+38213
+38214
+38215
+38216
+38217
+38218
+38219
+38220
+38221
+38222
+38223
+38224
+38225
+38226
+38227
+38228
+38229
+38230
+38231
+38232
+38233
+38234
+38235
+38236
+38237
+38238
+38239
+38240
+38241
+38242
+38243
+38244
+38245
+38246
+38247
+38248
+38249
+38250
+38251
+38252
+38253
+38254
+38255
+38256
+38257
+38258
+38259
+38260
+38261
+38262
+38263
+38264
+38265
+38266
+38267
+38268
+38269
+38270
+38271
+38272
+38273
+38274
+38275
+38276
+38277
+38278
+38279
+38280
+38281
+38282
+38283
+38284
+38285
+38286
+38287
+38288
+38289
+38290
+38291
+38292
+38293
+38294
+38295
+38296
+38297
+38298
+38299
+38300
+38301
+38302
+38303
+38304
+38305
+38306
+38307
+38308
+38309
+38310
+38311
+38312
+38313
+38314
+38315
+38316
+38317
+38318
+38319
+38320
+38321
+38322
+38323
+38324
+38325
+38326
+38327
+38328
+38329
+38330
+38331
+38332
+38333
+38334
+38335
+38336
+38337
+38338
+38339
+38340
+38341
+38342
+38343
+38344
+38345
+38346
+38347
+38348
+38349
+38350
+38351
+38352
+38353
+38354
+38355
+38356
+38357
+38358
+38359
+38360
+38361
+38362
+38363
+38364
+38365
+38366
+38367
+38368
+38369
+38370
+38371
+38372
+38373
+38374
+38375
+38376
+38377
+38378
+38379
+38380
+38381
+38382
+38383
+38384
+38385
+38386
+38387
+38388
+38389
+38390
+38391
+38392
+38393
+38394
+38395
+38396
+38397
+38398
+38399
+38400
+38401
+38402
+38403
+38404
+38405
+38406
+38407
+38408
+38409
+38410
+38411
+38412
+38413
+38414
+38415
+38416
+38417
+38418
+38419
+38420
+38421
+38422
+38423
+38424
+38425
+38426
+38427
+38428
+38429
+38430
+38431
+38432
+38433
+38434
+38435
+38436
+38437
+38438
+38439
+38440
+38441
+38442
+38443
+38444
+38445
+38446
+38447
+38448
+38449
+38450
+38451
+38452
+38453
+38454
+38455
+38456
+38457
+38458
+38459
+38460
+38461
+38462
+38463
+38464
+38465
+38466
+38467
+38468
+38469
+38470
+38471
+38472
+38473
+38474
+38475
+38476
+38477
+38478
+38479
+38480
+38481
+38482
+38483
+38484
+38485
+38486
+38487
+38488
+38489
+38490
+38491
+38492
+38493
+38494
+38495
+38496
+38497
+38498
+38499
+38500
+38501
+38502
+38503
+38504
+38505
+38506
+38507
+38508
+38509
+38510
+38511
+38512
+38513
+38514
+38515
+38516
+38517
+38518
+38519
+38520
+38521
+38522
+38523
+38524
+38525
+38526
+38527
+38528
+38529
+38530
+38531
+38532
+38533
+38534
+38535
+38536
+38537
+38538
+38539
+38540
+38541
+38542
+38543
+38544
+38545
+38546
+38547
+38548
+38549
+38550
+38551
+38552
+38553
+38554
+38555
+38556
+38557
+38558
+38559
+38560
+38561
+38562
+38563
+38564
+38565
+38566
+38567
+38568
+38569
+38570
+38571
+38572
+38573
+38574
+38575
+38576
+38577
+38578
+38579
+38580
+38581
+38582
+38583
+38584
+38585
+38586
+38587
+38588
+38589
+38590
+38591
+38592
+38593
+38594
+38595
+38596
+38597
+38598
+38599
+38600
+38601
+38602
+38603
+38604
+38605
+38606
+38607
+38608
+38609
+38610
+38611
+38612
+38613
+38614
+38615
+38616
+38617
+38618
+38619
+38620
+38621
+38622
+38623
+38624
+38625
+38626
+38627
+38628
+38629
+38630
+38631
+38632
+38633
+38634
+38635
+38636
+38637
+38638
+38639
+38640
+38641
+38642
+38643
+38644
+38645
+38646
+38647
+38648
+38649
+38650
+38651
+38652
+38653
+38654
+38655
+38656
+38657
+38658
+38659
+38660
+38661
+38662
+38663
+38664
+38665
+38666
+38667
+38668
+38669
+38670
+38671
+38672
+38673
+38674
+38675
+38676
+38677
+38678
+38679
+38680
+38681
+38682
+38683
+38684
+38685
+38686
+38687
+38688
+38689
+38690
+38691
+38692
+38693
+38694
+38695
+38696
+38697
+38698
+38699
+38700
+38701
+38702
+38703
+38704
+38705
+38706
+38707
+38708
+38709
+38710
+38711
+38712
+38713
+38714
+38715
+38716
+38717
+38718
+38719
+38720
+38721
+38722
+38723
+38724
+38725
+38726
+38727
+38728
+38729
+38730
+38731
+38732
+38733
+38734
+38735
+38736
+38737
+38738
+38739
+38740
+38741
+38742
+38743
+38744
+38745
+38746
+38747
+38748
+38749
+38750
+38751
+38752
+38753
+38754
+38755
+38756
+38757
+38758
+38759
+38760
+38761
+38762
+38763
+38764
+38765
+38766
+38767
+38768
+38769
+38770
+38771
+38772
+38773
+38774
+38775
+38776
+38777
+38778
+38779
+38780
+38781
+38782
+38783
+38784
+38785
+38786
+38787
+38788
+38789
+38790
+38791
+38792
+38793
+38794
+38795
+38796
+38797
+38798
+38799
+38800
+38801
+38802
+38803
+38804
+38805
+38806
+38807
+38808
+38809
+38810
+38811
+38812
+38813
+38814
+38815
+38816
+38817
+38818
+38819
+38820
+38821
+38822
+38823
+38824
+38825
+38826
+38827
+38828
+38829
+38830
+38831
+38832
+38833
+38834
+38835
+38836
+38837
+38838
+38839
+38840
+38841
+38842
+38843
+38844
+38845
+38846
+38847
+38848
+38849
+38850
+38851
+38852
+38853
+38854
+38855
+38856
+38857
+38858
+38859
+38860
+38861
+38862
+38863
+38864
+38865
+38866
+38867
+38868
+38869
+38870
+38871
+38872
+38873
+38874
+38875
+38876
+38877
+38878
+38879
+38880
+38881
+38882
+38883
+38884
+38885
+38886
+38887
+38888
+38889
+38890
+38891
+38892
+38893
+38894
+38895
+38896
+38897
+38898
+38899
+38900
+38901
+38902
+38903
+38904
+38905
+38906
+38907
+38908
+38909
+38910
+38911
+38912
+38913
+38914
+38915
+38916
+38917
+38918
+38919
+38920
+38921
+38922
+38923
+38924
+38925
+38926
+38927
+38928
+38929
+38930
+38931
+38932
+38933
+38934
+38935
+38936
+38937
+38938
+38939
+38940
+38941
+38942
+38943
+38944
+38945
+38946
+38947
+38948
+38949
+38950
+38951
+38952
+38953
+38954
+38955
+38956
+38957
+38958
+38959
+38960
+38961
+38962
+38963
+38964
+38965
+38966
+38967
+38968
+38969
+38970
+38971
+38972
+38973
+38974
+38975
+38976
+38977
+38978
+38979
+38980
+38981
+38982
+38983
+38984
+38985
+38986
+38987
+38988
+38989
+38990
+38991
+38992
+38993
+38994
+38995
+38996
+38997
+38998
+38999
+39000
+39001
+39002
+39003
+39004
+39005
+39006
+39007
+39008
+39009
+39010
+39011
+39012
+39013
+39014
+39015
+39016
+39017
+39018
+39019
+39020
+39021
+39022
+39023
+39024
+39025
+39026
+39027
+39028
+39029
+39030
+39031
+39032
+39033
+39034
+39035
+39036
+39037
+39038
+39039
+39040
+39041
+39042
+39043
+39044
+39045
+39046
+39047
+39048
+39049
+39050
+39051
+39052
+39053
+39054
+39055
+39056
+39057
+39058
+39059
+39060
+39061
+39062
+39063
+39064
+39065
+39066
+39067
+39068
+39069
+39070
+39071
+39072
+39073
+39074
+39075
+39076
+39077
+39078
+39079
+39080
+39081
+39082
+39083
+39084
+39085
+39086
+39087
+39088
+39089
+39090
+39091
+39092
+39093
+39094
+39095
+39096
+39097
+39098
+39099
+39100
+39101
+39102
+39103
+39104
+39105
+39106
+39107
+39108
+39109
+39110
+39111
+39112
+39113
+39114
+39115
+39116
+39117
+39118
+39119
+39120
+39121
+39122
+39123
+39124
+39125
+39126
+39127
+39128
+39129
+39130
+39131
+39132
+39133
+39134
+39135
+39136
+39137
+39138
+39139
+39140
+39141
+39142
+39143
+39144
+39145
+39146
+39147
+39148
+39149
+39150
+39151
+39152
+39153
+39154
+39155
+39156
+39157
+39158
+39159
+39160
+39161
+39162
+39163
+39164
+39165
+39166
+39167
+39168
+39169
+39170
+39171
+39172
+39173
+39174
+39175
+39176
+39177
+39178
+39179
+39180
+39181
+39182
+39183
+39184
+39185
+39186
+39187
+39188
+39189
+39190
+39191
+39192
+39193
+39194
+39195
+39196
+39197
+39198
+39199
+39200
+39201
+39202
+39203
+39204
+39205
+39206
+39207
+39208
+39209
+39210
+39211
+39212
+39213
+39214
+39215
+39216
+39217
+39218
+39219
+39220
+39221
+39222
+39223
+39224
+39225
+39226
+39227
+39228
+39229
+39230
+39231
+39232
+39233
+39234
+39235
+39236
+39237
+39238
+39239
+39240
+39241
+39242
+39243
+39244
+39245
+39246
+39247
+39248
+39249
+39250
+39251
+39252
+39253
+39254
+39255
+39256
+39257
+39258
+39259
+39260
+39261
+39262
+39263
+39264
+39265
+39266
+39267
+39268
+39269
+39270
+39271
+39272
+39273
+39274
+39275
+39276
+39277
+39278
+39279
+39280
+39281
+39282
+39283
+39284
+39285
+39286
+39287
+39288
+39289
+39290
+39291
+39292
+39293
+39294
+39295
+39296
+39297
+39298
+39299
+39300
+39301
+39302
+39303
+39304
+39305
+39306
+39307
+39308
+39309
+39310
+39311
+39312
+39313
+39314
+39315
+39316
+39317
+39318
+39319
+39320
+39321
+39322
+39323
+39324
+39325
+39326
+39327
+39328
+39329
+39330
+39331
+39332
+39333
+39334
+39335
+39336
+39337
+39338
+39339
+39340
+39341
+39342
+39343
+39344
+39345
+39346
+39347
+39348
+39349
+39350
+39351
+39352
+39353
+39354
+39355
+39356
+39357
+39358
+39359
+39360
+39361
+39362
+39363
+39364
+39365
+39366
+39367
+39368
+39369
+39370
+39371
+39372
+39373
+39374
+39375
+39376
+39377
+39378
+39379
+39380
+39381
+39382
+39383
+39384
+39385
+39386
+39387
+39388
+39389
+39390
+39391
+39392
+39393
+39394
+39395
+39396
+39397
+39398
+39399
+39400
+39401
+39402
+39403
+39404
+39405
+39406
+39407
+39408
+39409
+39410
+39411
+39412
+39413
+39414
+39415
+39416
+39417
+39418
+39419
+39420
+39421
+39422
+39423
+39424
+39425
+39426
+39427
+39428
+39429
+39430
+39431
+39432
+39433
+39434
+39435
+39436
+39437
+39438
+39439
+39440
+39441
+39442
+39443
+39444
+39445
+39446
+39447
+39448
+39449
+39450
+39451
+39452
+39453
+39454
+39455
+39456
+39457
+39458
+39459
+39460
+39461
+39462
+39463
+39464
+39465
+39466
+39467
+39468
+39469
+39470
+39471
+39472
+39473
+39474
+39475
+39476
+39477
+39478
+39479
+39480
+39481
+39482
+39483
+39484
+39485
+39486
+39487
+39488
+39489
+39490
+39491
+39492
+39493
+39494
+39495
+39496
+39497
+39498
+39499
+39500
+39501
+39502
+39503
+39504
+39505
+39506
+39507
+39508
+39509
+39510
+39511
+39512
+39513
+39514
+39515
+39516
+39517
+39518
+39519
+39520
+39521
+39522
+39523
+39524
+39525
+39526
+39527
+39528
+39529
+39530
+39531
+39532
+39533
+39534
+39535
+39536
+39537
+39538
+39539
+39540
+39541
+39542
+39543
+39544
+39545
+39546
+39547
+39548
+39549
+39550
+39551
+39552
+39553
+39554
+39555
+39556
+39557
+39558
+39559
+39560
+39561
+39562
+39563
+39564
+39565
+39566
+39567
+39568
+39569
+39570
+39571
+39572
+39573
+39574
+39575
+39576
+39577
+39578
+39579
+39580
+39581
+39582
+39583
+39584
+39585
+39586
+39587
+39588
+39589
+39590
+39591
+39592
+39593
+39594
+39595
+39596
+39597
+39598
+39599
+39600
+39601
+39602
+39603
+39604
+39605
+39606
+39607
+39608
+39609
+39610
+39611
+39612
+39613
+39614
+39615
+39616
+39617
+39618
+39619
+39620
+39621
+39622
+39623
+39624
+39625
+39626
+39627
+39628
+39629
+39630
+39631
+39632
+39633
+39634
+39635
+39636
+39637
+39638
+39639
+39640
+39641
+39642
+39643
+39644
+39645
+39646
+39647
+39648
+39649
+39650
+39651
+39652
+39653
+39654
+39655
+39656
+39657
+39658
+39659
+39660
+39661
+39662
+39663
+39664
+39665
+39666
+39667
+39668
+39669
+39670
+39671
+39672
+39673
+39674
+39675
+39676
+39677
+39678
+39679
+39680
+39681
+39682
+39683
+39684
+39685
+39686
+39687
+39688
+39689
+39690
+39691
+39692
+39693
+39694
+39695
+39696
+39697
+39698
+39699
+39700
+39701
+39702
+39703
+39704
+39705
+39706
+39707
+39708
+39709
+39710
+39711
+39712
+39713
+39714
+39715
+39716
+39717
+39718
+39719
+39720
+39721
+39722
+39723
+39724
+39725
+39726
+39727
+39728
+39729
+39730
+39731
+39732
+39733
+39734
+39735
+39736
+39737
+39738
+39739
+39740
+39741
+39742
+39743
+39744
+39745
+39746
+39747
+39748
+39749
+39750
+39751
+39752
+39753
+39754
+39755
+39756
+39757
+39758
+39759
+39760
+39761
+39762
+39763
+39764
+39765
+39766
+39767
+39768
+39769
+39770
+39771
+39772
+39773
+39774
+39775
+39776
+39777
+39778
+39779
+39780
+39781
+39782
+39783
+39784
+39785
+39786
+39787
+39788
+39789
+39790
+39791
+39792
+39793
+39794
+39795
+39796
+39797
+39798
+39799
+39800
+39801
+39802
+39803
+39804
+39805
+39806
+39807
+39808
+39809
+39810
+39811
+39812
+39813
+39814
+39815
+39816
+39817
+39818
+39819
+39820
+39821
+39822
+39823
+39824
+39825
+39826
+39827
+39828
+39829
+39830
+39831
+39832
+39833
+39834
+39835
+39836
+39837
+39838
+39839
+39840
+39841
+39842
+39843
+39844
+39845
+39846
+39847
+39848
+39849
+39850
+39851
+39852
+39853
+39854
+39855
+39856
+39857
+39858
+39859
+39860
+39861
+39862
+39863
+39864
+39865
+39866
+39867
+39868
+39869
+39870
+39871
+39872
+39873
+39874
+39875
+39876
+39877
+39878
+39879
+39880
+39881
+39882
+39883
+39884
+39885
+39886
+39887
+39888
+39889
+39890
+39891
+39892
+39893
+39894
+39895
+39896
+39897
+39898
+39899
+39900
+39901
+39902
+39903
+39904
+39905
+39906
+39907
+39908
+39909
+39910
+39911
+39912
+39913
+39914
+39915
+39916
+39917
+39918
+39919
+39920
+39921
+39922
+39923
+39924
+39925
+39926
+39927
+39928
+39929
+39930
+39931
+39932
+39933
+39934
+39935
+39936
+39937
+39938
+39939
+39940
+39941
+39942
+39943
+39944
+39945
+39946
+39947
+39948
+39949
+39950
+39951
+39952
+39953
+39954
+39955
+39956
+39957
+39958
+39959
+39960
+39961
+39962
+39963
+39964
+39965
+39966
+39967
+39968
+39969
+39970
+39971
+39972
+39973
+39974
+39975
+39976
+39977
+39978
+39979
+39980
+39981
+39982
+39983
+39984
+39985
+39986
+39987
+39988
+39989
+39990
+39991
+39992
+39993
+39994
+39995
+39996
+39997
+39998
+39999
+40000
+40001
+40002
+40003
+40004
+40005
+40006
+40007
+40008
+40009
+40010
+40011
+40012
+40013
+40014
+40015
+40016
+40017
+40018
+40019
+40020
+40021
+40022
+40023
+40024
+40025
+40026
+40027
+40028
+40029
+40030
+40031
+40032
+40033
+40034
+40035
+40036
+40037
+40038
+40039
+40040
+40041
+40042
+40043
+40044
+40045
+40046
+40047
+40048
+40049
+40050
+40051
+40052
+40053
+40054
+40055
+40056
+40057
+40058
+40059
+40060
+40061
+40062
+40063
+40064
+40065
+40066
+40067
+40068
+40069
+40070
+40071
+40072
+40073
+40074
+40075
+40076
+40077
+40078
+40079
+40080
+40081
+40082
+40083
+40084
+40085
+40086
+40087
+40088
+40089
+40090
+40091
+40092
+40093
+40094
+40095
+40096
+40097
+40098
+40099
+40100
+40101
+40102
+40103
+40104
+40105
+40106
+40107
+40108
+40109
+40110
+40111
+40112
+40113
+40114
+40115
+40116
+40117
+40118
+40119
+40120
+40121
+40122
+40123
+40124
+40125
+40126
+40127
+40128
+40129
+40130
+40131
+40132
+40133
+40134
+40135
+40136
+40137
+40138
+40139
+40140
+40141
+40142
+40143
+40144
+40145
+40146
+40147
+40148
+40149
+40150
+40151
+40152
+40153
+40154
+40155
+40156
+40157
+40158
+40159
+40160
+40161
+40162
+40163
+40164
+40165
+40166
+40167
+40168
+40169
+40170
+40171
+40172
+40173
+40174
+40175
+40176
+40177
+40178
+40179
+40180
+40181
+40182
+40183
+40184
+40185
+40186
+40187
+40188
+40189
+40190
+40191
+40192
+40193
+40194
+40195
+40196
+40197
+40198
+40199
+40200
+40201
+40202
+40203
+40204
+40205
+40206
+40207
+40208
+40209
+40210
+40211
+40212
+40213
+40214
+40215
+40216
+40217
+40218
+40219
+40220
+40221
+40222
+40223
+40224
+40225
+40226
+40227
+40228
+40229
+40230
+40231
+40232
+40233
+40234
+40235
+40236
+40237
+40238
+40239
+40240
+40241
+40242
+40243
+40244
+40245
+40246
+40247
+40248
+40249
+40250
+40251
+40252
+40253
+40254
+40255
+40256
+40257
+40258
+40259
+40260
+40261
+40262
+40263
+40264
+40265
+40266
+40267
+40268
+40269
+40270
+40271
+40272
+40273
+40274
+40275
+40276
+40277
+40278
+40279
+40280
+40281
+40282
+40283
+40284
+40285
+40286
+40287
+40288
+40289
+40290
+40291
+40292
+40293
+40294
+40295
+40296
+40297
+40298
+40299
+40300
+40301
+40302
+40303
+40304
+40305
+40306
+40307
+40308
+40309
+40310
+40311
+40312
+40313
+40314
+40315
+40316
+40317
+40318
+40319
+40320
+40321
+40322
+40323
+40324
+40325
+40326
+40327
+40328
+40329
+40330
+40331
+40332
+40333
+40334
+40335
+40336
+40337
+40338
+40339
+40340
+40341
+40342
+40343
+40344
+40345
+40346
+40347
+40348
+40349
+40350
+40351
+40352
+40353
+40354
+40355
+40356
+40357
+40358
+40359
+40360
+40361
+40362
+40363
+40364
+40365
+40366
+40367
+40368
+40369
+40370
+40371
+40372
+40373
+40374
+40375
+40376
+40377
+40378
+40379
+40380
+40381
+40382
+40383
+40384
+40385
+40386
+40387
+40388
+40389
+40390
+40391
+40392
+40393
+40394
+40395
+40396
+40397
+40398
+40399
+40400
+40401
+40402
+40403
+40404
+40405
+40406
+40407
+40408
+40409
+40410
+40411
+40412
+40413
+40414
+40415
+40416
+40417
+40418
+40419
+40420
+40421
+40422
+40423
+40424
+40425
+40426
+40427
+40428
+40429
+40430
+40431
+40432
+40433
+40434
+40435
+40436
+40437
+40438
+40439
+40440
+40441
+40442
+40443
+40444
+40445
+40446
+40447
+40448
+40449
+40450
+40451
+40452
+40453
+40454
+40455
+40456
+40457
+40458
+40459
+40460
+40461
+40462
+40463
+40464
+40465
+40466
+40467
+40468
+40469
+40470
+40471
+40472
+40473
+40474
+40475
+40476
+40477
+40478
+40479
+40480
+40481
+40482
+40483
+40484
+40485
+40486
+40487
+40488
+40489
+40490
+40491
+40492
+40493
+40494
+40495
+40496
+40497
+40498
+40499
+40500
+40501
+40502
+40503
+40504
+40505
+40506
+40507
+40508
+40509
+40510
+40511
+40512
+40513
+40514
+40515
+40516
+40517
+40518
+40519
+40520
+40521
+40522
+40523
+40524
+40525
+40526
+40527
+40528
+40529
+40530
+40531
+40532
+40533
+40534
+40535
+40536
+40537
+40538
+40539
+40540
+40541
+40542
+40543
+40544
+40545
+40546
+40547
+40548
+40549
+40550
+40551
+40552
+40553
+40554
+40555
+40556
+40557
+40558
+40559
+40560
+40561
+40562
+40563
+40564
+40565
+40566
+40567
+40568
+40569
+40570
+40571
+40572
+40573
+40574
+40575
+40576
+40577
+40578
+40579
+40580
+40581
+40582
+40583
+40584
+40585
+40586
+40587
+40588
+40589
+40590
+40591
+40592
+40593
+40594
+40595
+40596
+40597
+40598
+40599
+40600
+40601
+40602
+40603
+40604
+40605
+40606
+40607
+40608
+40609
+40610
+40611
+40612
+40613
+40614
+40615
+40616
+40617
+40618
+40619
+40620
+40621
+40622
+40623
+40624
+40625
+40626
+40627
+40628
+40629
+40630
+40631
+40632
+40633
+40634
+40635
+40636
+40637
+40638
+40639
+40640
+40641
+40642
+40643
+40644
+40645
+40646
+40647
+40648
+40649
+40650
+40651
+40652
+40653
+40654
+40655
+40656
+40657
+40658
+40659
+40660
+40661
+40662
+40663
+40664
+40665
+40666
+40667
+40668
+40669
+40670
+40671
+40672
+40673
+40674
+40675
+40676
+40677
+40678
+40679
+40680
+40681
+40682
+40683
+40684
+40685
+40686
+40687
+40688
+40689
+40690
+40691
+40692
+40693
+40694
+40695
+40696
+40697
+40698
+40699
+40700
+40701
+40702
+40703
+40704
+40705
+40706
+40707
+40708
+40709
+40710
+40711
+40712
+40713
+40714
+40715
+40716
+40717
+40718
+40719
+40720
+40721
+40722
+40723
+40724
+40725
+40726
+40727
+40728
+40729
+40730
+40731
+40732
+40733
+40734
+40735
+40736
+40737
+40738
+40739
+40740
+40741
+40742
+40743
+40744
+40745
+40746
+40747
+40748
+40749
+40750
+40751
+40752
+40753
+40754
+40755
+40756
+40757
+40758
+40759
+40760
+40761
+40762
+40763
+40764
+40765
+40766
+40767
+40768
+40769
+40770
+40771
+40772
+40773
+40774
+40775
+40776
+40777
+40778
+40779
+40780
+40781
+40782
+40783
+40784
+40785
+40786
+40787
+40788
+40789
+40790
+40791
+40792
+40793
+40794
+40795
+40796
+40797
+40798
+40799
+40800
+40801
+40802
+40803
+40804
+40805
+40806
+40807
+40808
+40809
+40810
+40811
+40812
+40813
+40814
+40815
+40816
+40817
+40818
+40819
+40820
+40821
+40822
+40823
+40824
+40825
+40826
+40827
+40828
+40829
+40830
+40831
+40832
+40833
+40834
+40835
+40836
+40837
+40838
+40839
+40840
+40841
+40842
+40843
+40844
+40845
+40846
+40847
+40848
+40849
+40850
+40851
+40852
+40853
+40854
+40855
+40856
+40857
+40858
+40859
+40860
+40861
+40862
+40863
+40864
+40865
+40866
+40867
+40868
+40869
+40870
+40871
+40872
+40873
+40874
+40875
+40876
+40877
+40878
+40879
+40880
+40881
+40882
+40883
+40884
+40885
+40886
+40887
+40888
+40889
+40890
+40891
+40892
+40893
+40894
+40895
+40896
+40897
+40898
+40899
+40900
+40901
+40902
+40903
+40904
+40905
+40906
+40907
+40908
+40909
+40910
+40911
+40912
+40913
+40914
+40915
+40916
+40917
+40918
+40919
+40920
+40921
+40922
+40923
+40924
+40925
+40926
+40927
+40928
+40929
+40930
+40931
+40932
+40933
+40934
+40935
+40936
+40937
+40938
+40939
+40940
+40941
+40942
+40943
+40944
+40945
+40946
+40947
+40948
+40949
+40950
+40951
+40952
+40953
+40954
+40955
+40956
+40957
+40958
+40959
+40960
+40961
+40962
+40963
+40964
+40965
+40966
+40967
+40968
+40969
+40970
+40971
+40972
+40973
+40974
+40975
+40976
+40977
+40978
+40979
+40980
+40981
+40982
+40983
+40984
+40985
+40986
+40987
+40988
+40989
+40990
+40991
+40992
+40993
+40994
+40995
+40996
+40997
+40998
+40999
+41000
+41001
+41002
+41003
+41004
+41005
+41006
+41007
+41008
+41009
+41010
+41011
+41012
+41013
+41014
+41015
+41016
+41017
+41018
+41019
+41020
+41021
+41022
+41023
+41024
+41025
+41026
+41027
+41028
+41029
+41030
+41031
+41032
+41033
+41034
+41035
+41036
+41037
+41038
+41039
+41040
+41041
+41042
+41043
+41044
+41045
+41046
+41047
+41048
+41049
+41050
+41051
+41052
+41053
+41054
+41055
+41056
+41057
+41058
+41059
+41060
+41061
+41062
+41063
+41064
+41065
+41066
+41067
+41068
+41069
+41070
+41071
+41072
+41073
+41074
+41075
+41076
+41077
+41078
+41079
+41080
+41081
+41082
+41083
+41084
+41085
+41086
+41087
+41088
+41089
+41090
+41091
+41092
+41093
+41094
+41095
+41096
+41097
+41098
+41099
+41100
+41101
+41102
+41103
+41104
+41105
+41106
+41107
+41108
+41109
+41110
+41111
+41112
+41113
+41114
+41115
+41116
+41117
+41118
+41119
+41120
+41121
+41122
+41123
+41124
+41125
+41126
+41127
+41128
+41129
+41130
+41131
+41132
+41133
+41134
+41135
+41136
+41137
+41138
+41139
+41140
+41141
+41142
+41143
+41144
+41145
+41146
+41147
+41148
+41149
+41150
+41151
+41152
+41153
+41154
+41155
+41156
+41157
+41158
+41159
+41160
+41161
+41162
+41163
+41164
+41165
+41166
+41167
+41168
+41169
+41170
+41171
+41172
+41173
+41174
+41175
+41176
+41177
+41178
+41179
+41180
+41181
+41182
+41183
+41184
+41185
+41186
+41187
+41188
+41189
+41190
+41191
+41192
+41193
+41194
+41195
+41196
+41197
+41198
+41199
+41200
+41201
+41202
+41203
+41204
+41205
+41206
+41207
+41208
+41209
+41210
+41211
+41212
+41213
+41214
+41215
+41216
+41217
+41218
+41219
+41220
+41221
+41222
+41223
+41224
+41225
+41226
+41227
+41228
+41229
+41230
+41231
+41232
+41233
+41234
+41235
+41236
+41237
+41238
+41239
+41240
+41241
+41242
+41243
+41244
+41245
+41246
+41247
+41248
+41249
+41250
+41251
+41252
+41253
+41254
+41255
+41256
+41257
+41258
+41259
+41260
+41261
+41262
+41263
+41264
+41265
+41266
+41267
+41268
+41269
+41270
+41271
+41272
+41273
+41274
+41275
+41276
+41277
+41278
+41279
+41280
+41281
+41282
+41283
+41284
+41285
+41286
+41287
+41288
+41289
+41290
+41291
+41292
+41293
+41294
+41295
+41296
+41297
+41298
+41299
+41300
+41301
+41302
+41303
+41304
+41305
+41306
+41307
+41308
+41309
+41310
+41311
+41312
+41313
+41314
+41315
+41316
+41317
+41318
+41319
+41320
+41321
+41322
+41323
+41324
+41325
+41326
+41327
+41328
+41329
+41330
+41331
+41332
+41333
+41334
+41335
+41336
+41337
+41338
+41339
+41340
+41341
+41342
+41343
+41344
+41345
+41346
+41347
+41348
+41349
+41350
+41351
+41352
+41353
+41354
+41355
+41356
+41357
+41358
+41359
+41360
+41361
+41362
+41363
+41364
+41365
+41366
+41367
+41368
+41369
+41370
+41371
+41372
+41373
+41374
+41375
+41376
+41377
+41378
+41379
+41380
+41381
+41382
+41383
+41384
+41385
+41386
+41387
+41388
+41389
+41390
+41391
+41392
+41393
+41394
+41395
+41396
+41397
+41398
+41399
+41400
+41401
+41402
+41403
+41404
+41405
+41406
+41407
+41408
+41409
+41410
+41411
+41412
+41413
+41414
+41415
+41416
+41417
+41418
+41419
+41420
+41421
+41422
+41423
+41424
+41425
+41426
+41427
+41428
+41429
+41430
+41431
+41432
+41433
+41434
+41435
+41436
+41437
+41438
+41439
+41440
+41441
+41442
+41443
+41444
+41445
+41446
+41447
+41448
+41449
+41450
+41451
+41452
+41453
+41454
+41455
+41456
+41457
+41458
+41459
+41460
+41461
+41462
+41463
+41464
+41465
+41466
+41467
+41468
+41469
+41470
+41471
+41472
+41473
+41474
+41475
+41476
+41477
+41478
+41479
+41480
+41481
+41482
+41483
+41484
+41485
+41486
+41487
+41488
+41489
+41490
+41491
+41492
+41493
+41494
+41495
+41496
+41497
+41498
+41499
+41500
+41501
+41502
+41503
+41504
+41505
+41506
+41507
+41508
+41509
+41510
+41511
+41512
+41513
+41514
+41515
+41516
+41517
+41518
+41519
+41520
+41521
+41522
+41523
+41524
+41525
+41526
+41527
+41528
+41529
+41530
+41531
+41532
+41533
+41534
+41535
+41536
+41537
+41538
+41539
+41540
+41541
+41542
+41543
+41544
+41545
+41546
+41547
+41548
+41549
+41550
+41551
+41552
+41553
+41554
+41555
+41556
+41557
+41558
+41559
+41560
+41561
+41562
+41563
+41564
+41565
+41566
+41567
+41568
+41569
+41570
+41571
+41572
+41573
+41574
+41575
+41576
+41577
+41578
+41579
+41580
+41581
+41582
+41583
+41584
+41585
+41586
+41587
+41588
+41589
+41590
+41591
+41592
+41593
+41594
+41595
+41596
+41597
+41598
+41599
+41600
+41601
+41602
+41603
+41604
+41605
+41606
+41607
+41608
+41609
+41610
+41611
+41612
+41613
+41614
+41615
+41616
+41617
+41618
+41619
+41620
+41621
+41622
+41623
+41624
+41625
+41626
+41627
+41628
+41629
+41630
+41631
+41632
+41633
+41634
+41635
+41636
+41637
+41638
+41639
+41640
+41641
+41642
+41643
+41644
+41645
+41646
+41647
+41648
+41649
+41650
+41651
+41652
+41653
+41654
+41655
+41656
+41657
+41658
+41659
+41660
+41661
+41662
+41663
+41664
+41665
+41666
+41667
+41668
+41669
+41670
+41671
+41672
+41673
+41674
+41675
+41676
+41677
+41678
+41679
+41680
+41681
+41682
+41683
+41684
+41685
+41686
+41687
+41688
+41689
+41690
+41691
+41692
+41693
+41694
+41695
+41696
+41697
+41698
+41699
+41700
+41701
+41702
+41703
+41704
+41705
+41706
+41707
+41708
+41709
+41710
+41711
+41712
+41713
+41714
+41715
+41716
+41717
+41718
+41719
+41720
+41721
+41722
+41723
+41724
+41725
+41726
+41727
+41728
+41729
+41730
+41731
+41732
+41733
+41734
+41735
+41736
+41737
+41738
+41739
+41740
+41741
+41742
+41743
+41744
+41745
+41746
+41747
+41748
+41749
+41750
+41751
+41752
+41753
+41754
+41755
+41756
+41757
+41758
+41759
+41760
+41761
+41762
+41763
+41764
+41765
+41766
+41767
+41768
+41769
+41770
+41771
+41772
+41773
+41774
+41775
+41776
+41777
+41778
+41779
+41780
+41781
+41782
+41783
+41784
+41785
+41786
+41787
+41788
+41789
+41790
+41791
+41792
+41793
+41794
+41795
+41796
+41797
+41798
+41799
+41800
+41801
+41802
+41803
+41804
+41805
+41806
+41807
+41808
+41809
+41810
+41811
+41812
+41813
+41814
+41815
+41816
+41817
+41818
+41819
+41820
+41821
+41822
+41823
+41824
+41825
+41826
+41827
+41828
+41829
+41830
+41831
+41832
+41833
+41834
+41835
+41836
+41837
+41838
+41839
+41840
+41841
+41842
+41843
+41844
+41845
+41846
+41847
+41848
+41849
+41850
+41851
+41852
+41853
+41854
+41855
+41856
+41857
+41858
+41859
+41860
+41861
+41862
+41863
+41864
+41865
+41866
+41867
+41868
+41869
+41870
+41871
+41872
+41873
+41874
+41875
+41876
+41877
+41878
+41879
+41880
+41881
+41882
+41883
+41884
+41885
+41886
+41887
+41888
+41889
+41890
+41891
+41892
+41893
+41894
+41895
+41896
+41897
+41898
+41899
+41900
+41901
+41902
+41903
+41904
+41905
+41906
+41907
+41908
+41909
+41910
+41911
+41912
+41913
+41914
+41915
+41916
+41917
+41918
+41919
+41920
+41921
+41922
+41923
+41924
+41925
+41926
+41927
+41928
+41929
+41930
+41931
+41932
+41933
+41934
+41935
+41936
+41937
+41938
+41939
+41940
+41941
+41942
+41943
+41944
+41945
+41946
+41947
+41948
+41949
+41950
+41951
+41952
+41953
+41954
+41955
+41956
+41957
+41958
+41959
+41960
+41961
+41962
+41963
+41964
+41965
+41966
+41967
+41968
+41969
+41970
+41971
+41972
+41973
+41974
+41975
+41976
+41977
+41978
+41979
+41980
+41981
+41982
+41983
+41984
+41985
+41986
+41987
+41988
+41989
+41990
+41991
+41992
+41993
+41994
+41995
+41996
+41997
+41998
+41999
+42000
+42001
+42002
+42003
+42004
+42005
+42006
+42007
+42008
+42009
+42010
+42011
+42012
+42013
+42014
+42015
+42016
+42017
+42018
+42019
+42020
+42021
+42022
+42023
+42024
+42025
+42026
+42027
+42028
+42029
+42030
+42031
+42032
+42033
+42034
+42035
+42036
+42037
+42038
+42039
+42040
+42041
+42042
+42043
+42044
+42045
+42046
+42047
+42048
+42049
+42050
+42051
+42052
+42053
+42054
+42055
+42056
+42057
+42058
+42059
+42060
+42061
+42062
+42063
+42064
+42065
+42066
+42067
+42068
+42069
+42070
+42071
+42072
+42073
+42074
+42075
+42076
+42077
+42078
+42079
+42080
+42081
+42082
+42083
+42084
+42085
+42086
+42087
+42088
+42089
+42090
+42091
+42092
+42093
+42094
+42095
+42096
+42097
+42098
+42099
+42100
+42101
+42102
+42103
+42104
+42105
+42106
+42107
+42108
+42109
+42110
+42111
+42112
+42113
+42114
+42115
+42116
+42117
+42118
+42119
+42120
+42121
+42122
+42123
+42124
+42125
+42126
+42127
+42128
+42129
+42130
+42131
+42132
+42133
+42134
+42135
+42136
+42137
+42138
+42139
+42140
+42141
+42142
+42143
+42144
+42145
+42146
+42147
+42148
+42149
+42150
+42151
+42152
+42153
+42154
+42155
+42156
+42157
+42158
+42159
+42160
+42161
+42162
+42163
+42164
+42165
+42166
+42167
+42168
+42169
+42170
+42171
+42172
+42173
+42174
+42175
+42176
+42177
+42178
+42179
+42180
+42181
+42182
+42183
+42184
+42185
+42186
+42187
+42188
+42189
+42190
+42191
+42192
+42193
+42194
+42195
+42196
+42197
+42198
+42199
+42200
+42201
+42202
+42203
+42204
+42205
+42206
+42207
+42208
+42209
+42210
+42211
+42212
+42213
+42214
+42215
+42216
+42217
+42218
+42219
+42220
+42221
+42222
+42223
+42224
+42225
+42226
+42227
+42228
+42229
+42230
+42231
+42232
+42233
+42234
+42235
+42236
+42237
+42238
+42239
+42240
+42241
+42242
+42243
+42244
+42245
+42246
+42247
+42248
+42249
+42250
+42251
+42252
+42253
+42254
+42255
+42256
+42257
+42258
+42259
+42260
+42261
+42262
+42263
+42264
+42265
+42266
+42267
+42268
+42269
+42270
+42271
+42272
+42273
+42274
+42275
+42276
+42277
+42278
+42279
+42280
+42281
+42282
+42283
+42284
+42285
+42286
+42287
+42288
+42289
+42290
+42291
+42292
+42293
+42294
+42295
+42296
+42297
+42298
+42299
+42300
+42301
+42302
+42303
+42304
+42305
+42306
+42307
+42308
+42309
+42310
+42311
+42312
+42313
+42314
+42315
+42316
+42317
+42318
+42319
+42320
+42321
+42322
+42323
+42324
+42325
+42326
+42327
+42328
+42329
+42330
+42331
+42332
+42333
+42334
+42335
+42336
+42337
+42338
+42339
+42340
+42341
+42342
+42343
+42344
+42345
+42346
+42347
+42348
+42349
+42350
+42351
+42352
+42353
+42354
+42355
+42356
+42357
+42358
+42359
+42360
+42361
+42362
+42363
+42364
+42365
+42366
+42367
+42368
+42369
+42370
+42371
+42372
+42373
+42374
+42375
+42376
+42377
+42378
+42379
+42380
+42381
+42382
+42383
+42384
+42385
+42386
+42387
+42388
+42389
+42390
+42391
+42392
+42393
+42394
+42395
+42396
+42397
+42398
+42399
+42400
+42401
+42402
+42403
+42404
+42405
+42406
+42407
+42408
+42409
+42410
+42411
+42412
+42413
+42414
+42415
+42416
+42417
+42418
+42419
+42420
+42421
+42422
+42423
+42424
+42425
+42426
+42427
+42428
+42429
+42430
+42431
+42432
+42433
+42434
+42435
+42436
+42437
+42438
+42439
+42440
+42441
+42442
+42443
+42444
+42445
+42446
+42447
+42448
+42449
+42450
+42451
+42452
+42453
+42454
+42455
+42456
+42457
+42458
+42459
+42460
+42461
+42462
+42463
+42464
+42465
+42466
+42467
+42468
+42469
+42470
+42471
+42472
+42473
+42474
+42475
+42476
+42477
+42478
+42479
+42480
+42481
+42482
+42483
+42484
+42485
+42486
+42487
+42488
+42489
+42490
+42491
+42492
+42493
+42494
+42495
+42496
+42497
+42498
+42499
+42500
+42501
+42502
+42503
+42504
+42505
+42506
+42507
+42508
+42509
+42510
+42511
+42512
+42513
+42514
+42515
+42516
+42517
+42518
+42519
+42520
+42521
+42522
+42523
+42524
+42525
+42526
+42527
+42528
+42529
+42530
+42531
+42532
+42533
+42534
+42535
+42536
+42537
+42538
+42539
+42540
+42541
+42542
+42543
+42544
+42545
+42546
+42547
+42548
+42549
+42550
+42551
+42552
+42553
+42554
+42555
+42556
+42557
+42558
+42559
+42560
+42561
+42562
+42563
+42564
+42565
+42566
+42567
+42568
+42569
+42570
+42571
+42572
+42573
+42574
+42575
+42576
+42577
+42578
+42579
+42580
+42581
+42582
+42583
+42584
+42585
+42586
+42587
+42588
+42589
+42590
+42591
+42592
+42593
+42594
+42595
+42596
+42597
+42598
+42599
+42600
+42601
+42602
+42603
+42604
+42605
+42606
+42607
+42608
+42609
+42610
+42611
+42612
+42613
+42614
+42615
+42616
+42617
+42618
+42619
+42620
+42621
+42622
+42623
+42624
+42625
+42626
+42627
+42628
+42629
+42630
+42631
+42632
+42633
+42634
+42635
+42636
+42637
+42638
+42639
+42640
+42641
+42642
+42643
+42644
+42645
+42646
+42647
+42648
+42649
+42650
+42651
+42652
+42653
+42654
+42655
+42656
+42657
+42658
+42659
+42660
+42661
+42662
+42663
+42664
+42665
+42666
+42667
+42668
+42669
+42670
+42671
+42672
+42673
+42674
+42675
+42676
+42677
+42678
+42679
+42680
+42681
+42682
+42683
+42684
+42685
+42686
+42687
+42688
+42689
+42690
+42691
+42692
+42693
+42694
+42695
+42696
+42697
+42698
+42699
+42700
+42701
+42702
+42703
+42704
+42705
+42706
+42707
+42708
+42709
+42710
+42711
+42712
+42713
+42714
+42715
+42716
+42717
+42718
+42719
+42720
+42721
+42722
+42723
+42724
+42725
+42726
+42727
+42728
+42729
+42730
+42731
+42732
+42733
+42734
+42735
+42736
+42737
+42738
+42739
+42740
+42741
+42742
+42743
+42744
+42745
+42746
+42747
+42748
+42749
+42750
+42751
+42752
+42753
+42754
+42755
+42756
+42757
+42758
+42759
+42760
+42761
+42762
+42763
+42764
+42765
+42766
+42767
+42768
+42769
+42770
+42771
+42772
+42773
+42774
+42775
+42776
+42777
+42778
+42779
+42780
+42781
+42782
+42783
+42784
+42785
+42786
+42787
+42788
+42789
+42790
+42791
+42792
+42793
+42794
+42795
+42796
+42797
+42798
+42799
+42800
+42801
+42802
+42803
+42804
+42805
+42806
+42807
+42808
+42809
+42810
+42811
+42812
+42813
+42814
+42815
+42816
+42817
+42818
+42819
+42820
+42821
+42822
+42823
+42824
+42825
+42826
+42827
+42828
+42829
+42830
+42831
+42832
+42833
+42834
+42835
+42836
+42837
+42838
+42839
+42840
+42841
+42842
+42843
+42844
+42845
+42846
+42847
+42848
+42849
+42850
+42851
+42852
+42853
+42854
+42855
+42856
+42857
+42858
+42859
+42860
+42861
+42862
+42863
+42864
+42865
+42866
+42867
+42868
+42869
+42870
+42871
+42872
+42873
+42874
+42875
+42876
+42877
+42878
+42879
+42880
+42881
+42882
+42883
+42884
+42885
+42886
+42887
+42888
+42889
+42890
+42891
+42892
+42893
+42894
+42895
+42896
+42897
+42898
+42899
+42900
+42901
+42902
+42903
+42904
+42905
+42906
+42907
+42908
+42909
+42910
+42911
+42912
+42913
+42914
+42915
+42916
+42917
+42918
+42919
+42920
+42921
+42922
+42923
+42924
+42925
+42926
+42927
+42928
+42929
+42930
+42931
+42932
+42933
+42934
+42935
+42936
+42937
+42938
+42939
+42940
+42941
+42942
+42943
+42944
+42945
+42946
+42947
+42948
+42949
+42950
+42951
+42952
+42953
+42954
+42955
+42956
+42957
+42958
+42959
+42960
+42961
+42962
+42963
+42964
+42965
+42966
+42967
+42968
+42969
+42970
+42971
+42972
+42973
+42974
+42975
+42976
+42977
+42978
+42979
+42980
+42981
+42982
+42983
+42984
+42985
+42986
+42987
+42988
+42989
+42990
+42991
+42992
+42993
+42994
+42995
+42996
+42997
+42998
+42999
+43000
+43001
+43002
+43003
+43004
+43005
+43006
+43007
+43008
+43009
+43010
+43011
+43012
+43013
+43014
+43015
+43016
+43017
+43018
+43019
+43020
+43021
+43022
+43023
+43024
+43025
+43026
+43027
+43028
+43029
+43030
+43031
+43032
+43033
+43034
+43035
+43036
+43037
+43038
+43039
+43040
+43041
+43042
+43043
+43044
+43045
+43046
+43047
+43048
+43049
+43050
+43051
+43052
+43053
+43054
+43055
+43056
+43057
+43058
+43059
+43060
+43061
+43062
+43063
+43064
+43065
+43066
+43067
+43068
+43069
+43070
+43071
+43072
+43073
+43074
+43075
+43076
+43077
+43078
+43079
+43080
+43081
+43082
+43083
+43084
+43085
+43086
+43087
+43088
+43089
+43090
+43091
+43092
+43093
+43094
+43095
+43096
+43097
+43098
+43099
+43100
+43101
+43102
+43103
+43104
+43105
+43106
+43107
+43108
+43109
+43110
+43111
+43112
+43113
+43114
+43115
+43116
+43117
+43118
+43119
+43120
+43121
+43122
+43123
+43124
+43125
+43126
+43127
+43128
+43129
+43130
+43131
+43132
+43133
+43134
+43135
+43136
+43137
+43138
+43139
+43140
+43141
+43142
+43143
+43144
+43145
+43146
+43147
+43148
+43149
+43150
+43151
+43152
+43153
+43154
+43155
+43156
+43157
+43158
+43159
+43160
+43161
+43162
+43163
+43164
+43165
+43166
+43167
+43168
+43169
+43170
+43171
+43172
+43173
+43174
+43175
+43176
+43177
+43178
+43179
+43180
+43181
+43182
+43183
+43184
+43185
+43186
+43187
+43188
+43189
+43190
+43191
+43192
+43193
+43194
+43195
+43196
+43197
+43198
+43199
+43200
+43201
+43202
+43203
+43204
+43205
+43206
+43207
+43208
+43209
+43210
+43211
+43212
+43213
+43214
+43215
+43216
+43217
+43218
+43219
+43220
+43221
+43222
+43223
+43224
+43225
+43226
+43227
+43228
+43229
+43230
+43231
+43232
+43233
+43234
+43235
+43236
+43237
+43238
+43239
+43240
+43241
+43242
+43243
+43244
+43245
+43246
+43247
+43248
+43249
+43250
+43251
+43252
+43253
+43254
+43255
+43256
+43257
+43258
+43259
+43260
+43261
+43262
+43263
+43264
+43265
+43266
+43267
+43268
+43269
+43270
+43271
+43272
+43273
+43274
+43275
+43276
+43277
+43278
+43279
+43280
+43281
+43282
+43283
+43284
+43285
+43286
+43287
+43288
+43289
+43290
+43291
+43292
+43293
+43294
+43295
+43296
+43297
+43298
+43299
+43300
+43301
+43302
+43303
+43304
+43305
+43306
+43307
+43308
+43309
+43310
+43311
+43312
+43313
+43314
+43315
+43316
+43317
+43318
+43319
+43320
+43321
+43322
+43323
+43324
+43325
+43326
+43327
+43328
+43329
+43330
+43331
+43332
+43333
+43334
+43335
+43336
+43337
+43338
+43339
+43340
+43341
+43342
+43343
+43344
+43345
+43346
+43347
+43348
+43349
+43350
+43351
+43352
+43353
+43354
+43355
+43356
+43357
+43358
+43359
+43360
+43361
+43362
+43363
+43364
+43365
+43366
+43367
+43368
+43369
+43370
+43371
+43372
+43373
+43374
+43375
+43376
+43377
+43378
+43379
+43380
+43381
+43382
+43383
+43384
+43385
+43386
+43387
+43388
+43389
+43390
+43391
+43392
+43393
+43394
+43395
+43396
+43397
+43398
+43399
+43400
+43401
+43402
+43403
+43404
+43405
+43406
+43407
+43408
+43409
+43410
+43411
+43412
+43413
+43414
+43415
+43416
+43417
+43418
+43419
+43420
+43421
+43422
+43423
+43424
+43425
+43426
+43427
+43428
+43429
+43430
+43431
+43432
+43433
+43434
+43435
+43436
+43437
+43438
+43439
+43440
+43441
+43442
+43443
+43444
+43445
+43446
+43447
+43448
+43449
+43450
+43451
+43452
+43453
+43454
+43455
+43456
+43457
+43458
+43459
+43460
+43461
+43462
+43463
+43464
+43465
+43466
+43467
+43468
+43469
+43470
+43471
+43472
+43473
+43474
+43475
+43476
+43477
+43478
+43479
+43480
+43481
+43482
+43483
+43484
+43485
+43486
+43487
+43488
+43489
+43490
+43491
+43492
+43493
+43494
+43495
+43496
+43497
+43498
+43499
+43500
+43501
+43502
+43503
+43504
+43505
+43506
+43507
+43508
+43509
+43510
+43511
+43512
+43513
+43514
+43515
+43516
+43517
+43518
+43519
+43520
+43521
+43522
+43523
+43524
+43525
+43526
+43527
+43528
+43529
+43530
+43531
+43532
+43533
+43534
+43535
+43536
+43537
+43538
+43539
+43540
+43541
+43542
+43543
+43544
+43545
+43546
+43547
+43548
+43549
+43550
+43551
+43552
+43553
+43554
+43555
+43556
+43557
+43558
+43559
+43560
+43561
+43562
+43563
+43564
+43565
+43566
+43567
+43568
+43569
+43570
+43571
+43572
+43573
+43574
+43575
+43576
+43577
+43578
+43579
+43580
+43581
+43582
+43583
+43584
+43585
+43586
+43587
+43588
+43589
+43590
+43591
+43592
+43593
+43594
+43595
+43596
+43597
+43598
+43599
+43600
+43601
+43602
+43603
+43604
+43605
+43606
+43607
+43608
+43609
+43610
+43611
+43612
+43613
+43614
+43615
+43616
+43617
+43618
+43619
+43620
+43621
+43622
+43623
+43624
+43625
+43626
+43627
+43628
+43629
+43630
+43631
+43632
+43633
+43634
+43635
+43636
+43637
+43638
+43639
+43640
+43641
+43642
+43643
+43644
+43645
+43646
+43647
+43648
+43649
+43650
+43651
+43652
+43653
+43654
+43655
+43656
+43657
+43658
+43659
+43660
+43661
+43662
+43663
+43664
+43665
+43666
+43667
+43668
+43669
+43670
+43671
+43672
+43673
+43674
+43675
+43676
+43677
+43678
+43679
+43680
+43681
+43682
+43683
+43684
+43685
+43686
+43687
+43688
+43689
+43690
+43691
+43692
+43693
+43694
+43695
+43696
+43697
+43698
+43699
+43700
+43701
+43702
+43703
+43704
+43705
+43706
+43707
+43708
+43709
+43710
+43711
+43712
+43713
+43714
+43715
+43716
+43717
+43718
+43719
+43720
+43721
+43722
+43723
+43724
+43725
+43726
+43727
+43728
+43729
+43730
+43731
+43732
+43733
+43734
+43735
+43736
+43737
+43738
+43739
+43740
+43741
+43742
+43743
+43744
+43745
+43746
+43747
+43748
+43749
+43750
+43751
+43752
+43753
+43754
+43755
+43756
+43757
+43758
+43759
+43760
+43761
+43762
+43763
+43764
+43765
+43766
+43767
+43768
+43769
+43770
+43771
+43772
+43773
+43774
+43775
+43776
+43777
+43778
+43779
+43780
+43781
+43782
+43783
+43784
+43785
+43786
+43787
+43788
+43789
+43790
+43791
+43792
+43793
+43794
+43795
+43796
+43797
+43798
+43799
+43800
+43801
+43802
+43803
+43804
+43805
+43806
+43807
+43808
+43809
+43810
+43811
+43812
+43813
+43814
+43815
+43816
+43817
+43818
+43819
+43820
+43821
+43822
+43823
+43824
+43825
+43826
+43827
+43828
+43829
+43830
+43831
+43832
+43833
+43834
+43835
+43836
+43837
+43838
+43839
+43840
+43841
+43842
+43843
+43844
+43845
+43846
+43847
+43848
+43849
+43850
+43851
+43852
+43853
+43854
+43855
+43856
+43857
+43858
+43859
+43860
+43861
+43862
+43863
+43864
+43865
+43866
+43867
+43868
+43869
+43870
+43871
+43872
+43873
+43874
+43875
+43876
+43877
+43878
+43879
+43880
+43881
+43882
+43883
+43884
+43885
+43886
+43887
+43888
+43889
+43890
+43891
+43892
+43893
+43894
+43895
+43896
+43897
+43898
+43899
+43900
+43901
+43902
+43903
+43904
+43905
+43906
+43907
+43908
+43909
+43910
+43911
+43912
+43913
+43914
+43915
+43916
+43917
+43918
+43919
+43920
+43921
+43922
+43923
+43924
+43925
+43926
+43927
+43928
+43929
+43930
+43931
+43932
+43933
+43934
+43935
+43936
+43937
+43938
+43939
+43940
+43941
+43942
+43943
+43944
+43945
+43946
+43947
+43948
+43949
+43950
+43951
+43952
+43953
+43954
+43955
+43956
+43957
+43958
+43959
+43960
+43961
+43962
+43963
+43964
+43965
+43966
+43967
+43968
+43969
+43970
+43971
+43972
+43973
+43974
+43975
+43976
+43977
+43978
+43979
+43980
+43981
+43982
+43983
+43984
+43985
+43986
+43987
+43988
+43989
+43990
+43991
+43992
+43993
+43994
+43995
+43996
+43997
+43998
+43999
+44000
+44001
+44002
+44003
+44004
+44005
+44006
+44007
+44008
+44009
+44010
+44011
+44012
+44013
+44014
+44015
+44016
+44017
+44018
+44019
+44020
+44021
+44022
+44023
+44024
+44025
+44026
+44027
+44028
+44029
+44030
+44031
+44032
+44033
+44034
+44035
+44036
+44037
+44038
+44039
+44040
+44041
+44042
+44043
+44044
+44045
+44046
+44047
+44048
+44049
+44050
+44051
+44052
+44053
+44054
+44055
+44056
+44057
+44058
+44059
+44060
+44061
+44062
+44063
+44064
+44065
+44066
+44067
+44068
+44069
+44070
+44071
+44072
+44073
+44074
+44075
+44076
+44077
+44078
+44079
+44080
+44081
+44082
+44083
+44084
+44085
+44086
+44087
+44088
+44089
+44090
+44091
+44092
+44093
+44094
+44095
+44096
+44097
+44098
+44099
+44100
+44101
+44102
+44103
+44104
+44105
+44106
+44107
+44108
+44109
+44110
+44111
+44112
+44113
+44114
+44115
+44116
+44117
+44118
+44119
+44120
+44121
+44122
+44123
+44124
+44125
+44126
+44127
+44128
+44129
+44130
+44131
+44132
+44133
+44134
+44135
+44136
+44137
+44138
+44139
+44140
+44141
+44142
+44143
+44144
+44145
+44146
+44147
+44148
+44149
+44150
+44151
+44152
+44153
+44154
+44155
+44156
+44157
+44158
+44159
+44160
+44161
+44162
+44163
+44164
+44165
+44166
+44167
+44168
+44169
+44170
+44171
+44172
+44173
+44174
+44175
+44176
+44177
+44178
+44179
+44180
+44181
+44182
+44183
+44184
+44185
+44186
+44187
+44188
+44189
+44190
+44191
+44192
+44193
+44194
+44195
+44196
+44197
+44198
+44199
+44200
+44201
+44202
+44203
+44204
+44205
+44206
+44207
+44208
+44209
+44210
+44211
+44212
+44213
+44214
+44215
+44216
+44217
+44218
+44219
+44220
+44221
+44222
+44223
+44224
+44225
+44226
+44227
+44228
+44229
+44230
+44231
+44232
+44233
+44234
+44235
+44236
+44237
+44238
+44239
+44240
+44241
+44242
+44243
+44244
+44245
+44246
+44247
+44248
+44249
+44250
+44251
+44252
+44253
+44254
+44255
+44256
+44257
+44258
+44259
+44260
+44261
+44262
+44263
+44264
+44265
+44266
+44267
+44268
+44269
+44270
+44271
+44272
+44273
+44274
+44275
+44276
+44277
+44278
+44279
+44280
+44281
+44282
+44283
+44284
+44285
+44286
+44287
+44288
+44289
+44290
+44291
+44292
+44293
+44294
+44295
+44296
+44297
+44298
+44299
+44300
+44301
+44302
+44303
+44304
+44305
+44306
+44307
+44308
+44309
+44310
+44311
+44312
+44313
+44314
+44315
+44316
+44317
+44318
+44319
+44320
+44321
+44322
+44323
+44324
+44325
+44326
+44327
+44328
+44329
+44330
+44331
+44332
+44333
+44334
+44335
+44336
+44337
+44338
+44339
+44340
+44341
+44342
+44343
+44344
+44345
+44346
+44347
+44348
+44349
+44350
+44351
+44352
+44353
+44354
+44355
+44356
+44357
+44358
+44359
+44360
+44361
+44362
+44363
+44364
+44365
+44366
+44367
+44368
+44369
+44370
+44371
+44372
+44373
+44374
+44375
+44376
+44377
+44378
+44379
+44380
+44381
+44382
+44383
+44384
+44385
+44386
+44387
+44388
+44389
+44390
+44391
+44392
+44393
+44394
+44395
+44396
+44397
+44398
+44399
+44400
+44401
+44402
+44403
+44404
+44405
+44406
+44407
+44408
+44409
+44410
+44411
+44412
+44413
+44414
+44415
+44416
+44417
+44418
+44419
+44420
+44421
+44422
+44423
+44424
+44425
+44426
+44427
+44428
+44429
+44430
+44431
+44432
+44433
+44434
+44435
+44436
+44437
+44438
+44439
+44440
+44441
+44442
+44443
+44444
+44445
+44446
+44447
+44448
+44449
+44450
+44451
+44452
+44453
+44454
+44455
+44456
+44457
+44458
+44459
+44460
+44461
+44462
+44463
+44464
+44465
+44466
+44467
+44468
+44469
+44470
+44471
+44472
+44473
+44474
+44475
+44476
+44477
+44478
+44479
+44480
+44481
+44482
+44483
+44484
+44485
+44486
+44487
+44488
+44489
+44490
+44491
+44492
+44493
+44494
+44495
+44496
+44497
+44498
+44499
+44500
+44501
+44502
+44503
+44504
+44505
+44506
+44507
+44508
+44509
+44510
+44511
+44512
+44513
+44514
+44515
+44516
+44517
+44518
+44519
+44520
+44521
+44522
+44523
+44524
+44525
+44526
+44527
+44528
+44529
+44530
+44531
+44532
+44533
+44534
+44535
+44536
+44537
+44538
+44539
+44540
+44541
+44542
+44543
+44544
+44545
+44546
+44547
+44548
+44549
+44550
+44551
+44552
+44553
+44554
+44555
+44556
+44557
+44558
+44559
+44560
+44561
+44562
+44563
+44564
+44565
+44566
+44567
+44568
+44569
+44570
+44571
+44572
+44573
+44574
+44575
+44576
+44577
+44578
+44579
+44580
+44581
+44582
+44583
+44584
+44585
+44586
+44587
+44588
+44589
+44590
+44591
+44592
+44593
+44594
+44595
+44596
+44597
+44598
+44599
+44600
+44601
+44602
+44603
+44604
+44605
+44606
+44607
+44608
+44609
+44610
+44611
+44612
+44613
+44614
+44615
+44616
+44617
+44618
+44619
+44620
+44621
+44622
+44623
+44624
+44625
+44626
+44627
+44628
+44629
+44630
+44631
+44632
+44633
+44634
+44635
+44636
+44637
+44638
+44639
+44640
+44641
+44642
+44643
+44644
+44645
+44646
+44647
+44648
+44649
+44650
+44651
+44652
+44653
+44654
+44655
+44656
+44657
+44658
+44659
+44660
+44661
+44662
+44663
+44664
+44665
+44666
+44667
+44668
+44669
+44670
+44671
+44672
+44673
+44674
+44675
+44676
+44677
+44678
+44679
+44680
+44681
+44682
+44683
+44684
+44685
+44686
+44687
+44688
+44689
+44690
+44691
+44692
+44693
+44694
+44695
+44696
+44697
+44698
+44699
+44700
+44701
+44702
+44703
+44704
+44705
+44706
+44707
+44708
+44709
+44710
+44711
+44712
+44713
+44714
+44715
+44716
+44717
+44718
+44719
+44720
+44721
+44722
+44723
+44724
+44725
+44726
+44727
+44728
+44729
+44730
+44731
+44732
+44733
+44734
+44735
+44736
+44737
+44738
+44739
+44740
+44741
+44742
+44743
+44744
+44745
+44746
+44747
+44748
+44749
+44750
+44751
+44752
+44753
+44754
+44755
+44756
+44757
+44758
+44759
+44760
+44761
+44762
+44763
+44764
+44765
+44766
+44767
+44768
+44769
+44770
+44771
+44772
+44773
+44774
+44775
+44776
+44777
+44778
+44779
+44780
+44781
+44782
+44783
+44784
+44785
+44786
+44787
+44788
+44789
+44790
+44791
+44792
+44793
+44794
+44795
+44796
+44797
+44798
+44799
+44800
+44801
+44802
+44803
+44804
+44805
+44806
+44807
+44808
+44809
+44810
+44811
+44812
+44813
+44814
+44815
+44816
+44817
+44818
+44819
+44820
+44821
+44822
+44823
+44824
+44825
+44826
+44827
+44828
+44829
+44830
+44831
+44832
+44833
+44834
+44835
+44836
+44837
+44838
+44839
+44840
+44841
+44842
+44843
+44844
+44845
+44846
+44847
+44848
+44849
+44850
+44851
+44852
+44853
+44854
+44855
+44856
+44857
+44858
+44859
+44860
+44861
+44862
+44863
+44864
+44865
+44866
+44867
+44868
+44869
+44870
+44871
+44872
+44873
+44874
+44875
+44876
+44877
+44878
+44879
+44880
+44881
+44882
+44883
+44884
+44885
+44886
+44887
+44888
+44889
+44890
+44891
+44892
+44893
+44894
+44895
+44896
+44897
+44898
+44899
+44900
+44901
+44902
+44903
+44904
+44905
+44906
+44907
+44908
+44909
+44910
+44911
+44912
+44913
+44914
+44915
+44916
+44917
+44918
+44919
+44920
+44921
+44922
+44923
+44924
+44925
+44926
+44927
+44928
+44929
+44930
+44931
+44932
+44933
+44934
+44935
+44936
+44937
+44938
+44939
+44940
+44941
+44942
+44943
+44944
+44945
+44946
+44947
+44948
+44949
+44950
+44951
+44952
+44953
+44954
+44955
+44956
+44957
+44958
+44959
+44960
+44961
+44962
+44963
+44964
+44965
+44966
+44967
+44968
+44969
+44970
+44971
+44972
+44973
+44974
+44975
+44976
+44977
+44978
+44979
+44980
+44981
+44982
+44983
+44984
+44985
+44986
+44987
+44988
+44989
+44990
+44991
+44992
+44993
+44994
+44995
+44996
+44997
+44998
+44999
+45000
+45001
+45002
+45003
+45004
+45005
+45006
+45007
+45008
+45009
+45010
+45011
+45012
+45013
+45014
+45015
+45016
+45017
+45018
+45019
+45020
+45021
+45022
+45023
+45024
+45025
+45026
+45027
+45028
+45029
+45030
+45031
+45032
+45033
+45034
+45035
+45036
+45037
+45038
+45039
+45040
+45041
+45042
+45043
+45044
+45045
+45046
+45047
+45048
+45049
+45050
+45051
+45052
+45053
+45054
+45055
+45056
+45057
+45058
+45059
+45060
+45061
+45062
+45063
+45064
+45065
+45066
+45067
+45068
+45069
+45070
+45071
+45072
+45073
+45074
+45075
+45076
+45077
+45078
+45079
+45080
+45081
+45082
+45083
+45084
+45085
+45086
+45087
+45088
+45089
+45090
+45091
+45092
+45093
+45094
+45095
+45096
+45097
+45098
+45099
+45100
+45101
+45102
+45103
+45104
+45105
+45106
+45107
+45108
+45109
+45110
+45111
+45112
+45113
+45114
+45115
+45116
+45117
+45118
+45119
+45120
+45121
+45122
+45123
+45124
+45125
+45126
+45127
+45128
+45129
+45130
+45131
+45132
+45133
+45134
+45135
+45136
+45137
+45138
+45139
+45140
+45141
+45142
+45143
+45144
+45145
+45146
+45147
+45148
+45149
+45150
+45151
+45152
+45153
+45154
+45155
+45156
+45157
+45158
+45159
+45160
+45161
+45162
+45163
+45164
+45165
+45166
+45167
+45168
+45169
+45170
+45171
+45172
+45173
+45174
+45175
+45176
+45177
+45178
+45179
+45180
+45181
+45182
+45183
+45184
+45185
+45186
+45187
+45188
+45189
+45190
+45191
+45192
+45193
+45194
+45195
+45196
+45197
+45198
+45199
+45200
+45201
+45202
+45203
+45204
+45205
+45206
+45207
+45208
+45209
+45210
+45211
+45212
+45213
+45214
+45215
+45216
+45217
+45218
+45219
+45220
+45221
+45222
+45223
+45224
+45225
+45226
+45227
+45228
+45229
+45230
+45231
+45232
+45233
+45234
+45235
+45236
+45237
+45238
+45239
+45240
+45241
+45242
+45243
+45244
+45245
+45246
+45247
+45248
+45249
+45250
+45251
+45252
+45253
+45254
+45255
+45256
+45257
+45258
+45259
+45260
+45261
+45262
+45263
+45264
+45265
+45266
+45267
+45268
+45269
+45270
+45271
+45272
+45273
+45274
+45275
+45276
+45277
+45278
+45279
+45280
+45281
+45282
+45283
+45284
+45285
+45286
+45287
+45288
+45289
+45290
+45291
+45292
+45293
+45294
+45295
+45296
+45297
+45298
+45299
+45300
+45301
+45302
+45303
+45304
+45305
+45306
+45307
+45308
+45309
+45310
+45311
+45312
+45313
+45314
+45315
+45316
+45317
+45318
+45319
+45320
+45321
+45322
+45323
+45324
+45325
+45326
+45327
+45328
+45329
+45330
+45331
+45332
+45333
+45334
+45335
+45336
+45337
+45338
+45339
+45340
+45341
+45342
+45343
+45344
+45345
+45346
+45347
+45348
+45349
+45350
+45351
+45352
+45353
+45354
+45355
+45356
+45357
+45358
+45359
+45360
+45361
+45362
+45363
+45364
+45365
+45366
+45367
+45368
+45369
+45370
+45371
+45372
+45373
+45374
+45375
+45376
+45377
+45378
+45379
+45380
+45381
+45382
+45383
+45384
+45385
+45386
+45387
+45388
+45389
+45390
+45391
+45392
+45393
+45394
+45395
+45396
+45397
+45398
+45399
+45400
+45401
+45402
+45403
+45404
+45405
+45406
+45407
+45408
+45409
+45410
+45411
+45412
+45413
+45414
+45415
+45416
+45417
+45418
+45419
+45420
+45421
+45422
+45423
+45424
+45425
+45426
+45427
+45428
+45429
+45430
+45431
+45432
+45433
+45434
+45435
+45436
+45437
+45438
+45439
+45440
+45441
+45442
+45443
+45444
+45445
+45446
+45447
+45448
+45449
+45450
+45451
+45452
+45453
+45454
+45455
+45456
+45457
+45458
+45459
+45460
+45461
+45462
+45463
+45464
+45465
+45466
+45467
+45468
+45469
+45470
+45471
+45472
+45473
+45474
+45475
+45476
+45477
+45478
+45479
+45480
+45481
+45482
+45483
+45484
+45485
+45486
+45487
+45488
+45489
+45490
+45491
+45492
+45493
+45494
+45495
+45496
+45497
+45498
+45499
+45500
+45501
+45502
+45503
+45504
+45505
+45506
+45507
+45508
+45509
+45510
+45511
+45512
+45513
+45514
+45515
+45516
+45517
+45518
+45519
+45520
+45521
+45522
+45523
+45524
+45525
+45526
+45527
+45528
+45529
+45530
+45531
+45532
+45533
+45534
+45535
+45536
+45537
+45538
+45539
+45540
+45541
+45542
+45543
+45544
+45545
+45546
+45547
+45548
+45549
+45550
+45551
+45552
+45553
+45554
+45555
+45556
+45557
+45558
+45559
+45560
+45561
+45562
+45563
+45564
+45565
+45566
+45567
+45568
+45569
+45570
+45571
+45572
+45573
+45574
+45575
+45576
+45577
+45578
+45579
+45580
+45581
+45582
+45583
+45584
+45585
+45586
+45587
+45588
+45589
+45590
+45591
+45592
+45593
+45594
+45595
+45596
+45597
+45598
+45599
+45600
+45601
+45602
+45603
+45604
+45605
+45606
+45607
+45608
+45609
+45610
+45611
+45612
+45613
+45614
+45615
+45616
+45617
+45618
+45619
+45620
+45621
+45622
+45623
+45624
+45625
+45626
+45627
+45628
+45629
+45630
+45631
+45632
+45633
+45634
+45635
+45636
+45637
+45638
+45639
+45640
+45641
+45642
+45643
+45644
+45645
+45646
+45647
+45648
+45649
+45650
+45651
+45652
+45653
+45654
+45655
+45656
+45657
+45658
+45659
+45660
+45661
+45662
+45663
+45664
+45665
+45666
+45667
+45668
+45669
+45670
+45671
+45672
+45673
+45674
+45675
+45676
+45677
+45678
+45679
+45680
+45681
+45682
+45683
+45684
+45685
+45686
+45687
+45688
+45689
+45690
+45691
+45692
+45693
+45694
+45695
+45696
+45697
+45698
+45699
+45700
+45701
+45702
+45703
+45704
+45705
+45706
+45707
+45708
+45709
+45710
+45711
+45712
+45713
+45714
+45715
+45716
+45717
+45718
+45719
+45720
+45721
+45722
+45723
+45724
+45725
+45726
+45727
+45728
+45729
+45730
+45731
+45732
+45733
+45734
+45735
+45736
+45737
+45738
+45739
+45740
+45741
+45742
+45743
+45744
+45745
+45746
+45747
+45748
+45749
+45750
+45751
+45752
+45753
+45754
+45755
+45756
+45757
+45758
+45759
+45760
+45761
+45762
+45763
+45764
+45765
+45766
+45767
+45768
+45769
+45770
+45771
+45772
+45773
+45774
+45775
+45776
+45777
+45778
+45779
+45780
+45781
+45782
+45783
+45784
+45785
+45786
+45787
+45788
+45789
+45790
+45791
+45792
+45793
+45794
+45795
+45796
+45797
+45798
+45799
+45800
+45801
+45802
+45803
+45804
+45805
+45806
+45807
+45808
+45809
+45810
+45811
+45812
+45813
+45814
+45815
+45816
+45817
+45818
+45819
+45820
+45821
+45822
+45823
+45824
+45825
+45826
+45827
+45828
+45829
+45830
+45831
+45832
+45833
+45834
+45835
+45836
+45837
+45838
+45839
+45840
+45841
+45842
+45843
+45844
+45845
+45846
+45847
+45848
+45849
+45850
+45851
+45852
+45853
+45854
+45855
+45856
+45857
+45858
+45859
+45860
+45861
+45862
+45863
+45864
+45865
+45866
+45867
+45868
+45869
+45870
+45871
+45872
+45873
+45874
+45875
+45876
+45877
+45878
+45879
+45880
+45881
+45882
+45883
+45884
+45885
+45886
+45887
+45888
+45889
+45890
+45891
+45892
+45893
+45894
+45895
+45896
+45897
+45898
+45899
+45900
+45901
+45902
+45903
+45904
+45905
+45906
+45907
+45908
+45909
+45910
+45911
+45912
+45913
+45914
+45915
+45916
+45917
+45918
+45919
+45920
+45921
+45922
+45923
+45924
+45925
+45926
+45927
+45928
+45929
+45930
+45931
+45932
+45933
+45934
+45935
+45936
+45937
+45938
+45939
+45940
+45941
+45942
+45943
+45944
+45945
+45946
+45947
+45948
+45949
+45950
+45951
+45952
+45953
+45954
+45955
+45956
+45957
+45958
+45959
+45960
+45961
+45962
+45963
+45964
+45965
+45966
+45967
+45968
+45969
+45970
+45971
+45972
+45973
+45974
+45975
+45976
+45977
+45978
+45979
+45980
+45981
+45982
+45983
+45984
+45985
+45986
+45987
+45988
+45989
+45990
+45991
+45992
+45993
+45994
+45995
+45996
+45997
+45998
+45999
+46000
+46001
+46002
+46003
+46004
+46005
+46006
+46007
+46008
+46009
+46010
+46011
+46012
+46013
+46014
+46015
+46016
+46017
+46018
+46019
+46020
+46021
+46022
+46023
+46024
+46025
+46026
+46027
+46028
+46029
+46030
+46031
+46032
+46033
+46034
+46035
+46036
+46037
+46038
+46039
+46040
+46041
+46042
+46043
+46044
+46045
+46046
+46047
+46048
+46049
+46050
+46051
+46052
+46053
+46054
+46055
+46056
+46057
+46058
+46059
+46060
+46061
+46062
+46063
+46064
+46065
+46066
+46067
+46068
+46069
+46070
+46071
+46072
+46073
+46074
+46075
+46076
+46077
+46078
+46079
+46080
+46081
+46082
+46083
+46084
+46085
+46086
+46087
+46088
+46089
+46090
+46091
+46092
+46093
+46094
+46095
+46096
+46097
+46098
+46099
+46100
+46101
+46102
+46103
+46104
+46105
+46106
+46107
+46108
+46109
+46110
+46111
+46112
+46113
+46114
+46115
+46116
+46117
+46118
+46119
+46120
+46121
+46122
+46123
+46124
+46125
+46126
+46127
+46128
+46129
+46130
+46131
+46132
+46133
+46134
+46135
+46136
+46137
+46138
+46139
+46140
+46141
+46142
+46143
+46144
+46145
+46146
+46147
+46148
+46149
+46150
+46151
+46152
+46153
+46154
+46155
+46156
+46157
+46158
+46159
+46160
+46161
+46162
+46163
+46164
+46165
+46166
+46167
+46168
+46169
+46170
+46171
+46172
+46173
+46174
+46175
+46176
+46177
+46178
+46179
+46180
+46181
+46182
+46183
+46184
+46185
+46186
+46187
+46188
+46189
+46190
+46191
+46192
+46193
+46194
+46195
+46196
+46197
+46198
+46199
+46200
+46201
+46202
+46203
+46204
+46205
+46206
+46207
+46208
+46209
+46210
+46211
+46212
+46213
+46214
+46215
+46216
+46217
+46218
+46219
+46220
+46221
+46222
+46223
+46224
+46225
+46226
+46227
+46228
+46229
+46230
+46231
+46232
+46233
+46234
+46235
+46236
+46237
+46238
+46239
+46240
+46241
+46242
+46243
+46244
+46245
+46246
+46247
+46248
+46249
+46250
+46251
+46252
+46253
+46254
+46255
+46256
+46257
+46258
+46259
+46260
+46261
+46262
+46263
+46264
+46265
+46266
+46267
+46268
+46269
+46270
+46271
+46272
+46273
+46274
+46275
+46276
+46277
+46278
+46279
+46280
+46281
+46282
+46283
+46284
+46285
+46286
+46287
+46288
+46289
+46290
+46291
+46292
+46293
+46294
+46295
+46296
+46297
+46298
+46299
+46300
+46301
+46302
+46303
+46304
+46305
+46306
+46307
+46308
+46309
+46310
+46311
+46312
+46313
+46314
+46315
+46316
+46317
+46318
+46319
+46320
+46321
+46322
+46323
+46324
+46325
+46326
+46327
+46328
+46329
+46330
+46331
+46332
+46333
+46334
+46335
+46336
+46337
+46338
+46339
+46340
+46341
+46342
+46343
+46344
+46345
+46346
+46347
+46348
+46349
+46350
+46351
+46352
+46353
+46354
+46355
+46356
+46357
+46358
+46359
+46360
+46361
+46362
+46363
+46364
+46365
+46366
+46367
+46368
+46369
+46370
+46371
+46372
+46373
+46374
+46375
+46376
+46377
+46378
+46379
+46380
+46381
+46382
+46383
+46384
+46385
+46386
+46387
+46388
+46389
+46390
+46391
+46392
+46393
+46394
+46395
+46396
+46397
+46398
+46399
+46400
+46401
+46402
+46403
+46404
+46405
+46406
+46407
+46408
+46409
+46410
+46411
+46412
+46413
+46414
+46415
+46416
+46417
+46418
+46419
+46420
+46421
+46422
+46423
+46424
+46425
+46426
+46427
+46428
+46429
+46430
+46431
+46432
+46433
+46434
+46435
+46436
+46437
+46438
+46439
+46440
+46441
+46442
+46443
+46444
+46445
+46446
+46447
+46448
+46449
+46450
+46451
+46452
+46453
+46454
+46455
+46456
+46457
+46458
+46459
+46460
+46461
+46462
+46463
+46464
+46465
+46466
+46467
+46468
+46469
+46470
+46471
+46472
+46473
+46474
+46475
+46476
+46477
+46478
+46479
+46480
+46481
+46482
+46483
+46484
+46485
+46486
+46487
+46488
+46489
+46490
+46491
+46492
+46493
+46494
+46495
+46496
+46497
+46498
+46499
+46500
+46501
+46502
+46503
+46504
+46505
+46506
+46507
+46508
+46509
+46510
+46511
+46512
+46513
+46514
+46515
+46516
+46517
+46518
+46519
+46520
+46521
+46522
+46523
+46524
+46525
+46526
+46527
+46528
+46529
+46530
+46531
+46532
+46533
+46534
+46535
+46536
+46537
+46538
+46539
+46540
+46541
+46542
+46543
+46544
+46545
+46546
+46547
+46548
+46549
+46550
+46551
+46552
+46553
+46554
+46555
+46556
+46557
+46558
+46559
+46560
+46561
+46562
+46563
+46564
+46565
+46566
+46567
+46568
+46569
+46570
+46571
+46572
+46573
+46574
+46575
+46576
+46577
+46578
+46579
+46580
+46581
+46582
+46583
+46584
+46585
+46586
+46587
+46588
+46589
+46590
+46591
+46592
+46593
+46594
+46595
+46596
+46597
+46598
+46599
+46600
+46601
+46602
+46603
+46604
+46605
+46606
+46607
+46608
+46609
+46610
+46611
+46612
+46613
+46614
+46615
+46616
+46617
+46618
+46619
+46620
+46621
+46622
+46623
+46624
+46625
+46626
+46627
+46628
+46629
+46630
+46631
+46632
+46633
+46634
+46635
+46636
+46637
+46638
+46639
+46640
+46641
+46642
+46643
+46644
+46645
+46646
+46647
+46648
+46649
+46650
+46651
+46652
+46653
+46654
+46655
+46656
+46657
+46658
+46659
+46660
+46661
+46662
+46663
+46664
+46665
+46666
+46667
+46668
+46669
+46670
+46671
+46672
+46673
+46674
+46675
+46676
+46677
+46678
+46679
+46680
+46681
+46682
+46683
+46684
+46685
+46686
+46687
+46688
+46689
+46690
+46691
+46692
+46693
+46694
+46695
+46696
+46697
+46698
+46699
+46700
+46701
+46702
+46703
+46704
+46705
+46706
+46707
+46708
+46709
+46710
+46711
+46712
+46713
+46714
+46715
+46716
+46717
+46718
+46719
+46720
+46721
+46722
+46723
+46724
+46725
+46726
+46727
+46728
+46729
+46730
+46731
+46732
+46733
+46734
+46735
+46736
+46737
+46738
+46739
+46740
+46741
+46742
+46743
+46744
+46745
+46746
+46747
+46748
+46749
+46750
+46751
+46752
+46753
+46754
+46755
+46756
+46757
+46758
+46759
+46760
+46761
+46762
+46763
+46764
+46765
+46766
+46767
+46768
+46769
+46770
+46771
+46772
+46773
+46774
+46775
+46776
+46777
+46778
+46779
+46780
+46781
+46782
+46783
+46784
+46785
+46786
+46787
+46788
+46789
+46790
+46791
+46792
+46793
+46794
+46795
+46796
+46797
+46798
+46799
+46800
+46801
+46802
+46803
+46804
+46805
+46806
+46807
+46808
+46809
+46810
+46811
+46812
+46813
+46814
+46815
+46816
+46817
+46818
+46819
+46820
+46821
+46822
+46823
+46824
+46825
+46826
+46827
+46828
+46829
+46830
+46831
+46832
+46833
+46834
+46835
+46836
+46837
+46838
+46839
+46840
+46841
+46842
+46843
+46844
+46845
+46846
+46847
+46848
+46849
+46850
+46851
+46852
+46853
+46854
+46855
+46856
+46857
+46858
+46859
+46860
+46861
+46862
+46863
+46864
+46865
+46866
+46867
+46868
+46869
+46870
+46871
+46872
+46873
+46874
+46875
+46876
+46877
+46878
+46879
+46880
+46881
+46882
+46883
+46884
+46885
+46886
+46887
+46888
+46889
+46890
+46891
+46892
+46893
+46894
+46895
+46896
+46897
+46898
+46899
+46900
+46901
+46902
+46903
+46904
+46905
+46906
+46907
+46908
+46909
+46910
+46911
+46912
+46913
+46914
+46915
+46916
+46917
+46918
+46919
+46920
+46921
+46922
+46923
+46924
+46925
+46926
+46927
+46928
+46929
+46930
+46931
+46932
+46933
+46934
+46935
+46936
+46937
+46938
+46939
+46940
+46941
+46942
+46943
+46944
+46945
+46946
+46947
+46948
+46949
+46950
+46951
+46952
+46953
+46954
+46955
+46956
+46957
+46958
+46959
+46960
+46961
+46962
+46963
+46964
+46965
+46966
+46967
+46968
+46969
+46970
+46971
+46972
+46973
+46974
+46975
+46976
+46977
+46978
+46979
+46980
+46981
+46982
+46983
+46984
+46985
+46986
+46987
+46988
+46989
+46990
+46991
+46992
+46993
+46994
+46995
+46996
+46997
+46998
+46999
+47000
+47001
+47002
+47003
+47004
+47005
+47006
+47007
+47008
+47009
+47010
+47011
+47012
+47013
+47014
+47015
+47016
+47017
+47018
+47019
+47020
+47021
+47022
+47023
+47024
+47025
+47026
+47027
+47028
+47029
+47030
+47031
+47032
+47033
+47034
+47035
+47036
+47037
+47038
+47039
+47040
+47041
+47042
+47043
+47044
+47045
+47046
+47047
+47048
+47049
+47050
+47051
+47052
+47053
+47054
+47055
+47056
+47057
+47058
+47059
+47060
+47061
+47062
+47063
+47064
+47065
+47066
+47067
+47068
+47069
+47070
+47071
+47072
+47073
+47074
+47075
+47076
+47077
+47078
+47079
+47080
+47081
+47082
+47083
+47084
+47085
+47086
+47087
+47088
+47089
+47090
+47091
+47092
+47093
+47094
+47095
+47096
+47097
+47098
+47099
+47100
+47101
+47102
+47103
+47104
+47105
+47106
+47107
+47108
+47109
+47110
+47111
+47112
+47113
+47114
+47115
+47116
+47117
+47118
+47119
+47120
+47121
+47122
+47123
+47124
+47125
+47126
+47127
+47128
+47129
+47130
+47131
+47132
+47133
+47134
+47135
+47136
+47137
+47138
+47139
+47140
+47141
+47142
+47143
+47144
+47145
+47146
+47147
+47148
+47149
+47150
+47151
+47152
+47153
+47154
+47155
+47156
+47157
+47158
+47159
+47160
+47161
+47162
+47163
+47164
+47165
+47166
+47167
+47168
+47169
+47170
+47171
+47172
+47173
+47174
+47175
+47176
+47177
+47178
+47179
+47180
+47181
+47182
+47183
+47184
+47185
+47186
+47187
+47188
+47189
+47190
+47191
+47192
+47193
+47194
+47195
+47196
+47197
+47198
+47199
+47200
+47201
+47202
+47203
+47204
+47205
+47206
+47207
+47208
+47209
+47210
+47211
+47212
+47213
+47214
+47215
+47216
+47217
+47218
+47219
+47220
+47221
+47222
+47223
+47224
+47225
+47226
+47227
+47228
+47229
+47230
+47231
+47232
+47233
+47234
+47235
+47236
+47237
+47238
+47239
+47240
+47241
+47242
+47243
+47244
+47245
+47246
+47247
+47248
+47249
+47250
+47251
+47252
+47253
+47254
+47255
+47256
+47257
+47258
+47259
+47260
+47261
+47262
+47263
+47264
+47265
+47266
+47267
+47268
+47269
+47270
+47271
+47272
+47273
+47274
+47275
+47276
+47277
+47278
+47279
+47280
+47281
+47282
+47283
+47284
+47285
+47286
+47287
+47288
+47289
+47290
+47291
+47292
+47293
+47294
+47295
+47296
+47297
+47298
+47299
+47300
+47301
+47302
+47303
+47304
+47305
+47306
+47307
+47308
+47309
+47310
+47311
+47312
+47313
+47314
+47315
+47316
+47317
+47318
+47319
+47320
+47321
+47322
+47323
+47324
+47325
+47326
+47327
+47328
+47329
+47330
+47331
+47332
+47333
+47334
+47335
+47336
+47337
+47338
+47339
+47340
+47341
+47342
+47343
+47344
+47345
+47346
+47347
+47348
+47349
+47350
+47351
+47352
+47353
+47354
+47355
+47356
+47357
+47358
+47359
+47360
+47361
+47362
+47363
+47364
+47365
+47366
+47367
+47368
+47369
+47370
+47371
+47372
+47373
+47374
+47375
+47376
+47377
+47378
+47379
+47380
+47381
+47382
+47383
+47384
+47385
+47386
+47387
+47388
+47389
+47390
+47391
+47392
+47393
+47394
+47395
+47396
+47397
+47398
+47399
+47400
+47401
+47402
+47403
+47404
+47405
+47406
+47407
+47408
+47409
+47410
+47411
+47412
+47413
+47414
+47415
+47416
+47417
+47418
+47419
+47420
+47421
+47422
+47423
+47424
+47425
+47426
+47427
+47428
+47429
+47430
+47431
+47432
+47433
+47434
+47435
+47436
+47437
+47438
+47439
+47440
+47441
+47442
+47443
+47444
+47445
+47446
+47447
+47448
+47449
+47450
+47451
+47452
+47453
+47454
+47455
+47456
+47457
+47458
+47459
+47460
+47461
+47462
+47463
+47464
+47465
+47466
+47467
+47468
+47469
+47470
+47471
+47472
+47473
+47474
+47475
+47476
+47477
+47478
+47479
+47480
+47481
+47482
+47483
+47484
+47485
+47486
+47487
+47488
+47489
+47490
+47491
+47492
+47493
+47494
+47495
+47496
+47497
+47498
+47499
+47500
+47501
+47502
+47503
+47504
+47505
+47506
+47507
+47508
+47509
+47510
+47511
+47512
+47513
+47514
+47515
+47516
+47517
+47518
+47519
+47520
+47521
+47522
+47523
+47524
+47525
+47526
+47527
+47528
+47529
+47530
+47531
+47532
+47533
+47534
+47535
+47536
+47537
+47538
+47539
+47540
+47541
+47542
+47543
+47544
+47545
+47546
+47547
+47548
+47549
+47550
+47551
+47552
+47553
+47554
+47555
+47556
+47557
+47558
+47559
+47560
+47561
+47562
+47563
+47564
+47565
+47566
+47567
+47568
+47569
+47570
+47571
+47572
+47573
+47574
+47575
+47576
+47577
+47578
+47579
+47580
+47581
+47582
+47583
+47584
+47585
+47586
+47587
+47588
+47589
+47590
+47591
+47592
+47593
+47594
+47595
+47596
+47597
+47598
+47599
+47600
+47601
+47602
+47603
+47604
+47605
+47606
+47607
+47608
+47609
+47610
+47611
+47612
+47613
+47614
+47615
+47616
+47617
+47618
+47619
+47620
+47621
+47622
+47623
+47624
+47625
+47626
+47627
+47628
+47629
+47630
+47631
+47632
+47633
+47634
+47635
+47636
+47637
+47638
+47639
+47640
+47641
+47642
+47643
+47644
+47645
+47646
+47647
+47648
+47649
+47650
+47651
+47652
+47653
+47654
+47655
+47656
+47657
+47658
+47659
+47660
+47661
+47662
+47663
+47664
+47665
+47666
+47667
+47668
+47669
+47670
+47671
+47672
+47673
+47674
+47675
+47676
+47677
+47678
+47679
+47680
+47681
+47682
+47683
+47684
+47685
+47686
+47687
+47688
+47689
+47690
+47691
+47692
+47693
+47694
+47695
+47696
+47697
+47698
+47699
+47700
+47701
+47702
+47703
+47704
+47705
+47706
+47707
+47708
+47709
+47710
+47711
+47712
+47713
+47714
+47715
+47716
+47717
+47718
+47719
+47720
+47721
+47722
+47723
+47724
+47725
+47726
+47727
+47728
+47729
+47730
+47731
+47732
+47733
+47734
+47735
+47736
+47737
+47738
+47739
+47740
+47741
+47742
+47743
+47744
+47745
+47746
+47747
+47748
+47749
+47750
+47751
+47752
+47753
+47754
+47755
+47756
+47757
+47758
+47759
+47760
+47761
+47762
+47763
+47764
+47765
+47766
+47767
+47768
+47769
+47770
+47771
+47772
+47773
+47774
+47775
+47776
+47777
+47778
+47779
+47780
+47781
+47782
+47783
+47784
+47785
+47786
+47787
+47788
+47789
+47790
+47791
+47792
+47793
+47794
+47795
+47796
+47797
+47798
+47799
+47800
+47801
+47802
+47803
+47804
+47805
+47806
+47807
+47808
+47809
+47810
+47811
+47812
+47813
+47814
+47815
+47816
+47817
+47818
+47819
+47820
+47821
+47822
+47823
+47824
+47825
+47826
+47827
+47828
+47829
+47830
+47831
+47832
+47833
+47834
+47835
+47836
+47837
+47838
+47839
+47840
+47841
+47842
+47843
+47844
+47845
+47846
+47847
+47848
+47849
+47850
+47851
+47852
+47853
+47854
+47855
+47856
+47857
+47858
+47859
+47860
+47861
+47862
+47863
+47864
+47865
+47866
+47867
+47868
+47869
+47870
+47871
+47872
+47873
+47874
+47875
+47876
+47877
+47878
+47879
+47880
+47881
+47882
+47883
+47884
+47885
+47886
+47887
+47888
+47889
+47890
+47891
+47892
+47893
+47894
+47895
+47896
+47897
+47898
+47899
+47900
+47901
+47902
+47903
+47904
+47905
+47906
+47907
+47908
+47909
+47910
+47911
+47912
+47913
+47914
+47915
+47916
+47917
+47918
+47919
+47920
+47921
+47922
+47923
+47924
+47925
+47926
+47927
+47928
+47929
+47930
+47931
+47932
+47933
+47934
+47935
+47936
+47937
+47938
+47939
+47940
+47941
+47942
+47943
+47944
+47945
+47946
+47947
+47948
+47949
+47950
+47951
+47952
+47953
+47954
+47955
+47956
+47957
+47958
+47959
+47960
+47961
+47962
+47963
+47964
+47965
+47966
+47967
+47968
+47969
+47970
+47971
+47972
+47973
+47974
+47975
+47976
+47977
+47978
+47979
+47980
+47981
+47982
+47983
+47984
+47985
+47986
+47987
+47988
+47989
+47990
+47991
+47992
+47993
+47994
+47995
+47996
+47997
+47998
+47999
+48000
+48001
+48002
+48003
+48004
+48005
+48006
+48007
+48008
+48009
+48010
+48011
+48012
+48013
+48014
+48015
+48016
+48017
+48018
+48019
+48020
+48021
+48022
+48023
+48024
+48025
+48026
+48027
+48028
+48029
+48030
+48031
+48032
+48033
+48034
+48035
+48036
+48037
+48038
+48039
+48040
+48041
+48042
+48043
+48044
+48045
+48046
+48047
+48048
+48049
+48050
+48051
+48052
+48053
+48054
+48055
+48056
+48057
+48058
+48059
+48060
+48061
+48062
+48063
+48064
+48065
+48066
+48067
+48068
+48069
+48070
+48071
+48072
+48073
+48074
+48075
+48076
+48077
+48078
+48079
+48080
+48081
+48082
+48083
+48084
+48085
+48086
+48087
+48088
+48089
+48090
+48091
+48092
+48093
+48094
+48095
+48096
+48097
+48098
+48099
+48100
+48101
+48102
+48103
+48104
+48105
+48106
+48107
+48108
+48109
+48110
+48111
+48112
+48113
+48114
+48115
+48116
+48117
+48118
+48119
+48120
+48121
+48122
+48123
+48124
+48125
+48126
+48127
+48128
+48129
+48130
+48131
+48132
+48133
+48134
+48135
+48136
+48137
+48138
+48139
+48140
+48141
+48142
+48143
+48144
+48145
+48146
+48147
+48148
+48149
+48150
+48151
+48152
+48153
+48154
+48155
+48156
+48157
+48158
+48159
+48160
+48161
+48162
+48163
+48164
+48165
+48166
+48167
+48168
+48169
+48170
+48171
+48172
+48173
+48174
+48175
+48176
+48177
+48178
+48179
+48180
+48181
+48182
+48183
+48184
+48185
+48186
+48187
+48188
+48189
+48190
+48191
+48192
+48193
+48194
+48195
+48196
+48197
+48198
+48199
+48200
+48201
+48202
+48203
+48204
+48205
+48206
+48207
+48208
+48209
+48210
+48211
+48212
+48213
+48214
+48215
+48216
+48217
+48218
+48219
+48220
+48221
+48222
+48223
+48224
+48225
+48226
+48227
+48228
+48229
+48230
+48231
+48232
+48233
+48234
+48235
+48236
+48237
+48238
+48239
+48240
+48241
+48242
+48243
+48244
+48245
+48246
+48247
+48248
+48249
+48250
+48251
+48252
+48253
+48254
+48255
+48256
+48257
+48258
+48259
+48260
+48261
+48262
+48263
+48264
+48265
+48266
+48267
+48268
+48269
+48270
+48271
+48272
+48273
+48274
+48275
+48276
+48277
+48278
+48279
+48280
+48281
+48282
+48283
+48284
+48285
+48286
+48287
+48288
+48289
+48290
+48291
+48292
+48293
+48294
+48295
+48296
+48297
+48298
+48299
+48300
+48301
+48302
+48303
+48304
+48305
+48306
+48307
+48308
+48309
+48310
+48311
+48312
+48313
+48314
+48315
+48316
+48317
+48318
+48319
+48320
+48321
+48322
+48323
+48324
+48325
+48326
+48327
+48328
+48329
+48330
+48331
+48332
+48333
+48334
+48335
+48336
+48337
+48338
+48339
+48340
+48341
+48342
+48343
+48344
+48345
+48346
+48347
+48348
+48349
+48350
+48351
+48352
+48353
+48354
+48355
+48356
+48357
+48358
+48359
+48360
+48361
+48362
+48363
+48364
+48365
+48366
+48367
+48368
+48369
+48370
+48371
+48372
+48373
+48374
+48375
+48376
+48377
+48378
+48379
+48380
+48381
+48382
+48383
+48384
+48385
+48386
+48387
+48388
+48389
+48390
+48391
+48392
+48393
+48394
+48395
+48396
+48397
+48398
+48399
+48400
+48401
+48402
+48403
+48404
+48405
+48406
+48407
+48408
+48409
+48410
+48411
+48412
+48413
+48414
+48415
+48416
+48417
+48418
+48419
+48420
+48421
+48422
+48423
+48424
+48425
+48426
+48427
+48428
+48429
+48430
+48431
+48432
+48433
+48434
+48435
+48436
+48437
+48438
+48439
+48440
+48441
+48442
+48443
+48444
+48445
+48446
+48447
+48448
+48449
+48450
+48451
+48452
+48453
+48454
+48455
+48456
+48457
+48458
+48459
+48460
+48461
+48462
+48463
+48464
+48465
+48466
+48467
+48468
+48469
+48470
+48471
+48472
+48473
+48474
+48475
+48476
+48477
+48478
+48479
+48480
+48481
+48482
+48483
+48484
+48485
+48486
+48487
+48488
+48489
+48490
+48491
+48492
+48493
+48494
+48495
+48496
+48497
+48498
+48499
+48500
+48501
+48502
+48503
+48504
+48505
+48506
+48507
+48508
+48509
+48510
+48511
+48512
+48513
+48514
+48515
+48516
+48517
+48518
+48519
+48520
+48521
+48522
+48523
+48524
+48525
+48526
+48527
+48528
+48529
+48530
+48531
+48532
+48533
+48534
+48535
+48536
+48537
+48538
+48539
+48540
+48541
+48542
+48543
+48544
+48545
+48546
+48547
+48548
+48549
+48550
+48551
+48552
+48553
+48554
+48555
+48556
+48557
+48558
+48559
+48560
+48561
+48562
+48563
+48564
+48565
+48566
+48567
+48568
+48569
+48570
+48571
+48572
+48573
+48574
+48575
+48576
+48577
+48578
+48579
+48580
+48581
+48582
+48583
+48584
+48585
+48586
+48587
+48588
+48589
+48590
+48591
+48592
+48593
+48594
+48595
+48596
+48597
+48598
+48599
+48600
+48601
+48602
+48603
+48604
+48605
+48606
+48607
+48608
+48609
+48610
+48611
+48612
+48613
+48614
+48615
+48616
+48617
+48618
+48619
+48620
+48621
+48622
+48623
+48624
+48625
+48626
+48627
+48628
+48629
+48630
+48631
+48632
+48633
+48634
+48635
+48636
+48637
+48638
+48639
+48640
+48641
+48642
+48643
+48644
+48645
+48646
+48647
+48648
+48649
+48650
+48651
+48652
+48653
+48654
+48655
+48656
+48657
+48658
+48659
+48660
+48661
+48662
+48663
+48664
+48665
+48666
+48667
+48668
+48669
+48670
+48671
+48672
+48673
+48674
+48675
+48676
+48677
+48678
+48679
+48680
+48681
+48682
+48683
+48684
+48685
+48686
+48687
+48688
+48689
+48690
+48691
+48692
+48693
+48694
+48695
+48696
+48697
+48698
+48699
+48700
+48701
+48702
+48703
+48704
+48705
+48706
+48707
+48708
+48709
+48710
+48711
+48712
+48713
+48714
+48715
+48716
+48717
+48718
+48719
+48720
+48721
+48722
+48723
+48724
+48725
+48726
+48727
+48728
+48729
+48730
+48731
+48732
+48733
+48734
+48735
+48736
+48737
+48738
+48739
+48740
+48741
+48742
+48743
+48744
+48745
+48746
+48747
+48748
+48749
+48750
+48751
+48752
+48753
+48754
+48755
+48756
+48757
+48758
+48759
+48760
+48761
+48762
+48763
+48764
+48765
+48766
+48767
+48768
+48769
+48770
+48771
+48772
+48773
+48774
+48775
+48776
+48777
+48778
+48779
+48780
+48781
+48782
+48783
+48784
+48785
+48786
+48787
+48788
+48789
+48790
+48791
+48792
+48793
+48794
+48795
+48796
+48797
+48798
+48799
+48800
+48801
+48802
+48803
+48804
+48805
+48806
+48807
+48808
+48809
+48810
+48811
+48812
+48813
+48814
+48815
+48816
+48817
+48818
+48819
+48820
+48821
+48822
+48823
+48824
+48825
+48826
+48827
+48828
+48829
+48830
+48831
+48832
+48833
+48834
+48835
+48836
+48837
+48838
+48839
+48840
+48841
+48842
+48843
+48844
+48845
+48846
+48847
+48848
+48849
+48850
+48851
+48852
+48853
+48854
+48855
+48856
+48857
+48858
+48859
+48860
+48861
+48862
+48863
+48864
+48865
+48866
+48867
+48868
+48869
+48870
+48871
+48872
+48873
+48874
+48875
+48876
+48877
+48878
+48879
+48880
+48881
+48882
+48883
+48884
+48885
+48886
+48887
+48888
+48889
+48890
+48891
+48892
+48893
+48894
+48895
+48896
+48897
+48898
+48899
+48900
+48901
+48902
+48903
+48904
+48905
+48906
+48907
+48908
+48909
+48910
+48911
+48912
+48913
+48914
+48915
+48916
+48917
+48918
+48919
+48920
+48921
+48922
+48923
+48924
+48925
+48926
+48927
+48928
+48929
+48930
+48931
+48932
+48933
+48934
+48935
+48936
+48937
+48938
+48939
+48940
+48941
+48942
+48943
+48944
+48945
+48946
+48947
+48948
+48949
+48950
+48951
+48952
+48953
+48954
+48955
+48956
+48957
+48958
+48959
+48960
+48961
+48962
+48963
+48964
+48965
+48966
+48967
+48968
+48969
+48970
+48971
+48972
+48973
+48974
+48975
+48976
+48977
+48978
+48979
+48980
+48981
+48982
+48983
+48984
+48985
+48986
+48987
+48988
+48989
+48990
+48991
+48992
+48993
+48994
+48995
+48996
+48997
+48998
+48999
+49000
+49001
+49002
+49003
+49004
+49005
+49006
+49007
+49008
+49009
+49010
+49011
+49012
+49013
+49014
+49015
+49016
+49017
+49018
+49019
+49020
+49021
+49022
+49023
+49024
+49025
+49026
+49027
+49028
+49029
+49030
+49031
+49032
+49033
+49034
+49035
+49036
+49037
+49038
+49039
+49040
+49041
+49042
+49043
+49044
+49045
+49046
+49047
+49048
+49049
+49050
+49051
+49052
+49053
+49054
+49055
+49056
+49057
+49058
+49059
+49060
+49061
+49062
+49063
+49064
+49065
+49066
+49067
+49068
+49069
+49070
+49071
+49072
+49073
+49074
+49075
+49076
+49077
+49078
+49079
+49080
+49081
+49082
+49083
+49084
+49085
+49086
+49087
+49088
+49089
+49090
+49091
+49092
+49093
+49094
+49095
+49096
+49097
+49098
+49099
+49100
+49101
+49102
+49103
+49104
+49105
+49106
+49107
+49108
+49109
+49110
+49111
+49112
+49113
+49114
+49115
+49116
+49117
+49118
+49119
+49120
+49121
+49122
+49123
+49124
+49125
+49126
+49127
+49128
+49129
+49130
+49131
+49132
+49133
+49134
+49135
+49136
+49137
+49138
+49139
+49140
+49141
+49142
+49143
+49144
+49145
+49146
+49147
+49148
+49149
+49150
+49151
+49152
+49153
+49154
+49155
+49156
+49157
+49158
+49159
+49160
+49161
+49162
+49163
+49164
+49165
+49166
+49167
+49168
+49169
+49170
+49171
+49172
+49173
+49174
+49175
+49176
+49177
+49178
+49179
+49180
+49181
+49182
+49183
+49184
+49185
+49186
+49187
+49188
+49189
+49190
+49191
+49192
+49193
+49194
+49195
+49196
+49197
+49198
+49199
+49200
+49201
+49202
+49203
+49204
+49205
+49206
+49207
+49208
+49209
+49210
+49211
+49212
+49213
+49214
+49215
+49216
+49217
+49218
+49219
+49220
+49221
+49222
+49223
+49224
+49225
+49226
+49227
+49228
+49229
+49230
+49231
+49232
+49233
+49234
+49235
+49236
+49237
+49238
+49239
+49240
+49241
+49242
+49243
+49244
+49245
+49246
+49247
+49248
+49249
+49250
+49251
+49252
+49253
+49254
+49255
+49256
+49257
+49258
+49259
+49260
+49261
+49262
+49263
+49264
+49265
+49266
+49267
+49268
+49269
+49270
+49271
+49272
+49273
+49274
+49275
+49276
+49277
+49278
+49279
+49280
+49281
+49282
+49283
+49284
+49285
+49286
+49287
+49288
+49289
+49290
+49291
+49292
+49293
+49294
+49295
+49296
+49297
+49298
+49299
+49300
+49301
+49302
+49303
+49304
+49305
+49306
+49307
+49308
+49309
+49310
+49311
+49312
+49313
+49314
+49315
+49316
+49317
+49318
+49319
+49320
+49321
+49322
+49323
+49324
+49325
+49326
+49327
+49328
+49329
+49330
+49331
+49332
+49333
+49334
+49335
+49336
+49337
+49338
+49339
+49340
+49341
+49342
+49343
+49344
+49345
+49346
+49347
+49348
+49349
+49350
+49351
+49352
+49353
+49354
+49355
+49356
+49357
+49358
+49359
+49360
+49361
+49362
+49363
+49364
+49365
+49366
+49367
+49368
+49369
+49370
+49371
+49372
+49373
+49374
+49375
+49376
+49377
+49378
+49379
+49380
+49381
+49382
+49383
+49384
+49385
+49386
+49387
+49388
+49389
+49390
+49391
+49392
+49393
+49394
+49395
+49396
+49397
+49398
+49399
+49400
+49401
+49402
+49403
+49404
+49405
+49406
+49407
+49408
+49409
+49410
+49411
+49412
+49413
+49414
+49415
+49416
+49417
+49418
+49419
+49420
+49421
+49422
+49423
+49424
+49425
+49426
+49427
+49428
+49429
+49430
+49431
+49432
+49433
+49434
+49435
+49436
+49437
+49438
+49439
+49440
+49441
+49442
+49443
+49444
+49445
+49446
+49447
+49448
+49449
+49450
+49451
+49452
+49453
+49454
+49455
+49456
+49457
+49458
+49459
+49460
+49461
+49462
+49463
+49464
+49465
+49466
+49467
+49468
+49469
+49470
+49471
+49472
+49473
+49474
+49475
+49476
+49477
+49478
+49479
+49480
+49481
+49482
+49483
+49484
+49485
+49486
+49487
+49488
+49489
+49490
+49491
+49492
+49493
+49494
+49495
+49496
+49497
+49498
+49499
+49500
+49501
+49502
+49503
+49504
+49505
+49506
+49507
+49508
+49509
+49510
+49511
+49512
+49513
+49514
+49515
+49516
+49517
+49518
+49519
+49520
+49521
+49522
+49523
+49524
+49525
+49526
+49527
+49528
+49529
+49530
+49531
+49532
+49533
+49534
+49535
+49536
+49537
+49538
+49539
+49540
+49541
+49542
+49543
+49544
+49545
+49546
+49547
+49548
+49549
+49550
+49551
+49552
+49553
+49554
+49555
+49556
+49557
+49558
+49559
+49560
+49561
+49562
+49563
+49564
+49565
+49566
+49567
+49568
+49569
+49570
+49571
+49572
+49573
+49574
+49575
+49576
+49577
+49578
+49579
+49580
+49581
+49582
+49583
+49584
+49585
+49586
+49587
+49588
+49589
+49590
+49591
+49592
+49593
+49594
+49595
+49596
+49597
+49598
+49599
+49600
+49601
+49602
+49603
+49604
+49605
+49606
+49607
+49608
+49609
+49610
+49611
+49612
+49613
+49614
+49615
+49616
+49617
+49618
+49619
+49620
+49621
+49622
+49623
+49624
+49625
+49626
+49627
+49628
+49629
+49630
+49631
+49632
+49633
+49634
+49635
+49636
+49637
+49638
+49639
+49640
+49641
+49642
+49643
+49644
+49645
+49646
+49647
+49648
+49649
+49650
+49651
+49652
+49653
+49654
+49655
+49656
+49657
+49658
+49659
+49660
+49661
+49662
+49663
+49664
+49665
+49666
+49667
+49668
+49669
+49670
+49671
+49672
+49673
+49674
+49675
+49676
+49677
+49678
+49679
+49680
+49681
+49682
+49683
+49684
+49685
+49686
+49687
+49688
+49689
+49690
+49691
+49692
+49693
+49694
+49695
+49696
+49697
+49698
+49699
+49700
+49701
+49702
+49703
+49704
+49705
+49706
+49707
+49708
+49709
+49710
+49711
+49712
+49713
+49714
+49715
+49716
+49717
+49718
+49719
+49720
+49721
+49722
+49723
+49724
+49725
+49726
+49727
+49728
+49729
+49730
+49731
+49732
+49733
+49734
+49735
+49736
+49737
+49738
+49739
+49740
+49741
+49742
+49743
+49744
+49745
+49746
+49747
+49748
+49749
+49750
+49751
+49752
+49753
+49754
+49755
+49756
+49757
+49758
+49759
+49760
+49761
+49762
+49763
+49764
+49765
+49766
+49767
+49768
+49769
+49770
+49771
+49772
+49773
+49774
+49775
+49776
+49777
+49778
+49779
+49780
+49781
+49782
+49783
+49784
+49785
+49786
+49787
+49788
+49789
+49790
+49791
+49792
+49793
+49794
+49795
+49796
+49797
+49798
+49799
+49800
+49801
+49802
+49803
+49804
+49805
+49806
+49807
+49808
+49809
+49810
+49811
+49812
+49813
+49814
+49815
+49816
+49817
+49818
+49819
+49820
+49821
+49822
+49823
+49824
+49825
+49826
+49827
+49828
+49829
+49830
+49831
+49832
+49833
+49834
+49835
+49836
+49837
+49838
+49839
+49840
+49841
+49842
+49843
+49844
+49845
+49846
+49847
+49848
+49849
+49850
+49851
+49852
+49853
+49854
+49855
+49856
+49857
+49858
+49859
+49860
+49861
+49862
+49863
+49864
+49865
+49866
+49867
+49868
+49869
+49870
+49871
+49872
+49873
+49874
+49875
+49876
+49877
+49878
+49879
+49880
+49881
+49882
+49883
+49884
+49885
+49886
+49887
+49888
+49889
+49890
+49891
+49892
+49893
+49894
+49895
+49896
+49897
+49898
+49899
+49900
+49901
+49902
+49903
+49904
+49905
+49906
+49907
+49908
+49909
+49910
+49911
+49912
+49913
+49914
+49915
+49916
+49917
+49918
+49919
+49920
+49921
+49922
+49923
+49924
+49925
+49926
+49927
+49928
+49929
+49930
+49931
+49932
+49933
+49934
+49935
+49936
+49937
+49938
+49939
+49940
+49941
+49942
+49943
+49944
+49945
+49946
+49947
+49948
+49949
+49950
+49951
+49952
+49953
+49954
+49955
+49956
+49957
+49958
+49959
+49960
+49961
+49962
+49963
+49964
+49965
+49966
+49967
+49968
+49969
+49970
+49971
+49972
+49973
+49974
+49975
+49976
+49977
+49978
+49979
+49980
+49981
+49982
+49983
+49984
+49985
+49986
+49987
+49988
+49989
+49990
+49991
+49992
+49993
+49994
+49995
+49996
+49997
+49998
+49999
+50000
+50001
+50002
+50003
+50004
+50005
+50006
+50007
+50008
+50009
+50010
+50011
+50012
+50013
+50014
+50015
+50016
+50017
+50018
+50019
+50020
+50021
+50022
+50023
+50024
+50025
+50026
+50027
+50028
+50029
+50030
+50031
+50032
+50033
+50034
+50035
+50036
+50037
+50038
+50039
+50040
+50041
+50042
+50043
+50044
+50045
+50046
+50047
+50048
+50049
+50050
+50051
+50052
+50053
+50054
+50055
+50056
+50057
+50058
+50059
+50060
+50061
+50062
+50063
+50064
+50065
+50066
+50067
+50068
+50069
+50070
+50071
+50072
+50073
+50074
+50075
+50076
+50077
+50078
+50079
+50080
+50081
+50082
+50083
+50084
+50085
+50086
+50087
+50088
+50089
+50090
+50091
+50092
+50093
+50094
+50095
+50096
+50097
+50098
+50099
+50100
+50101
+50102
+50103
+50104
+50105
+50106
+50107
+50108
+50109
+50110
+50111
+50112
+50113
+50114
+50115
+50116
+50117
+50118
+50119
+50120
+50121
+50122
+50123
+50124
+50125
+50126
+50127
+50128
+50129
+50130
+50131
+50132
+50133
+50134
+50135
+50136
+50137
+50138
+50139
+50140
+50141
+50142
+50143
+50144
+50145
+50146
+50147
+50148
+50149
+50150
+50151
+50152
+50153
+50154
+50155
+50156
+50157
+50158
+50159
+50160
+50161
+50162
+50163
+50164
+50165
+50166
+50167
+50168
+50169
+50170
+50171
+50172
+50173
+50174
+50175
+50176
+50177
+50178
+50179
+50180
+50181
+50182
+50183
+50184
+50185
+50186
+50187
+50188
+50189
+50190
+50191
+50192
+50193
+50194
+50195
+50196
+50197
+50198
+50199
+50200
+50201
+50202
+50203
+50204
+50205
+50206
+50207
+50208
+50209
+50210
+50211
+50212
+50213
+50214
+50215
+50216
+50217
+50218
+50219
+50220
+50221
+50222
+50223
+50224
+50225
+50226
+50227
+50228
+50229
+50230
+50231
+50232
+50233
+50234
+50235
+50236
+50237
+50238
+50239
+50240
+50241
+50242
+50243
+50244
+50245
+50246
+50247
+50248
+50249
+50250
+50251
+50252
+50253
+50254
+50255
+50256
+50257
+50258
+50259
+50260
+50261
+50262
+50263
+50264
+50265
+50266
+50267
+50268
+50269
+50270
+50271
+50272
+50273
+50274
+50275
+50276
+50277
+50278
+50279
+50280
+50281
+50282
+50283
+50284
+50285
+50286
+50287
+50288
+50289
+50290
+50291
+50292
+50293
+50294
+50295
+50296
+50297
+50298
+50299
+50300
+50301
+50302
+50303
+50304
+50305
+50306
+50307
+50308
+50309
+50310
+50311
+50312
+50313
+50314
+50315
+50316
+50317
+50318
+50319
+50320
+50321
+50322
+50323
+50324
+50325
+50326
+50327
+50328
+50329
+50330
+50331
+50332
+50333
+50334
+50335
+50336
+50337
+50338
+50339
+50340
+50341
+50342
+50343
+50344
+50345
+50346
+50347
+50348
+50349
+50350
+50351
+50352
+50353
+50354
+50355
+50356
+50357
+50358
+50359
+50360
+50361
+50362
+50363
+50364
+50365
+50366
+50367
+50368
+50369
+50370
+50371
+50372
+50373
+50374
+50375
+50376
+50377
+50378
+50379
+50380
+50381
+50382
+50383
+50384
+50385
+50386
+50387
+50388
+50389
+50390
+50391
+50392
+50393
+50394
+50395
+50396
+50397
+50398
+50399
+50400
+50401
+50402
+50403
+50404
+50405
+50406
+50407
+50408
+50409
+50410
+50411
+50412
+50413
+50414
+50415
+50416
+50417
+50418
+50419
+50420
+50421
+50422
+50423
+50424
+50425
+50426
+50427
+50428
+50429
+50430
+50431
+50432
+50433
+50434
+50435
+50436
+50437
+50438
+50439
+50440
+50441
+50442
+50443
+50444
+50445
+50446
+50447
+50448
+50449
+50450
+50451
+50452
+50453
+50454
+50455
+50456
+50457
+50458
+50459
+50460
+50461
+50462
+50463
+50464
+50465
+50466
+50467
+50468
+50469
+50470
+50471
+50472
+50473
+50474
+50475
+50476
+50477
+50478
+50479
+50480
+50481
+50482
+50483
+50484
+50485
+50486
+50487
+50488
+50489
+50490
+50491
+50492
+50493
+50494
+50495
+50496
+50497
+50498
+50499
+50500
+50501
+50502
+50503
+50504
+50505
+50506
+50507
+50508
+50509
+50510
+50511
+50512
+50513
+50514
+50515
+50516
+50517
+50518
+50519
+50520
+50521
+50522
+50523
+50524
+50525
+50526
+50527
+50528
+50529
+50530
+50531
+50532
+50533
+50534
+50535
+50536
+50537
+50538
+50539
+50540
+50541
+50542
+50543
+50544
+50545
+50546
+50547
+50548
+50549
+50550
+50551
+50552
+50553
+50554
+50555
+50556
+50557
+50558
+50559
+50560
+50561
+50562
+50563
+50564
+50565
+50566
+50567
+50568
+50569
+50570
+50571
+50572
+50573
+50574
+50575
+50576
+50577
+50578
+50579
+50580
+50581
+50582
+50583
+50584
+50585
+50586
+50587
+50588
+50589
+50590
+50591
+50592
+50593
+50594
+50595
+50596
+50597
+50598
+50599
+50600
+50601
+50602
+50603
+50604
+50605
+50606
+50607
+50608
+50609
+50610
+50611
+50612
+50613
+50614
+50615
+50616
+50617
+50618
+50619
+50620
+50621
+50622
+50623
+50624
+50625
+50626
+50627
+50628
+50629
+50630
+50631
+50632
+50633
+50634
+50635
+50636
+50637
+50638
+50639
+50640
+50641
+50642
+50643
+50644
+50645
+50646
+50647
+50648
+50649
+50650
+50651
+50652
+50653
+50654
+50655
+50656
+50657
+50658
+50659
+50660
+50661
+50662
+50663
+50664
+50665
+50666
+50667
+50668
+50669
+50670
+50671
+50672
+50673
+50674
+50675
+50676
+50677
+50678
+50679
+50680
+50681
+50682
+50683
+50684
+50685
+50686
+50687
+50688
+50689
+50690
+50691
+50692
+50693
+50694
+50695
+50696
+50697
+50698
+50699
+50700
+50701
+50702
+50703
+50704
+50705
+50706
+50707
+50708
+50709
+50710
+50711
+50712
+50713
+50714
+50715
+50716
+50717
+50718
+50719
+50720
+50721
+50722
+50723
+50724
+50725
+50726
+50727
+50728
+50729
+50730
+50731
+50732
+50733
+50734
+50735
+50736
+50737
+50738
+50739
+50740
+50741
+50742
+50743
+50744
+50745
+50746
+50747
+50748
+50749
+50750
+50751
+50752
+50753
+50754
+50755
+50756
+50757
+50758
+50759
+50760
+50761
+50762
+50763
+50764
+50765
+50766
+50767
+50768
+50769
+50770
+50771
+50772
+50773
+50774
+50775
+50776
+50777
+50778
+50779
+50780
+50781
+50782
+50783
+50784
+50785
+50786
+50787
+50788
+50789
+50790
+50791
+50792
+50793
+50794
+50795
+50796
+50797
+50798
+50799
+50800
+50801
+50802
+50803
+50804
+50805
+50806
+50807
+50808
+50809
+50810
+50811
+50812
+50813
+50814
+50815
+50816
+50817
+50818
+50819
+50820
+50821
+50822
+50823
+50824
+50825
+50826
+50827
+50828
+50829
+50830
+50831
+50832
+50833
+50834
+50835
+50836
+50837
+50838
+50839
+50840
+50841
+50842
+50843
+50844
+50845
+50846
+50847
+50848
+50849
+50850
+50851
+50852
+50853
+50854
+50855
+50856
+50857
+50858
+50859
+50860
+50861
+50862
+50863
+50864
+50865
+50866
+50867
+50868
+50869
+50870
+50871
+50872
+50873
+50874
+50875
+50876
+50877
+50878
+50879
+50880
+50881
+50882
+50883
+50884
+50885
+50886
+50887
+50888
+50889
+50890
+50891
+50892
+50893
+50894
+50895
+50896
+50897
+50898
+50899
+50900
+50901
+50902
+50903
+50904
+50905
+50906
+50907
+50908
+50909
+50910
+50911
+50912
+50913
+50914
+50915
+50916
+50917
+50918
+50919
+50920
+50921
+50922
+50923
+50924
+50925
+50926
+50927
+50928
+50929
+50930
+50931
+50932
+50933
+50934
+50935
+50936
+50937
+50938
+50939
+50940
+50941
+50942
+50943
+50944
+50945
+50946
+50947
+50948
+50949
+50950
+50951
+50952
+50953
+50954
+50955
+50956
+50957
+50958
+50959
+50960
+50961
+50962
+50963
+50964
+50965
+50966
+50967
+50968
+50969
+50970
+50971
+50972
+50973
+50974
+50975
+50976
+50977
+50978
+50979
+50980
+50981
+50982
+50983
+50984
+50985
+50986
+50987
+50988
+50989
+50990
+50991
+50992
+50993
+50994
+50995
+50996
+50997
+50998
+50999
+51000
+51001
+51002
+51003
+51004
+51005
+51006
+51007
+51008
+51009
+51010
+51011
+51012
+51013
+51014
+51015
+51016
+51017
+51018
+51019
+51020
+51021
+51022
+51023
+51024
+51025
+51026
+51027
+51028
+51029
+51030
+51031
+51032
+51033
+51034
+51035
+51036
+51037
+51038
+51039
+51040
+51041
+51042
+51043
+51044
+51045
+51046
+51047
+51048
+51049
+51050
+51051
+51052
+51053
+51054
+51055
+51056
+51057
+51058
+51059
+51060
+51061
+51062
+51063
+51064
+51065
+51066
+51067
+51068
+51069
+51070
+51071
+51072
+51073
+51074
+51075
+51076
+51077
+51078
+51079
+51080
+51081
+51082
+51083
+51084
+51085
+51086
+51087
+51088
+51089
+51090
+51091
+51092
+51093
+51094
+51095
+51096
+51097
+51098
+51099
+51100
+51101
+51102
+51103
+51104
+51105
+51106
+51107
+51108
+51109
+51110
+51111
+51112
+51113
+51114
+51115
+51116
+51117
+51118
+51119
+51120
+51121
+51122
+51123
+51124
+51125
+51126
+51127
+51128
+51129
+51130
+51131
+51132
+51133
+51134
+51135
+51136
+51137
+51138
+51139
+51140
+51141
+51142
+51143
+51144
+51145
+51146
+51147
+51148
+51149
+51150
+51151
+51152
+51153
+51154
+51155
+51156
+51157
+51158
+51159
+51160
+51161
+51162
+51163
+51164
+51165
+51166
+51167
+51168
+51169
+51170
+51171
+51172
+51173
+51174
+51175
+51176
+51177
+51178
+51179
+51180
+51181
+51182
+51183
+51184
+51185
+51186
+51187
+51188
+51189
+51190
+51191
+51192
+51193
+51194
+51195
+51196
+51197
+51198
+51199
+51200
+51201
+51202
+51203
+51204
+51205
+51206
+51207
+51208
+51209
+51210
+51211
+51212
+51213
+51214
+51215
+51216
+51217
+51218
+51219
+51220
+51221
+51222
+51223
+51224
+51225
+51226
+51227
+51228
+51229
+51230
+51231
+51232
+51233
+51234
+51235
+51236
+51237
+51238
+51239
+51240
+51241
+51242
+51243
+51244
+51245
+51246
+51247
+51248
+51249
+51250
+51251
+51252
+51253
+51254
+51255
+51256
+51257
+51258
+51259
+51260
+51261
+51262
+51263
+51264
+51265
+51266
+51267
+51268
+51269
+51270
+51271
+51272
+51273
+51274
+51275
+51276
+51277
+51278
+51279
+51280
+51281
+51282
+51283
+51284
+51285
+51286
+51287
+51288
+51289
+51290
+51291
+51292
+51293
+51294
+51295
+51296
+51297
+51298
+51299
+51300
+51301
+51302
+51303
+51304
+51305
+51306
+51307
+51308
+51309
+51310
+51311
+51312
+51313
+51314
+51315
+51316
+51317
+51318
+51319
+51320
+51321
+51322
+51323
+51324
+51325
+51326
+51327
+51328
+51329
+51330
+51331
+51332
+51333
+51334
+51335
+51336
+51337
+51338
+51339
+51340
+51341
+51342
+51343
+51344
+51345
+51346
+51347
+51348
+51349
+51350
+51351
+51352
+51353
+51354
+51355
+51356
+51357
+51358
+51359
+51360
+51361
+51362
+51363
+51364
+51365
+51366
+51367
+51368
+51369
+51370
+51371
+51372
+51373
+51374
+51375
+51376
+51377
+51378
+51379
+51380
+51381
+51382
+51383
+51384
+51385
+51386
+51387
+51388
+51389
+51390
+51391
+51392
+51393
+51394
+51395
+51396
+51397
+51398
+51399
+51400
+51401
+51402
+51403
+51404
+51405
+51406
+51407
+51408
+51409
+51410
+51411
+51412
+51413
+51414
+51415
+51416
+51417
+51418
+51419
+51420
+51421
+51422
+51423
+51424
+51425
+51426
+51427
+51428
+51429
+51430
+51431
+51432
+51433
+51434
+51435
+51436
+51437
+51438
+51439
+51440
+51441
+51442
+51443
+51444
+51445
+51446
+51447
+51448
+51449
+51450
+51451
+51452
+51453
+51454
+51455
+51456
+51457
+51458
+51459
+51460
+51461
+51462
+51463
+51464
+51465
+51466
+51467
+51468
+51469
+51470
+51471
+51472
+51473
+51474
+51475
+51476
+51477
+51478
+51479
+51480
+51481
+51482
+51483
+51484
+51485
+51486
+51487
+51488
+51489
+51490
+51491
+51492
+51493
+51494
+51495
+51496
+51497
+51498
+51499
+51500
+51501
+51502
+51503
+51504
+51505
+51506
+51507
+51508
+51509
+51510
+51511
+51512
+51513
+51514
+51515
+51516
+51517
+51518
+51519
+51520
+51521
+51522
+51523
+51524
+51525
+51526
+51527
+51528
+51529
+51530
+51531
+51532
+51533
+51534
+51535
+51536
+51537
+51538
+51539
+51540
+51541
+51542
+51543
+51544
+51545
+51546
+51547
+51548
+51549
+51550
+51551
+51552
+51553
+51554
+51555
+51556
+51557
+51558
+51559
+51560
+51561
+51562
+51563
+51564
+51565
+51566
+51567
+51568
+51569
+51570
+51571
+51572
+51573
+51574
+51575
+51576
+51577
+51578
+51579
+51580
+51581
+51582
+51583
+51584
+51585
+51586
+51587
+51588
+51589
+51590
+51591
+51592
+51593
+51594
+51595
+51596
+51597
+51598
+51599
+51600
+51601
+51602
+51603
+51604
+51605
+51606
+51607
+51608
+51609
+51610
+51611
+51612
+51613
+51614
+51615
+51616
+51617
+51618
+51619
+51620
+51621
+51622
+51623
+51624
+51625
+51626
+51627
+51628
+51629
+51630
+51631
+51632
+51633
+51634
+51635
+51636
+51637
+51638
+51639
+51640
+51641
+51642
+51643
+51644
+51645
+51646
+51647
+51648
+51649
+51650
+51651
+51652
+51653
+51654
+51655
+51656
+51657
+51658
+51659
+51660
+51661
+51662
+51663
+51664
+51665
+51666
+51667
+51668
+51669
+51670
+51671
+51672
+51673
+51674
+51675
+51676
+51677
+51678
+51679
+51680
+51681
+51682
+51683
+51684
+51685
+51686
+51687
+51688
+51689
+51690
+51691
+51692
+51693
+51694
+51695
+51696
+51697
+51698
+51699
+51700
+51701
+51702
+51703
+51704
+51705
+51706
+51707
+51708
+51709
+51710
+51711
+51712
+51713
+51714
+51715
+51716
+51717
+51718
+51719
+51720
+51721
+51722
+51723
+51724
+51725
+51726
+51727
+51728
+51729
+51730
+51731
+51732
+51733
+51734
+51735
+51736
+51737
+51738
+51739
+51740
+51741
+51742
+51743
+51744
+51745
+51746
+51747
+51748
+51749
+51750
+51751
+51752
+51753
+51754
+51755
+51756
+51757
+51758
+51759
+51760
+51761
+51762
+51763
+51764
+51765
+51766
+51767
+51768
+51769
+51770
+51771
+51772
+51773
+51774
+51775
+51776
+51777
+51778
+51779
+51780
+51781
+51782
+51783
+51784
+51785
+51786
+51787
+51788
+51789
+51790
+51791
+51792
+51793
+51794
+51795
+51796
+51797
+51798
+51799
+51800
+51801
+51802
+51803
+51804
+51805
+51806
+51807
+51808
+51809
+51810
+51811
+51812
+51813
+51814
+51815
+51816
+51817
+51818
+51819
+51820
+51821
+51822
+51823
+51824
+51825
+51826
+51827
+51828
+51829
+51830
+51831
+51832
+51833
+51834
+51835
+51836
+51837
+51838
+51839
+51840
+51841
+51842
+51843
+51844
+51845
+51846
+51847
+51848
+51849
+51850
+51851
+51852
+51853
+51854
+51855
+51856
+51857
+51858
+51859
+51860
+51861
+51862
+51863
+51864
+51865
+51866
+51867
+51868
+51869
+51870
+51871
+51872
+51873
+51874
+51875
+51876
+51877
+51878
+51879
+51880
+51881
+51882
+51883
+51884
+51885
+51886
+51887
+51888
+51889
+51890
+51891
+51892
+51893
+51894
+51895
+51896
+51897
+51898
+51899
+51900
+51901
+51902
+51903
+51904
+51905
+51906
+51907
+51908
+51909
+51910
+51911
+51912
+51913
+51914
+51915
+51916
+51917
+51918
+51919
+51920
+51921
+51922
+51923
+51924
+51925
+51926
+51927
+51928
+51929
+51930
+51931
+51932
+51933
+51934
+51935
+51936
+51937
+51938
+51939
+51940
+51941
+51942
+51943
+51944
+51945
+51946
+51947
+51948
+51949
+51950
+51951
+51952
+51953
+51954
+51955
+51956
+51957
+51958
+51959
+51960
+51961
+51962
+51963
+51964
+51965
+51966
+51967
+51968
+51969
+51970
+51971
+51972
+51973
+51974
+51975
+51976
+51977
+51978
+51979
+51980
+51981
+51982
+51983
+51984
+51985
+51986
+51987
+51988
+51989
+51990
+51991
+51992
+51993
+51994
+51995
+51996
+51997
+51998
+51999
+52000
+52001
+52002
+52003
+52004
+52005
+52006
+52007
+52008
+52009
+52010
+52011
+52012
+52013
+52014
+52015
+52016
+52017
+52018
+52019
+52020
+52021
+52022
+52023
+52024
+52025
+52026
+52027
+52028
+52029
+52030
+52031
+52032
+52033
+52034
+52035
+52036
+52037
+52038
+52039
+52040
+52041
+52042
+52043
+52044
+52045
+52046
+52047
+52048
+52049
+52050
+52051
+52052
+52053
+52054
+52055
+52056
+52057
+52058
+52059
+52060
+52061
+52062
+52063
+52064
+52065
+52066
+52067
+52068
+52069
+52070
+52071
+52072
+52073
+52074
+52075
+52076
+52077
+52078
+52079
+52080
+52081
+52082
+52083
+52084
+52085
+52086
+52087
+52088
+52089
+52090
+52091
+52092
+52093
+52094
+52095
+52096
+52097
+52098
+52099
+52100
+52101
+52102
+52103
+52104
+52105
+52106
+52107
+52108
+52109
+52110
+52111
+52112
+52113
+52114
+52115
+52116
+52117
+52118
+52119
+52120
+52121
+52122
+52123
+52124
+52125
+52126
+52127
+52128
+52129
+52130
+52131
+52132
+52133
+52134
+52135
+52136
+52137
+52138
+52139
+52140
+52141
+52142
+52143
+52144
+52145
+52146
+52147
+52148
+52149
+52150
+52151
+52152
+52153
+52154
+52155
+52156
+52157
+52158
+52159
+52160
+52161
+52162
+52163
+52164
+52165
+52166
+52167
+52168
+52169
+52170
+52171
+52172
+52173
+52174
+52175
+52176
+52177
+52178
+52179
+52180
+52181
+52182
+52183
+52184
+52185
+52186
+52187
+52188
+52189
+52190
+52191
+52192
+52193
+52194
+52195
+52196
+52197
+52198
+52199
+52200
+52201
+52202
+52203
+52204
+52205
+52206
+52207
+52208
+52209
+52210
+52211
+52212
+52213
+52214
+52215
+52216
+52217
+52218
+52219
+52220
+52221
+52222
+52223
+52224
+52225
+52226
+52227
+52228
+52229
+52230
+52231
+52232
+52233
+52234
+52235
+52236
+52237
+52238
+52239
+52240
+52241
+52242
+52243
+52244
+52245
+52246
+52247
+52248
+52249
+52250
+52251
+52252
+52253
+52254
+52255
+52256
+52257
+52258
+52259
+52260
+52261
+52262
+52263
+52264
+52265
+52266
+52267
+52268
+52269
+52270
+52271
+52272
+52273
+52274
+52275
+52276
+52277
+52278
+52279
+52280
+52281
+52282
+52283
+52284
+52285
+52286
+52287
+52288
+52289
+52290
+52291
+52292
+52293
+52294
+52295
+52296
+52297
+52298
+52299
+52300
+52301
+52302
+52303
+52304
+52305
+52306
+52307
+52308
+52309
+52310
+52311
+52312
+52313
+52314
+52315
+52316
+52317
+52318
+52319
+52320
+52321
+52322
+52323
+52324
+52325
+52326
+52327
+52328
+52329
+52330
+52331
+52332
+52333
+52334
+52335
+52336
+52337
+52338
+52339
+52340
+52341
+52342
+52343
+52344
+52345
+52346
+52347
+52348
+52349
+52350
+52351
+52352
+52353
+52354
+52355
+52356
+52357
+52358
+52359
+52360
+52361
+52362
+52363
+52364
+52365
+52366
+52367
+52368
+52369
+52370
+52371
+52372
+52373
+52374
+52375
+52376
+52377
+52378
+52379
+52380
+52381
+52382
+52383
+52384
+52385
+52386
+52387
+52388
+52389
+52390
+52391
+52392
+52393
+52394
+52395
+52396
+52397
+52398
+52399
+52400
+52401
+52402
+52403
+52404
+52405
+52406
+52407
+52408
+52409
+52410
+52411
+52412
+52413
+52414
+52415
+52416
+52417
+52418
+52419
+52420
+52421
+52422
+52423
+52424
+52425
+52426
+52427
+52428
+52429
+52430
+52431
+52432
+52433
+52434
+52435
+52436
+52437
+52438
+52439
+52440
+52441
+52442
+52443
+52444
+52445
+52446
+52447
+52448
+52449
+52450
+52451
+52452
+52453
+52454
+52455
+52456
+52457
+52458
+52459
+52460
+52461
+52462
+52463
+52464
+52465
+52466
+52467
+52468
+52469
+52470
+52471
+52472
+52473
+52474
+52475
+52476
+52477
+52478
+52479
+52480
+52481
+52482
+52483
+52484
+52485
+52486
+52487
+52488
+52489
+52490
+52491
+52492
+52493
+52494
+52495
+52496
+52497
+52498
+52499
+52500
+52501
+52502
+52503
+52504
+52505
+52506
+52507
+52508
+52509
+52510
+52511
+52512
+52513
+52514
+52515
+52516
+52517
+52518
+52519
+52520
+52521
+52522
+52523
+52524
+52525
+52526
+52527
+52528
+52529
+52530
+52531
+52532
+52533
+52534
+52535
+52536
+52537
+52538
+52539
+52540
+52541
+52542
+52543
+52544
+52545
+52546
+52547
+52548
+52549
+52550
+52551
+52552
+52553
+52554
+52555
+52556
+52557
+52558
+52559
+52560
+52561
+52562
+52563
+52564
+52565
+52566
+52567
+52568
+52569
+52570
+52571
+52572
+52573
+52574
+52575
+52576
+52577
+52578
+52579
+52580
+52581
+52582
+52583
+52584
+52585
+52586
+52587
+52588
+52589
+52590
+52591
+52592
+52593
+52594
+52595
+52596
+52597
+52598
+52599
+52600
+52601
+52602
+52603
+52604
+52605
+52606
+52607
+52608
+52609
+52610
+52611
+52612
+52613
+52614
+52615
+52616
+52617
+52618
+52619
+52620
+52621
+52622
+52623
+52624
+52625
+52626
+52627
+52628
+52629
+52630
+52631
+52632
+52633
+52634
+52635
+52636
+52637
+52638
+52639
+52640
+52641
+52642
+52643
+52644
+52645
+52646
+52647
+52648
+52649
+52650
+52651
+52652
+52653
+52654
+52655
+52656
+52657
+52658
+52659
+52660
+52661
+52662
+52663
+52664
+52665
+52666
+52667
+52668
+52669
+52670
+52671
+52672
+52673
+52674
+52675
+52676
+52677
+52678
+52679
+52680
+52681
+52682
+52683
+52684
+52685
+52686
+52687
+52688
+52689
+52690
+52691
+52692
+52693
+52694
+52695
+52696
+52697
+52698
+52699
+52700
+52701
+52702
+52703
+52704
+52705
+52706
+52707
+52708
+52709
+52710
+52711
+52712
+52713
+52714
+52715
+52716
+52717
+52718
+52719
+52720
+52721
+52722
+52723
+52724
+52725
+52726
+52727
+52728
+52729
+52730
+52731
+52732
+52733
+52734
+52735
+52736
+52737
+52738
+52739
+52740
+52741
+52742
+52743
+52744
+52745
+52746
+52747
+52748
+52749
+52750
+52751
+52752
+52753
+52754
+52755
+52756
+52757
+52758
+52759
+52760
+52761
+52762
+52763
+52764
+52765
+52766
+52767
+52768
+52769
+52770
+52771
+52772
+52773
+52774
+52775
+52776
+52777
+52778
+52779
+52780
+52781
+52782
+52783
+52784
+52785
+52786
+52787
+52788
+52789
+52790
+52791
+52792
+52793
+52794
+52795
+52796
+52797
+52798
+52799
+52800
+52801
+52802
+52803
+52804
+52805
+52806
+52807
+52808
+52809
+52810
+52811
+52812
+52813
+52814
+52815
+52816
+52817
+52818
+52819
+52820
+52821
+52822
+52823
+52824
+52825
+52826
+52827
+52828
+52829
+52830
+52831
+52832
+52833
+52834
+52835
+52836
+52837
+52838
+52839
+52840
+52841
+52842
+52843
+52844
+52845
+52846
+52847
+52848
+52849
+52850
+52851
+52852
+52853
+52854
+52855
+52856
+52857
+52858
+52859
+52860
+52861
+52862
+52863
+52864
+52865
+52866
+52867
+52868
+52869
+52870
+52871
+52872
+52873
+52874
+52875
+52876
+52877
+52878
+52879
+52880
+52881
+52882
+52883
+52884
+52885
+52886
+52887
+52888
+52889
+52890
+52891
+52892
+52893
+52894
+52895
+52896
+52897
+52898
+52899
+52900
+52901
+52902
+52903
+52904
+52905
+52906
+52907
+52908
+52909
+52910
+52911
+52912
+52913
+52914
+52915
+52916
+52917
+52918
+52919
+52920
+52921
+52922
+52923
+52924
+52925
+52926
+52927
+52928
+52929
+52930
+52931
+52932
+52933
+52934
+52935
+52936
+52937
+52938
+52939
+52940
+52941
+52942
+52943
+52944
+52945
+52946
+52947
+52948
+52949
+52950
+52951
+52952
+52953
+52954
+52955
+52956
+52957
+52958
+52959
+52960
+52961
+52962
+52963
+52964
+52965
+52966
+52967
+52968
+52969
+52970
+52971
+52972
+52973
+52974
+52975
+52976
+52977
+52978
+52979
+52980
+52981
+52982
+52983
+52984
+52985
+52986
+52987
+52988
+52989
+52990
+52991
+52992
+52993
+52994
+52995
+52996
+52997
+52998
+52999
+53000
+53001
+53002
+53003
+53004
+53005
+53006
+53007
+53008
+53009
+53010
+53011
+53012
+53013
+53014
+53015
+53016
+53017
+53018
+53019
+53020
+53021
+53022
+53023
+53024
+53025
+53026
+53027
+53028
+53029
+53030
+53031
+53032
+53033
+53034
+53035
+53036
+53037
+53038
+53039
+53040
+53041
+53042
+53043
+53044
+53045
+53046
+53047
+53048
+53049
+53050
+53051
+53052
+53053
+53054
+53055
+53056
+53057
+53058
+53059
+53060
+53061
+53062
+53063
+53064
+53065
+53066
+53067
+53068
+53069
+53070
+53071
+53072
+53073
+53074
+53075
+53076
+53077
+53078
+53079
+53080
+53081
+53082
+53083
+53084
+53085
+53086
+53087
+53088
+53089
+53090
+53091
+53092
+53093
+53094
+53095
+53096
+53097
+53098
+53099
+53100
+53101
+53102
+53103
+53104
+53105
+53106
+53107
+53108
+53109
+53110
+53111
+53112
+53113
+53114
+53115
+53116
+53117
+53118
+53119
+53120
+53121
+53122
+53123
+53124
+53125
+53126
+53127
+53128
+53129
+53130
+53131
+53132
+53133
+53134
+53135
+53136
+53137
+53138
+53139
+53140
+53141
+53142
+53143
+53144
+53145
+53146
+53147
+53148
+53149
+53150
+53151
+53152
+53153
+53154
+53155
+53156
+53157
+53158
+53159
+53160
+53161
+53162
+53163
+53164
+53165
+53166
+53167
+53168
+53169
+53170
+53171
+53172
+53173
+53174
+53175
+53176
+53177
+53178
+53179
+53180
+53181
+53182
+53183
+53184
+53185
+53186
+53187
+53188
+53189
+53190
+53191
+53192
+53193
+53194
+53195
+53196
+53197
+53198
+53199
+53200
+53201
+53202
+53203
+53204
+53205
+53206
+53207
+53208
+53209
+53210
+53211
+53212
+53213
+53214
+53215
+53216
+53217
+53218
+53219
+53220
+53221
+53222
+53223
+53224
+53225
+53226
+53227
+53228
+53229
+53230
+53231
+53232
+53233
+53234
+53235
+53236
+53237
+53238
+53239
+53240
+53241
+53242
+53243
+53244
+53245
+53246
+53247
+53248
+53249
+53250
+53251
+53252
+53253
+53254
+53255
+53256
+53257
+53258
+53259
+53260
+53261
+53262
+53263
+53264
+53265
+53266
+53267
+53268
+53269
+53270
+53271
+53272
+53273
+53274
+53275
+53276
+53277
+53278
+53279
+53280
+53281
+53282
+53283
+53284
+53285
+53286
+53287
+53288
+53289
+53290
+53291
+53292
+53293
+53294
+53295
+53296
+53297
+53298
+53299
+53300
+53301
+53302
+53303
+53304
+53305
+53306
+53307
+53308
+53309
+53310
+53311
+53312
+53313
+53314
+53315
+53316
+53317
+53318
+53319
+53320
+53321
+53322
+53323
+53324
+53325
+53326
+53327
+53328
+53329
+53330
+53331
+53332
+53333
+53334
+53335
+53336
+53337
+53338
+53339
+53340
+53341
+53342
+53343
+53344
+53345
+53346
+53347
+53348
+53349
+53350
+53351
+53352
+53353
+53354
+53355
+53356
+53357
+53358
+53359
+53360
+53361
+53362
+53363
+53364
+53365
+53366
+53367
+53368
+53369
+53370
+53371
+53372
+53373
+53374
+53375
+53376
+53377
+53378
+53379
+53380
+53381
+53382
+53383
+53384
+53385
+53386
+53387
+53388
+53389
+53390
+53391
+53392
+53393
+53394
+53395
+53396
+53397
+53398
+53399
+53400
+53401
+53402
+53403
+53404
+53405
+53406
+53407
+53408
+53409
+53410
+53411
+53412
+53413
+53414
+53415
+53416
+53417
+53418
+53419
+53420
+53421
+53422
+53423
+53424
+53425
+53426
+53427
+53428
+53429
+53430
+53431
+53432
+53433
+53434
+53435
+53436
+53437
+53438
+53439
+53440
+53441
+53442
+53443
+53444
+53445
+53446
+53447
+53448
+53449
+53450
+53451
+53452
+53453
+53454
+53455
+53456
+53457
+53458
+53459
+53460
+53461
+53462
+53463
+53464
+53465
+53466
+53467
+53468
+53469
+53470
+53471
+53472
+53473
+53474
+53475
+53476
+53477
+53478
+53479
+53480
+53481
+53482
+53483
+53484
+53485
+53486
+53487
+53488
+53489
+53490
+53491
+53492
+53493
+53494
+53495
+53496
+53497
+53498
+53499
+53500
+53501
+53502
+53503
+53504
+53505
+53506
+53507
+53508
+53509
+53510
+53511
+53512
+53513
+53514
+53515
+53516
+53517
+53518
+53519
+53520
+53521
+53522
+53523
+53524
+53525
+53526
+53527
+53528
+53529
+53530
+53531
+53532
+53533
+53534
+53535
+53536
+53537
+53538
+53539
+53540
+53541
+53542
+53543
+53544
+53545
+53546
+53547
+53548
+53549
+53550
+53551
+53552
+53553
+53554
+53555
+53556
+53557
+53558
+53559
+53560
+53561
+53562
+53563
+53564
+53565
+53566
+53567
+53568
+53569
+53570
+53571
+53572
+53573
+53574
+53575
+53576
+53577
+53578
+53579
+53580
+53581
+53582
+53583
+53584
+53585
+53586
+53587
+53588
+53589
+53590
+53591
+53592
+53593
+53594
+53595
+53596
+53597
+53598
+53599
+53600
+53601
+53602
+53603
+53604
+53605
+53606
+53607
+53608
+53609
+53610
+53611
+53612
+53613
+53614
+53615
+53616
+53617
+53618
+53619
+53620
+53621
+53622
+53623
+53624
+53625
+53626
+53627
+53628
+53629
+53630
+53631
+53632
+53633
+53634
+53635
+53636
+53637
+53638
+53639
+53640
+53641
+53642
+53643
+53644
+53645
+53646
+53647
+53648
+53649
+53650
+53651
+53652
+53653
+53654
+53655
+53656
+53657
+53658
+53659
+53660
+53661
+53662
+53663
+53664
+53665
+53666
+53667
+53668
+53669
+53670
+53671
+53672
+53673
+53674
+53675
+53676
+53677
+53678
+53679
+53680
+53681
+53682
+53683
+53684
+53685
+53686
+53687
+53688
+53689
+53690
+53691
+53692
+53693
+53694
+53695
+53696
+53697
+53698
+53699
+53700
+53701
+53702
+53703
+53704
+53705
+53706
+53707
+53708
+53709
+53710
+53711
+53712
+53713
+53714
+53715
+53716
+53717
+53718
+53719
+53720
+53721
+53722
+53723
+53724
+53725
+53726
+53727
+53728
+53729
+53730
+53731
+53732
+53733
+53734
+53735
+53736
+53737
+53738
+53739
+53740
+53741
+53742
+53743
+53744
+53745
+53746
+53747
+53748
+53749
+53750
+53751
+53752
+53753
+53754
+53755
+53756
+53757
+53758
+53759
+53760
+53761
+53762
+53763
+53764
+53765
+53766
+53767
+53768
+53769
+53770
+53771
+53772
+53773
+53774
+53775
+53776
+53777
+53778
+53779
+53780
+53781
+53782
+53783
+53784
+53785
+53786
+53787
+53788
+53789
+53790
+53791
+53792
+53793
+53794
+53795
+53796
+53797
+53798
+53799
+53800
+53801
+53802
+53803
+53804
+53805
+53806
+53807
+53808
+53809
+53810
+53811
+53812
+53813
+53814
+53815
+53816
+53817
+53818
+53819
+53820
+53821
+53822
+53823
+53824
+53825
+53826
+53827
+53828
+53829
+53830
+53831
+53832
+53833
+53834
+53835
+53836
+53837
+53838
+53839
+53840
+53841
+53842
+53843
+53844
+53845
+53846
+53847
+53848
+53849
+53850
+53851
+53852
+53853
+53854
+53855
+53856
+53857
+53858
+53859
+53860
+53861
+53862
+53863
+53864
+53865
+53866
+53867
+53868
+53869
+53870
+53871
+53872
+53873
+53874
+53875
+53876
+53877
+53878
+53879
+53880
+53881
+53882
+53883
+53884
+53885
+53886
+53887
+53888
+53889
+53890
+53891
+53892
+53893
+53894
+53895
+53896
+53897
+53898
+53899
+53900
+53901
+53902
+53903
+53904
+53905
+53906
+53907
+53908
+53909
+53910
+53911
+53912
+53913
+53914
+53915
+53916
+53917
+53918
+53919
+53920
+53921
+53922
+53923
+53924
+53925
+53926
+53927
+53928
+53929
+53930
+53931
+53932
+53933
+53934
+53935
+53936
+53937
+53938
+53939
+53940
+53941
+53942
+53943
+53944
+53945
+53946
+53947
+53948
+53949
+53950
+53951
+53952
+53953
+53954
+53955
+53956
+53957
+53958
+53959
+53960
+53961
+53962
+53963
+53964
+53965
+53966
+53967
+53968
+53969
+53970
+53971
+53972
+53973
+53974
+53975
+53976
+53977
+53978
+53979
+53980
+53981
+53982
+53983
+53984
+53985
+53986
+53987
+53988
+53989
+53990
+53991
+53992
+53993
+53994
+53995
+53996
+53997
+53998
+53999
+54000
+54001
+54002
+54003
+54004
+54005
+54006
+54007
+54008
+54009
+54010
+54011
+54012
+54013
+54014
+54015
+54016
+54017
+54018
+54019
+54020
+54021
+54022
+54023
+54024
+54025
+54026
+54027
+54028
+54029
+54030
+54031
+54032
+54033
+54034
+54035
+54036
+54037
+54038
+54039
+54040
+54041
+54042
+54043
+54044
+54045
+54046
+54047
+54048
+54049
+54050
+54051
+54052
+54053
+54054
+54055
+54056
+54057
+54058
+54059
+54060
+54061
+54062
+54063
+54064
+54065
+54066
+54067
+54068
+54069
+54070
+54071
+54072
+54073
+54074
+54075
+54076
+54077
+54078
+54079
+54080
+54081
+54082
+54083
+54084
+54085
+54086
+54087
+54088
+54089
+54090
+54091
+54092
+54093
+54094
+54095
+54096
+54097
+54098
+54099
+54100
+54101
+54102
+54103
+54104
+54105
+54106
+54107
+54108
+54109
+54110
+54111
+54112
+54113
+54114
+54115
+54116
+54117
+54118
+54119
+54120
+54121
+54122
+54123
+54124
+54125
+54126
+54127
+54128
+54129
+54130
+54131
+54132
+54133
+54134
+54135
+54136
+54137
+54138
+54139
+54140
+54141
+54142
+54143
+54144
+54145
+54146
+54147
+54148
+54149
+54150
+54151
+54152
+54153
+54154
+54155
+54156
+54157
+54158
+54159
+54160
+54161
+54162
+54163
+54164
+54165
+54166
+54167
+54168
+54169
+54170
+54171
+54172
+54173
+54174
+54175
+54176
+54177
+54178
+54179
+54180
+54181
+54182
+54183
+54184
+54185
+54186
+54187
+54188
+54189
+54190
+54191
+54192
+54193
+54194
+54195
+54196
+54197
+54198
+54199
+54200
+54201
+54202
+54203
+54204
+54205
+54206
+54207
+54208
+54209
+54210
+54211
+54212
+54213
+54214
+54215
+54216
+54217
+54218
+54219
+54220
+54221
+54222
+54223
+54224
+54225
+54226
+54227
+54228
+54229
+54230
+54231
+54232
+54233
+54234
+54235
+54236
+54237
+54238
+54239
+54240
+54241
+54242
+54243
+54244
+54245
+54246
+54247
+54248
+54249
+54250
+54251
+54252
+54253
+54254
+54255
+54256
+54257
+54258
+54259
+54260
+54261
+54262
+54263
+54264
+54265
+54266
+54267
+54268
+54269
+54270
+54271
+54272
+54273
+54274
+54275
+54276
+54277
+54278
+54279
+54280
+54281
+54282
+54283
+54284
+54285
+54286
+54287
+54288
+54289
+54290
+54291
+54292
+54293
+54294
+54295
+54296
+54297
+54298
+54299
+54300
+54301
+54302
+54303
+54304
+54305
+54306
+54307
+54308
+54309
+54310
+54311
+54312
+54313
+54314
+54315
+54316
+54317
+54318
+54319
+54320
+54321
+54322
+54323
+54324
+54325
+54326
+54327
+54328
+54329
+54330
+54331
+54332
+54333
+54334
+54335
+54336
+54337
+54338
+54339
+54340
+54341
+54342
+54343
+54344
+54345
+54346
+54347
+54348
+54349
+54350
+54351
+54352
+54353
+54354
+54355
+54356
+54357
+54358
+54359
+54360
+54361
+54362
+54363
+54364
+54365
+54366
+54367
+54368
+54369
+54370
+54371
+54372
+54373
+54374
+54375
+54376
+54377
+54378
+54379
+54380
+54381
+54382
+54383
+54384
+54385
+54386
+54387
+54388
+54389
+54390
+54391
+54392
+54393
+54394
+54395
+54396
+54397
+54398
+54399
+54400
+54401
+54402
+54403
+54404
+54405
+54406
+54407
+54408
+54409
+54410
+54411
+54412
+54413
+54414
+54415
+54416
+54417
+54418
+54419
+54420
+54421
+54422
+54423
+54424
+54425
+54426
+54427
+54428
+54429
+54430
+54431
+54432
+54433
+54434
+54435
+54436
+54437
+54438
+54439
+54440
+54441
+54442
+54443
+54444
+54445
+54446
+54447
+54448
+54449
+54450
+54451
+54452
+54453
+54454
+54455
+54456
+54457
+54458
+54459
+54460
+54461
+54462
+54463
+54464
+54465
+54466
+54467
+54468
+54469
+54470
+54471
+54472
+54473
+54474
+54475
+54476
+54477
+54478
+54479
+54480
+54481
+54482
+54483
+54484
+54485
+54486
+54487
+54488
+54489
+54490
+54491
+54492
+54493
+54494
+54495
+54496
+54497
+54498
+54499
+54500
+54501
+54502
+54503
+54504
+54505
+54506
+54507
+54508
+54509
+54510
+54511
+54512
+54513
+54514
+54515
+54516
+54517
+54518
+54519
+54520
+54521
+54522
+54523
+54524
+54525
+54526
+54527
+54528
+54529
+54530
+54531
+54532
+54533
+54534
+54535
+54536
+54537
+54538
+54539
+54540
+54541
+54542
+54543
+54544
+54545
+54546
+54547
+54548
+54549
+54550
+54551
+54552
+54553
+54554
+54555
+54556
+54557
+54558
+54559
+54560
+54561
+54562
+54563
+54564
+54565
+54566
+54567
+54568
+54569
+54570
+54571
+54572
+54573
+54574
+54575
+54576
+54577
+54578
+54579
+54580
+54581
+54582
+54583
+54584
+54585
+54586
+54587
+54588
+54589
+54590
+54591
+54592
+54593
+54594
+54595
+54596
+54597
+54598
+54599
+54600
+54601
+54602
+54603
+54604
+54605
+54606
+54607
+54608
+54609
+54610
+54611
+54612
+54613
+54614
+54615
+54616
+54617
+54618
+54619
+54620
+54621
+54622
+54623
+54624
+54625
+54626
+54627
+54628
+54629
+54630
+54631
+54632
+54633
+54634
+54635
+54636
+54637
+54638
+54639
+54640
+54641
+54642
+54643
+54644
+54645
+54646
+54647
+54648
+54649
+54650
+54651
+54652
+54653
+54654
+54655
+54656
+54657
+54658
+54659
+54660
+54661
+54662
+54663
+54664
+54665
+54666
+54667
+54668
+54669
+54670
+54671
+54672
+54673
+54674
+54675
+54676
+54677
+54678
+54679
+54680
+54681
+54682
+54683
+54684
+54685
+54686
+54687
+54688
+54689
+54690
+54691
+54692
+54693
+54694
+54695
+54696
+54697
+54698
+54699
+54700
+54701
+54702
+54703
+54704
+54705
+54706
+54707
+54708
+54709
+54710
+54711
+54712
+54713
+54714
+54715
+54716
+54717
+54718
+54719
+54720
+54721
+54722
+54723
+54724
+54725
+54726
+54727
+54728
+54729
+54730
+54731
+54732
+54733
+54734
+54735
+54736
+54737
+54738
+54739
+54740
+54741
+54742
+54743
+54744
+54745
+54746
+54747
+54748
+54749
+54750
+54751
+54752
+54753
+54754
+54755
+54756
+54757
+54758
+54759
+54760
+54761
+54762
+54763
+54764
+54765
+54766
+54767
+54768
+54769
+54770
+54771
+54772
+54773
+54774
+54775
+54776
+54777
+54778
+54779
+54780
+54781
+54782
+54783
+54784
+54785
+54786
+54787
+54788
+54789
+54790
+54791
+54792
+54793
+54794
+54795
+54796
+54797
+54798
+54799
+54800
+54801
+54802
+54803
+54804
+54805
+54806
+54807
+54808
+54809
+54810
+54811
+54812
+54813
+54814
+54815
+54816
+54817
+54818
+54819
+54820
+54821
+54822
+54823
+54824
+54825
+54826
+54827
+54828
+54829
+54830
+54831
+54832
+54833
+54834
+54835
+54836
+54837
+54838
+54839
+54840
+54841
+54842
+54843
+54844
+54845
+54846
+54847
+54848
+54849
+54850
+54851
+54852
+54853
+54854
+54855
+54856
+54857
+54858
+54859
+54860
+54861
+54862
+54863
+54864
+54865
+54866
+54867
+54868
+54869
+54870
+54871
+54872
+54873
+54874
+54875
+54876
+54877
+54878
+54879
+54880
+54881
+54882
+54883
+54884
+54885
+54886
+54887
+54888
+54889
+54890
+54891
+54892
+54893
+54894
+54895
+54896
+54897
+54898
+54899
+54900
+54901
+54902
+54903
+54904
+54905
+54906
+54907
+54908
+54909
+54910
+54911
+54912
+54913
+54914
+54915
+54916
+54917
+54918
+54919
+54920
+54921
+54922
+54923
+54924
+54925
+54926
+54927
+54928
+54929
+54930
+54931
+54932
+54933
+54934
+54935
+54936
+54937
+54938
+54939
+54940
+54941
+54942
+54943
+54944
+54945
+54946
+54947
+54948
+54949
+54950
+54951
+54952
+54953
+54954
+54955
+54956
+54957
+54958
+54959
+54960
+54961
+54962
+54963
+54964
+54965
+54966
+54967
+54968
+54969
+54970
+54971
+54972
+54973
+54974
+54975
+54976
+54977
+54978
+54979
+54980
+54981
+54982
+54983
+54984
+54985
+54986
+54987
+54988
+54989
+54990
+54991
+54992
+54993
+54994
+54995
+54996
+54997
+54998
+54999
+55000
+55001
+55002
+55003
+55004
+55005
+55006
+55007
+55008
+55009
+55010
+55011
+55012
+55013
+55014
+55015
+55016
+55017
+55018
+55019
+55020
+55021
+55022
+55023
+55024
+55025
+55026
+55027
+55028
+55029
+55030
+55031
+55032
+55033
+55034
+55035
+55036
+55037
+55038
+55039
+55040
+55041
+55042
+55043
+55044
+55045
+55046
+55047
+55048
+55049
+55050
+55051
+55052
+55053
+55054
+55055
+55056
+55057
+55058
+55059
+55060
+55061
+55062
+55063
+55064
+55065
+55066
+55067
+55068
+55069
+55070
+55071
+55072
+55073
+55074
+55075
+55076
+55077
+55078
+55079
+55080
+55081
+55082
+55083
+55084
+55085
+55086
+55087
+55088
+55089
+55090
+55091
+55092
+55093
+55094
+55095
+55096
+55097
+55098
+55099
+55100
+55101
+55102
+55103
+55104
+55105
+55106
+55107
+55108
+55109
+55110
+55111
+55112
+55113
+55114
+55115
+55116
+55117
+55118
+55119
+55120
+55121
+55122
+55123
+55124
+55125
+55126
+55127
+55128
+55129
+55130
+55131
+55132
+55133
+55134
+55135
+55136
+55137
+55138
+55139
+55140
+55141
+55142
+55143
+55144
+55145
+55146
+55147
+55148
+55149
+55150
+55151
+55152
+55153
+55154
+55155
+55156
+55157
+55158
+55159
+55160
+55161
+55162
+55163
+55164
+55165
+55166
+55167
+55168
+55169
+55170
+55171
+55172
+55173
+55174
+55175
+55176
+55177
+55178
+55179
+55180
+55181
+55182
+55183
+55184
+55185
+55186
+55187
+55188
+55189
+55190
+55191
+55192
+55193
+55194
+55195
+55196
+55197
+55198
+55199
+55200
+55201
+55202
+55203
+55204
+55205
+55206
+55207
+55208
+55209
+55210
+55211
+55212
+55213
+55214
+55215
+55216
+55217
+55218
+55219
+55220
+55221
+55222
+55223
+55224
+55225
+55226
+55227
+55228
+55229
+55230
+55231
+55232
+55233
+55234
+55235
+55236
+55237
+55238
+55239
+55240
+55241
+55242
+55243
+55244
+55245
+55246
+55247
+55248
+55249
+55250
+55251
+55252
+55253
+55254
+55255
+55256
+55257
+55258
+55259
+55260
+55261
+55262
+55263
+55264
+55265
+55266
+55267
+55268
+55269
+55270
+55271
+55272
+55273
+55274
+55275
+55276
+55277
+55278
+55279
+55280
+55281
+55282
+55283
+55284
+55285
+55286
+55287
+55288
+55289
+55290
+55291
+55292
+55293
+55294
+55295
+55296
+55297
+55298
+55299
+55300
+55301
+55302
+55303
+55304
+55305
+55306
+55307
+55308
+55309
+55310
+55311
+55312
+55313
+55314
+55315
+55316
+55317
+55318
+55319
+55320
+55321
+55322
+55323
+55324
+55325
+55326
+55327
+55328
+55329
+55330
+55331
+55332
+55333
+55334
+55335
+55336
+55337
+55338
+55339
+55340
+55341
+55342
+55343
+55344
+55345
+55346
+55347
+55348
+55349
+55350
+55351
+55352
+55353
+55354
+55355
+55356
+55357
+55358
+55359
+55360
+55361
+55362
+55363
+55364
+55365
+55366
+55367
+55368
+55369
+55370
+55371
+55372
+55373
+55374
+55375
+55376
+55377
+55378
+55379
+55380
+55381
+55382
+55383
+55384
+55385
+55386
+55387
+55388
+55389
+55390
+55391
+55392
+55393
+55394
+55395
+55396
+55397
+55398
+55399
+55400
+55401
+55402
+55403
+55404
+55405
+55406
+55407
+55408
+55409
+55410
+55411
+55412
+55413
+55414
+55415
+55416
+55417
+55418
+55419
+55420
+55421
+55422
+55423
+55424
+55425
+55426
+55427
+55428
+55429
+55430
+55431
+55432
+55433
+55434
+55435
+55436
+55437
+55438
+55439
+55440
+55441
+55442
+55443
+55444
+55445
+55446
+55447
+55448
+55449
+55450
+55451
+55452
+55453
+55454
+55455
+55456
+55457
+55458
+55459
+55460
+55461
+55462
+55463
+55464
+55465
+55466
+55467
+55468
+55469
+55470
+55471
+55472
+55473
+55474
+55475
+55476
+55477
+55478
+55479
+55480
+55481
+55482
+55483
+55484
+55485
+55486
+55487
+55488
+55489
+55490
+55491
+55492
+55493
+55494
+55495
+55496
+55497
+55498
+55499
+55500
+55501
+55502
+55503
+55504
+55505
+55506
+55507
+55508
+55509
+55510
+55511
+55512
+55513
+55514
+55515
+55516
+55517
+55518
+55519
+55520
+55521
+55522
+55523
+55524
+55525
+55526
+55527
+55528
+55529
+55530
+55531
+55532
+55533
+55534
+55535
+55536
+55537
+55538
+55539
+55540
+55541
+55542
+55543
+55544
+55545
+55546
+55547
+55548
+55549
+55550
+55551
+55552
+55553
+55554
+55555
+55556
+55557
+55558
+55559
+55560
+55561
+55562
+55563
+55564
+55565
+55566
+55567
+55568
+55569
+55570
+55571
+55572
+55573
+55574
+55575
+55576
+55577
+55578
+55579
+55580
+55581
+55582
+55583
+55584
+55585
+55586
+55587
+55588
+55589
+55590
+55591
+55592
+55593
+55594
+55595
+55596
+55597
+55598
+55599
+55600
+55601
+55602
+55603
+55604
+55605
+55606
+55607
+55608
+55609
+55610
+55611
+55612
+55613
+55614
+55615
+55616
+55617
+55618
+55619
+55620
+55621
+55622
+55623
+55624
+55625
+55626
+55627
+55628
+55629
+55630
+55631
+55632
+55633
+55634
+55635
+55636
+55637
+55638
+55639
+55640
+55641
+55642
+55643
+55644
+55645
+55646
+55647
+55648
+55649
+55650
+55651
+55652
+55653
+55654
+55655
+55656
+55657
+55658
+55659
+55660
+55661
+55662
+55663
+55664
+55665
+55666
+55667
+55668
+55669
+55670
+55671
+55672
+55673
+55674
+55675
+55676
+55677
+55678
+55679
+55680
+55681
+55682
+55683
+55684
+55685
+55686
+55687
+55688
+55689
+55690
+55691
+55692
+55693
+55694
+55695
+55696
+55697
+55698
+55699
+55700
+55701
+55702
+55703
+55704
+55705
+55706
+55707
+55708
+55709
+55710
+55711
+55712
+55713
+55714
+55715
+55716
+55717
+55718
+55719
+55720
+55721
+55722
+55723
+55724
+55725
+55726
+55727
+55728
+55729
+55730
+55731
+55732
+55733
+55734
+55735
+55736
+55737
+55738
+55739
+55740
+55741
+55742
+55743
+55744
+55745
+55746
+55747
+55748
+55749
+55750
+55751
+55752
+55753
+55754
+55755
+55756
+55757
+55758
+55759
+55760
+55761
+55762
+55763
+55764
+55765
+55766
+55767
+55768
+55769
+55770
+55771
+55772
+55773
+55774
+55775
+55776
+55777
+55778
+55779
+55780
+55781
+55782
+55783
+55784
+55785
+55786
+55787
+55788
+55789
+55790
+55791
+55792
+55793
+55794
+55795
+55796
+55797
+55798
+55799
+55800
+55801
+55802
+55803
+55804
+55805
+55806
+55807
+55808
+55809
+55810
+55811
+55812
+55813
+55814
+55815
+55816
+55817
+55818
+55819
+55820
+55821
+55822
+55823
+55824
+55825
+55826
+55827
+55828
+55829
+55830
+55831
+55832
+55833
+55834
+55835
+55836
+55837
+55838
+55839
+55840
+55841
+55842
+55843
+55844
+55845
+55846
+55847
+55848
+55849
+55850
+55851
+55852
+55853
+55854
+55855
+55856
+55857
+55858
+55859
+55860
+55861
+55862
+55863
+55864
+55865
+55866
+55867
+55868
+55869
+55870
+55871
+55872
+55873
+55874
+55875
+55876
+55877
+55878
+55879
+55880
+55881
+55882
+55883
+55884
+55885
+55886
+55887
+55888
+55889
+55890
+55891
+55892
+55893
+55894
+55895
+55896
+55897
+55898
+55899
+55900
+55901
+55902
+55903
+55904
+55905
+55906
+55907
+55908
+55909
+55910
+55911
+55912
+55913
+55914
+55915
+55916
+55917
+55918
+55919
+55920
+55921
+55922
+55923
+55924
+55925
+55926
+55927
+55928
+55929
+55930
+55931
+55932
+55933
+55934
+55935
+55936
+55937
+55938
+55939
+55940
+55941
+55942
+55943
+55944
+55945
+55946
+55947
+55948
+55949
+55950
+55951
+55952
+55953
+55954
+55955
+55956
+55957
+55958
+55959
+55960
+55961
+55962
+55963
+55964
+55965
+55966
+55967
+55968
+55969
+55970
+55971
+55972
+55973
+55974
+55975
+55976
+55977
+55978
+55979
+55980
+55981
+55982
+55983
+55984
+55985
+55986
+55987
+55988
+55989
+55990
+55991
+55992
+55993
+55994
+55995
+55996
+55997
+55998
+55999
+56000
+56001
+56002
+56003
+56004
+56005
+56006
+56007
+56008
+56009
+56010
+56011
+56012
+56013
+56014
+56015
+56016
+56017
+56018
+56019
+56020
+56021
+56022
+56023
+56024
+56025
+56026
+56027
+56028
+56029
+56030
+56031
+56032
+56033
+56034
+56035
+56036
+56037
+56038
+56039
+56040
+56041
+56042
+56043
+56044
+56045
+56046
+56047
+56048
+56049
+56050
+56051
+56052
+56053
+56054
+56055
+56056
+56057
+56058
+56059
+56060
+56061
+56062
+56063
+56064
+56065
+56066
+56067
+56068
+56069
+56070
+56071
+56072
+56073
+56074
+56075
+56076
+56077
+56078
+56079
+56080
+56081
+56082
+56083
+56084
+56085
+56086
+56087
+56088
+56089
+56090
+56091
+56092
+56093
+56094
+56095
+56096
+56097
+56098
+56099
+56100
+56101
+56102
+56103
+56104
+56105
+56106
+56107
+56108
+56109
+56110
+56111
+56112
+56113
+56114
+56115
+56116
+56117
+56118
+56119
+56120
+56121
+56122
+56123
+56124
+56125
+56126
+56127
+56128
+56129
+56130
+56131
+56132
+56133
+56134
+56135
+56136
+56137
+56138
+56139
+56140
+56141
+56142
+56143
+56144
+56145
+56146
+56147
+56148
+56149
+56150
+56151
+56152
+56153
+56154
+56155
+56156
+56157
+56158
+56159
+56160
+56161
+56162
+56163
+56164
+56165
+56166
+56167
+56168
+56169
+56170
+56171
+56172
+56173
+56174
+56175
+56176
+56177
+56178
+56179
+56180
+56181
+56182
+56183
+56184
+56185
+56186
+56187
+56188
+56189
+56190
+56191
+56192
+56193
+56194
+56195
+56196
+56197
+56198
+56199
+56200
+56201
+56202
+56203
+56204
+56205
+56206
+56207
+56208
+56209
+56210
+56211
+56212
+56213
+56214
+56215
+56216
+56217
+56218
+56219
+56220
+56221
+56222
+56223
+56224
+56225
+56226
+56227
+56228
+56229
+56230
+56231
+56232
+56233
+56234
+56235
+56236
+56237
+56238
+56239
+56240
+56241
+56242
+56243
+56244
+56245
+56246
+56247
+56248
+56249
+56250
+56251
+56252
+56253
+56254
+56255
+56256
+56257
+56258
+56259
+56260
+56261
+56262
+56263
+56264
+56265
+56266
+56267
+56268
+56269
+56270
+56271
+56272
+56273
+56274
+56275
+56276
+56277
+56278
+56279
+56280
+56281
+56282
+56283
+56284
+56285
+56286
+56287
+56288
+56289
+56290
+56291
+56292
+56293
+56294
+56295
+56296
+56297
+56298
+56299
+56300
+56301
+56302
+56303
+56304
+56305
+56306
+56307
+56308
+56309
+56310
+56311
+56312
+56313
+56314
+56315
+56316
+56317
+56318
+56319
+56320
+56321
+56322
+56323
+56324
+56325
+56326
+56327
+56328
+56329
+56330
+56331
+56332
+56333
+56334
+56335
+56336
+56337
+56338
+56339
+56340
+56341
+56342
+56343
+56344
+56345
+56346
+56347
+56348
+56349
+56350
+56351
+56352
+56353
+56354
+56355
+56356
+56357
+56358
+56359
+56360
+56361
+56362
+56363
+56364
+56365
+56366
+56367
+56368
+56369
+56370
+56371
+56372
+56373
+56374
+56375
+56376
+56377
+56378
+56379
+56380
+56381
+56382
+56383
+56384
+56385
+56386
+56387
+56388
+56389
+56390
+56391
+56392
+56393
+56394
+56395
+56396
+56397
+56398
+56399
+56400
+56401
+56402
+56403
+56404
+56405
+56406
+56407
+56408
+56409
+56410
+56411
+56412
+56413
+56414
+56415
+56416
+56417
+56418
+56419
+56420
+56421
+56422
+56423
+56424
+56425
+56426
+56427
+56428
+56429
+56430
+56431
+56432
+56433
+56434
+56435
+56436
+56437
+56438
+56439
+56440
+56441
+56442
+56443
+56444
+56445
+56446
+56447
+56448
+56449
+56450
+56451
+56452
+56453
+56454
+56455
+56456
+56457
+56458
+56459
+56460
+56461
+56462
+56463
+56464
+56465
+56466
+56467
+56468
+56469
+56470
+56471
+56472
+56473
+56474
+56475
+56476
+56477
+56478
+56479
+56480
+56481
+56482
+56483
+56484
+56485
+56486
+56487
+56488
+56489
+56490
+56491
+56492
+56493
+56494
+56495
+56496
+56497
+56498
+56499
+56500
+56501
+56502
+56503
+56504
+56505
+56506
+56507
+56508
+56509
+56510
+56511
+56512
+56513
+56514
+56515
+56516
+56517
+56518
+56519
+56520
+56521
+56522
+56523
+56524
+56525
+56526
+56527
+56528
+56529
+56530
+56531
+56532
+56533
+56534
+56535
+56536
+56537
+56538
+56539
+56540
+56541
+56542
+56543
+56544
+56545
+56546
+56547
+56548
+56549
+56550
+56551
+56552
+56553
+56554
+56555
+56556
+56557
+56558
+56559
+56560
+56561
+56562
+56563
+56564
+56565
+56566
+56567
+56568
+56569
+56570
+56571
+56572
+56573
+56574
+56575
+56576
+56577
+56578
+56579
+56580
+56581
+56582
+56583
+56584
+56585
+56586
+56587
+56588
+56589
+56590
+56591
+56592
+56593
+56594
+56595
+56596
+56597
+56598
+56599
+56600
+56601
+56602
+56603
+56604
+56605
+56606
+56607
+56608
+56609
+56610
+56611
+56612
+56613
+56614
+56615
+56616
+56617
+56618
+56619
+56620
+56621
+56622
+56623
+56624
+56625
+56626
+56627
+56628
+56629
+56630
+56631
+56632
+56633
+56634
+56635
+56636
+56637
+56638
+56639
+56640
+56641
+56642
+56643
+56644
+56645
+56646
+56647
+56648
+56649
+56650
+56651
+56652
+56653
+56654
+56655
+56656
+56657
+56658
+56659
+56660
+56661
+56662
+56663
+56664
+56665
+56666
+56667
+56668
+56669
+56670
+56671
+56672
+56673
+56674
+56675
+56676
+56677
+56678
+56679
+56680
+56681
+56682
+56683
+56684
+56685
+56686
+56687
+56688
+56689
+56690
+56691
+56692
+56693
+56694
+56695
+56696
+56697
+56698
+56699
+56700
+56701
+56702
+56703
+56704
+56705
+56706
+56707
+56708
+56709
+56710
+56711
+56712
+56713
+56714
+56715
+56716
+56717
+56718
+56719
+56720
+56721
+56722
+56723
+56724
+56725
+56726
+56727
+56728
+56729
+56730
+56731
+56732
+56733
+56734
+56735
+56736
+56737
+56738
+56739
+56740
+56741
+56742
+56743
+56744
+56745
+56746
+56747
+56748
+56749
+56750
+56751
+56752
+56753
+56754
+56755
+56756
+56757
+56758
+56759
+56760
+56761
+56762
+56763
+56764
+56765
+56766
+56767
+56768
+56769
+56770
+56771
+56772
+56773
+56774
+56775
+56776
+56777
+56778
+56779
+56780
+56781
+56782
+56783
+56784
+56785
+56786
+56787
+56788
+56789
+56790
+56791
+56792
+56793
+56794
+56795
+56796
+56797
+56798
+56799
+56800
+56801
+56802
+56803
+56804
+56805
+56806
+56807
+56808
+56809
+56810
+56811
+56812
+56813
+56814
+56815
+56816
+56817
+56818
+56819
+56820
+56821
+56822
+56823
+56824
+56825
+56826
+56827
+56828
+56829
+56830
+56831
+56832
+56833
+56834
+56835
+56836
+56837
+56838
+56839
+56840
+56841
+56842
+56843
+56844
+56845
+56846
+56847
+56848
+56849
+56850
+56851
+56852
+56853
+56854
+56855
+56856
+56857
+56858
+56859
+56860
+56861
+56862
+56863
+56864
+56865
+56866
+56867
+56868
+56869
+56870
+56871
+56872
+56873
+56874
+56875
+56876
+56877
+56878
+56879
+56880
+56881
+56882
+56883
+56884
+56885
+56886
+56887
+56888
+56889
+56890
+56891
+56892
+56893
+56894
+56895
+56896
+56897
+56898
+56899
+56900
+56901
+56902
+56903
+56904
+56905
+56906
+56907
+56908
+56909
+56910
+56911
+56912
+56913
+56914
+56915
+56916
+56917
+56918
+56919
+56920
+56921
+56922
+56923
+56924
+56925
+56926
+56927
+56928
+56929
+56930
+56931
+56932
+56933
+56934
+56935
+56936
+56937
+56938
+56939
+56940
+56941
+56942
+56943
+56944
+56945
+56946
+56947
+56948
+56949
+56950
+56951
+56952
+56953
+56954
+56955
+56956
+56957
+56958
+56959
+56960
+56961
+56962
+56963
+56964
+56965
+56966
+56967
+56968
+56969
+56970
+56971
+56972
+56973
+56974
+56975
+56976
+56977
+56978
+56979
+56980
+56981
+56982
+56983
+56984
+56985
+56986
+56987
+56988
+56989
+56990
+56991
+56992
+56993
+56994
+56995
+56996
+56997
+56998
+56999
+57000
+57001
+57002
+57003
+57004
+57005
+57006
+57007
+57008
+57009
+57010
+57011
+57012
+57013
+57014
+57015
+57016
+57017
+57018
+57019
+57020
+57021
+57022
+57023
+57024
+57025
+57026
+57027
+57028
+57029
+57030
+57031
+57032
+57033
+57034
+57035
+57036
+57037
+57038
+57039
+57040
+57041
+57042
+57043
+57044
+57045
+57046
+57047
+57048
+57049
+57050
+57051
+57052
+57053
+57054
+57055
+57056
+57057
+57058
+57059
+57060
+57061
+57062
+57063
+57064
+57065
+57066
+57067
+57068
+57069
+57070
+57071
+57072
+57073
+57074
+57075
+57076
+57077
+57078
+57079
+57080
+57081
+57082
+57083
+57084
+57085
+57086
+57087
+57088
+57089
+57090
+57091
+57092
+57093
+57094
+57095
+57096
+57097
+57098
+57099
+57100
+57101
+57102
+57103
+57104
+57105
+57106
+57107
+57108
+57109
+57110
+57111
+57112
+57113
+57114
+57115
+57116
+57117
+57118
+57119
+57120
+57121
+57122
+57123
+57124
+57125
+57126
+57127
+57128
+57129
+57130
+57131
+57132
+57133
+57134
+57135
+57136
+57137
+57138
+57139
+57140
+57141
+57142
+57143
+57144
+57145
+57146
+57147
+57148
+57149
+57150
+57151
+57152
+57153
+57154
+57155
+57156
+57157
+57158
+57159
+57160
+57161
+57162
+57163
+57164
+57165
+57166
+57167
+57168
+57169
+57170
+57171
+57172
+57173
+57174
+57175
+57176
+57177
+57178
+57179
+57180
+57181
+57182
+57183
+57184
+57185
+57186
+57187
+57188
+57189
+57190
+57191
+57192
+57193
+57194
+57195
+57196
+57197
+57198
+57199
+57200
+57201
+57202
+57203
+57204
+57205
+57206
+57207
+57208
+57209
+57210
+57211
+57212
+57213
+57214
+57215
+57216
+57217
+57218
+57219
+57220
+57221
+57222
+57223
+57224
+57225
+57226
+57227
+57228
+57229
+57230
+57231
+57232
+57233
+57234
+57235
+57236
+57237
+57238
+57239
+57240
+57241
+57242
+57243
+57244
+57245
+57246
+57247
+57248
+57249
+57250
+57251
+57252
+57253
+57254
+57255
+57256
+57257
+57258
+57259
+57260
+57261
+57262
+57263
+57264
+57265
+57266
+57267
+57268
+57269
+57270
+57271
+57272
+57273
+57274
+57275
+57276
+57277
+57278
+57279
+57280
+57281
+57282
+57283
+57284
+57285
+57286
+57287
+57288
+57289
+57290
+57291
+57292
+57293
+57294
+57295
+57296
+57297
+57298
+57299
+57300
+57301
+57302
+57303
+57304
+57305
+57306
+57307
+57308
+57309
+57310
+57311
+57312
+57313
+57314
+57315
+57316
+57317
+57318
+57319
+57320
+57321
+57322
+57323
+57324
+57325
+57326
+57327
+57328
+57329
+57330
+57331
+57332
+57333
+57334
+57335
+57336
+57337
+57338
+57339
+57340
+57341
+57342
+57343
+57344
+57345
+57346
+57347
+57348
+57349
+57350
+57351
+57352
+57353
+57354
+57355
+57356
+57357
+57358
+57359
+57360
+57361
+57362
+57363
+57364
+57365
+57366
+57367
+57368
+57369
+57370
+57371
+57372
+57373
+57374
+57375
+57376
+57377
+57378
+57379
+57380
+57381
+57382
+57383
+57384
+57385
+57386
+57387
+57388
+57389
+57390
+57391
+57392
+57393
+57394
+57395
+57396
+57397
+57398
+57399
+57400
+57401
+57402
+57403
+57404
+57405
+57406
+57407
+57408
+57409
+57410
+57411
+57412
+57413
+57414
+57415
+57416
+57417
+57418
+57419
+57420
+57421
+57422
+57423
+57424
+57425
+57426
+57427
+57428
+57429
+57430
+57431
+57432
+57433
+57434
+57435
+57436
+57437
+57438
+57439
+57440
+57441
+57442
+57443
+57444
+57445
+57446
+57447
+57448
+57449
+57450
+57451
+57452
+57453
+57454
+57455
+57456
+57457
+57458
+57459
+57460
+57461
+57462
+57463
+57464
+57465
+57466
+57467
+57468
+57469
+57470
+57471
+57472
+57473
+57474
+57475
+57476
+57477
+57478
+57479
+57480
+57481
+57482
+57483
+57484
+57485
+57486
+57487
+57488
+57489
+57490
+57491
+57492
+57493
+57494
+57495
+57496
+57497
+57498
+57499
+57500
+57501
+57502
+57503
+57504
+57505
+57506
+57507
+57508
+57509
+57510
+57511
+57512
+57513
+57514
+57515
+57516
+57517
+57518
+57519
+57520
+57521
+57522
+57523
+57524
+57525
+57526
+57527
+57528
+57529
+57530
+57531
+57532
+57533
+57534
+57535
+57536
+57537
+57538
+57539
+57540
+57541
+57542
+57543
+57544
+57545
+57546
+57547
+57548
+57549
+57550
+57551
+57552
+57553
+57554
+57555
+57556
+57557
+57558
+57559
+57560
+57561
+57562
+57563
+57564
+57565
+57566
+57567
+57568
+57569
+57570
+57571
+57572
+57573
+57574
+57575
+57576
+57577
+57578
+57579
+57580
+57581
+57582
+57583
+57584
+57585
+57586
+57587
+57588
+57589
+57590
+57591
+57592
+57593
+57594
+57595
+57596
+57597
+57598
+57599
+57600
+57601
+57602
+57603
+57604
+57605
+57606
+57607
+57608
+57609
+57610
+57611
+57612
+57613
+57614
+57615
+57616
+57617
+57618
+57619
+57620
+57621
+57622
+57623
+57624
+57625
+57626
+57627
+57628
+57629
+57630
+57631
+57632
+57633
+57634
+57635
+57636
+57637
+57638
+57639
+57640
+57641
+57642
+57643
+57644
+57645
+57646
+57647
+57648
+57649
+57650
+57651
+57652
+57653
+57654
+57655
+57656
+57657
+57658
+57659
+57660
+57661
+57662
+57663
+57664
+57665
+57666
+57667
+57668
+57669
+57670
+57671
+57672
+57673
+57674
+57675
+57676
+57677
+57678
+57679
+57680
+57681
+57682
+57683
+57684
+57685
+57686
+57687
+57688
+57689
+57690
+57691
+57692
+57693
+57694
+57695
+57696
+57697
+57698
+57699
+57700
+57701
+57702
+57703
+57704
+57705
+57706
+57707
+57708
+57709
+57710
+57711
+57712
+57713
+57714
+57715
+57716
+57717
+57718
+57719
+57720
+57721
+57722
+57723
+57724
+57725
+57726
+57727
+57728
+57729
+57730
+57731
+57732
+57733
+57734
+57735
+57736
+57737
+57738
+57739
+57740
+57741
+57742
+57743
+57744
+57745
+57746
+57747
+57748
+57749
+57750
+57751
+57752
+57753
+57754
+57755
+57756
+57757
+57758
+57759
+57760
+57761
+57762
+57763
+57764
+57765
+57766
+57767
+57768
+57769
+57770
+57771
+57772
+57773
+57774
+57775
+57776
+57777
+57778
+57779
+57780
+57781
+57782
+57783
+57784
+57785
+57786
+57787
+57788
+57789
+57790
+57791
+57792
+57793
+57794
+57795
+57796
+57797
+57798
+57799
+57800
+57801
+57802
+57803
+57804
+57805
+57806
+57807
+57808
+57809
+57810
+57811
+57812
+57813
+57814
+57815
+57816
+57817
+57818
+57819
+57820
+57821
+57822
+57823
+57824
+57825
+57826
+57827
+57828
+57829
+57830
+57831
+57832
+57833
+57834
+57835
+57836
+57837
+57838
+57839
+57840
+57841
+57842
+57843
+57844
+57845
+57846
+57847
+57848
+57849
+57850
+57851
+57852
+57853
+57854
+57855
+57856
+57857
+57858
+57859
+57860
+57861
+57862
+57863
+57864
+57865
+57866
+57867
+57868
+57869
+57870
+57871
+57872
+57873
+57874
+57875
+57876
+57877
+57878
+57879
+57880
+57881
+57882
+57883
+57884
+57885
+57886
+57887
+57888
+57889
+57890
+57891
+57892
+57893
+57894
+57895
+57896
+57897
+57898
+57899
+57900
+57901
+57902
+57903
+57904
+57905
+57906
+57907
+57908
+57909
+57910
+57911
+57912
+57913
+57914
+57915
+57916
+57917
+57918
+57919
+57920
+57921
+57922
+57923
+57924
+57925
+57926
+57927
+57928
+57929
+57930
+57931
+57932
+57933
+57934
+57935
+57936
+57937
+57938
+57939
+57940
+57941
+57942
+57943
+57944
+57945
+57946
+57947
+57948
+57949
+57950
+57951
+57952
+57953
+57954
+57955
+57956
+57957
+57958
+57959
+57960
+57961
+57962
+57963
+57964
+57965
+57966
+57967
+57968
+57969
+57970
+57971
+57972
+57973
+57974
+57975
+57976
+57977
+57978
+57979
+57980
+57981
+57982
+57983
+57984
+57985
+57986
+57987
+57988
+57989
+57990
+57991
+57992
+57993
+57994
+57995
+57996
+57997
+57998
+57999
+58000
+58001
+58002
+58003
+58004
+58005
+58006
+58007
+58008
+58009
+58010
+58011
+58012
+58013
+58014
+58015
+58016
+58017
+58018
+58019
+58020
+58021
+58022
+58023
+58024
+58025
+58026
+58027
+58028
+58029
+58030
+58031
+58032
+58033
+58034
+58035
+58036
+58037
+58038
+58039
+58040
+58041
+58042
+58043
+58044
+58045
+58046
+58047
+58048
+58049
+58050
+58051
+58052
+58053
+58054
+58055
+58056
+58057
+58058
+58059
+58060
+58061
+58062
+58063
+58064
+58065
+58066
+58067
+58068
+58069
+58070
+58071
+58072
+58073
+58074
+58075
+58076
+58077
+58078
+58079
+58080
+58081
+58082
+58083
+58084
+58085
+58086
+58087
+58088
+58089
+58090
+58091
+58092
+58093
+58094
+58095
+58096
+58097
+58098
+58099
+58100
+58101
+58102
+58103
+58104
+58105
+58106
+58107
+58108
+58109
+58110
+58111
+58112
+58113
+58114
+58115
+58116
+58117
+58118
+58119
+58120
+58121
+58122
+58123
+58124
+58125
+58126
+58127
+58128
+58129
+58130
+58131
+58132
+58133
+58134
+58135
+58136
+58137
+58138
+58139
+58140
+58141
+58142
+58143
+58144
+58145
+58146
+58147
+58148
+58149
+58150
+58151
+58152
+58153
+58154
+58155
+58156
+58157
+58158
+58159
+58160
+58161
+58162
+58163
+58164
+58165
+58166
+58167
+58168
+58169
+58170
+58171
+58172
+58173
+58174
+58175
+58176
+58177
+58178
+58179
+58180
+58181
+58182
+58183
+58184
+58185
+58186
+58187
+58188
+58189
+58190
+58191
+58192
+58193
+58194
+58195
+58196
+58197
+58198
+58199
+58200
+58201
+58202
+58203
+58204
+58205
+58206
+58207
+58208
+58209
+58210
+58211
+58212
+58213
+58214
+58215
+58216
+58217
+58218
+58219
+58220
+58221
+58222
+58223
+58224
+58225
+58226
+58227
+58228
+58229
+58230
+58231
+58232
+58233
+58234
+58235
+58236
+58237
+58238
+58239
+58240
+58241
+58242
+58243
+58244
+58245
+58246
+58247
+58248
+58249
+58250
+58251
+58252
+58253
+58254
+58255
+58256
+58257
+58258
+58259
+58260
+58261
+58262
+58263
+58264
+58265
+58266
+58267
+58268
+58269
+58270
+58271
+58272
+58273
+58274
+58275
+58276
+58277
+58278
+58279
+58280
+58281
+58282
+58283
+58284
+58285
+58286
+58287
+58288
+58289
+58290
+58291
+58292
+58293
+58294
+58295
+58296
+58297
+58298
+58299
+58300
+58301
+58302
+58303
+58304
+58305
+58306
+58307
+58308
+58309
+58310
+58311
+58312
+58313
+58314
+58315
+58316
+58317
+58318
+58319
+58320
+58321
+58322
+58323
+58324
+58325
+58326
+58327
+58328
+58329
+58330
+58331
+58332
+58333
+58334
+58335
+58336
+58337
+58338
+58339
+58340
+58341
+58342
+58343
+58344
+58345
+58346
+58347
+58348
+58349
+58350
+58351
+58352
+58353
+58354
+58355
+58356
+58357
+58358
+58359
+58360
+58361
+58362
+58363
+58364
+58365
+58366
+58367
+58368
+58369
+58370
+58371
+58372
+58373
+58374
+58375
+58376
+58377
+58378
+58379
+58380
+58381
+58382
+58383
+58384
+58385
+58386
+58387
+58388
+58389
+58390
+58391
+58392
+58393
+58394
+58395
+58396
+58397
+58398
+58399
+58400
+58401
+58402
+58403
+58404
+58405
+58406
+58407
+58408
+58409
+58410
+58411
+58412
+58413
+58414
+58415
+58416
+58417
+58418
+58419
+58420
+58421
+58422
+58423
+58424
+58425
+58426
+58427
+58428
+58429
+58430
+58431
+58432
+58433
+58434
+58435
+58436
+58437
+58438
+58439
+58440
+58441
+58442
+58443
+58444
+58445
+58446
+58447
+58448
+58449
+58450
+58451
+58452
+58453
+58454
+58455
+58456
+58457
+58458
+58459
+58460
+58461
+58462
+58463
+58464
+58465
+58466
+58467
+58468
+58469
+58470
+58471
+58472
+58473
+58474
+58475
+58476
+58477
+58478
+58479
+58480
+58481
+58482
+58483
+58484
+58485
+58486
+58487
+58488
+58489
+58490
+58491
+58492
+58493
+58494
+58495
+58496
+58497
+58498
+58499
+58500
+58501
+58502
+58503
+58504
+58505
+58506
+58507
+58508
+58509
+58510
+58511
+58512
+58513
+58514
+58515
+58516
+58517
+58518
+58519
+58520
+58521
+58522
+58523
+58524
+58525
+58526
+58527
+58528
+58529
+58530
+58531
+58532
+58533
+58534
+58535
+58536
+58537
+58538
+58539
+58540
+58541
+58542
+58543
+58544
+58545
+58546
+58547
+58548
+58549
+58550
+58551
+58552
+58553
+58554
+58555
+58556
+58557
+58558
+58559
+58560
+58561
+58562
+58563
+58564
+58565
+58566
+58567
+58568
+58569
+58570
+58571
+58572
+58573
+58574
+58575
+58576
+58577
+58578
+58579
+58580
+58581
+58582
+58583
+58584
+58585
+58586
+58587
+58588
+58589
+58590
+58591
+58592
+58593
+58594
+58595
+58596
+58597
+58598
+58599
+58600
+58601
+58602
+58603
+58604
+58605
+58606
+58607
+58608
+58609
+58610
+58611
+58612
+58613
+58614
+58615
+58616
+58617
+58618
+58619
+58620
+58621
+58622
+58623
+58624
+58625
+58626
+58627
+58628
+58629
+58630
+58631
+58632
+58633
+58634
+58635
+58636
+58637
+58638
+58639
+58640
+58641
+58642
+58643
+58644
+58645
+58646
+58647
+58648
+58649
+58650
+58651
+58652
+58653
+58654
+58655
+58656
+58657
+58658
+58659
+58660
+58661
+58662
+58663
+58664
+58665
+58666
+58667
+58668
+58669
+58670
+58671
+58672
+58673
+58674
+58675
+58676
+58677
+58678
+58679
+58680
+58681
+58682
+58683
+58684
+58685
+58686
+58687
+58688
+58689
+58690
+58691
+58692
+58693
+58694
+58695
+58696
+58697
+58698
+58699
+58700
+58701
+58702
+58703
+58704
+58705
+58706
+58707
+58708
+58709
+58710
+58711
+58712
+58713
+58714
+58715
+58716
+58717
+58718
+58719
+58720
+58721
+58722
+58723
+58724
+58725
+58726
+58727
+58728
+58729
+58730
+58731
+58732
+58733
+58734
+58735
+58736
+58737
+58738
+58739
+58740
+58741
+58742
+58743
+58744
+58745
+58746
+58747
+58748
+58749
+58750
+58751
+58752
+58753
+58754
+58755
+58756
+58757
+58758
+58759
+58760
+58761
+58762
+58763
+58764
+58765
+58766
+58767
+58768
+58769
+58770
+58771
+58772
+58773
+58774
+58775
+58776
+58777
+58778
+58779
+58780
+58781
+58782
+58783
+58784
+58785
+58786
+58787
+58788
+58789
+58790
+58791
+58792
+58793
+58794
+58795
+58796
+58797
+58798
+58799
+58800
+58801
+58802
+58803
+58804
+58805
+58806
+58807
+58808
+58809
+58810
+58811
+58812
+58813
+58814
+58815
+58816
+58817
+58818
+58819
+58820
+58821
+58822
+58823
+58824
+58825
+58826
+58827
+58828
+58829
+58830
+58831
+58832
+58833
+58834
+58835
+58836
+58837
+58838
+58839
+58840
+58841
+58842
+58843
+58844
+58845
+58846
+58847
+58848
+58849
+58850
+58851
+58852
+58853
+58854
+58855
+58856
+58857
+58858
+58859
+58860
+58861
+58862
+58863
+58864
+58865
+58866
+58867
+58868
+58869
+58870
+58871
+58872
+58873
+58874
+58875
+58876
+58877
+58878
+58879
+58880
+58881
+58882
+58883
+58884
+58885
+58886
+58887
+58888
+58889
+58890
+58891
+58892
+58893
+58894
+58895
+58896
+58897
+58898
+58899
+58900
+58901
+58902
+58903
+58904
+58905
+58906
+58907
+58908
+58909
+58910
+58911
+58912
+58913
+58914
+58915
+58916
+58917
+58918
+58919
+58920
+58921
+58922
+58923
+58924
+58925
+58926
+58927
+58928
+58929
+58930
+58931
+58932
+58933
+58934
+58935
+58936
+58937
+58938
+58939
+58940
+58941
+58942
+58943
+58944
+58945
+58946
+58947
+58948
+58949
+58950
+58951
+58952
+58953
+58954
+58955
+58956
+58957
+58958
+58959
+58960
+58961
+58962
+58963
+58964
+58965
+58966
+58967
+58968
+58969
+58970
+58971
+58972
+58973
+58974
+58975
+58976
+58977
+58978
+58979
+58980
+58981
+58982
+58983
+58984
+58985
+58986
+58987
+58988
+58989
+58990
+58991
+58992
+58993
+58994
+58995
+58996
+58997
+58998
+58999
+59000
+59001
+59002
+59003
+59004
+59005
+59006
+59007
+59008
+59009
+59010
+59011
+59012
+59013
+59014
+59015
+59016
+59017
+59018
+59019
+59020
+59021
+59022
+59023
+59024
+59025
+59026
+59027
+59028
+59029
+59030
+59031
+59032
+59033
+59034
+59035
+59036
+59037
+59038
+59039
+59040
+59041
+59042
+59043
+59044
+59045
+59046
+59047
+59048
+59049
+59050
+59051
+59052
+59053
+59054
+59055
+59056
+59057
+59058
+59059
+59060
+59061
+59062
+59063
+59064
+59065
+59066
+59067
+59068
+59069
+59070
+59071
+59072
+59073
+59074
+59075
+59076
+59077
+59078
+59079
+59080
+59081
+59082
+59083
+59084
+59085
+59086
+59087
+59088
+59089
+59090
+59091
+59092
+59093
+59094
+59095
+59096
+59097
+59098
+59099
+59100
+59101
+59102
+59103
+59104
+59105
+59106
+59107
+59108
+59109
+59110
+59111
+59112
+59113
+59114
+59115
+59116
+59117
+59118
+59119
+59120
+59121
+59122
+59123
+59124
+59125
+59126
+59127
+59128
+59129
+59130
+59131
+59132
+59133
+59134
+59135
+59136
+59137
+59138
+59139
+59140
+59141
+59142
+59143
+59144
+59145
+59146
+59147
+59148
+59149
+59150
+59151
+59152
+59153
+59154
+59155
+59156
+59157
+59158
+59159
+59160
+59161
+59162
+59163
+59164
+59165
+59166
+59167
+59168
+59169
+59170
+59171
+59172
+59173
+59174
+59175
+59176
+59177
+59178
+59179
+59180
+59181
+59182
+59183
+59184
+59185
+59186
+59187
+59188
+59189
+59190
+59191
+59192
+59193
+59194
+59195
+59196
+59197
+59198
+59199
+59200
+59201
+59202
+59203
+59204
+59205
+59206
+59207
+59208
+59209
+59210
+59211
+59212
+59213
+59214
+59215
+59216
+59217
+59218
+59219
+59220
+59221
+59222
+59223
+59224
+59225
+59226
+59227
+59228
+59229
+59230
+59231
+59232
+59233
+59234
+59235
+59236
+59237
+59238
+59239
+59240
+59241
+59242
+59243
+59244
+59245
+59246
+59247
+59248
+59249
+59250
+59251
+59252
+59253
+59254
+59255
+59256
+59257
+59258
+59259
+59260
+59261
+59262
+59263
+59264
+59265
+59266
+59267
+59268
+59269
+59270
+59271
+59272
+59273
+59274
+59275
+59276
+59277
+59278
+59279
+59280
+59281
+59282
+59283
+59284
+59285
+59286
+59287
+59288
+59289
+59290
+59291
+59292
+59293
+59294
+59295
+59296
+59297
+59298
+59299
+59300
+59301
+59302
+59303
+59304
+59305
+59306
+59307
+59308
+59309
+59310
+59311
+59312
+59313
+59314
+59315
+59316
+59317
+59318
+59319
+59320
+59321
+59322
+59323
+59324
+59325
+59326
+59327
+59328
+59329
+59330
+59331
+59332
+59333
+59334
+59335
+59336
+59337
+59338
+59339
+59340
+59341
+59342
+59343
+59344
+59345
+59346
+59347
+59348
+59349
+59350
+59351
+59352
+59353
+59354
+59355
+59356
+59357
+59358
+59359
+59360
+59361
+59362
+59363
+59364
+59365
+59366
+59367
+59368
+59369
+59370
+59371
+59372
+59373
+59374
+59375
+59376
+59377
+59378
+59379
+59380
+59381
+59382
+59383
+59384
+59385
+59386
+59387
+59388
+59389
+59390
+59391
+59392
+59393
+59394
+59395
+59396
+59397
+59398
+59399
+59400
+59401
+59402
+59403
+59404
+59405
+59406
+59407
+59408
+59409
+59410
+59411
+59412
+59413
+59414
+59415
+59416
+59417
+59418
+59419
+59420
+59421
+59422
+59423
+59424
+59425
+59426
+59427
+59428
+59429
+59430
+59431
+59432
+59433
+59434
+59435
+59436
+59437
+59438
+59439
+59440
+59441
+59442
+59443
+59444
+59445
+59446
+59447
+59448
+59449
+59450
+59451
+59452
+59453
+59454
+59455
+59456
+59457
+59458
+59459
+59460
+59461
+59462
+59463
+59464
+59465
+59466
+59467
+59468
+59469
+59470
+59471
+59472
+59473
+59474
+59475
+59476
+59477
+59478
+59479
+59480
+59481
+59482
+59483
+59484
+59485
+59486
+59487
+59488
+59489
+59490
+59491
+59492
+59493
+59494
+59495
+59496
+59497
+59498
+59499
+59500
+59501
+59502
+59503
+59504
+59505
+59506
+59507
+59508
+59509
+59510
+59511
+59512
+59513
+59514
+59515
+59516
+59517
+59518
+59519
+59520
+59521
+59522
+59523
+59524
+59525
+59526
+59527
+59528
+59529
+59530
+59531
+59532
+59533
+59534
+59535
+59536
+59537
+59538
+59539
+59540
+59541
+59542
+59543
+59544
+59545
+59546
+59547
+59548
+59549
+59550
+59551
+59552
+59553
+59554
+59555
+59556
+59557
+59558
+59559
+59560
+59561
+59562
+59563
+59564
+59565
+59566
+59567
+59568
+59569
+59570
+59571
+59572
+59573
+59574
+59575
+59576
+59577
+59578
+59579
+59580
+59581
+59582
+59583
+59584
+59585
+59586
+59587
+59588
+59589
+59590
+59591
+59592
+59593
+59594
+59595
+59596
+59597
+59598
+59599
+59600
+59601
+59602
+59603
+59604
+59605
+59606
+59607
+59608
+59609
+59610
+59611
+59612
+59613
+59614
+59615
+59616
+59617
+59618
+59619
+59620
+59621
+59622
+59623
+59624
+59625
+59626
+59627
+59628
+59629
+59630
+59631
+59632
+59633
+59634
+59635
+59636
+59637
+59638
+59639
+59640
+59641
+59642
+59643
+59644
+59645
+59646
+59647
+59648
+59649
+59650
+59651
+59652
+59653
+59654
+59655
+59656
+59657
+59658
+59659
+59660
+59661
+59662
+59663
+59664
+59665
+59666
+59667
+59668
+59669
+59670
+59671
+59672
+59673
+59674
+59675
+59676
+59677
+59678
+59679
+59680
+59681
+59682
+59683
+59684
+59685
+59686
+59687
+59688
+59689
+59690
+59691
+59692
+59693
+59694
+59695
+59696
+59697
+59698
+59699
+59700
+59701
+59702
+59703
+59704
+59705
+59706
+59707
+59708
+59709
+59710
+59711
+59712
+59713
+59714
+59715
+59716
+59717
+59718
+59719
+59720
+59721
+59722
+59723
+59724
+59725
+59726
+59727
+59728
+59729
+59730
+59731
+59732
+59733
+59734
+59735
+59736
+59737
+59738
+59739
+59740
+59741
+59742
+59743
+59744
+59745
+59746
+59747
+59748
+59749
+59750
+59751
+59752
+59753
+59754
+59755
+59756
+59757
+59758
+59759
+59760
+59761
+59762
+59763
+59764
+59765
+59766
+59767
+59768
+59769
+59770
+59771
+59772
+59773
+59774
+59775
+59776
+59777
+59778
+59779
+59780
+59781
+59782
+59783
+59784
+59785
+59786
+59787
+59788
+59789
+59790
+59791
+59792
+59793
+59794
+59795
+59796
+59797
+59798
+59799
+59800
+59801
+59802
+59803
+59804
+59805
+59806
+59807
+59808
+59809
+59810
+59811
+59812
+59813
+59814
+59815
+59816
+59817
+59818
+59819
+59820
+59821
+59822
+59823
+59824
+59825
+59826
+59827
+59828
+59829
+59830
+59831
+59832
+59833
+59834
+59835
+59836
+59837
+59838
+59839
+59840
+59841
+59842
+59843
+59844
+59845
+59846
+59847
+59848
+59849
+59850
+59851
+59852
+59853
+59854
+59855
+59856
+59857
+59858
+59859
+59860
+59861
+59862
+59863
+59864
+59865
+59866
+59867
+59868
+59869
+59870
+59871
+59872
+59873
+59874
+59875
+59876
+59877
+59878
+59879
+59880
+59881
+59882
+59883
+59884
+59885
+59886
+59887
+59888
+59889
+59890
+59891
+59892
+59893
+59894
+59895
+59896
+59897
+59898
+59899
+59900
+59901
+59902
+59903
+59904
+59905
+59906
+59907
+59908
+59909
+59910
+59911
+59912
+59913
+59914
+59915
+59916
+59917
+59918
+59919
+59920
+59921
+59922
+59923
+59924
+59925
+59926
+59927
+59928
+59929
+59930
+59931
+59932
+59933
+59934
+59935
+59936
+59937
+59938
+59939
+59940
+59941
+59942
+59943
+59944
+59945
+59946
+59947
+59948
+59949
+59950
+59951
+59952
+59953
+59954
+59955
+59956
+59957
+59958
+59959
+59960
+59961
+59962
+59963
+59964
+59965
+59966
+59967
+59968
+59969
+59970
+59971
+59972
+59973
+59974
+59975
+59976
+59977
+59978
+59979
+59980
+59981
+59982
+59983
+59984
+59985
+59986
+59987
+59988
+59989
+59990
+59991
+59992
+59993
+59994
+59995
+59996
+59997
+59998
+59999
+60000
+60001
+60002
+60003
+60004
+60005
+60006
+60007
+60008
+60009
+60010
+60011
+60012
+60013
+60014
+60015
+60016
+60017
+60018
+60019
+60020
+60021
+60022
+60023
+60024
+60025
+60026
+60027
+60028
+60029
+60030
+60031
+60032
+60033
+60034
+60035
+60036
+60037
+60038
+60039
+60040
+60041
+60042
+60043
+60044
+60045
+60046
+60047
+60048
+60049
+60050
+60051
+60052
+60053
+60054
+60055
+60056
+60057
+60058
+60059
+60060
+60061
+60062
+60063
+60064
+60065
+60066
+60067
+60068
+60069
+60070
+60071
+60072
+60073
+60074
+60075
+60076
+60077
+60078
+60079
+60080
+60081
+60082
+60083
+60084
+60085
+60086
+60087
+60088
+60089
+60090
+60091
+60092
+60093
+60094
+60095
+60096
+60097
+60098
+60099
+60100
+60101
+60102
+60103
+60104
+60105
+60106
+60107
+60108
+60109
+60110
+60111
+60112
+60113
+60114
+60115
+60116
+60117
+60118
+60119
+60120
+60121
+60122
+60123
+60124
+60125
+60126
+60127
+60128
+60129
+60130
+60131
+60132
+60133
+60134
+60135
+60136
+60137
+60138
+60139
+60140
+60141
+60142
+60143
+60144
+60145
+60146
+60147
+60148
+60149
+60150
+60151
+60152
+60153
+60154
+60155
+60156
+60157
+60158
+60159
+60160
+60161
+60162
+60163
+60164
+60165
+60166
+60167
+60168
+60169
+60170
+60171
+60172
+60173
+60174
+60175
+60176
+60177
+60178
+60179
+60180
+60181
+60182
+60183
+60184
+60185
+60186
+60187
+60188
+60189
+60190
+60191
+60192
+60193
+60194
+60195
+60196
+60197
+60198
+60199
+60200
+60201
+60202
+60203
+60204
+60205
+60206
+60207
+60208
+60209
+60210
+60211
+60212
+60213
+60214
+60215
+60216
+60217
+60218
+60219
+60220
+60221
+60222
+60223
+60224
+60225
+60226
+60227
+60228
+60229
+60230
+60231
+60232
+60233
+60234
+60235
+60236
+60237
+60238
+60239
+60240
+60241
+60242
+60243
+60244
+60245
+60246
+60247
+60248
+60249
+60250
+60251
+60252
+60253
+60254
+60255
+60256
+60257
+60258
+60259
+60260
+60261
+60262
+60263
+60264
+60265
+60266
+60267
+60268
+60269
+60270
+60271
+60272
+60273
+60274
+60275
+60276
+60277
+60278
+60279
+60280
+60281
+60282
+60283
+60284
+60285
+60286
+60287
+60288
+60289
+60290
+60291
+60292
+60293
+60294
+60295
+60296
+60297
+60298
+60299
+60300
+60301
+60302
+60303
+60304
+60305
+60306
+60307
+60308
+60309
+60310
+60311
+60312
+60313
+60314
+60315
+60316
+60317
+60318
+60319
+60320
+60321
+60322
+60323
+60324
+60325
+60326
+60327
+60328
+60329
+60330
+60331
+60332
+60333
+60334
+60335
+60336
+60337
+60338
+60339
+60340
+60341
+60342
+60343
+60344
+60345
+60346
+60347
+60348
+60349
+60350
+60351
+60352
+60353
+60354
+60355
+60356
+60357
+60358
+60359
+60360
+60361
+60362
+60363
+60364
+60365
+60366
+60367
+60368
+60369
+60370
+60371
+60372
+60373
+60374
+60375
+60376
+60377
+60378
+60379
+60380
+60381
+60382
+60383
+60384
+60385
+60386
+60387
+60388
+60389
+60390
+60391
+60392
+60393
+60394
+60395
+60396
+60397
+60398
+60399
+60400
+60401
+60402
+60403
+60404
+60405
+60406
+60407
+60408
+60409
+60410
+60411
+60412
+60413
+60414
+60415
+60416
+60417
+60418
+60419
+60420
+60421
+60422
+60423
+60424
+60425
+60426
+60427
+60428
+60429
+60430
+60431
+60432
+60433
+60434
+60435
+60436
+60437
+60438
+60439
+60440
+60441
+60442
+60443
+60444
+60445
+60446
+60447
+60448
+60449
+60450
+60451
+60452
+60453
+60454
+60455
+60456
+60457
+60458
+60459
+60460
+60461
+60462
+60463
+60464
+60465
+60466
+60467
+60468
+60469
+60470
+60471
+60472
+60473
+60474
+60475
+60476
+60477
+60478
+60479
+60480
+60481
+60482
+60483
+60484
+60485
+60486
+60487
+60488
+60489
+60490
+60491
+60492
+60493
+60494
+60495
+60496
+60497
+60498
+60499
+60500
+60501
+60502
+60503
+60504
+60505
+60506
+60507
+60508
+60509
+60510
+60511
+60512
+60513
+60514
+60515
+60516
+60517
+60518
+60519
+60520
+60521
+60522
+60523
+60524
+60525
+60526
+60527
+60528
+60529
+60530
+60531
+60532
+60533
+60534
+60535
+60536
+60537
+60538
+60539
+60540
+60541
+60542
+60543
+60544
+60545
+60546
+60547
+60548
+60549
+60550
+60551
+60552
+60553
+60554
+60555
+60556
+60557
+60558
+60559
+60560
+60561
+60562
+60563
+60564
+60565
+60566
+60567
+60568
+60569
+60570
+60571
+60572
+60573
+60574
+60575
+60576
+60577
+60578
+60579
+60580
+60581
+60582
+60583
+60584
+60585
+60586
+60587
+60588
+60589
+60590
+60591
+60592
+60593
+60594
+60595
+60596
+60597
+60598
+60599
+60600
+60601
+60602
+60603
+60604
+60605
+60606
+60607
+60608
+60609
+60610
+60611
+60612
+60613
+60614
+60615
+60616
+60617
+60618
+60619
+60620
+60621
+60622
+60623
+60624
+60625
+60626
+60627
+60628
+60629
+60630
+60631
+60632
+60633
+60634
+60635
+60636
+60637
+60638
+60639
+60640
+60641
+60642
+60643
+60644
+60645
+60646
+60647
+60648
+60649
+60650
+60651
+60652
+60653
+60654
+60655
+60656
+60657
+60658
+60659
+60660
+60661
+60662
+60663
+60664
+60665
+60666
+60667
+60668
+60669
+60670
+60671
+60672
+60673
+60674
+60675
+60676
+60677
+60678
+60679
+60680
+60681
+60682
+60683
+60684
+60685
+60686
+60687
+60688
+60689
+60690
+60691
+60692
+60693
+60694
+60695
+60696
+60697
+60698
+60699
+60700
+60701
+60702
+60703
+60704
+60705
+60706
+60707
+60708
+60709
+60710
+60711
+60712
+60713
+60714
+60715
+60716
+60717
+60718
+60719
+60720
+60721
+60722
+60723
+60724
+60725
+60726
+60727
+60728
+60729
+60730
+60731
+60732
+60733
+60734
+60735
+60736
+60737
+60738
+60739
+60740
+60741
+60742
+60743
+60744
+60745
+60746
+60747
+60748
+60749
+60750
+60751
+60752
+60753
+60754
+60755
+60756
+60757
+60758
+60759
+60760
+60761
+60762
+60763
+60764
+60765
+60766
+60767
+60768
+60769
+60770
+60771
+60772
+60773
+60774
+60775
+60776
+60777
+60778
+60779
+60780
+60781
+60782
+60783
+60784
+60785
+60786
+60787
+60788
+60789
+60790
+60791
+60792
+60793
+60794
+60795
+60796
+60797
+60798
+60799
+60800
+60801
+60802
+60803
+60804
+60805
+60806
+60807
+60808
+60809
+60810
+60811
+60812
+60813
+60814
+60815
+60816
+60817
+60818
+60819
+60820
+60821
+60822
+60823
+60824
+60825
+60826
+60827
+60828
+60829
+60830
+60831
+60832
+60833
+60834
+60835
+60836
+60837
+60838
+60839
+60840
+60841
+60842
+60843
+60844
+60845
+60846
+60847
+60848
+60849
+60850
+60851
+60852
+60853
+60854
+60855
+60856
+60857
+60858
+60859
+60860
+60861
+60862
+60863
+60864
+60865
+60866
+60867
+60868
+60869
+60870
+60871
+60872
+60873
+60874
+60875
+60876
+60877
+60878
+60879
+60880
+60881
+60882
+60883
+60884
+60885
+60886
+60887
+60888
+60889
+60890
+60891
+60892
+60893
+60894
+60895
+60896
+60897
+60898
+60899
+60900
+60901
+60902
+60903
+60904
+60905
+60906
+60907
+60908
+60909
+60910
+60911
+60912
+60913
+60914
+60915
+60916
+60917
+60918
+60919
+60920
+60921
+60922
+60923
+60924
+60925
+60926
+60927
+60928
+60929
+60930
+60931
+60932
+60933
+60934
+60935
+60936
+60937
+60938
+60939
+60940
+60941
+60942
+60943
+60944
+60945
+60946
+60947
+60948
+60949
+60950
+60951
+60952
+60953
+60954
+60955
+60956
+60957
+60958
+60959
+60960
+60961
+60962
+60963
+60964
+60965
+60966
+60967
+60968
+60969
+60970
+60971
+60972
+60973
+60974
+60975
+60976
+60977
+60978
+60979
+60980
+60981
+60982
+60983
+60984
+60985
+60986
+60987
+60988
+60989
+60990
+60991
+60992
+60993
+60994
+60995
+60996
+60997
+60998
+60999
+61000
+61001
+61002
+61003
+61004
+61005
+61006
+61007
+61008
+61009
+61010
+61011
+61012
+61013
+61014
+61015
+61016
+61017
+61018
+61019
+61020
+61021
+61022
+61023
+61024
+61025
+61026
+61027
+61028
+61029
+61030
+61031
+61032
+61033
+61034
+61035
+61036
+61037
+61038
+61039
+61040
+61041
+61042
+61043
+61044
+61045
+61046
+61047
+61048
+61049
+61050
+61051
+61052
+61053
+61054
+61055
+61056
+61057
+61058
+61059
+61060
+61061
+61062
+61063
+61064
+61065
+61066
+61067
+61068
+61069
+61070
+61071
+61072
+61073
+61074
+61075
+61076
+61077
+61078
+61079
+61080
+61081
+61082
+61083
+61084
+61085
+61086
+61087
+61088
+61089
+61090
+61091
+61092
+61093
+61094
+61095
+61096
+61097
+61098
+61099
+61100
+61101
+61102
+61103
+61104
+61105
+61106
+61107
+61108
+61109
+61110
+61111
+61112
+61113
+61114
+61115
+61116
+61117
+61118
+61119
+61120
+61121
+61122
+61123
+61124
+61125
+61126
+61127
+61128
+61129
+61130
+61131
+61132
+61133
+61134
+61135
+61136
+61137
+61138
+61139
+61140
+61141
+61142
+61143
+61144
+61145
+61146
+61147
+61148
+61149
+61150
+61151
+61152
+61153
+61154
+61155
+61156
+61157
+61158
+61159
+61160
+61161
+61162
+61163
+61164
+61165
+61166
+61167
+61168
+61169
+61170
+61171
+61172
+61173
+61174
+61175
+61176
+61177
+61178
+61179
+61180
+61181
+61182
+61183
+61184
+61185
+61186
+61187
+61188
+61189
+61190
+61191
+61192
+61193
+61194
+61195
+61196
+61197
+61198
+61199
+61200
+61201
+61202
+61203
+61204
+61205
+61206
+61207
+61208
+61209
+61210
+61211
+61212
+61213
+61214
+61215
+61216
+61217
+61218
+61219
+61220
+61221
+61222
+61223
+61224
+61225
+61226
+61227
+61228
+61229
+61230
+61231
+61232
+61233
+61234
+61235
+61236
+61237
+61238
+61239
+61240
+61241
+61242
+61243
+61244
+61245
+61246
+61247
+61248
+61249
+61250
+61251
+61252
+61253
+61254
+61255
+61256
+61257
+61258
+61259
+61260
+61261
+61262
+61263
+61264
+61265
+61266
+61267
+61268
+61269
+61270
+61271
+61272
+61273
+61274
+61275
+61276
+61277
+61278
+61279
+61280
+61281
+61282
+61283
+61284
+61285
+61286
+61287
+61288
+61289
+61290
+61291
+61292
+61293
+61294
+61295
+61296
+61297
+61298
+61299
+61300
+61301
+61302
+61303
+61304
+61305
+61306
+61307
+61308
+61309
+61310
+61311
+61312
+61313
+61314
+61315
+61316
+61317
+61318
+61319
+61320
+61321
+61322
+61323
+61324
+61325
+61326
+61327
+61328
+61329
+61330
+61331
+61332
+61333
+61334
+61335
+61336
+61337
+61338
+61339
+61340
+61341
+61342
+61343
+61344
+61345
+61346
+61347
+61348
+61349
+61350
+61351
+61352
+61353
+61354
+61355
+61356
+61357
+61358
+61359
+61360
+61361
+61362
+61363
+61364
+61365
+61366
+61367
+61368
+61369
+61370
+61371
+61372
+61373
+61374
+61375
+61376
+61377
+61378
+61379
+61380
+61381
+61382
+61383
+61384
+61385
+61386
+61387
+61388
+61389
+61390
+61391
+61392
+61393
+61394
+61395
+61396
+61397
+61398
+61399
+61400
+61401
+61402
+61403
+61404
+61405
+61406
+61407
+61408
+61409
+61410
+61411
+61412
+61413
+61414
+61415
+61416
+61417
+61418
+61419
+61420
+61421
+61422
+61423
+61424
+61425
+61426
+61427
+61428
+61429
+61430
+61431
+61432
+61433
+61434
+61435
+61436
+61437
+61438
+61439
+61440
+61441
+61442
+61443
+61444
+61445
+61446
+61447
+61448
+61449
+61450
+61451
+61452
+61453
+61454
+61455
+61456
+61457
+61458
+61459
+61460
+61461
+61462
+61463
+61464
+61465
+61466
+61467
+61468
+61469
+61470
+61471
+61472
+61473
+61474
+61475
+61476
+61477
+61478
+61479
+61480
+61481
+61482
+61483
+61484
+61485
+61486
+61487
+61488
+61489
+61490
+61491
+61492
+61493
+61494
+61495
+61496
+61497
+61498
+61499
+61500
+61501
+61502
+61503
+61504
+61505
+61506
+61507
+61508
+61509
+61510
+61511
+61512
+61513
+61514
+61515
+61516
+61517
+61518
+61519
+61520
+61521
+61522
+61523
+61524
+61525
+61526
+61527
+61528
+61529
+61530
+61531
+61532
+61533
+61534
+61535
+61536
+61537
+61538
+61539
+61540
+61541
+61542
+61543
+61544
+61545
+61546
+61547
+61548
+61549
+61550
+61551
+61552
+61553
+61554
+61555
+61556
+61557
+61558
+61559
+61560
+61561
+61562
+61563
+61564
+61565
+61566
+61567
+61568
+61569
+61570
+61571
+61572
+61573
+61574
+61575
+61576
+61577
+61578
+61579
+61580
+61581
+61582
+61583
+61584
+61585
+61586
+61587
+61588
+61589
+61590
+61591
+61592
+61593
+61594
+61595
+61596
+61597
+61598
+61599
+61600
+61601
+61602
+61603
+61604
+61605
+61606
+61607
+61608
+61609
+61610
+61611
+61612
+61613
+61614
+61615
+61616
+61617
+61618
+61619
+61620
+61621
+61622
+61623
+61624
+61625
+61626
+61627
+61628
+61629
+61630
+61631
+61632
+61633
+61634
+61635
+61636
+61637
+61638
+61639
+61640
+61641
+61642
+61643
+61644
+61645
+61646
+61647
+61648
+61649
+61650
+61651
+61652
+61653
+61654
+61655
+61656
+61657
+61658
+61659
+61660
+61661
+61662
+61663
+61664
+61665
+61666
+61667
+61668
+61669
+61670
+61671
+61672
+61673
+61674
+61675
+61676
+61677
+61678
+61679
+61680
+61681
+61682
+61683
+61684
+61685
+61686
+61687
+61688
+61689
+61690
+61691
+61692
+61693
+61694
+61695
+61696
+61697
+61698
+61699
+61700
+61701
+61702
+61703
+61704
+61705
+61706
+61707
+61708
+61709
+61710
+61711
+61712
+61713
+61714
+61715
+61716
+61717
+61718
+61719
+61720
+61721
+61722
+61723
+61724
+61725
+61726
+61727
+61728
+61729
+61730
+61731
+61732
+61733
+61734
+61735
+61736
+61737
+61738
+61739
+61740
+61741
+61742
+61743
+61744
+61745
+61746
+61747
+61748
+61749
+61750
+61751
+61752
+61753
+61754
+61755
+61756
+61757
+61758
+61759
+61760
+61761
+61762
+61763
+61764
+61765
+61766
+61767
+61768
+61769
+61770
+61771
+61772
+61773
+61774
+61775
+61776
+61777
+61778
+61779
+61780
+61781
+61782
+61783
+61784
+61785
+61786
+61787
+61788
+61789
+61790
+61791
+61792
+61793
+61794
+61795
+61796
+61797
+61798
+61799
+61800
+61801
+61802
+61803
+61804
+61805
+61806
+61807
+61808
+61809
+61810
+61811
+61812
+61813
+61814
+61815
+61816
+61817
+61818
+61819
+61820
+61821
+61822
+61823
+61824
+61825
+61826
+61827
+61828
+61829
+61830
+61831
+61832
+61833
+61834
+61835
+61836
+61837
+61838
+61839
+61840
+61841
+61842
+61843
+61844
+61845
+61846
+61847
+61848
+61849
+61850
+61851
+61852
+61853
+61854
+61855
+61856
+61857
+61858
+61859
+61860
+61861
+61862
+61863
+61864
+61865
+61866
+61867
+61868
+61869
+61870
+61871
+61872
+61873
+61874
+61875
+61876
+61877
+61878
+61879
+61880
+61881
+61882
+61883
+61884
+61885
+61886
+61887
+61888
+61889
+61890
+61891
+61892
+61893
+61894
+61895
+61896
+61897
+61898
+61899
+61900
+61901
+61902
+61903
+61904
+61905
+61906
+61907
+61908
+61909
+61910
+61911
+61912
+61913
+61914
+61915
+61916
+61917
+61918
+61919
+61920
+61921
+61922
+61923
+61924
+61925
+61926
+61927
+61928
+61929
+61930
+61931
+61932
+61933
+61934
+61935
+61936
+61937
+61938
+61939
+61940
+61941
+61942
+61943
+61944
+61945
+61946
+61947
+61948
+61949
+61950
+61951
+61952
+61953
+61954
+61955
+61956
+61957
+61958
+61959
+61960
+61961
+61962
+61963
+61964
+61965
+61966
+61967
+61968
+61969
+61970
+61971
+61972
+61973
+61974
+61975
+61976
+61977
+61978
+61979
+61980
+61981
+61982
+61983
+61984
+61985
+61986
+61987
+61988
+61989
+61990
+61991
+61992
+61993
+61994
+61995
+61996
+61997
+61998
+61999
+62000
+62001
+62002
+62003
+62004
+62005
+62006
+62007
+62008
+62009
+62010
+62011
+62012
+62013
+62014
+62015
+62016
+62017
+62018
+62019
+62020
+62021
+62022
+62023
+62024
+62025
+62026
+62027
+62028
+62029
+62030
+62031
+62032
+62033
+62034
+62035
+62036
+62037
+62038
+62039
+62040
+62041
+62042
+62043
+62044
+62045
+62046
+62047
+62048
+62049
+62050
+62051
+62052
+62053
+62054
+62055
+62056
+62057
+62058
+62059
+62060
+62061
+62062
+62063
+62064
+62065
+62066
+62067
+62068
+62069
+62070
+62071
+62072
+62073
+62074
+62075
+62076
+62077
+62078
+62079
+62080
+62081
+62082
+62083
+62084
+62085
+62086
+62087
+62088
+62089
+62090
+62091
+62092
+62093
+62094
+62095
+62096
+62097
+62098
+62099
+62100
+62101
+62102
+62103
+62104
+62105
+62106
+62107
+62108
+62109
+62110
+62111
+62112
+62113
+62114
+62115
+62116
+62117
+62118
+62119
+62120
+62121
+62122
+62123
+62124
+62125
+62126
+62127
+62128
+62129
+62130
+62131
+62132
+62133
+62134
+62135
+62136
+62137
+62138
+62139
+62140
+62141
+62142
+62143
+62144
+62145
+62146
+62147
+62148
+62149
+62150
+62151
+62152
+62153
+62154
+62155
+62156
+62157
+62158
+62159
+62160
+62161
+62162
+62163
+62164
+62165
+62166
+62167
+62168
+62169
+62170
+62171
+62172
+62173
+62174
+62175
+62176
+62177
+62178
+62179
+62180
+62181
+62182
+62183
+62184
+62185
+62186
+62187
+62188
+62189
+62190
+62191
+62192
+62193
+62194
+62195
+62196
+62197
+62198
+62199
+62200
+62201
+62202
+62203
+62204
+62205
+62206
+62207
+62208
+62209
+62210
+62211
+62212
+62213
+62214
+62215
+62216
+62217
+62218
+62219
+62220
+62221
+62222
+62223
+62224
+62225
+62226
+62227
+62228
+62229
+62230
+62231
+62232
+62233
+62234
+62235
+62236
+62237
+62238
+62239
+62240
+62241
+62242
+62243
+62244
+62245
+62246
+62247
+62248
+62249
+62250
+62251
+62252
+62253
+62254
+62255
+62256
+62257
+62258
+62259
+62260
+62261
+62262
+62263
+62264
+62265
+62266
+62267
+62268
+62269
+62270
+62271
+62272
+62273
+62274
+62275
+62276
+62277
+62278
+62279
+62280
+62281
+62282
+62283
+62284
+62285
+62286
+62287
+62288
+62289
+62290
+62291
+62292
+62293
+62294
+62295
+62296
+62297
+62298
+62299
+62300
+62301
+62302
+62303
+62304
+62305
+62306
+62307
+62308
+62309
+62310
+62311
+62312
+62313
+62314
+62315
+62316
+62317
+62318
+62319
+62320
+62321
+62322
+62323
+62324
+62325
+62326
+62327
+62328
+62329
+62330
+62331
+62332
+62333
+62334
+62335
+62336
+62337
+62338
+62339
+62340
+62341
+62342
+62343
+62344
+62345
+62346
+62347
+62348
+62349
+62350
+62351
+62352
+62353
+62354
+62355
+62356
+62357
+62358
+62359
+62360
+62361
+62362
+62363
+62364
+62365
+62366
+62367
+62368
+62369
+62370
+62371
+62372
+62373
+62374
+62375
+62376
+62377
+62378
+62379
+62380
+62381
+62382
+62383
+62384
+62385
+62386
+62387
+62388
+62389
+62390
+62391
+62392
+62393
+62394
+62395
+62396
+62397
+62398
+62399
+62400
+62401
+62402
+62403
+62404
+62405
+62406
+62407
+62408
+62409
+62410
+62411
+62412
+62413
+62414
+62415
+62416
+62417
+62418
+62419
+62420
+62421
+62422
+62423
+62424
+62425
+62426
+62427
+62428
+62429
+62430
+62431
+62432
+62433
+62434
+62435
+62436
+62437
+62438
+62439
+62440
+62441
+62442
+62443
+62444
+62445
+62446
+62447
+62448
+62449
+62450
+62451
+62452
+62453
+62454
+62455
+62456
+62457
+62458
+62459
+62460
+62461
+62462
+62463
+62464
+62465
+62466
+62467
+62468
+62469
+62470
+62471
+62472
+62473
+62474
+62475
+62476
+62477
+62478
+62479
+62480
+62481
+62482
+62483
+62484
+62485
+62486
+62487
+62488
+62489
+62490
+62491
+62492
+62493
+62494
+62495
+62496
+62497
+62498
+62499
+62500
+62501
+62502
+62503
+62504
+62505
+62506
+62507
+62508
+62509
+62510
+62511
+62512
+62513
+62514
+62515
+62516
+62517
+62518
+62519
+62520
+62521
+62522
+62523
+62524
+62525
+62526
+62527
+62528
+62529
+62530
+62531
+62532
+62533
+62534
+62535
+62536
+62537
+62538
+62539
+62540
+62541
+62542
+62543
+62544
+62545
+62546
+62547
+62548
+62549
+62550
+62551
+62552
+62553
+62554
+62555
+62556
+62557
+62558
+62559
+62560
+62561
+62562
+62563
+62564
+62565
+62566
+62567
+62568
+62569
+62570
+62571
+62572
+62573
+62574
+62575
+62576
+62577
+62578
+62579
+62580
+62581
+62582
+62583
+62584
+62585
+62586
+62587
+62588
+62589
+62590
+62591
+62592
+62593
+62594
+62595
+62596
+62597
+62598
+62599
+62600
+62601
+62602
+62603
+62604
+62605
+62606
+62607
+62608
+62609
+62610
+62611
+62612
+62613
+62614
+62615
+62616
+62617
+62618
+62619
+62620
+62621
+62622
+62623
+62624
+62625
+62626
+62627
+62628
+62629
+62630
+62631
+62632
+62633
+62634
+62635
+62636
+62637
+62638
+62639
+62640
+62641
+62642
+62643
+62644
+62645
+62646
+62647
+62648
+62649
+62650
+62651
+62652
+62653
+62654
+62655
+62656
+62657
+62658
+62659
+62660
+62661
+62662
+62663
+62664
+62665
+62666
+62667
+62668
+62669
+62670
+62671
+62672
+62673
+62674
+62675
+62676
+62677
+62678
+62679
+62680
+62681
+62682
+62683
+62684
+62685
+62686
+62687
+62688
+62689
+62690
+62691
+62692
+62693
+62694
+62695
+62696
+62697
+62698
+62699
+62700
+62701
+62702
+62703
+62704
+62705
+62706
+62707
+62708
+62709
+62710
+62711
+62712
+62713
+62714
+62715
+62716
+62717
+62718
+62719
+62720
+62721
+62722
+62723
+62724
+62725
+62726
+62727
+62728
+62729
+62730
+62731
+62732
+62733
+62734
+62735
+62736
+62737
+62738
+62739
+62740
+62741
+62742
+62743
+62744
+62745
+62746
+62747
+62748
+62749
+62750
+62751
+62752
+62753
+62754
+62755
+62756
+62757
+62758
+62759
+62760
+62761
+62762
+62763
+62764
+62765
+62766
+62767
+62768
+62769
+62770
+62771
+62772
+62773
+62774
+62775
+62776
+62777
+62778
+62779
+62780
+62781
+62782
+62783
+62784
+62785
+62786
+62787
+62788
+62789
+62790
+62791
+62792
+62793
+62794
+62795
+62796
+62797
+62798
+62799
+62800
+62801
+62802
+62803
+62804
+62805
+62806
+62807
+62808
+62809
+62810
+62811
+62812
+62813
+62814
+62815
+62816
+62817
+62818
+62819
+62820
+62821
+62822
+62823
+62824
+62825
+62826
+62827
+62828
+62829
+62830
+62831
+62832
+62833
+62834
+62835
+62836
+62837
+62838
+62839
+62840
+62841
+62842
+62843
+62844
+62845
+62846
+62847
+62848
+62849
+62850
+62851
+62852
+62853
+62854
+62855
+62856
+62857
+62858
+62859
+62860
+62861
+62862
+62863
+62864
+62865
+62866
+62867
+62868
+62869
+62870
+62871
+62872
+62873
+62874
+62875
+62876
+62877
+62878
+62879
+62880
+62881
+62882
+62883
+62884
+62885
+62886
+62887
+62888
+62889
+62890
+62891
+62892
+62893
+62894
+62895
+62896
+62897
+62898
+62899
+62900
+62901
+62902
+62903
+62904
+62905
+62906
+62907
+62908
+62909
+62910
+62911
+62912
+62913
+62914
+62915
+62916
+62917
+62918
+62919
+62920
+62921
+62922
+62923
+62924
+62925
+62926
+62927
+62928
+62929
+62930
+62931
+62932
+62933
+62934
+62935
+62936
+62937
+62938
+62939
+62940
+62941
+62942
+62943
+62944
+62945
+62946
+62947
+62948
+62949
+62950
+62951
+62952
+62953
+62954
+62955
+62956
+62957
+62958
+62959
+62960
+62961
+62962
+62963
+62964
+62965
+62966
+62967
+62968
+62969
+62970
+62971
+62972
+62973
+62974
+62975
+62976
+62977
+62978
+62979
+62980
+62981
+62982
+62983
+62984
+62985
+62986
+62987
+62988
+62989
+62990
+62991
+62992
+62993
+62994
+62995
+62996
+62997
+62998
+62999
+63000
+63001
+63002
+63003
+63004
+63005
+63006
+63007
+63008
+63009
+63010
+63011
+63012
+63013
+63014
+63015
+63016
+63017
+63018
+63019
+63020
+63021
+63022
+63023
+63024
+63025
+63026
+63027
+63028
+63029
+63030
+63031
+63032
+63033
+63034
+63035
+63036
+63037
+63038
+63039
+63040
+63041
+63042
+63043
+63044
+63045
+63046
+63047
+63048
+63049
+63050
+63051
+63052
+63053
+63054
+63055
+63056
+63057
+63058
+63059
+63060
+63061
+63062
+63063
+63064
+63065
+63066
+63067
+63068
+63069
+63070
+63071
+63072
+63073
+63074
+63075
+63076
+63077
+63078
+63079
+63080
+63081
+63082
+63083
+63084
+63085
+63086
+63087
+63088
+63089
+63090
+63091
+63092
+63093
+63094
+63095
+63096
+63097
+63098
+63099
+63100
+63101
+63102
+63103
+63104
+63105
+63106
+63107
+63108
+63109
+63110
+63111
+63112
+63113
+63114
+63115
+63116
+63117
+63118
+63119
+63120
+63121
+63122
+63123
+63124
+63125
+63126
+63127
+63128
+63129
+63130
+63131
+63132
+63133
+63134
+63135
+63136
+63137
+63138
+63139
+63140
+63141
+63142
+63143
+63144
+63145
+63146
+63147
+63148
+63149
+63150
+63151
+63152
+63153
+63154
+63155
+63156
+63157
+63158
+63159
+63160
+63161
+63162
+63163
+63164
+63165
+63166
+63167
+63168
+63169
+63170
+63171
+63172
+63173
+63174
+63175
+63176
+63177
+63178
+63179
+63180
+63181
+63182
+63183
+63184
+63185
+63186
+63187
+63188
+63189
+63190
+63191
+63192
+63193
+63194
+63195
+63196
+63197
+63198
+63199
+63200
+63201
+63202
+63203
+63204
+63205
+63206
+63207
+63208
+63209
+63210
+63211
+63212
+63213
+63214
+63215
+63216
+63217
+63218
+63219
+63220
+63221
+63222
+63223
+63224
+63225
+63226
+63227
+63228
+63229
+63230
+63231
+63232
+63233
+63234
+63235
+63236
+63237
+63238
+63239
+63240
+63241
+63242
+63243
+63244
+63245
+63246
+63247
+63248
+63249
+63250
+63251
+63252
+63253
+63254
+63255
+63256
+63257
+63258
+63259
+63260
+63261
+63262
+63263
+63264
+63265
+63266
+63267
+63268
+63269
+63270
+63271
+63272
+63273
+63274
+63275
+63276
+63277
+63278
+63279
+63280
+63281
+63282
+63283
+63284
+63285
+63286
+63287
+63288
+63289
+63290
+63291
+63292
+63293
+63294
+63295
+63296
+63297
+63298
+63299
+63300
+63301
+63302
+63303
+63304
+63305
+63306
+63307
+63308
+63309
+63310
+63311
+63312
+63313
+63314
+63315
+63316
+63317
+63318
+63319
+63320
+63321
+63322
+63323
+63324
+63325
+63326
+63327
+63328
+63329
+63330
+63331
+63332
+63333
+63334
+63335
+63336
+63337
+63338
+63339
+63340
+63341
+63342
+63343
+63344
+63345
+63346
+63347
+63348
+63349
+63350
+63351
+63352
+63353
+63354
+63355
+63356
+63357
+63358
+63359
+63360
+63361
+63362
+63363
+63364
+63365
+63366
+63367
+63368
+63369
+63370
+63371
+63372
+63373
+63374
+63375
+63376
+63377
+63378
+63379
+63380
+63381
+63382
+63383
+63384
+63385
+63386
+63387
+63388
+63389
+63390
+63391
+63392
+63393
+63394
+63395
+63396
+63397
+63398
+63399
+63400
+63401
+63402
+63403
+63404
+63405
+63406
+63407
+63408
+63409
+63410
+63411
+63412
+63413
+63414
+63415
+63416
+63417
+63418
+63419
+63420
+63421
+63422
+63423
+63424
+63425
+63426
+63427
+63428
+63429
+63430
+63431
+63432
+63433
+63434
+63435
+63436
+63437
+63438
+63439
+63440
+63441
+63442
+63443
+63444
+63445
+63446
+63447
+63448
+63449
+63450
+63451
+63452
+63453
+63454
+63455
+63456
+63457
+63458
+63459
+63460
+63461
+63462
+63463
+63464
+63465
+63466
+63467
+63468
+63469
+63470
+63471
+63472
+63473
+63474
+63475
+63476
+63477
+63478
+63479
+63480
+63481
+63482
+63483
+63484
+63485
+63486
+63487
+63488
+63489
+63490
+63491
+63492
+63493
+63494
+63495
+63496
+63497
+63498
+63499
+63500
+63501
+63502
+63503
+63504
+63505
+63506
+63507
+63508
+63509
+63510
+63511
+63512
+63513
+63514
+63515
+63516
+63517
+63518
+63519
+63520
+63521
+63522
+63523
+63524
+63525
+63526
+63527
+63528
+63529
+63530
+63531
+63532
+63533
+63534
+63535
+63536
+63537
+63538
+63539
+63540
+63541
+63542
+63543
+63544
+63545
+63546
+63547
+63548
+63549
+63550
+63551
+63552
+63553
+63554
+63555
+63556
+63557
+63558
+63559
+63560
+63561
+63562
+63563
+63564
+63565
+63566
+63567
+63568
+63569
+63570
+63571
+63572
+63573
+63574
+63575
+63576
+63577
+63578
+63579
+63580
+63581
+63582
+63583
+63584
+63585
+63586
+63587
+63588
+63589
+63590
+63591
+63592
+63593
+63594
+63595
+63596
+63597
+63598
+63599
+63600
+63601
+63602
+63603
+63604
+63605
+63606
+63607
+63608
+63609
+63610
+63611
+63612
+63613
+63614
+63615
+63616
+63617
+63618
+63619
+63620
+63621
+63622
+63623
+63624
+63625
+63626
+63627
+63628
+63629
+63630
+63631
+63632
+63633
+63634
+63635
+63636
+63637
+63638
+63639
+63640
+63641
+63642
+63643
+63644
+63645
+63646
+63647
+63648
+63649
+63650
+63651
+63652
+63653
+63654
+63655
+63656
+63657
+63658
+63659
+63660
+63661
+63662
+63663
+63664
+63665
+63666
+63667
+63668
+63669
+63670
+63671
+63672
+63673
+63674
+63675
+63676
+63677
+63678
+63679
+63680
+63681
+63682
+63683
+63684
+63685
+63686
+63687
+63688
+63689
+63690
+63691
+63692
+63693
+63694
+63695
+63696
+63697
+63698
+63699
+63700
+63701
+63702
+63703
+63704
+63705
+63706
+63707
+63708
+63709
+63710
+63711
+63712
+63713
+63714
+63715
+63716
+63717
+63718
+63719
+63720
+63721
+63722
+63723
+63724
+63725
+63726
+63727
+63728
+63729
+63730
+63731
+63732
+63733
+63734
+63735
+63736
+63737
+63738
+63739
+63740
+63741
+63742
+63743
+63744
+63745
+63746
+63747
+63748
+63749
+63750
+63751
+63752
+63753
+63754
+63755
+63756
+63757
+63758
+63759
+63760
+63761
+63762
+63763
+63764
+63765
+63766
+63767
+63768
+63769
+63770
+63771
+63772
+63773
+63774
+63775
+63776
+63777
+63778
+63779
+63780
+63781
+63782
+63783
+63784
+63785
+63786
+63787
+63788
+63789
+63790
+63791
+63792
+63793
+63794
+63795
+63796
+63797
+63798
+63799
+63800
+63801
+63802
+63803
+63804
+63805
+63806
+63807
+63808
+63809
+63810
+63811
+63812
+63813
+63814
+63815
+63816
+63817
+63818
+63819
+63820
+63821
+63822
+63823
+63824
+63825
+63826
+63827
+63828
+63829
+63830
+63831
+63832
+63833
+63834
+63835
+63836
+63837
+63838
+63839
+63840
+63841
+63842
+63843
+63844
+63845
+63846
+63847
+63848
+63849
+63850
+63851
+63852
+63853
+63854
+63855
+63856
+63857
+63858
+63859
+63860
+63861
+63862
+63863
+63864
+63865
+63866
+63867
+63868
+63869
+63870
+63871
+63872
+63873
+63874
+63875
+63876
+63877
+63878
+63879
+63880
+63881
+63882
+63883
+63884
+63885
+63886
+63887
+63888
+63889
+63890
+63891
+63892
+63893
+63894
+63895
+63896
+63897
+63898
+63899
+63900
+63901
+63902
+63903
+63904
+63905
+63906
+63907
+63908
+63909
+63910
+63911
+63912
+63913
+63914
+63915
+63916
+63917
+63918
+63919
+63920
+63921
+63922
+63923
+63924
+63925
+63926
+63927
+63928
+63929
+63930
+63931
+63932
+63933
+63934
+63935
+63936
+63937
+63938
+63939
+63940
+63941
+63942
+63943
+63944
+63945
+63946
+63947
+63948
+63949
+63950
+63951
+63952
+63953
+63954
+63955
+63956
+63957
+63958
+63959
+63960
+63961
+63962
+63963
+63964
+63965
+63966
+63967
+63968
+63969
+63970
+63971
+63972
+63973
+63974
+63975
+63976
+63977
+63978
+63979
+63980
+63981
+63982
+63983
+63984
+63985
+63986
+63987
+63988
+63989
+63990
+63991
+63992
+63993
+63994
+63995
+63996
+63997
+63998
+63999
+64000
+64001
+64002
+64003
+64004
+64005
+64006
+64007
+64008
+64009
+64010
+64011
+64012
+64013
+64014
+64015
+64016
+64017
+64018
+64019
+64020
+64021
+64022
+64023
+64024
+64025
+64026
+64027
+64028
+64029
+64030
+64031
+64032
+64033
+64034
+64035
+64036
+64037
+64038
+64039
+64040
+64041
+64042
+64043
+64044
+64045
+64046
+64047
+64048
+64049
+64050
+64051
+64052
+64053
+64054
+64055
+64056
+64057
+64058
+64059
+64060
+64061
+64062
+64063
+64064
+64065
+64066
+64067
+64068
+64069
+64070
+64071
+64072
+64073
+64074
+64075
+64076
+64077
+64078
+64079
+64080
+64081
+64082
+64083
+64084
+64085
+64086
+64087
+64088
+64089
+64090
+64091
+64092
+64093
+64094
+64095
+64096
+64097
+64098
+64099
+64100
+64101
+64102
+64103
+64104
+64105
+64106
+64107
+64108
+64109
+64110
+64111
+64112
+64113
+64114
+64115
+64116
+64117
+64118
+64119
+64120
+64121
+64122
+64123
+64124
+64125
+64126
+64127
+64128
+64129
+64130
+64131
+64132
+64133
+64134
+64135
+64136
+64137
+64138
+64139
+64140
+64141
+64142
+64143
+64144
+64145
+64146
+64147
+64148
+64149
+64150
+64151
+64152
+64153
+64154
+64155
+64156
+64157
+64158
+64159
+64160
+64161
+64162
+64163
+64164
+64165
+64166
+64167
+64168
+64169
+64170
+64171
+64172
+64173
+64174
+64175
+64176
+64177
+64178
+64179
+64180
+64181
+64182
+64183
+64184
+64185
+64186
+64187
+64188
+64189
+64190
+64191
+64192
+64193
+64194
+64195
+64196
+64197
+64198
+64199
+64200
+64201
+64202
+64203
+64204
+64205
+64206
+64207
+64208
+64209
+64210
+64211
+64212
+64213
+64214
+64215
+64216
+64217
+64218
+64219
+64220
+64221
+64222
+64223
+64224
+64225
+64226
+64227
+64228
+64229
+64230
+64231
+64232
+64233
+64234
+64235
+64236
+64237
+64238
+64239
+64240
+64241
+64242
+64243
+64244
+64245
+64246
+64247
+64248
+64249
+64250
+64251
+64252
+64253
+64254
+64255
+64256
+64257
+64258
+64259
+64260
+64261
+64262
+64263
+64264
+64265
+64266
+64267
+64268
+64269
+64270
+64271
+64272
+64273
+64274
+64275
+64276
+64277
+64278
+64279
+64280
+64281
+64282
+64283
+64284
+64285
+64286
+64287
+64288
+64289
+64290
+64291
+64292
+64293
+64294
+64295
+64296
+64297
+64298
+64299
+64300
+64301
+64302
+64303
+64304
+64305
+64306
+64307
+64308
+64309
+64310
+64311
+64312
+64313
+64314
+64315
+64316
+64317
+64318
+64319
+64320
+64321
+64322
+64323
+64324
+64325
+64326
+64327
+64328
+64329
+64330
+64331
+64332
+64333
+64334
+64335
+64336
+64337
+64338
+64339
+64340
+64341
+64342
+64343
+64344
+64345
+64346
+64347
+64348
+64349
+64350
+64351
+64352
+64353
+64354
+64355
+64356
+64357
+64358
+64359
+64360
+64361
+64362
+64363
+64364
+64365
+64366
+64367
+64368
+64369
+64370
+64371
+64372
+64373
+64374
+64375
+64376
+64377
+64378
+64379
+64380
+64381
+64382
+64383
+64384
+64385
+64386
+64387
+64388
+64389
+64390
+64391
+64392
+64393
+64394
+64395
+64396
+64397
+64398
+64399
+64400
+64401
+64402
+64403
+64404
+64405
+64406
+64407
+64408
+64409
+64410
+64411
+64412
+64413
+64414
+64415
+64416
+64417
+64418
+64419
+64420
+64421
+64422
+64423
+64424
+64425
+64426
+64427
+64428
+64429
+64430
+64431
+64432
+64433
+64434
+64435
+64436
+64437
+64438
+64439
+64440
+64441
+64442
+64443
+64444
+64445
+64446
+64447
+64448
+64449
+64450
+64451
+64452
+64453
+64454
+64455
+64456
+64457
+64458
+64459
+64460
+64461
+64462
+64463
+64464
+64465
+64466
+64467
+64468
+64469
+64470
+64471
+64472
+64473
+64474
+64475
+64476
+64477
+64478
+64479
+64480
+64481
+64482
+64483
+64484
+64485
+64486
+64487
+64488
+64489
+64490
+64491
+64492
+64493
+64494
+64495
+64496
+64497
+64498
+64499
+64500
+64501
+64502
+64503
+64504
+64505
+64506
+64507
+64508
+64509
+64510
+64511
+64512
+64513
+64514
+64515
+64516
+64517
+64518
+64519
+64520
+64521
+64522
+64523
+64524
+64525
+64526
+64527
+64528
+64529
+64530
+64531
+64532
+64533
+64534
+64535
+64536
+64537
+64538
+64539
+64540
+64541
+64542
+64543
+64544
+64545
+64546
+64547
+64548
+64549
+64550
+64551
+64552
+64553
+64554
+64555
+64556
+64557
+64558
+64559
+64560
+64561
+64562
+64563
+64564
+64565
+64566
+64567
+64568
+64569
+64570
+64571
+64572
+64573
+64574
+64575
+64576
+64577
+64578
+64579
+64580
+64581
+64582
+64583
+64584
+64585
+64586
+64587
+64588
+64589
+64590
+64591
+64592
+64593
+64594
+64595
+64596
+64597
+64598
+64599
+64600
+64601
+64602
+64603
+64604
+64605
+64606
+64607
+64608
+64609
+64610
+64611
+64612
+64613
+64614
+64615
+64616
+64617
+64618
+64619
+64620
+64621
+64622
+64623
+64624
+64625
+64626
+64627
+64628
+64629
+64630
+64631
+64632
+64633
+64634
+64635
+64636
+64637
+64638
+64639
+64640
+64641
+64642
+64643
+64644
+64645
+64646
+64647
+64648
+64649
+64650
+64651
+64652
+64653
+64654
+64655
+64656
+64657
+64658
+64659
+64660
+64661
+64662
+64663
+64664
+64665
+64666
+64667
+64668
+64669
+64670
+64671
+64672
+64673
+64674
+64675
+64676
+64677
+64678
+64679
+64680
+64681
+64682
+64683
+64684
+64685
+64686
+64687
+64688
+64689
+64690
+64691
+64692
+64693
+64694
+64695
+64696
+64697
+64698
+64699
+64700
+64701
+64702
+64703
+64704
+64705
+64706
+64707
+64708
+64709
+64710
+64711
+64712
+64713
+64714
+64715
+64716
+64717
+64718
+64719
+64720
+64721
+64722
+64723
+64724
+64725
+64726
+64727
+64728
+64729
+64730
+64731
+64732
+64733
+64734
+64735
+64736
+64737
+64738
+64739
+64740
+64741
+64742
+64743
+64744
+64745
+64746
+64747
+64748
+64749
+64750
+64751
+64752
+64753
+64754
+64755
+64756
+64757
+64758
+64759
+64760
+64761
+64762
+64763
+64764
+64765
+64766
+64767
+64768
+64769
+64770
+64771
+64772
+64773
+64774
+64775
+64776
+64777
+64778
+64779
+64780
+64781
+64782
+64783
+64784
+64785
+64786
+64787
+64788
+64789
+64790
+64791
+64792
+64793
+64794
+64795
+64796
+64797
+64798
+64799
+64800
+64801
+64802
+64803
+64804
+64805
+64806
+64807
+64808
+64809
+64810
+64811
+64812
+64813
+64814
+64815
+64816
+64817
+64818
+64819
+64820
+64821
+64822
+64823
+64824
+64825
+64826
+64827
+64828
+64829
+64830
+64831
+64832
+64833
+64834
+64835
+64836
+64837
+64838
+64839
+64840
+64841
+64842
+64843
+64844
+64845
+64846
+64847
+64848
+64849
+64850
+64851
+64852
+64853
+64854
+64855
+64856
+64857
+64858
+64859
+64860
+64861
+64862
+64863
+64864
+64865
+64866
+64867
+64868
+64869
+64870
+64871
+64872
+64873
+64874
+64875
+64876
+64877
+64878
+64879
+64880
+64881
+64882
+64883
+64884
+64885
+64886
+64887
+64888
+64889
+64890
+64891
+64892
+64893
+64894
+64895
+64896
+64897
+64898
+64899
+64900
+64901
+64902
+64903
+64904
+64905
+64906
+64907
+64908
+64909
+64910
+64911
+64912
+64913
+64914
+64915
+64916
+64917
+64918
+64919
+64920
+64921
+64922
+64923
+64924
+64925
+64926
+64927
+64928
+64929
+64930
+64931
+64932
+64933
+64934
+64935
+64936
+64937
+64938
+64939
+64940
+64941
+64942
+64943
+64944
+64945
+64946
+64947
+64948
+64949
+64950
+64951
+64952
+64953
+64954
+64955
+64956
+64957
+64958
+64959
+64960
+64961
+64962
+64963
+64964
+64965
+64966
+64967
+64968
+64969
+64970
+64971
+64972
+64973
+64974
+64975
+64976
+64977
+64978
+64979
+64980
+64981
+64982
+64983
+64984
+64985
+64986
+64987
+64988
+64989
+64990
+64991
+64992
+64993
+64994
+64995
+64996
+64997
+64998
+64999
+65000
+65001
+65002
+65003
+65004
+65005
+65006
+65007
+65008
+65009
+65010
+65011
+65012
+65013
+65014
+65015
+65016
+65017
+65018
+65019
+65020
+65021
+65022
+65023
+65024
+65025
+65026
+65027
+65028
+65029
+65030
+65031
+65032
+65033
+65034
+65035
+65036
+65037
+65038
+65039
+65040
+65041
+65042
+65043
+65044
+65045
+65046
+65047
+65048
+65049
+65050
+65051
+65052
+65053
+65054
+65055
+65056
+65057
+65058
+65059
+65060
+65061
+65062
+65063
+65064
+65065
+65066
+65067
+65068
+65069
+65070
+65071
+65072
+65073
+65074
+65075
+65076
+65077
+65078
+65079
+65080
+65081
+65082
+65083
+65084
+65085
+65086
+65087
+65088
+65089
+65090
+65091
+65092
+65093
+65094
+65095
+65096
+65097
+65098
+65099
+65100
+65101
+65102
+65103
+65104
+65105
+65106
+65107
+65108
+65109
+65110
+65111
+65112
+65113
+65114
+65115
+65116
+65117
+65118
+65119
+65120
+65121
+65122
+65123
+65124
+65125
+65126
+65127
+65128
+65129
+65130
+65131
+65132
+65133
+65134
+65135
+65136
+65137
+65138
+65139
+65140
+65141
+65142
+65143
+65144
+65145
+65146
+65147
+65148
+65149
+65150
+65151
+65152
+65153
+65154
+65155
+65156
+65157
+65158
+65159
+65160
+65161
+65162
+65163
+65164
+65165
+65166
+65167
+65168
+65169
+65170
+65171
+65172
+65173
+65174
+65175
+65176
+65177
+65178
+65179
+65180
+65181
+65182
+65183
+65184
+65185
+65186
+65187
+65188
+65189
+65190
+65191
+65192
+65193
+65194
+65195
+65196
+65197
+65198
+65199
+65200
+65201
+65202
+65203
+65204
+65205
+65206
+65207
+65208
+65209
+65210
+65211
+65212
+65213
+65214
+65215
+65216
+65217
+65218
+65219
+65220
+65221
+65222
+65223
+65224
+65225
+65226
+65227
+65228
+65229
+65230
+65231
+65232
+65233
+65234
+65235
+65236
+65237
+65238
+65239
+65240
+65241
+65242
+65243
+65244
+65245
+65246
+65247
+65248
+65249
+65250
+65251
+65252
+65253
+65254
+65255
+65256
+65257
+65258
+65259
+65260
+65261
+65262
+65263
+65264
+65265
+65266
+65267
+65268
+65269
+65270
+65271
+65272
+65273
+65274
+65275
+65276
+65277
+65278
+65279
+65280
+65281
+65282
+65283
+65284
+65285
+65286
+65287
+65288
+65289
+65290
+65291
+65292
+65293
+65294
+65295
+65296
+65297
+65298
+65299
+65300
+65301
+65302
+65303
+65304
+65305
+65306
+65307
+65308
+65309
+65310
+65311
+65312
+65313
+65314
+65315
+65316
+65317
+65318
+65319
+65320
+65321
+65322
+65323
+65324
+65325
+65326
+65327
+65328
+65329
+65330
+65331
+65332
+65333
+65334
+65335
+65336
+65337
+65338
+65339
+65340
+65341
+65342
+65343
+65344
+65345
+65346
+65347
+65348
+65349
+65350
+65351
+65352
+65353
+65354
+65355
+65356
+65357
+65358
+65359
+65360
+65361
+65362
+65363
+65364
+65365
+65366
+65367
+65368
+65369
+65370
+65371
+65372
+65373
+65374
+65375
+65376
+65377
+65378
+65379
+65380
+65381
+65382
+65383
+65384
+65385
+65386
+65387
+65388
+65389
+65390
+65391
+65392
+65393
+65394
+65395
+65396
+65397
+65398
+65399
+65400
+65401
+65402
+65403
+65404
+65405
+65406
+65407
+65408
+65409
+65410
+65411
+65412
+65413
+65414
+65415
+65416
+65417
+65418
+65419
+65420
+65421
+65422
+65423
+65424
+65425
+65426
+65427
+65428
+65429
+65430
+65431
+65432
+65433
+65434
+65435
+65436
+65437
+65438
+65439
+65440
+65441
+65442
+65443
+65444
+65445
+65446
+65447
+65448
+65449
+65450
+65451
+65452
+65453
+65454
+65455
+65456
+65457
+65458
+65459
+65460
+65461
+65462
+65463
+65464
+65465
+65466
+65467
+65468
+65469
+65470
+65471
+65472
+65473
+65474
+65475
+65476
+65477
+65478
+65479
+65480
+65481
+65482
+65483
+65484
+65485
+65486
+65487
+65488
+65489
+65490
+65491
+65492
+65493
+65494
+65495
+65496
+65497
+65498
+65499
+65500
+65501
+65502
+65503
+65504
+65505
+65506
+65507
+65508
+65509
+65510
+65511
+65512
+65513
+65514
+65515
+65516
+65517
+65518
+65519
+65520
+65521
+65522
+65523
+65524
+65525
+65526
+65527
+65528
+65529
+65530
+65531
+65532
+65533
+65534
+65535
+65536
+65537
+65538
+65539
+65540
+65541
+65542
+65543
+65544
+65545
+65546
+65547
+65548
+65549
+65550
+65551
+65552
+65553
+65554
+65555
+65556
+65557
+65558
+65559
+65560
+65561
+65562
+65563
+65564
+65565
+65566
+65567
+65568
+65569
+65570
+65571
+65572
+65573
+65574
+65575
+65576
+65577
+65578
+65579
+65580
+65581
+65582
+65583
+65584
+65585
+65586
+65587
+65588
+65589
+65590
+65591
+65592
+65593
+65594
+65595
+65596
+65597
+65598
+65599
+65600
+65601
+65602
+65603
+65604
+65605
+65606
+65607
+65608
+65609
+65610
+65611
+65612
+65613
+65614
+65615
+65616
+65617
+65618
+65619
+65620
+65621
+65622
+65623
+65624
+65625
+65626
+65627
+65628
+65629
+65630
+65631
+65632
+65633
+65634
+65635
+65636
+65637
+65638
+65639
+65640
+65641
+65642
+65643
+65644
+65645
+65646
+65647
+65648
+65649
+65650
+65651
+65652
+65653
+65654
+65655
+65656
+65657
+65658
+65659
+65660
+65661
+65662
+65663
+65664
+65665
+65666
+65667
+65668
+65669
+65670
+65671
+65672
+65673
+65674
+65675
+65676
+65677
+65678
+65679
+65680
+65681
+65682
+65683
+65684
+65685
+65686
+65687
+65688
+65689
+65690
+65691
+65692
+65693
+65694
+65695
+65696
+65697
+65698
+65699
+65700
+65701
+65702
+65703
+65704
+65705
+65706
+65707
+65708
+65709
+65710
+65711
+65712
+65713
+65714
+65715
+65716
+65717
+65718
+65719
+65720
+65721
+65722
+65723
+65724
+65725
+65726
+65727
+65728
+65729
+65730
+65731
+65732
+65733
+65734
+65735
+65736
+65737
+65738
+65739
+65740
+65741
+65742
+65743
+65744
+65745
+65746
+65747
+65748
+65749
+65750
+65751
+65752
+65753
+65754
+65755
+65756
+65757
+65758
+65759
+65760
+65761
+65762
+65763
+65764
+65765
+65766
+65767
+65768
+65769
+65770
+65771
+65772
+65773
+65774
+65775
+65776
+65777
+65778
+65779
+65780
+65781
+65782
+65783
+65784
+65785
+65786
+65787
+65788
+65789
+65790
+65791
+65792
+65793
+65794
+65795
+65796
+65797
+65798
+65799
+65800
+65801
+65802
+65803
+65804
+65805
+65806
+65807
+65808
+65809
+65810
+65811
+65812
+65813
+65814
+65815
+65816
+65817
+65818
+65819
+65820
+65821
+65822
+65823
+65824
+65825
+65826
+65827
+65828
+65829
+65830
+65831
+65832
+65833
+65834
+65835
+65836
+65837
+65838
+65839
+65840
+65841
+65842
+65843
+65844
+65845
+65846
+65847
+65848
+65849
+65850
+65851
+65852
+65853
+65854
+65855
+65856
+65857
+65858
+65859
+65860
+65861
+65862
+65863
+65864
+65865
+65866
+65867
+65868
+65869
+65870
+65871
+65872
+65873
+65874
+65875
+65876
+65877
+65878
+65879
+65880
+65881
+65882
+65883
+65884
+65885
+65886
+65887
+65888
+65889
+65890
+65891
+65892
+65893
+65894
+65895
+65896
+65897
+65898
+65899
+65900
+65901
+65902
+65903
+65904
+65905
+65906
+65907
+65908
+65909
+65910
+65911
+65912
+65913
+65914
+65915
+65916
+65917
+65918
+65919
+65920
+65921
+65922
+65923
+65924
+65925
+65926
+65927
+65928
+65929
+65930
+65931
+65932
+65933
+65934
+65935
+65936
+65937
+65938
+65939
+65940
+65941
+65942
+65943
+65944
+65945
+65946
+65947
+65948
+65949
+65950
+65951
+65952
+65953
+65954
+65955
+65956
+65957
+65958
+65959
+65960
+65961
+65962
+65963
+65964
+65965
+65966
+65967
+65968
+65969
+65970
+65971
+65972
+65973
+65974
+65975
+65976
+65977
+65978
+65979
+65980
+65981
+65982
+65983
+65984
+65985
+65986
+65987
+65988
+65989
+65990
+65991
+65992
+65993
+65994
+65995
+65996
+65997
+65998
+65999
+66000
+66001
+66002
+66003
+66004
+66005
+66006
+66007
+66008
+66009
+66010
+66011
+66012
+66013
+66014
+66015
+66016
+66017
+66018
+66019
+66020
+66021
+66022
+66023
+66024
+66025
+66026
+66027
+66028
+66029
+66030
+66031
+66032
+66033
+66034
+66035
+66036
+66037
+66038
+66039
+66040
+66041
+66042
+66043
+66044
+66045
+66046
+66047
+66048
+66049
+66050
+66051
+66052
+66053
+66054
+66055
+66056
+66057
+66058
+66059
+66060
+66061
+66062
+66063
+66064
+66065
+66066
+66067
+66068
+66069
+66070
+66071
+66072
+66073
+66074
+66075
+66076
+66077
+66078
+66079
+66080
+66081
+66082
+66083
+66084
+66085
+66086
+66087
+66088
+66089
+66090
+66091
+66092
+66093
+66094
+66095
+66096
+66097
+66098
+66099
+66100
+66101
+66102
+66103
+66104
+66105
+66106
+66107
+66108
+66109
+66110
+66111
+66112
+66113
+66114
+66115
+66116
+66117
+66118
+66119
+66120
+66121
+66122
+66123
+66124
+66125
+66126
+66127
+66128
+66129
+66130
+66131
+66132
+66133
+66134
+66135
+66136
+66137
+66138
+66139
+66140
+66141
+66142
+66143
+66144
+66145
+66146
+66147
+66148
+66149
+66150
+66151
+66152
+66153
+66154
+66155
+66156
+66157
+66158
+66159
+66160
+66161
+66162
+66163
+66164
+66165
+66166
+66167
+66168
+66169
+66170
+66171
+66172
+66173
+66174
+66175
+66176
+66177
+66178
+66179
+66180
+66181
+66182
+66183
+66184
+66185
+66186
+66187
+66188
+66189
+66190
+66191
+66192
+66193
+66194
+66195
+66196
+66197
+66198
+66199
+66200
+66201
+66202
+66203
+66204
+66205
+66206
+66207
+66208
+66209
+66210
+66211
+66212
+66213
+66214
+66215
+66216
+66217
+66218
+66219
+66220
+66221
+66222
+66223
+66224
+66225
+66226
+66227
+66228
+66229
+66230
+66231
+66232
+66233
+66234
+66235
+66236
+66237
+66238
+66239
+66240
+66241
+66242
+66243
+66244
+66245
+66246
+66247
+66248
+66249
+66250
+66251
+66252
+66253
+66254
+66255
+66256
+66257
+66258
+66259
+66260
+66261
+66262
+66263
+66264
+66265
+66266
+66267
+66268
+66269
+66270
+66271
+66272
+66273
+66274
+66275
+66276
+66277
+66278
+66279
+66280
+66281
+66282
+66283
+66284
+66285
+66286
+66287
+66288
+66289
+66290
+66291
+66292
+66293
+66294
+66295
+66296
+66297
+66298
+66299
+66300
+66301
+66302
+66303
+66304
+66305
+66306
+66307
+66308
+66309
+66310
+66311
+66312
+66313
+66314
+66315
+66316
+66317
+66318
+66319
+66320
+66321
+66322
+66323
+66324
+66325
+66326
+66327
+66328
+66329
+66330
+66331
+66332
+66333
+66334
+66335
+66336
+66337
+66338
+66339
+66340
+66341
+66342
+66343
+66344
+66345
+66346
+66347
+66348
+66349
+66350
+66351
+66352
+66353
+66354
+66355
+66356
+66357
+66358
+66359
+66360
+66361
+66362
+66363
+66364
+66365
+66366
+66367
+66368
+66369
+66370
+66371
+66372
+66373
+66374
+66375
+66376
+66377
+66378
+66379
+66380
+66381
+66382
+66383
+66384
+66385
+66386
+66387
+66388
+66389
+66390
+66391
+66392
+66393
+66394
+66395
+66396
+66397
+66398
+66399
+66400
+66401
+66402
+66403
+66404
+66405
+66406
+66407
+66408
+66409
+66410
+66411
+66412
+66413
+66414
+66415
+66416
+66417
+66418
+66419
+66420
+66421
+66422
+66423
+66424
+66425
+66426
+66427
+66428
+66429
+66430
+66431
+66432
+66433
+66434
+66435
+66436
+66437
+66438
+66439
+66440
+66441
+66442
+66443
+66444
+66445
+66446
+66447
+66448
+66449
+66450
+66451
+66452
+66453
+66454
+66455
+66456
+66457
+66458
+66459
+66460
+66461
+66462
+66463
+66464
+66465
+66466
+66467
+66468
+66469
+66470
+66471
+66472
+66473
+66474
+66475
+66476
+66477
+66478
+66479
+66480
+66481
+66482
+66483
+66484
+66485
+66486
+66487
+66488
+66489
+66490
+66491
+66492
+66493
+66494
+66495
+66496
+66497
+66498
+66499
+66500
+66501
+66502
+66503
+66504
+66505
+66506
+66507
+66508
+66509
+66510
+66511
+66512
+66513
+66514
+66515
+66516
+66517
+66518
+66519
+66520
+66521
+66522
+66523
+66524
+66525
+66526
+66527
+66528
+66529
+66530
+66531
+66532
+66533
+66534
+66535
+66536
+66537
+66538
+66539
+66540
+66541
+66542
+66543
+66544
+66545
+66546
+66547
+66548
+66549
+66550
+66551
+66552
+66553
+66554
+66555
+66556
+66557
+66558
+66559
+66560
+66561
+66562
+66563
+66564
+66565
+66566
+66567
+66568
+66569
+66570
+66571
+66572
+66573
+66574
+66575
+66576
+66577
+66578
+66579
+66580
+66581
+66582
+66583
+66584
+66585
+66586
+66587
+66588
+66589
+66590
+66591
+66592
+66593
+66594
+66595
+66596
+66597
+66598
+66599
+66600
+66601
+66602
+66603
+66604
+66605
+66606
+66607
+66608
+66609
+66610
+66611
+66612
+66613
+66614
+66615
+66616
+66617
+66618
+66619
+66620
+66621
+66622
+66623
+66624
+66625
+66626
+66627
+66628
+66629
+66630
+66631
+66632
+66633
+66634
+66635
+66636
+66637
+66638
+66639
+66640
+66641
+66642
+66643
+66644
+66645
+66646
+66647
+66648
+66649
+66650
+66651
+66652
+66653
+66654
+66655
+66656
+66657
+66658
+66659
+66660
+66661
+66662
+66663
+66664
+66665
+66666
+66667
+66668
+66669
+66670
+66671
+66672
+66673
+66674
+66675
+66676
+66677
+66678
+66679
+66680
+66681
+66682
+66683
+66684
+66685
+66686
+66687
+66688
+66689
+66690
+66691
+66692
+66693
+66694
+66695
+66696
+66697
+66698
+66699
+66700
+66701
+66702
+66703
+66704
+66705
+66706
+66707
+66708
+66709
+66710
+66711
+66712
+66713
+66714
+66715
+66716
+66717
+66718
+66719
+66720
+66721
+66722
+66723
+66724
+66725
+66726
+66727
+66728
+66729
+66730
+66731
+66732
+66733
+66734
+66735
+66736
+66737
+66738
+66739
+66740
+66741
+66742
+66743
+66744
+66745
+66746
+66747
+66748
+66749
+66750
+66751
+66752
+66753
+66754
+66755
+66756
+66757
+66758
+66759
+66760
+66761
+66762
+66763
+66764
+66765
+66766
+66767
+66768
+66769
+66770
+66771
+66772
+66773
+66774
+66775
+66776
+66777
+66778
+66779
+66780
+66781
+66782
+66783
+66784
+66785
+66786
+66787
+66788
+66789
+66790
+66791
+66792
+66793
+66794
+66795
+66796
+66797
+66798
+66799
+66800
+66801
+66802
+66803
+66804
+66805
+66806
+66807
+66808
+66809
+66810
+66811
+66812
+66813
+66814
+66815
+66816
+66817
+66818
+66819
+66820
+66821
+66822
+66823
+66824
+66825
+66826
+66827
+66828
+66829
+66830
+66831
+66832
+66833
+66834
+66835
+66836
+66837
+66838
+66839
+66840
+66841
+66842
+66843
+66844
+66845
+66846
+66847
+66848
+66849
+66850
+66851
+66852
+66853
+66854
+66855
+66856
+66857
+66858
+66859
+66860
+66861
+66862
+66863
+66864
+66865
+66866
+66867
+66868
+66869
+66870
+66871
+66872
+66873
+66874
+66875
+66876
+66877
+66878
+66879
+66880
+66881
+66882
+66883
+66884
+66885
+66886
+66887
+66888
+66889
+66890
+66891
+66892
+66893
+66894
+66895
+66896
+66897
+66898
+66899
+66900
+66901
+66902
+66903
+66904
+66905
+66906
+66907
+66908
+66909
+66910
+66911
+66912
+66913
+66914
+66915
+66916
+66917
+66918
+66919
+66920
+66921
+66922
+66923
+66924
+66925
+66926
+66927
+66928
+66929
+66930
+66931
+66932
+66933
+66934
+66935
+66936
+66937
+66938
+66939
+66940
+66941
+66942
+66943
+66944
+66945
+66946
+66947
+66948
+66949
+66950
+66951
+66952
+66953
+66954
+66955
+66956
+66957
+66958
+66959
+66960
+66961
+66962
+66963
+66964
+66965
+66966
+66967
+66968
+66969
+66970
+66971
+66972
+66973
+66974
+66975
+66976
+66977
+66978
+66979
+66980
+66981
+66982
+66983
+66984
+66985
+66986
+66987
+66988
+66989
+66990
+66991
+66992
+66993
+66994
+66995
+66996
+66997
+66998
+66999
+67000
+67001
+67002
+67003
+67004
+67005
+67006
+67007
+67008
+67009
+67010
+67011
+67012
+67013
+67014
+67015
+67016
+67017
+67018
+67019
+67020
+67021
+67022
+67023
+67024
+67025
+67026
+67027
+67028
+67029
+67030
+67031
+67032
+67033
+67034
+67035
+67036
+67037
+67038
+67039
+67040
+67041
+67042
+67043
+67044
+67045
+67046
+67047
+67048
+67049
+67050
+67051
+67052
+67053
+67054
+67055
+67056
+67057
+67058
+67059
+67060
+67061
+67062
+67063
+67064
+67065
+67066
+67067
+67068
+67069
+67070
+67071
+67072
+67073
+67074
+67075
+67076
+67077
+67078
+67079
+67080
+67081
+67082
+67083
+67084
+67085
+67086
+67087
+67088
+67089
+67090
+67091
+67092
+67093
+67094
+67095
+67096
+67097
+67098
+67099
+67100
+67101
+67102
+67103
+67104
+67105
+67106
+67107
+67108
+67109
+67110
+67111
+67112
+67113
+67114
+67115
+67116
+67117
+67118
+67119
+67120
+67121
+67122
+67123
+67124
+67125
+67126
+67127
+67128
+67129
+67130
+67131
+67132
+67133
+67134
+67135
+67136
+67137
+67138
+67139
+67140
+67141
+67142
+67143
+67144
+67145
+67146
+67147
+67148
+67149
+67150
+67151
+67152
+67153
+67154
+67155
+67156
+67157
+67158
+67159
+67160
+67161
+67162
+67163
+67164
+67165
+67166
+67167
+67168
+67169
+67170
+67171
+67172
+67173
+67174
+67175
+67176
+67177
+67178
+67179
+67180
+67181
+67182
+67183
+67184
+67185
+67186
+67187
+67188
+67189
+67190
+67191
+67192
+67193
+67194
+67195
+67196
+67197
+67198
+67199
+67200
+67201
+67202
+67203
+67204
+67205
+67206
+67207
+67208
+67209
+67210
+67211
+67212
+67213
+67214
+67215
+67216
+67217
+67218
+67219
+67220
+67221
+67222
+67223
+67224
+67225
+67226
+67227
+67228
+67229
+67230
+67231
+67232
+67233
+67234
+67235
+67236
+67237
+67238
+67239
+67240
+67241
+67242
+67243
+67244
+67245
+67246
+67247
+67248
+67249
+67250
+67251
+67252
+67253
+67254
+67255
+67256
+67257
+67258
+67259
+67260
+67261
+67262
+67263
+67264
+67265
+67266
+67267
+67268
+67269
+67270
+67271
+67272
+67273
+67274
+67275
+67276
+67277
+67278
+67279
+67280
+67281
+67282
+67283
+67284
+67285
+67286
+67287
+67288
+67289
+67290
+67291
+67292
+67293
+67294
+67295
+67296
+67297
+67298
+67299
+67300
+67301
+67302
+67303
+67304
+67305
+67306
+67307
+67308
+67309
+67310
+67311
+67312
+67313
+67314
+67315
+67316
+67317
+67318
+67319
+67320
+67321
+67322
+67323
+67324
+67325
+67326
+67327
+67328
+67329
+67330
+67331
+67332
+67333
+67334
+67335
+67336
+67337
+67338
+67339
+67340
+67341
+67342
+67343
+67344
+67345
+67346
+67347
+67348
+67349
+67350
+67351
+67352
+67353
+67354
+67355
+67356
+67357
+67358
+67359
+67360
+67361
+67362
+67363
+67364
+67365
+67366
+67367
+67368
+67369
+67370
+67371
+67372
+67373
+67374
+67375
+67376
+67377
+67378
+67379
+67380
+67381
+67382
+67383
+67384
+67385
+67386
+67387
+67388
+67389
+67390
+67391
+67392
+67393
+67394
+67395
+67396
+67397
+67398
+67399
+67400
+67401
+67402
+67403
+67404
+67405
+67406
+67407
+67408
+67409
+67410
+67411
+67412
+67413
+67414
+67415
+67416
+67417
+67418
+67419
+67420
+67421
+67422
+67423
+67424
+67425
+67426
+67427
+67428
+67429
+67430
+67431
+67432
+67433
+67434
+67435
+67436
+67437
+67438
+67439
+67440
+67441
+67442
+67443
+67444
+67445
+67446
+67447
+67448
+67449
+67450
+67451
+67452
+67453
+67454
+67455
+67456
+67457
+67458
+67459
+67460
+67461
+67462
+67463
+67464
+67465
+67466
+67467
+67468
+67469
+67470
+67471
+67472
+67473
+67474
+67475
+67476
+67477
+67478
+67479
+67480
+67481
+67482
+67483
+67484
+67485
+67486
+67487
+67488
+67489
+67490
+67491
+67492
+67493
+67494
+67495
+67496
+67497
+67498
+67499
+67500
+67501
+67502
+67503
+67504
+67505
+67506
+67507
+67508
+67509
+67510
+67511
+67512
+67513
+67514
+67515
+67516
+67517
+67518
+67519
+67520
+67521
+67522
+67523
+67524
+67525
+67526
+67527
+67528
+67529
+67530
+67531
+67532
+67533
+67534
+67535
+67536
+67537
+67538
+67539
+67540
+67541
+67542
+67543
+67544
+67545
+67546
+67547
+67548
+67549
+67550
+67551
+67552
+67553
+67554
+67555
+67556
+67557
+67558
+67559
+67560
+67561
+67562
+67563
+67564
+67565
+67566
+67567
+67568
+67569
+67570
+67571
+67572
+67573
+67574
+67575
+67576
+67577
+67578
+67579
+67580
+67581
+67582
+67583
+67584
+67585
+67586
+67587
+67588
+67589
+67590
+67591
+67592
+67593
+67594
+67595
+67596
+67597
+67598
+67599
+67600
+67601
+67602
+67603
+67604
+67605
+67606
+67607
+67608
+67609
+67610
+67611
+67612
+67613
+67614
+67615
+67616
+67617
+67618
+67619
+67620
+67621
+67622
+67623
+67624
+67625
+67626
+67627
+67628
+67629
+67630
+67631
+67632
+67633
+67634
+67635
+67636
+67637
+67638
+67639
+67640
+67641
+67642
+67643
+67644
+67645
+67646
+67647
+67648
+67649
+67650
+67651
+67652
+67653
+67654
+67655
+67656
+67657
+67658
+67659
+67660
+67661
+67662
+67663
+67664
+67665
+67666
+67667
+67668
+67669
+67670
+67671
+67672
+67673
+67674
+67675
+67676
+67677
+67678
+67679
+67680
+67681
+67682
+67683
+67684
+67685
+67686
+67687
+67688
+67689
+67690
+67691
+67692
+67693
+67694
+67695
+67696
+67697
+67698
+67699
+67700
+67701
+67702
+67703
+67704
+67705
+67706
+67707
+67708
+67709
+67710
+67711
+67712
+67713
+67714
+67715
+67716
+67717
+67718
+67719
+67720
+67721
+67722
+67723
+67724
+67725
+67726
+67727
+67728
+67729
+67730
+67731
+67732
+67733
+67734
+67735
+67736
+67737
+67738
+67739
+67740
+67741
+67742
+67743
+67744
+67745
+67746
+67747
+67748
+67749
+67750
+67751
+67752
+67753
+67754
+67755
+67756
+67757
+67758
+67759
+67760
+67761
+67762
+67763
+67764
+67765
+67766
+67767
+67768
+67769
+67770
+67771
+67772
+67773
+67774
+67775
+67776
+67777
+67778
+67779
+67780
+67781
+67782
+67783
+67784
+67785
+67786
+67787
+67788
+67789
+67790
+67791
+67792
+67793
+67794
+67795
+67796
+67797
+67798
+67799
+67800
+67801
+67802
+67803
+67804
+67805
+67806
+67807
+67808
+67809
+67810
+67811
+67812
+67813
+67814
+67815
+67816
+67817
+67818
+67819
+67820
+67821
+67822
+67823
+67824
+67825
+67826
+67827
+67828
+67829
+67830
+67831
+67832
+67833
+67834
+67835
+67836
+67837
+67838
+67839
+67840
+67841
+67842
+67843
+67844
+67845
+67846
+67847
+67848
+67849
+67850
+67851
+67852
+67853
+67854
+67855
+67856
+67857
+67858
+67859
+67860
+67861
+67862
+67863
+67864
+67865
+67866
+67867
+67868
+67869
+67870
+67871
+67872
+67873
+67874
+67875
+67876
+67877
+67878
+67879
+67880
+67881
+67882
+67883
+67884
+67885
+67886
+67887
+67888
+67889
+67890
+67891
+67892
+67893
+67894
+67895
+67896
+67897
+67898
+67899
+67900
+67901
+67902
+67903
+67904
+67905
+67906
+67907
+67908
+67909
+67910
+67911
+67912
+67913
+67914
+67915
+67916
+67917
+67918
+67919
+67920
+67921
+67922
+67923
+67924
+67925
+67926
+67927
+67928
+67929
+67930
+67931
+67932
+67933
+67934
+67935
+67936
+67937
+67938
+67939
+67940
+67941
+67942
+67943
+67944
+67945
+67946
+67947
+67948
+67949
+67950
+67951
+67952
+67953
+67954
+67955
+67956
+67957
+67958
+67959
+67960
+67961
+67962
+67963
+67964
+67965
+67966
+67967
+67968
+67969
+67970
+67971
+67972
+67973
+67974
+67975
+67976
+67977
+67978
+67979
+67980
+67981
+67982
+67983
+67984
+67985
+67986
+67987
+67988
+67989
+67990
+67991
+67992
+67993
+67994
+67995
+67996
+67997
+67998
+67999
+68000
+68001
+68002
+68003
+68004
+68005
+68006
+68007
+68008
+68009
+68010
+68011
+68012
+68013
+68014
+68015
+68016
+68017
+68018
+68019
+68020
+68021
+68022
+68023
+68024
+68025
+68026
+68027
+68028
+68029
+68030
+68031
+68032
+68033
+68034
+68035
+68036
+68037
+68038
+68039
+68040
+68041
+68042
+68043
+68044
+68045
+68046
+68047
+68048
+68049
+68050
+68051
+68052
+68053
+68054
+68055
+68056
+68057
+68058
+68059
+68060
+68061
+68062
+68063
+68064
+68065
+68066
+68067
+68068
+68069
+68070
+68071
+68072
+68073
+68074
+68075
+68076
+68077
+68078
+68079
+68080
+68081
+68082
+68083
+68084
+68085
+68086
+68087
+68088
+68089
+68090
+68091
+68092
+68093
+68094
+68095
+68096
+68097
+68098
+68099
+68100
+68101
+68102
+68103
+68104
+68105
+68106
+68107
+68108
+68109
+68110
+68111
+68112
+68113
+68114
+68115
+68116
+68117
+68118
+68119
+68120
+68121
+68122
+68123
+68124
+68125
+68126
+68127
+68128
+68129
+68130
+68131
+68132
+68133
+68134
+68135
+68136
+68137
+68138
+68139
+68140
+68141
+68142
+68143
+68144
+68145
+68146
+68147
+68148
+68149
+68150
+68151
+68152
+68153
+68154
+68155
+68156
+68157
+68158
+68159
+68160
+68161
+68162
+68163
+68164
+68165
+68166
+68167
+68168
+68169
+68170
+68171
+68172
+68173
+68174
+68175
+68176
+68177
+68178
+68179
+68180
+68181
+68182
+68183
+68184
+68185
+68186
+68187
+68188
+68189
+68190
+68191
+68192
+68193
+68194
+68195
+68196
+68197
+68198
+68199
+68200
+68201
+68202
+68203
+68204
+68205
+68206
+68207
+68208
+68209
+68210
+68211
+68212
+68213
+68214
+68215
+68216
+68217
+68218
+68219
+68220
+68221
+68222
+68223
+68224
+68225
+68226
+68227
+68228
+68229
+68230
+68231
+68232
+68233
+68234
+68235
+68236
+68237
+68238
+68239
+68240
+68241
+68242
+68243
+68244
+68245
+68246
+68247
+68248
+68249
+68250
+68251
+68252
+68253
+68254
+68255
+68256
+68257
+68258
+68259
+68260
+68261
+68262
+68263
+68264
+68265
+68266
+68267
+68268
+68269
+68270
+68271
+68272
+68273
+68274
+68275
+68276
+68277
+68278
+68279
+68280
+68281
+68282
+68283
+68284
+68285
+68286
+68287
+68288
+68289
+68290
+68291
+68292
+68293
+68294
+68295
+68296
+68297
+68298
+68299
+68300
+68301
+68302
+68303
+68304
+68305
+68306
+68307
+68308
+68309
+68310
+68311
+68312
+68313
+68314
+68315
+68316
+68317
+68318
+68319
+68320
+68321
+68322
+68323
+68324
+68325
+68326
+68327
+68328
+68329
+68330
+68331
+68332
+68333
+68334
+68335
+68336
+68337
+68338
+68339
+68340
+68341
+68342
+68343
+68344
+68345
+68346
+68347
+68348
+68349
+68350
+68351
+68352
+68353
+68354
+68355
+68356
+68357
+68358
+68359
+68360
+68361
+68362
+68363
+68364
+68365
+68366
+68367
+68368
+68369
+68370
+68371
+68372
+68373
+68374
+68375
+68376
+68377
+68378
+68379
+68380
+68381
+68382
+68383
+68384
+68385
+68386
+68387
+68388
+68389
+68390
+68391
+68392
+68393
+68394
+68395
+68396
+68397
+68398
+68399
+68400
+68401
+68402
+68403
+68404
+68405
+68406
+68407
+68408
+68409
+68410
+68411
+68412
+68413
+68414
+68415
+68416
+68417
+68418
+68419
+68420
+68421
+68422
+68423
+68424
+68425
+68426
+68427
+68428
+68429
+68430
+68431
+68432
+68433
+68434
+68435
+68436
+68437
+68438
+68439
+68440
+68441
+68442
+68443
+68444
+68445
+68446
+68447
+68448
+68449
+68450
+68451
+68452
+68453
+68454
+68455
+68456
+68457
+68458
+68459
+68460
+68461
+68462
+68463
+68464
+68465
+68466
+68467
+68468
+68469
+68470
+68471
+68472
+68473
+68474
+68475
+68476
+68477
+68478
+68479
+68480
+68481
+68482
+68483
+68484
+68485
+68486
+68487
+68488
+68489
+68490
+68491
+68492
+68493
+68494
+68495
+68496
+68497
+68498
+68499
+68500
+68501
+68502
+68503
+68504
+68505
+68506
+68507
+68508
+68509
+68510
+68511
+68512
+68513
+68514
+68515
+68516
+68517
+68518
+68519
+68520
+68521
+68522
+68523
+68524
+68525
+68526
+68527
+68528
+68529
+68530
+68531
+68532
+68533
+68534
+68535
+68536
+68537
+68538
+68539
+68540
+68541
+68542
+68543
+68544
+68545
+68546
+68547
+68548
+68549
+68550
+68551
+68552
+68553
+68554
+68555
+68556
+68557
+68558
+68559
+68560
+68561
+68562
+68563
+68564
+68565
+68566
+68567
+68568
+68569
+68570
+68571
+68572
+68573
+68574
+68575
+68576
+68577
+68578
+68579
+68580
+68581
+68582
+68583
+68584
+68585
+68586
+68587
+68588
+68589
+68590
+68591
+68592
+68593
+68594
+68595
+68596
+68597
+68598
+68599
+68600
+68601
+68602
+68603
+68604
+68605
+68606
+68607
+68608
+68609
+68610
+68611
+68612
+68613
+68614
+68615
+68616
+68617
+68618
+68619
+68620
+68621
+68622
+68623
+68624
+68625
+68626
+68627
+68628
+68629
+68630
+68631
+68632
+68633
+68634
+68635
+68636
+68637
+68638
+68639
+68640
+68641
+68642
+68643
+68644
+68645
+68646
+68647
+68648
+68649
+68650
+68651
+68652
+68653
+68654
+68655
+68656
+68657
+68658
+68659
+68660
+68661
+68662
+68663
+68664
+68665
+68666
+68667
+68668
+68669
+68670
+68671
+68672
+68673
+68674
+68675
+68676
+68677
+68678
+68679
+68680
+68681
+68682
+68683
+68684
+68685
+68686
+68687
+68688
+68689
+68690
+68691
+68692
+68693
+68694
+68695
+68696
+68697
+68698
+68699
+68700
+68701
+68702
+68703
+68704
+68705
+68706
+68707
+68708
+68709
+68710
+68711
+68712
+68713
+68714
+68715
+68716
+68717
+68718
+68719
+68720
+68721
+68722
+68723
+68724
+68725
+68726
+68727
+68728
+68729
+68730
+68731
+68732
+68733
+68734
+68735
+68736
+68737
+68738
+68739
+68740
+68741
+68742
+68743
+68744
+68745
+68746
+68747
+68748
+68749
+68750
+68751
+68752
+68753
+68754
+68755
+68756
+68757
+68758
+68759
+68760
+68761
+68762
+68763
+68764
+68765
+68766
+68767
+68768
+68769
+68770
+68771
+68772
+68773
+68774
+68775
+68776
+68777
+68778
+68779
+68780
+68781
+68782
+68783
+68784
+68785
+68786
+68787
+68788
+68789
+68790
+68791
+68792
+68793
+68794
+68795
+68796
+68797
+68798
+68799
+68800
+68801
+68802
+68803
+68804
+68805
+68806
+68807
+68808
+68809
+68810
+68811
+68812
+68813
+68814
+68815
+68816
+68817
+68818
+68819
+68820
+68821
+68822
+68823
+68824
+68825
+68826
+68827
+68828
+68829
+68830
+68831
+68832
+68833
+68834
+68835
+68836
+68837
+68838
+68839
+68840
+68841
+68842
+68843
+68844
+68845
+68846
+68847
+68848
+68849
+68850
+68851
+68852
+68853
+68854
+68855
+68856
+68857
+68858
+68859
+68860
+68861
+68862
+68863
+68864
+68865
+68866
+68867
+68868
+68869
+68870
+68871
+68872
+68873
+68874
+68875
+68876
+68877
+68878
+68879
+68880
+68881
+68882
+68883
+68884
+68885
+68886
+68887
+68888
+68889
+68890
+68891
+68892
+68893
+68894
+68895
+68896
+68897
+68898
+68899
+68900
+68901
+68902
+68903
+68904
+68905
+68906
+68907
+68908
+68909
+68910
+68911
+68912
+68913
+68914
+68915
+68916
+68917
+68918
+68919
+68920
+68921
+68922
+68923
+68924
+68925
+68926
+68927
+68928
+68929
+68930
+68931
+68932
+68933
+68934
+68935
+68936
+68937
+68938
+68939
+68940
+68941
+68942
+68943
+68944
+68945
+68946
+68947
+68948
+68949
+68950
+68951
+68952
+68953
+68954
+68955
+68956
+68957
+68958
+68959
+68960
+68961
+68962
+68963
+68964
+68965
+68966
+68967
+68968
+68969
+68970
+68971
+68972
+68973
+68974
+68975
+68976
+68977
+68978
+68979
+68980
+68981
+68982
+68983
+68984
+68985
+68986
+68987
+68988
+68989
+68990
+68991
+68992
+68993
+68994
+68995
+68996
+68997
+68998
+68999
+69000
+69001
+69002
+69003
+69004
+69005
+69006
+69007
+69008
+69009
+69010
+69011
+69012
+69013
+69014
+69015
+69016
+69017
+69018
+69019
+69020
+69021
+69022
+69023
+69024
+69025
+69026
+69027
+69028
+69029
+69030
+69031
+69032
+69033
+69034
+69035
+69036
+69037
+69038
+69039
+69040
+69041
+69042
+69043
+69044
+69045
+69046
+69047
+69048
+69049
+69050
+69051
+69052
+69053
+69054
+69055
+69056
+69057
+69058
+69059
+69060
+69061
+69062
+69063
+69064
+69065
+69066
+69067
+69068
+69069
+69070
+69071
+69072
+69073
+69074
+69075
+69076
+69077
+69078
+69079
+69080
+69081
+69082
+69083
+69084
+69085
+69086
+69087
+69088
+69089
+69090
+69091
+69092
+69093
+69094
+69095
+69096
+69097
+69098
+69099
+69100
+69101
+69102
+69103
+69104
+69105
+69106
+69107
+69108
+69109
+69110
+69111
+69112
+69113
+69114
+69115
+69116
+69117
+69118
+69119
+69120
+69121
+69122
+69123
+69124
+69125
+69126
+69127
+69128
+69129
+69130
+69131
+69132
+69133
+69134
+69135
+69136
+69137
+69138
+69139
+69140
+69141
+69142
+69143
+69144
+69145
+69146
+69147
+69148
+69149
+69150
+69151
+69152
+69153
+69154
+69155
+69156
+69157
+69158
+69159
+69160
+69161
+69162
+69163
+69164
+69165
+69166
+69167
+69168
+69169
+69170
+69171
+69172
+69173
+69174
+69175
+69176
+69177
+69178
+69179
+69180
+69181
+69182
+69183
+69184
+69185
+69186
+69187
+69188
+69189
+69190
+69191
+69192
+69193
+69194
+69195
+69196
+69197
+69198
+69199
+69200
+69201
+69202
+69203
+69204
+69205
+69206
+69207
+69208
+69209
+69210
+69211
+69212
+69213
+69214
+69215
+69216
+69217
+69218
+69219
+69220
+69221
+69222
+69223
+69224
+69225
+69226
+69227
+69228
+69229
+69230
+69231
+69232
+69233
+69234
+69235
+69236
+69237
+69238
+69239
+69240
+69241
+69242
+69243
+69244
+69245
+69246
+69247
+69248
+69249
+69250
+69251
+69252
+69253
+69254
+69255
+69256
+69257
+69258
+69259
+69260
+69261
+69262
+69263
+69264
+69265
+69266
+69267
+69268
+69269
+69270
+69271
+69272
+69273
+69274
+69275
+69276
+69277
+69278
+69279
+69280
+69281
+69282
+69283
+69284
+69285
+69286
+69287
+69288
+69289
+69290
+69291
+69292
+69293
+69294
+69295
+69296
+69297
+69298
+69299
+69300
+69301
+69302
+69303
+69304
+69305
+69306
+69307
+69308
+69309
+69310
+69311
+69312
+69313
+69314
+69315
+69316
+69317
+69318
+69319
+69320
+69321
+69322
+69323
+69324
+69325
+69326
+69327
+69328
+69329
+69330
+69331
+69332
+69333
+69334
+69335
+69336
+69337
+69338
+69339
+69340
+69341
+69342
+69343
+69344
+69345
+69346
+69347
+69348
+69349
+69350
+69351
+69352
+69353
+69354
+69355
+69356
+69357
+69358
+69359
+69360
+69361
+69362
+69363
+69364
+69365
+69366
+69367
+69368
+69369
+69370
+69371
+69372
+69373
+69374
+69375
+69376
+69377
+69378
+69379
+69380
+69381
+69382
+69383
+69384
+69385
+69386
+69387
+69388
+69389
+69390
+69391
+69392
+69393
+69394
+69395
+69396
+69397
+69398
+69399
+69400
+69401
+69402
+69403
+69404
+69405
+69406
+69407
+69408
+69409
+69410
+69411
+69412
+69413
+69414
+69415
+69416
+69417
+69418
+69419
+69420
+69421
+69422
+69423
+69424
+69425
+69426
+69427
+69428
+69429
+69430
+69431
+69432
+69433
+69434
+69435
+69436
+69437
+69438
+69439
+69440
+69441
+69442
+69443
+69444
+69445
+69446
+69447
+69448
+69449
+69450
+69451
+69452
+69453
+69454
+69455
+69456
+69457
+69458
+69459
+69460
+69461
+69462
+69463
+69464
+69465
+69466
+69467
+69468
+69469
+69470
+69471
+69472
+69473
+69474
+69475
+69476
+69477
+69478
+69479
+69480
+69481
+69482
+69483
+69484
+69485
+69486
+69487
+69488
+69489
+69490
+69491
+69492
+69493
+69494
+69495
+69496
+69497
+69498
+69499
+69500
+69501
+69502
+69503
+69504
+69505
+69506
+69507
+69508
+69509
+69510
+69511
+69512
+69513
+69514
+69515
+69516
+69517
+69518
+69519
+69520
+69521
+69522
+69523
+69524
+69525
+69526
+69527
+69528
+69529
+69530
+69531
+69532
+69533
+69534
+69535
+69536
+69537
+69538
+69539
+69540
+69541
+69542
+69543
+69544
+69545
+69546
+69547
+69548
+69549
+69550
+69551
+69552
+69553
+69554
+69555
+69556
+69557
+69558
+69559
+69560
+69561
+69562
+69563
+69564
+69565
+69566
+69567
+69568
+69569
+69570
+69571
+69572
+69573
+69574
+69575
+69576
+69577
+69578
+69579
+69580
+69581
+69582
+69583
+69584
+69585
+69586
+69587
+69588
+69589
+69590
+69591
+69592
+69593
+69594
+69595
+69596
+69597
+69598
+69599
+69600
+69601
+69602
+69603
+69604
+69605
+69606
+69607
+69608
+69609
+69610
+69611
+69612
+69613
+69614
+69615
+69616
+69617
+69618
+69619
+69620
+69621
+69622
+69623
+69624
+69625
+69626
+69627
+69628
+69629
+69630
+69631
+69632
+69633
+69634
+69635
+69636
+69637
+69638
+69639
+69640
+69641
+69642
+69643
+69644
+69645
+69646
+69647
+69648
+69649
+69650
+69651
+69652
+69653
+69654
+69655
+69656
+69657
+69658
+69659
+69660
+69661
+69662
+69663
+69664
+69665
+69666
+69667
+69668
+69669
+69670
+69671
+69672
+69673
+69674
+69675
+69676
+69677
+69678
+69679
+69680
+69681
+69682
+69683
+69684
+69685
+69686
+69687
+69688
+69689
+69690
+69691
+69692
+69693
+69694
+69695
+69696
+69697
+69698
+69699
+69700
+69701
+69702
+69703
+69704
+69705
+69706
+69707
+69708
+69709
+69710
+69711
+69712
+69713
+69714
+69715
+69716
+69717
+69718
+69719
+69720
+69721
+69722
+69723
+69724
+69725
+69726
+69727
+69728
+69729
+69730
+69731
+69732
+69733
+69734
+69735
+69736
+69737
+69738
+69739
+69740
+69741
+69742
+69743
+69744
+69745
+69746
+69747
+69748
+69749
+69750
+69751
+69752
+69753
+69754
+69755
+69756
+69757
+69758
+69759
+69760
+69761
+69762
+69763
+69764
+69765
+69766
+69767
+69768
+69769
+69770
+69771
+69772
+69773
+69774
+69775
+69776
+69777
+69778
+69779
+69780
+69781
+69782
+69783
+69784
+69785
+69786
+69787
+69788
+69789
+69790
+69791
+69792
+69793
+69794
+69795
+69796
+69797
+69798
+69799
+69800
+69801
+69802
+69803
+69804
+69805
+69806
+69807
+69808
+69809
+69810
+69811
+69812
+69813
+69814
+69815
+69816
+69817
+69818
+69819
+69820
+69821
+69822
+69823
+69824
+69825
+69826
+69827
+69828
+69829
+69830
+69831
+69832
+69833
+69834
+69835
+69836
+69837
+69838
+69839
+69840
+69841
+69842
+69843
+69844
+69845
+69846
+69847
+69848
+69849
+69850
+69851
+69852
+69853
+69854
+69855
+69856
+69857
+69858
+69859
+69860
+69861
+69862
+69863
+69864
+69865
+69866
+69867
+69868
+69869
+69870
+69871
+69872
+69873
+69874
+69875
+69876
+69877
+69878
+69879
+69880
+69881
+69882
+69883
+69884
+69885
+69886
+69887
+69888
+69889
+69890
+69891
+69892
+69893
+69894
+69895
+69896
+69897
+69898
+69899
+69900
+69901
+69902
+69903
+69904
+69905
+69906
+69907
+69908
+69909
+69910
+69911
+69912
+69913
+69914
+69915
+69916
+69917
+69918
+69919
+69920
+69921
+69922
+69923
+69924
+69925
+69926
+69927
+69928
+69929
+69930
+69931
+69932
+69933
+69934
+69935
+69936
+69937
+69938
+69939
+69940
+69941
+69942
+69943
+69944
+69945
+69946
+69947
+69948
+69949
+69950
+69951
+69952
+69953
+69954
+69955
+69956
+69957
+69958
+69959
+69960
+69961
+69962
+69963
+69964
+69965
+69966
+69967
+69968
+69969
+69970
+69971
+69972
+69973
+69974
+69975
+69976
+69977
+69978
+69979
+69980
+69981
+69982
+69983
+69984
+69985
+69986
+69987
+69988
+69989
+69990
+69991
+69992
+69993
+69994
+69995
+69996
+69997
+69998
+69999
+70000
+70001
+70002
+70003
+70004
+70005
+70006
+70007
+70008
+70009
+70010
+70011
+70012
+70013
+70014
+70015
+70016
+70017
+70018
+70019
+70020
+70021
+70022
+70023
+70024
+70025
+70026
+70027
+70028
+70029
+70030
+70031
+70032
+70033
+70034
+70035
+70036
+70037
+70038
+70039
+70040
+70041
+70042
+70043
+70044
+70045
+70046
+70047
+70048
+70049
+70050
+70051
+70052
+70053
+70054
+70055
+70056
+70057
+70058
+70059
+70060
+70061
+70062
+70063
+70064
+70065
+70066
+70067
+70068
+70069
+70070
+70071
+70072
+70073
+70074
+70075
+70076
+70077
+70078
+70079
+70080
+70081
+70082
+70083
+70084
+70085
+70086
+70087
+70088
+70089
+70090
+70091
+70092
+70093
+70094
+70095
+70096
+70097
+70098
+70099
+70100
+70101
+70102
+70103
+70104
+70105
+70106
+70107
+70108
+70109
+70110
+70111
+70112
+70113
+70114
+70115
+70116
+70117
+70118
+70119
+70120
+70121
+70122
+70123
+70124
+70125
+70126
+70127
+70128
+70129
+70130
+70131
+70132
+70133
+70134
+70135
+70136
+70137
+70138
+70139
+70140
+70141
+70142
+70143
+70144
+70145
+70146
+70147
+70148
+70149
+70150
+70151
+70152
+70153
+70154
+70155
+70156
+70157
+70158
+70159
+70160
+70161
+70162
+70163
+70164
+70165
+70166
+70167
+70168
+70169
+70170
+70171
+70172
+70173
+70174
+70175
+70176
+70177
+70178
+70179
+70180
+70181
+70182
+70183
+70184
+70185
+70186
+70187
+70188
+70189
+70190
+70191
+70192
+70193
+70194
+70195
+70196
+70197
+70198
+70199
+70200
+70201
+70202
+70203
+70204
+70205
+70206
+70207
+70208
+70209
+70210
+70211
+70212
+70213
+70214
+70215
+70216
+70217
+70218
+70219
+70220
+70221
+70222
+70223
+70224
+70225
+70226
+70227
+70228
+70229
+70230
+70231
+70232
+70233
+70234
+70235
+70236
+70237
+70238
+70239
+70240
+70241
+70242
+70243
+70244
+70245
+70246
+70247
+70248
+70249
+70250
+70251
+70252
+70253
+70254
+70255
+70256
+70257
+70258
+70259
+70260
+70261
+70262
+70263
+70264
+70265
+70266
+70267
+70268
+70269
+70270
+70271
+70272
+70273
+70274
+70275
+70276
+70277
+70278
+70279
+70280
+70281
+70282
+70283
+70284
+70285
+70286
+70287
+70288
+70289
+70290
+70291
+70292
+70293
+70294
+70295
+70296
+70297
+70298
+70299
+70300
+70301
+70302
+70303
+70304
+70305
+70306
+70307
+70308
+70309
+70310
+70311
+70312
+70313
+70314
+70315
+70316
+70317
+70318
+70319
+70320
+70321
+70322
+70323
+70324
+70325
+70326
+70327
+70328
+70329
+70330
+70331
+70332
+70333
+70334
+70335
+70336
+70337
+70338
+70339
+70340
+70341
+70342
+70343
+70344
+70345
+70346
+70347
+70348
+70349
+70350
+70351
+70352
+70353
+70354
+70355
+70356
+70357
+70358
+70359
+70360
+70361
+70362
+70363
+70364
+70365
+70366
+70367
+70368
+70369
+70370
+70371
+70372
+70373
+70374
+70375
+70376
+70377
+70378
+70379
+70380
+70381
+70382
+70383
+70384
+70385
+70386
+70387
+70388
+70389
+70390
+70391
+70392
+70393
+70394
+70395
+70396
+70397
+70398
+70399
+70400
+70401
+70402
+70403
+70404
+70405
+70406
+70407
+70408
+70409
+70410
+70411
+70412
+70413
+70414
+70415
+70416
+70417
+70418
+70419
+70420
+70421
+70422
+70423
+70424
+70425
+70426
+70427
+70428
+70429
+70430
+70431
+70432
+70433
+70434
+70435
+70436
+70437
+70438
+70439
+70440
+70441
+70442
+70443
+70444
+70445
+70446
+70447
+70448
+70449
+70450
+70451
+70452
+70453
+70454
+70455
+70456
+70457
+70458
+70459
+70460
+70461
+70462
+70463
+70464
+70465
+70466
+70467
+70468
+70469
+70470
+70471
+70472
+70473
+70474
+70475
+70476
+70477
+70478
+70479
+70480
+70481
+70482
+70483
+70484
+70485
+70486
+70487
+70488
+70489
+70490
+70491
+70492
+70493
+70494
+70495
+70496
+70497
+70498
+70499
+70500
+70501
+70502
+70503
+70504
+70505
+70506
+70507
+70508
+70509
+70510
+70511
+70512
+70513
+70514
+70515
+70516
+70517
+70518
+70519
+70520
+70521
+70522
+70523
+70524
+70525
+70526
+70527
+70528
+70529
+70530
+70531
+70532
+70533
+70534
+70535
+70536
+70537
+70538
+70539
+70540
+70541
+70542
+70543
+70544
+70545
+70546
+70547
+70548
+70549
+70550
+70551
+70552
+70553
+70554
+70555
+70556
+70557
+70558
+70559
+70560
+70561
+70562
+70563
+70564
+70565
+70566
+70567
+70568
+70569
+70570
+70571
+70572
+70573
+70574
+70575
+70576
+70577
+70578
+70579
+70580
+70581
+70582
+70583
+70584
+70585
+70586
+70587
+70588
+70589
+70590
+70591
+70592
+70593
+70594
+70595
+70596
+70597
+70598
+70599
+70600
+70601
+70602
+70603
+70604
+70605
+70606
+70607
+70608
+70609
+70610
+70611
+70612
+70613
+70614
+70615
+70616
+70617
+70618
+70619
+70620
+70621
+70622
+70623
+70624
+70625
+70626
+70627
+70628
+70629
+70630
+70631
+70632
+70633
+70634
+70635
+70636
+70637
+70638
+70639
+70640
+70641
+70642
+70643
+70644
+70645
+70646
+70647
+70648
+70649
+70650
+70651
+70652
+70653
+70654
+70655
+70656
+70657
+70658
+70659
+70660
+70661
+70662
+70663
+70664
+70665
+70666
+70667
+70668
+70669
+70670
+70671
+70672
+70673
+70674
+70675
+70676
+70677
+70678
+70679
+70680
+70681
+70682
+70683
+70684
+70685
+70686
+70687
+70688
+70689
+70690
+70691
+70692
+70693
+70694
+70695
+70696
+70697
+70698
+70699
+70700
+70701
+70702
+70703
+70704
+70705
+70706
+70707
+70708
+70709
+70710
+70711
+70712
+70713
+70714
+70715
+70716
+70717
+70718
+70719
+70720
+70721
+70722
+70723
+70724
+70725
+70726
+70727
+70728
+70729
+70730
+70731
+70732
+70733
+70734
+70735
+70736
+70737
+70738
+70739
+70740
+70741
+70742
+70743
+70744
+70745
+70746
+70747
+70748
+70749
+70750
+70751
+70752
+70753
+70754
+70755
+70756
+70757
+70758
+70759
+70760
+70761
+70762
+70763
+70764
+70765
+70766
+70767
+70768
+70769
+70770
+70771
+70772
+70773
+70774
+70775
+70776
+70777
+70778
+70779
+70780
+70781
+70782
+70783
+70784
+70785
+70786
+70787
+70788
+70789
+70790
+70791
+70792
+70793
+70794
+70795
+70796
+70797
+70798
+70799
+70800
+70801
+70802
+70803
+70804
+70805
+70806
+70807
+70808
+70809
+70810
+70811
+70812
+70813
+70814
+70815
+70816
+70817
+70818
+70819
+70820
+70821
+70822
+70823
+70824
+70825
+70826
+70827
+70828
+70829
+70830
+70831
+70832
+70833
+70834
+70835
+70836
+70837
+70838
+70839
+70840
+70841
+70842
+70843
+70844
+70845
+70846
+70847
+70848
+70849
+70850
+70851
+70852
+70853
+70854
+70855
+70856
+70857
+70858
+70859
+70860
+70861
+70862
+70863
+70864
+70865
+70866
+70867
+70868
+70869
+70870
+70871
+70872
+70873
+70874
+70875
+70876
+70877
+70878
+70879
+70880
+70881
+70882
+70883
+70884
+70885
+70886
+70887
+70888
+70889
+70890
+70891
+70892
+70893
+70894
+70895
+70896
+70897
+70898
+70899
+70900
+70901
+70902
+70903
+70904
+70905
+70906
+70907
+70908
+70909
+70910
+70911
+70912
+70913
+70914
+70915
+70916
+70917
+70918
+70919
+70920
+70921
+70922
+70923
+70924
+70925
+70926
+70927
+70928
+70929
+70930
+70931
+70932
+70933
+70934
+70935
+70936
+70937
+70938
+70939
+70940
+70941
+70942
+70943
+70944
+70945
+70946
+70947
+70948
+70949
+70950
+70951
+70952
+70953
+70954
+70955
+70956
+70957
+70958
+70959
+70960
+70961
+70962
+70963
+70964
+70965
+70966
+70967
+70968
+70969
+70970
+70971
+70972
+70973
+70974
+70975
+70976
+70977
+70978
+70979
+70980
+70981
+70982
+70983
+70984
+70985
+70986
+70987
+70988
+70989
+70990
+70991
+70992
+70993
+70994
+70995
+70996
+70997
+70998
+70999
+71000
+71001
+71002
+71003
+71004
+71005
+71006
+71007
+71008
+71009
+71010
+71011
+71012
+71013
+71014
+71015
+71016
+71017
+71018
+71019
+71020
+71021
+71022
+71023
+71024
+71025
+71026
+71027
+71028
+71029
+71030
+71031
+71032
+71033
+71034
+71035
+71036
+71037
+71038
+71039
+71040
+71041
+71042
+71043
+71044
+71045
+71046
+71047
+71048
+71049
+71050
+71051
+71052
+71053
+71054
+71055
+71056
+71057
+71058
+71059
+71060
+71061
+71062
+71063
+71064
+71065
+71066
+71067
+71068
+71069
+71070
+71071
+71072
+71073
+71074
+71075
+71076
+71077
+71078
+71079
+71080
+71081
+71082
+71083
+71084
+71085
+71086
+71087
+71088
+71089
+71090
+71091
+71092
+71093
+71094
+71095
+71096
+71097
+71098
+71099
+71100
+71101
+71102
+71103
+71104
+71105
+71106
+71107
+71108
+71109
+71110
+71111
+71112
+71113
+71114
+71115
+71116
+71117
+71118
+71119
+71120
+71121
+71122
+71123
+71124
+71125
+71126
+71127
+71128
+71129
+71130
+71131
+71132
+71133
+71134
+71135
+71136
+71137
+71138
+71139
+71140
+71141
+71142
+71143
+71144
+71145
+71146
+71147
+71148
+71149
+71150
+71151
+71152
+71153
+71154
+71155
+71156
+71157
+71158
+71159
+71160
+71161
+71162
+71163
+71164
+71165
+71166
+71167
+71168
+71169
+71170
+71171
+71172
+71173
+71174
+71175
+71176
+71177
+71178
+71179
+71180
+71181
+71182
+71183
+71184
+71185
+71186
+71187
+71188
+71189
+71190
+71191
+71192
+71193
+71194
+71195
+71196
+71197
+71198
+71199
+71200
+71201
+71202
+71203
+71204
+71205
+71206
+71207
+71208
+71209
+71210
+71211
+71212
+71213
+71214
+71215
+71216
+71217
+71218
+71219
+71220
+71221
+71222
+71223
+71224
+71225
+71226
+71227
+71228
+71229
+71230
+71231
+71232
+71233
+71234
+71235
+71236
+71237
+71238
+71239
+71240
+71241
+71242
+71243
+71244
+71245
+71246
+71247
+71248
+71249
+71250
+71251
+71252
+71253
+71254
+71255
+71256
+71257
+71258
+71259
+71260
+71261
+71262
+71263
+71264
+71265
+71266
+71267
+71268
+71269
+71270
+71271
+71272
+71273
+71274
+71275
+71276
+71277
+71278
+71279
+71280
+71281
+71282
+71283
+71284
+71285
+71286
+71287
+71288
+71289
+71290
+71291
+71292
+71293
+71294
+71295
+71296
+71297
+71298
+71299
+71300
+71301
+71302
+71303
+71304
+71305
+71306
+71307
+71308
+71309
+71310
+71311
+71312
+71313
+71314
+71315
+71316
+71317
+71318
+71319
+71320
+71321
+71322
+71323
+71324
+71325
+71326
+71327
+71328
+71329
+71330
+71331
+71332
+71333
+71334
+71335
+71336
+71337
+71338
+71339
+71340
+71341
+71342
+71343
+71344
+71345
+71346
+71347
+71348
+71349
+71350
+71351
+71352
+71353
+71354
+71355
+71356
+71357
+71358
+71359
+71360
+71361
+71362
+71363
+71364
+71365
+71366
+71367
+71368
+71369
+71370
+71371
+71372
+71373
+71374
+71375
+71376
+71377
+71378
+71379
+71380
+71381
+71382
+71383
+71384
+71385
+71386
+71387
+71388
+71389
+71390
+71391
+71392
+71393
+71394
+71395
+71396
+71397
+71398
+71399
+71400
+71401
+71402
+71403
+71404
+71405
+71406
+71407
+71408
+71409
+71410
+71411
+71412
+71413
+71414
+71415
+71416
+71417
+71418
+71419
+71420
+71421
+71422
+71423
+71424
+71425
+71426
+71427
+71428
+71429
+71430
+71431
+71432
+71433
+71434
+71435
+71436
+71437
+71438
+71439
+71440
+71441
+71442
+71443
+71444
+71445
+71446
+71447
+71448
+71449
+71450
+71451
+71452
+71453
+71454
+71455
+71456
+71457
+71458
+71459
+71460
+71461
+71462
+71463
+71464
+71465
+71466
+71467
+71468
+71469
+71470
+71471
+71472
+71473
+71474
+71475
+71476
+71477
+71478
+71479
+71480
+71481
+71482
+71483
+71484
+71485
+71486
+71487
+71488
+71489
+71490
+71491
+71492
+71493
+71494
+71495
+71496
+71497
+71498
+71499
+71500
+71501
+71502
+71503
+71504
+71505
+71506
+71507
+71508
+71509
+71510
+71511
+71512
+71513
+71514
+71515
+71516
+71517
+71518
+71519
+71520
+71521
+71522
+71523
+71524
+71525
+71526
+71527
+71528
+71529
+71530
+71531
+71532
+71533
+71534
+71535
+71536
+71537
+71538
+71539
+71540
+71541
+71542
+71543
+71544
+71545
+71546
+71547
+71548
+71549
+71550
+71551
+71552
+71553
+71554
+71555
+71556
+71557
+71558
+71559
+71560
+71561
+71562
+71563
+71564
+71565
+71566
+71567
+71568
+71569
+71570
+71571
+71572
+71573
+71574
+71575
+71576
+71577
+71578
+71579
+71580
+71581
+71582
+71583
+71584
+71585
+71586
+71587
+71588
+71589
+71590
+71591
+71592
+71593
+71594
+71595
+71596
+71597
+71598
+71599
+71600
+71601
+71602
+71603
+71604
+71605
+71606
+71607
+71608
+71609
+71610
+71611
+71612
+71613
+71614
+71615
+71616
+71617
+71618
+71619
+71620
+71621
+71622
+71623
+71624
+71625
+71626
+71627
+71628
+71629
+71630
+71631
+71632
+71633
+71634
+71635
+71636
+71637
+71638
+71639
+71640
+71641
+71642
+71643
+71644
+71645
+71646
+71647
+71648
+71649
+71650
+71651
+71652
+71653
+71654
+71655
+71656
+71657
+71658
+71659
+71660
+71661
+71662
+71663
+71664
+71665
+71666
+71667
+71668
+71669
+71670
+71671
+71672
+71673
+71674
+71675
+71676
+71677
+71678
+71679
+71680
+71681
+71682
+71683
+71684
+71685
+71686
+71687
+71688
+71689
+71690
+71691
+71692
+71693
+71694
+71695
+71696
+71697
+71698
+71699
+71700
+71701
+71702
+71703
+71704
+71705
+71706
+71707
+71708
+71709
+71710
+71711
+71712
+71713
+71714
+71715
+71716
+71717
+71718
+71719
+71720
+71721
+71722
+71723
+71724
+71725
+71726
+71727
+71728
+71729
+71730
+71731
+71732
+71733
+71734
+71735
+71736
+71737
+71738
+71739
+71740
+71741
+71742
+71743
+71744
+71745
+71746
+71747
+71748
+71749
+71750
+71751
+71752
+71753
+71754
+71755
+71756
+71757
+71758
+71759
+71760
+71761
+71762
+71763
+71764
+71765
+71766
+71767
+71768
+71769
+71770
+71771
+71772
+71773
+71774
+71775
+71776
+71777
+71778
+71779
+71780
+71781
+71782
+71783
+71784
+71785
+71786
+71787
+71788
+71789
+71790
+71791
+71792
+71793
+71794
+71795
+71796
+71797
+71798
+71799
+71800
+71801
+71802
+71803
+71804
+71805
+71806
+71807
+71808
+71809
+71810
+71811
+71812
+71813
+71814
+71815
+71816
+71817
+71818
+71819
+71820
+71821
+71822
+71823
+71824
+71825
+71826
+71827
+71828
+71829
+71830
+71831
+71832
+71833
+71834
+71835
+71836
+71837
+71838
+71839
+71840
+71841
+71842
+71843
+71844
+71845
+71846
+71847
+71848
+71849
+71850
+71851
+71852
+71853
+71854
+71855
+71856
+71857
+71858
+71859
+71860
+71861
+71862
+71863
+71864
+71865
+71866
+71867
+71868
+71869
+71870
+71871
+71872
+71873
+71874
+71875
+71876
+71877
+71878
+71879
+71880
+71881
+71882
+71883
+71884
+71885
+71886
+71887
+71888
+71889
+71890
+71891
+71892
+71893
+71894
+71895
+71896
+71897
+71898
+71899
+71900
+71901
+71902
+71903
+71904
+71905
+71906
+71907
+71908
+71909
+71910
+71911
+71912
+71913
+71914
+71915
+71916
+71917
+71918
+71919
+71920
+71921
+71922
+71923
+71924
+71925
+71926
+71927
+71928
+71929
+71930
+71931
+71932
+71933
+71934
+71935
+71936
+71937
+71938
+71939
+71940
+71941
+71942
+71943
+71944
+71945
+71946
+71947
+71948
+71949
+71950
+71951
+71952
+71953
+71954
+71955
+71956
+71957
+71958
+71959
+71960
+71961
+71962
+71963
+71964
+71965
+71966
+71967
+71968
+71969
+71970
+71971
+71972
+71973
+71974
+71975
+71976
+71977
+71978
+71979
+71980
+71981
+71982
+71983
+71984
+71985
+71986
+71987
+71988
+71989
+71990
+71991
+71992
+71993
+71994
+71995
+71996
+71997
+71998
+71999
+72000
+72001
+72002
+72003
+72004
+72005
+72006
+72007
+72008
+72009
+72010
+72011
+72012
+72013
+72014
+72015
+72016
+72017
+72018
+72019
+72020
+72021
+72022
+72023
+72024
+72025
+72026
+72027
+72028
+72029
+72030
+72031
+72032
+72033
+72034
+72035
+72036
+72037
+72038
+72039
+72040
+72041
+72042
+72043
+72044
+72045
+72046
+72047
+72048
+72049
+72050
+72051
+72052
+72053
+72054
+72055
+72056
+72057
+72058
+72059
+72060
+72061
+72062
+72063
+72064
+72065
+72066
+72067
+72068
+72069
+72070
+72071
+72072
+72073
+72074
+72075
+72076
+72077
+72078
+72079
+72080
+72081
+72082
+72083
+72084
+72085
+72086
+72087
+72088
+72089
+72090
+72091
+72092
+72093
+72094
+72095
+72096
+72097
+72098
+72099
+72100
+72101
+72102
+72103
+72104
+72105
+72106
+72107
+72108
+72109
+72110
+72111
+72112
+72113
+72114
+72115
+72116
+72117
+72118
+72119
+72120
+72121
+72122
+72123
+72124
+72125
+72126
+72127
+72128
+72129
+72130
+72131
+72132
+72133
+72134
+72135
+72136
+72137
+72138
+72139
+72140
+72141
+72142
+72143
+72144
+72145
+72146
+72147
+72148
+72149
+72150
+72151
+72152
+72153
+72154
+72155
+72156
+72157
+72158
+72159
+72160
+72161
+72162
+72163
+72164
+72165
+72166
+72167
+72168
+72169
+72170
+72171
+72172
+72173
+72174
+72175
+72176
+72177
+72178
+72179
+72180
+72181
+72182
+72183
+72184
+72185
+72186
+72187
+72188
+72189
+72190
+72191
+72192
+72193
+72194
+72195
+72196
+72197
+72198
+72199
+72200
+72201
+72202
+72203
+72204
+72205
+72206
+72207
+72208
+72209
+72210
+72211
+72212
+72213
+72214
+72215
+72216
+72217
+72218
+72219
+72220
+72221
+72222
+72223
+72224
+72225
+72226
+72227
+72228
+72229
+72230
+72231
+72232
+72233
+72234
+72235
+72236
+72237
+72238
+72239
+72240
+72241
+72242
+72243
+72244
+72245
+72246
+72247
+72248
+72249
+72250
+72251
+72252
+72253
+72254
+72255
+72256
+72257
+72258
+72259
+72260
+72261
+72262
+72263
+72264
+72265
+72266
+72267
+72268
+72269
+72270
+72271
+72272
+72273
+72274
+72275
+72276
+72277
+72278
+72279
+72280
+72281
+72282
+72283
+72284
+72285
+72286
+72287
+72288
+72289
+72290
+72291
+72292
+72293
+72294
+72295
+72296
+72297
+72298
+72299
+72300
+72301
+72302
+72303
+72304
+72305
+72306
+72307
+72308
+72309
+72310
+72311
+72312
+72313
+72314
+72315
+72316
+72317
+72318
+72319
+72320
+72321
+72322
+72323
+72324
+72325
+72326
+72327
+72328
+72329
+72330
+72331
+72332
+72333
+72334
+72335
+72336
+72337
+72338
+72339
+72340
+72341
+72342
+72343
+72344
+72345
+72346
+72347
+72348
+72349
+72350
+72351
+72352
+72353
+72354
+72355
+72356
+72357
+72358
+72359
+72360
+72361
+72362
+72363
+72364
+72365
+72366
+72367
+72368
+72369
+72370
+72371
+72372
+72373
+72374
+72375
+72376
+72377
+72378
+72379
+72380
+72381
+72382
+72383
+72384
+72385
+72386
+72387
+72388
+72389
+72390
+72391
+72392
+72393
+72394
+72395
+72396
+72397
+72398
+72399
+72400
+72401
+72402
+72403
+72404
+72405
+72406
+72407
+72408
+72409
+72410
+72411
+72412
+72413
+72414
+72415
+72416
+72417
+72418
+72419
+72420
+72421
+72422
+72423
+72424
+72425
+72426
+72427
+72428
+72429
+72430
+72431
+72432
+72433
+72434
+72435
+72436
+72437
+72438
+72439
+72440
+72441
+72442
+72443
+72444
+72445
+72446
+72447
+72448
+72449
+72450
+72451
+72452
+72453
+72454
+72455
+72456
+72457
+72458
+72459
+72460
+72461
+72462
+72463
+72464
+72465
+72466
+72467
+72468
+72469
+72470
+72471
+72472
+72473
+72474
+72475
+72476
+72477
+72478
+72479
+72480
+72481
+72482
+72483
+72484
+72485
+72486
+72487
+72488
+72489
+72490
+72491
+72492
+72493
+72494
+72495
+72496
+72497
+72498
+72499
+72500
+72501
+72502
+72503
+72504
+72505
+72506
+72507
+72508
+72509
+72510
+72511
+72512
+72513
+72514
+72515
+72516
+72517
+72518
+72519
+72520
+72521
+72522
+72523
+72524
+72525
+72526
+72527
+72528
+72529
+72530
+72531
+72532
+72533
+72534
+72535
+72536
+72537
+72538
+72539
+72540
+72541
+72542
+72543
+72544
+72545
+72546
+72547
+72548
+72549
+72550
+72551
+72552
+72553
+72554
+72555
+72556
+72557
+72558
+72559
+72560
+72561
+72562
+72563
+72564
+72565
+72566
+72567
+72568
+72569
+72570
+72571
+72572
+72573
+72574
+72575
+72576
+72577
+72578
+72579
+72580
+72581
+72582
+72583
+72584
+72585
+72586
+72587
+72588
+72589
+72590
+72591
+72592
+72593
+72594
+72595
+72596
+72597
+72598
+72599
+72600
+72601
+72602
+72603
+72604
+72605
+72606
+72607
+72608
+72609
+72610
+72611
+72612
+72613
+72614
+72615
+72616
+72617
+72618
+72619
+72620
+72621
+72622
+72623
+72624
+72625
+72626
+72627
+72628
+72629
+72630
+72631
+72632
+72633
+72634
+72635
+72636
+72637
+72638
+72639
+72640
+72641
+72642
+72643
+72644
+72645
+72646
+72647
+72648
+72649
+72650
+72651
+72652
+72653
+72654
+72655
+72656
+72657
+72658
+72659
+72660
+72661
+72662
+72663
+72664
+72665
+72666
+72667
+72668
+72669
+72670
+72671
+72672
+72673
+72674
+72675
+72676
+72677
+72678
+72679
+72680
+72681
+72682
+72683
+72684
+72685
+72686
+72687
+72688
+72689
+72690
+72691
+72692
+72693
+72694
+72695
+72696
+72697
+72698
+72699
+72700
+72701
+72702
+72703
+72704
+72705
+72706
+72707
+72708
+72709
+72710
+72711
+72712
+72713
+72714
+72715
+72716
+72717
+72718
+72719
+72720
+72721
+72722
+72723
+72724
+72725
+72726
+72727
+72728
+72729
+72730
+72731
+72732
+72733
+72734
+72735
+72736
+72737
+72738
+72739
+72740
+72741
+72742
+72743
+72744
+72745
+72746
+72747
+72748
+72749
+72750
+72751
+72752
+72753
+72754
+72755
+72756
+72757
+72758
+72759
+72760
+72761
+72762
+72763
+72764
+72765
+72766
+72767
+72768
+72769
+72770
+72771
+72772
+72773
+72774
+72775
+72776
+72777
+72778
+72779
+72780
+72781
+72782
+72783
+72784
+72785
+72786
+72787
+72788
+72789
+72790
+72791
+72792
+72793
+72794
+72795
+72796
+72797
+72798
+72799
+72800
+72801
+72802
+72803
+72804
+72805
+72806
+72807
+72808
+72809
+72810
+72811
+72812
+72813
+72814
+72815
+72816
+72817
+72818
+72819
+72820
+72821
+72822
+72823
+72824
+72825
+72826
+72827
+72828
+72829
+72830
+72831
+72832
+72833
+72834
+72835
+72836
+72837
+72838
+72839
+72840
+72841
+72842
+72843
+72844
+72845
+72846
+72847
+72848
+72849
+72850
+72851
+72852
+72853
+72854
+72855
+72856
+72857
+72858
+72859
+72860
+72861
+72862
+72863
+72864
+72865
+72866
+72867
+72868
+72869
+72870
+72871
+72872
+72873
+72874
+72875
+72876
+72877
+72878
+72879
+72880
+72881
+72882
+72883
+72884
+72885
+72886
+72887
+72888
+72889
+72890
+72891
+72892
+72893
+72894
+72895
+72896
+72897
+72898
+72899
+72900
+72901
+72902
+72903
+72904
+72905
+72906
+72907
+72908
+72909
+72910
+72911
+72912
+72913
+72914
+72915
+72916
+72917
+72918
+72919
+72920
+72921
+72922
+72923
+72924
+72925
+72926
+72927
+72928
+72929
+72930
+72931
+72932
+72933
+72934
+72935
+72936
+72937
+72938
+72939
+72940
+72941
+72942
+72943
+72944
+72945
+72946
+72947
+72948
+72949
+72950
+72951
+72952
+72953
+72954
+72955
+72956
+72957
+72958
+72959
+72960
+72961
+72962
+72963
+72964
+72965
+72966
+72967
+72968
+72969
+72970
+72971
+72972
+72973
+72974
+72975
+72976
+72977
+72978
+72979
+72980
+72981
+72982
+72983
+72984
+72985
+72986
+72987
+72988
+72989
+72990
+72991
+72992
+72993
+72994
+72995
+72996
+72997
+72998
+72999
+73000
+73001
+73002
+73003
+73004
+73005
+73006
+73007
+73008
+73009
+73010
+73011
+73012
+73013
+73014
+73015
+73016
+73017
+73018
+73019
+73020
+73021
+73022
+73023
+73024
+73025
+73026
+73027
+73028
+73029
+73030
+73031
+73032
+73033
+73034
+73035
+73036
+73037
+73038
+73039
+73040
+73041
+73042
+73043
+73044
+73045
+73046
+73047
+73048
+73049
+73050
+73051
+73052
+73053
+73054
+73055
+73056
+73057
+73058
+73059
+73060
+73061
+73062
+73063
+73064
+73065
+73066
+73067
+73068
+73069
+73070
+73071
+73072
+73073
+73074
+73075
+73076
+73077
+73078
+73079
+73080
+73081
+73082
+73083
+73084
+73085
+73086
+73087
+73088
+73089
+73090
+73091
+73092
+73093
+73094
+73095
+73096
+73097
+73098
+73099
+73100
+73101
+73102
+73103
+73104
+73105
+73106
+73107
+73108
+73109
+73110
+73111
+73112
+73113
+73114
+73115
+73116
+73117
+73118
+73119
+73120
+73121
+73122
+73123
+73124
+73125
+73126
+73127
+73128
+73129
+73130
+73131
+73132
+73133
+73134
+73135
+73136
+73137
+73138
+73139
+73140
+73141
+73142
+73143
+73144
+73145
+73146
+73147
+73148
+73149
+73150
+73151
+73152
+73153
+73154
+73155
+73156
+73157
+73158
+73159
+73160
+73161
+73162
+73163
+73164
+73165
+73166
+73167
+73168
+73169
+73170
+73171
+73172
+73173
+73174
+73175
+73176
+73177
+73178
+73179
+73180
+73181
+73182
+73183
+73184
+73185
+73186
+73187
+73188
+73189
+73190
+73191
+73192
+73193
+73194
+73195
+73196
+73197
+73198
+73199
+73200
+73201
+73202
+73203
+73204
+73205
+73206
+73207
+73208
+73209
+73210
+73211
+73212
+73213
+73214
+73215
+73216
+73217
+73218
+73219
+73220
+73221
+73222
+73223
+73224
+73225
+73226
+73227
+73228
+73229
+73230
+73231
+73232
+73233
+73234
+73235
+73236
+73237
+73238
+73239
+73240
+73241
+73242
+73243
+73244
+73245
+73246
+73247
+73248
+73249
+73250
+73251
+73252
+73253
+73254
+73255
+73256
+73257
+73258
+73259
+73260
+73261
+73262
+73263
+73264
+73265
+73266
+73267
+73268
+73269
+73270
+73271
+73272
+73273
+73274
+73275
+73276
+73277
+73278
+73279
+73280
+73281
+73282
+73283
+73284
+73285
+73286
+73287
+73288
+73289
+73290
+73291
+73292
+73293
+73294
+73295
+73296
+73297
+73298
+73299
+73300
+73301
+73302
+73303
+73304
+73305
+73306
+73307
+73308
+73309
+73310
+73311
+73312
+73313
+73314
+73315
+73316
+73317
+73318
+73319
+73320
+73321
+73322
+73323
+73324
+73325
+73326
+73327
+73328
+73329
+73330
+73331
+73332
+73333
+73334
+73335
+73336
+73337
+73338
+73339
+73340
+73341
+73342
+73343
+73344
+73345
+73346
+73347
+73348
+73349
+73350
+73351
+73352
+73353
+73354
+73355
+73356
+73357
+73358
+73359
+73360
+73361
+73362
+73363
+73364
+73365
+73366
+73367
+73368
+73369
+73370
+73371
+73372
+73373
+73374
+73375
+73376
+73377
+73378
+73379
+73380
+73381
+73382
+73383
+73384
+73385
+73386
+73387
+73388
+73389
+73390
+73391
+73392
+73393
+73394
+73395
+73396
+73397
+73398
+73399
+73400
+73401
+73402
+73403
+73404
+73405
+73406
+73407
+73408
+73409
+73410
+73411
+73412
+73413
+73414
+73415
+73416
+73417
+73418
+73419
+73420
+73421
+73422
+73423
+73424
+73425
+73426
+73427
+73428
+73429
+73430
+73431
+73432
+73433
+73434
+73435
+73436
+73437
+73438
+73439
+73440
+73441
+73442
+73443
+73444
+73445
+73446
+73447
+73448
+73449
+73450
+73451
+73452
+73453
+73454
+73455
+73456
+73457
+73458
+73459
+73460
+73461
+73462
+73463
+73464
+73465
+73466
+73467
+73468
+73469
+73470
+73471
+73472
+73473
+73474
+73475
+73476
+73477
+73478
+73479
+73480
+73481
+73482
+73483
+73484
+73485
+73486
+73487
+73488
+73489
+73490
+73491
+73492
+73493
+73494
+73495
+73496
+73497
+73498
+73499
+73500
+73501
+73502
+73503
+73504
+73505
+73506
+73507
+73508
+73509
+73510
+73511
+73512
+73513
+73514
+73515
+73516
+73517
+73518
+73519
+73520
+73521
+73522
+73523
+73524
+73525
+73526
+73527
+73528
+73529
+73530
+73531
+73532
+73533
+73534
+73535
+73536
+73537
+73538
+73539
+73540
+73541
+73542
+73543
+73544
+73545
+73546
+73547
+73548
+73549
+73550
+73551
+73552
+73553
+73554
+73555
+73556
+73557
+73558
+73559
+73560
+73561
+73562
+73563
+73564
+73565
+73566
+73567
+73568
+73569
+73570
+73571
+73572
+73573
+73574
+73575
+73576
+73577
+73578
+73579
+73580
+73581
+73582
+73583
+73584
+73585
+73586
+73587
+73588
+73589
+73590
+73591
+73592
+73593
+73594
+73595
+73596
+73597
+73598
+73599
+73600
+73601
+73602
+73603
+73604
+73605
+73606
+73607
+73608
+73609
+73610
+73611
+73612
+73613
+73614
+73615
+73616
+73617
+73618
+73619
+73620
+73621
+73622
+73623
+73624
+73625
+73626
+73627
+73628
+73629
+73630
+73631
+73632
+73633
+73634
+73635
+73636
+73637
+73638
+73639
+73640
+73641
+73642
+73643
+73644
+73645
+73646
+73647
+73648
+73649
+73650
+73651
+73652
+73653
+73654
+73655
+73656
+73657
+73658
+73659
+73660
+73661
+73662
+73663
+73664
+73665
+73666
+73667
+73668
+73669
+73670
+73671
+73672
+73673
+73674
+73675
+73676
+73677
+73678
+73679
+73680
+73681
+73682
+73683
+73684
+73685
+73686
+73687
+73688
+73689
+73690
+73691
+73692
+73693
+73694
+73695
+73696
+73697
+73698
+73699
+73700
+73701
+73702
+73703
+73704
+73705
+73706
+73707
+73708
+73709
+73710
+73711
+73712
+73713
+73714
+73715
+73716
+73717
+73718
+73719
+73720
+73721
+73722
+73723
+73724
+73725
+73726
+73727
+73728
+73729
+73730
+73731
+73732
+73733
+73734
+73735
+73736
+73737
+73738
+73739
+73740
+73741
+73742
+73743
+73744
+73745
+73746
+73747
+73748
+73749
+73750
+73751
+73752
+73753
+73754
+73755
+73756
+73757
+73758
+73759
+73760
+73761
+73762
+73763
+73764
+73765
+73766
+73767
+73768
+73769
+73770
+73771
+73772
+73773
+73774
+73775
+73776
+73777
+73778
+73779
+73780
+73781
+73782
+73783
+73784
+73785
+73786
+73787
+73788
+73789
+73790
+73791
+73792
+73793
+73794
+73795
+73796
+73797
+73798
+73799
+73800
+73801
+73802
+73803
+73804
+73805
+73806
+73807
+73808
+73809
+73810
+73811
+73812
+73813
+73814
+73815
+73816
+73817
+73818
+73819
+73820
+73821
+73822
+73823
+73824
+73825
+73826
+73827
+73828
+73829
+73830
+73831
+73832
+73833
+73834
+73835
+73836
+73837
+73838
+73839
+73840
+73841
+73842
+73843
+73844
+73845
+73846
+73847
+73848
+73849
+73850
+73851
+73852
+73853
+73854
+73855
+73856
+73857
+73858
+73859
+73860
+73861
+73862
+73863
+73864
+73865
+73866
+73867
+73868
+73869
+73870
+73871
+73872
+73873
+73874
+73875
+73876
+73877
+73878
+73879
+73880
+73881
+73882
+73883
+73884
+73885
+73886
+73887
+73888
+73889
+73890
+73891
+73892
+73893
+73894
+73895
+73896
+73897
+73898
+73899
+73900
+73901
+73902
+73903
+73904
+73905
+73906
+73907
+73908
+73909
+73910
+73911
+73912
+73913
+73914
+73915
+73916
+73917
+73918
+73919
+73920
+73921
+73922
+73923
+73924
+73925
+73926
+73927
+73928
+73929
+73930
+73931
+73932
+73933
+73934
+73935
+73936
+73937
+73938
+73939
+73940
+73941
+73942
+73943
+73944
+73945
+73946
+73947
+73948
+73949
+73950
+73951
+73952
+73953
+73954
+73955
+73956
+73957
+73958
+73959
+73960
+73961
+73962
+73963
+73964
+73965
+73966
+73967
+73968
+73969
+73970
+73971
+73972
+73973
+73974
+73975
+73976
+73977
+73978
+73979
+73980
+73981
+73982
+73983
+73984
+73985
+73986
+73987
+73988
+73989
+73990
+73991
+73992
+73993
+73994
+73995
+73996
+73997
+73998
+73999
+74000
+74001
+74002
+74003
+74004
+74005
+74006
+74007
+74008
+74009
+74010
+74011
+74012
+74013
+74014
+74015
+74016
+74017
+74018
+74019
+74020
+74021
+74022
+74023
+74024
+74025
+74026
+74027
+74028
+74029
+74030
+74031
+74032
+74033
+74034
+74035
+74036
+74037
+74038
+74039
+74040
+74041
+74042
+74043
+74044
+74045
+74046
+74047
+74048
+74049
+74050
+74051
+74052
+74053
+74054
+74055
+74056
+74057
+74058
+74059
+74060
+74061
+74062
+74063
+74064
+74065
+74066
+74067
+74068
+74069
+74070
+74071
+74072
+74073
+74074
+74075
+74076
+74077
+74078
+74079
+74080
+74081
+74082
+74083
+74084
+74085
+74086
+74087
+74088
+74089
+74090
+74091
+74092
+74093
+74094
+74095
+74096
+74097
+74098
+74099
+74100
+74101
+74102
+74103
+74104
+74105
+74106
+74107
+74108
+74109
+74110
+74111
+74112
+74113
+74114
+74115
+74116
+74117
+74118
+74119
+74120
+74121
+74122
+74123
+74124
+74125
+74126
+74127
+74128
+74129
+74130
+74131
+74132
+74133
+74134
+74135
+74136
+74137
+74138
+74139
+74140
+74141
+74142
+74143
+74144
+74145
+74146
+74147
+74148
+74149
+74150
+74151
+74152
+74153
+74154
+74155
+74156
+74157
+74158
+74159
+74160
+74161
+74162
+74163
+74164
+74165
+74166
+74167
+74168
+74169
+74170
+74171
+74172
+74173
+74174
+74175
+74176
+74177
+74178
+74179
+74180
+74181
+74182
+74183
+74184
+74185
+74186
+74187
+74188
+74189
+74190
+74191
+74192
+74193
+74194
+74195
+74196
+74197
+74198
+74199
+74200
+74201
+74202
+74203
+74204
+74205
+74206
+74207
+74208
+74209
+74210
+74211
+74212
+74213
+74214
+74215
+74216
+74217
+74218
+74219
+74220
+74221
+74222
+74223
+74224
+74225
+74226
+74227
+74228
+74229
+74230
+74231
+74232
+74233
+74234
+74235
+74236
+74237
+74238
+74239
+74240
+74241
+74242
+74243
+74244
+74245
+74246
+74247
+74248
+74249
+74250
+74251
+74252
+74253
+74254
+74255
+74256
+74257
+74258
+74259
+74260
+74261
+74262
+74263
+74264
+74265
+74266
+74267
+74268
+74269
+74270
+74271
+74272
+74273
+74274
+74275
+74276
+74277
+74278
+74279
+74280
+74281
+74282
+74283
+74284
+74285
+74286
+74287
+74288
+74289
+74290
+74291
+74292
+74293
+74294
+74295
+74296
+74297
+74298
+74299
+74300
+74301
+74302
+74303
+74304
+74305
+74306
+74307
+74308
+74309
+74310
+74311
+74312
+74313
+74314
+74315
+74316
+74317
+74318
+74319
+74320
+74321
+74322
+74323
+74324
+74325
+74326
+74327
+74328
+74329
+74330
+74331
+74332
+74333
+74334
+74335
+74336
+74337
+74338
+74339
+74340
+74341
+74342
+74343
+74344
+74345
+74346
+74347
+74348
+74349
+74350
+74351
+74352
+74353
+74354
+74355
+74356
+74357
+74358
+74359
+74360
+74361
+74362
+74363
+74364
+74365
+74366
+74367
+74368
+74369
+74370
+74371
+74372
+74373
+74374
+74375
+74376
+74377
+74378
+74379
+74380
+74381
+74382
+74383
+74384
+74385
+74386
+74387
+74388
+74389
+74390
+74391
+74392
+74393
+74394
+74395
+74396
+74397
+74398
+74399
+74400
+74401
+74402
+74403
+74404
+74405
+74406
+74407
+74408
+74409
+74410
+74411
+74412
+74413
+74414
+74415
+74416
+74417
+74418
+74419
+74420
+74421
+74422
+74423
+74424
+74425
+74426
+74427
+74428
+74429
+74430
+74431
+74432
+74433
+74434
+74435
+74436
+74437
+74438
+74439
+74440
+74441
+74442
+74443
+74444
+74445
+74446
+74447
+74448
+74449
+74450
+74451
+74452
+74453
+74454
+74455
+74456
+74457
+74458
+74459
+74460
+74461
+74462
+74463
+74464
+74465
+74466
+74467
+74468
+74469
+74470
+74471
+74472
+74473
+74474
+74475
+74476
+74477
+74478
+74479
+74480
+74481
+74482
+74483
+74484
+74485
+74486
+74487
+74488
+74489
+74490
+74491
+74492
+74493
+74494
+74495
+74496
+74497
+74498
+74499
+74500
+74501
+74502
+74503
+74504
+74505
+74506
+74507
+74508
+74509
+74510
+74511
+74512
+74513
+74514
+74515
+74516
+74517
+74518
+74519
+74520
+74521
+74522
+74523
+74524
+74525
+74526
+74527
+74528
+74529
+74530
+74531
+74532
+74533
+74534
+74535
+74536
+74537
+74538
+74539
+74540
+74541
+74542
+74543
+74544
+74545
+74546
+74547
+74548
+74549
+74550
+74551
+74552
+74553
+74554
+74555
+74556
+74557
+74558
+74559
+74560
+74561
+74562
+74563
+74564
+74565
+74566
+74567
+74568
+74569
+74570
+74571
+74572
+74573
+74574
+74575
+74576
+74577
+74578
+74579
+74580
+74581
+74582
+74583
+74584
+74585
+74586
+74587
+74588
+74589
+74590
+74591
+74592
+74593
+74594
+74595
+74596
+74597
+74598
+74599
+74600
+74601
+74602
+74603
+74604
+74605
+74606
+74607
+74608
+74609
+74610
+74611
+74612
+74613
+74614
+74615
+74616
+74617
+74618
+74619
+74620
+74621
+74622
+74623
+74624
+74625
+74626
+74627
+74628
+74629
+74630
+74631
+74632
+74633
+74634
+74635
+74636
+74637
+74638
+74639
+74640
+74641
+74642
+74643
+74644
+74645
+74646
+74647
+74648
+74649
+74650
+74651
+74652
+74653
+74654
+74655
+74656
+74657
+74658
+74659
+74660
+74661
+74662
+74663
+74664
+74665
+74666
+74667
+74668
+74669
+74670
+74671
+74672
+74673
+74674
+74675
+74676
+74677
+74678
+74679
+74680
+74681
+74682
+74683
+74684
+74685
+74686
+74687
+74688
+74689
+74690
+74691
+74692
+74693
+74694
+74695
+74696
+74697
+74698
+74699
+74700
+74701
+74702
+74703
+74704
+74705
+74706
+74707
+74708
+74709
+74710
+74711
+74712
+74713
+74714
+74715
+74716
+74717
+74718
+74719
+74720
+74721
+74722
+74723
+74724
+74725
+74726
+74727
+74728
+74729
+74730
+74731
+74732
+74733
+74734
+74735
+74736
+74737
+74738
+74739
+74740
+74741
+74742
+74743
+74744
+74745
+74746
+74747
+74748
+74749
+74750
+74751
+74752
+74753
+74754
+74755
+74756
+74757
+74758
+74759
+74760
+74761
+74762
+74763
+74764
+74765
+74766
+74767
+74768
+74769
+74770
+74771
+74772
+74773
+74774
+74775
+74776
+74777
+74778
+74779
+74780
+74781
+74782
+74783
+74784
+74785
+74786
+74787
+74788
+74789
+74790
+74791
+74792
+74793
+74794
+74795
+74796
+74797
+74798
+74799
+74800
+74801
+74802
+74803
+74804
+74805
+74806
+74807
+74808
+74809
+74810
+74811
+74812
+74813
+74814
+74815
+74816
+74817
+74818
+74819
+74820
+74821
+74822
+74823
+74824
+74825
+74826
+74827
+74828
+74829
+74830
+74831
+74832
+74833
+74834
+74835
+74836
+74837
+74838
+74839
+74840
+74841
+74842
+74843
+74844
+74845
+74846
+74847
+74848
+74849
+74850
+74851
+74852
+74853
+74854
+74855
+74856
+74857
+74858
+74859
+74860
+74861
+74862
+74863
+74864
+74865
+74866
+74867
+74868
+74869
+74870
+74871
+74872
+74873
+74874
+74875
+74876
+74877
+74878
+74879
+74880
+74881
+74882
+74883
+74884
+74885
+74886
+74887
+74888
+74889
+74890
+74891
+74892
+74893
+74894
+74895
+74896
+74897
+74898
+74899
+74900
+74901
+74902
+74903
+74904
+74905
+74906
+74907
+74908
+74909
+74910
+74911
+74912
+74913
+74914
+74915
+74916
+74917
+74918
+74919
+74920
+74921
+74922
+74923
+74924
+74925
+74926
+74927
+74928
+74929
+74930
+74931
+74932
+74933
+74934
+74935
+74936
+74937
+74938
+74939
+74940
+74941
+74942
+74943
+74944
+74945
+74946
+74947
+74948
+74949
+74950
+74951
+74952
+74953
+74954
+74955
+74956
+74957
+74958
+74959
+74960
+74961
+74962
+74963
+74964
+74965
+74966
+74967
+74968
+74969
+74970
+74971
+74972
+74973
+74974
+74975
+74976
+74977
+74978
+74979
+74980
+74981
+74982
+74983
+74984
+74985
+74986
+74987
+74988
+74989
+74990
+74991
+74992
+74993
+74994
+74995
+74996
+74997
+74998
+74999
+75000
+75001
+75002
+75003
+75004
+75005
+75006
+75007
+75008
+75009
+75010
+75011
+75012
+75013
+75014
+75015
+75016
+75017
+75018
+75019
+75020
+75021
+75022
+75023
+75024
+75025
+75026
+75027
+75028
+75029
+75030
+75031
+75032
+75033
+75034
+75035
+75036
+75037
+75038
+75039
+75040
+75041
+75042
+75043
+75044
+75045
+75046
+75047
+75048
+75049
+75050
+75051
+75052
+75053
+75054
+75055
+75056
+75057
+75058
+75059
+75060
+75061
+75062
+75063
+75064
+75065
+75066
+75067
+75068
+75069
+75070
+75071
+75072
+75073
+75074
+75075
+75076
+75077
+75078
+75079
+75080
+75081
+75082
+75083
+75084
+75085
+75086
+75087
+75088
+75089
+75090
+75091
+75092
+75093
+75094
+75095
+75096
+75097
+75098
+75099
+75100
+75101
+75102
+75103
+75104
+75105
+75106
+75107
+75108
+75109
+75110
+75111
+75112
+75113
+75114
+75115
+75116
+75117
+75118
+75119
+75120
+75121
+75122
+75123
+75124
+75125
+75126
+75127
+75128
+75129
+75130
+75131
+75132
+75133
+75134
+75135
+75136
+75137
+75138
+75139
+75140
+75141
+75142
+75143
+75144
+75145
+75146
+75147
+75148
+75149
+75150
+75151
+75152
+75153
+75154
+75155
+75156
+75157
+75158
+75159
+75160
+75161
+75162
+75163
+75164
+75165
+75166
+75167
+75168
+75169
+75170
+75171
+75172
+75173
+75174
+75175
+75176
+75177
+75178
+75179
+75180
+75181
+75182
+75183
+75184
+75185
+75186
+75187
+75188
+75189
+75190
+75191
+75192
+75193
+75194
+75195
+75196
+75197
+75198
+75199
+75200
+75201
+75202
+75203
+75204
+75205
+75206
+75207
+75208
+75209
+75210
+75211
+75212
+75213
+75214
+75215
+75216
+75217
+75218
+75219
+75220
+75221
+75222
+75223
+75224
+75225
+75226
+75227
+75228
+75229
+75230
+75231
+75232
+75233
+75234
+75235
+75236
+75237
+75238
+75239
+75240
+75241
+75242
+75243
+75244
+75245
+75246
+75247
+75248
+75249
+75250
+75251
+75252
+75253
+75254
+75255
+75256
+75257
+75258
+75259
+75260
+75261
+75262
+75263
+75264
+75265
+75266
+75267
+75268
+75269
+75270
+75271
+75272
+75273
+75274
+75275
+75276
+75277
+75278
+75279
+75280
+75281
+75282
+75283
+75284
+75285
+75286
+75287
+75288
+75289
+75290
+75291
+75292
+75293
+75294
+75295
+75296
+75297
+75298
+75299
+75300
+75301
+75302
+75303
+75304
+75305
+75306
+75307
+75308
+75309
+75310
+75311
+75312
+75313
+75314
+75315
+75316
+75317
+75318
+75319
+75320
+75321
+75322
+75323
+75324
+75325
+75326
+75327
+75328
+75329
+75330
+75331
+75332
+75333
+75334
+75335
+75336
+75337
+75338
+75339
+75340
+75341
+75342
+75343
+75344
+75345
+75346
+75347
+75348
+75349
+75350
+75351
+75352
+75353
+75354
+75355
+75356
+75357
+75358
+75359
+75360
+75361
+75362
+75363
+75364
+75365
+75366
+75367
+75368
+75369
+75370
+75371
+75372
+75373
+75374
+75375
+75376
+75377
+75378
+75379
+75380
+75381
+75382
+75383
+75384
+75385
+75386
+75387
+75388
+75389
+75390
+75391
+75392
+75393
+75394
+75395
+75396
+75397
+75398
+75399
+75400
+75401
+75402
+75403
+75404
+75405
+75406
+75407
+75408
+75409
+75410
+75411
+75412
+75413
+75414
+75415
+75416
+75417
+75418
+75419
+75420
+75421
+75422
+75423
+75424
+75425
+75426
+75427
+75428
+75429
+75430
+75431
+75432
+75433
+75434
+75435
+75436
+75437
+75438
+75439
+75440
+75441
+75442
+75443
+75444
+75445
+75446
+75447
+75448
+75449
+75450
+75451
+75452
+75453
+75454
+75455
+75456
+75457
+75458
+75459
+75460
+75461
+75462
+75463
+75464
+75465
+75466
+75467
+75468
+75469
+75470
+75471
+75472
+75473
+75474
+75475
+75476
+75477
+75478
+75479
+75480
+75481
+75482
+75483
+75484
+75485
+75486
+75487
+75488
+75489
+75490
+75491
+75492
+75493
+75494
+75495
+75496
+75497
+75498
+75499
+75500
+75501
+75502
+75503
+75504
+75505
+75506
+75507
+75508
+75509
+75510
+75511
+75512
+75513
+75514
+75515
+75516
+75517
+75518
+75519
+75520
+75521
+75522
+75523
+75524
+75525
+75526
+75527
+75528
+75529
+75530
+75531
+75532
+75533
+75534
+75535
+75536
+75537
+75538
+75539
+75540
+75541
+75542
+75543
+75544
+75545
+75546
+75547
+75548
+75549
+75550
+75551
+75552
+75553
+75554
+75555
+75556
+75557
+75558
+75559
+75560
+75561
+75562
+75563
+75564
+75565
+75566
+75567
+75568
+75569
+75570
+75571
+75572
+75573
+75574
+75575
+75576
+75577
+75578
+75579
+75580
+75581
+75582
+75583
+75584
+75585
+75586
+75587
+75588
+75589
+75590
+75591
+75592
+75593
+75594
+75595
+75596
+75597
+75598
+75599
+75600
+75601
+75602
+75603
+75604
+75605
+75606
+75607
+75608
+75609
+75610
+75611
+75612
+75613
+75614
+75615
+75616
+75617
+75618
+75619
+75620
+75621
+75622
+75623
+75624
+75625
+75626
+75627
+75628
+75629
+75630
+75631
+75632
+75633
+75634
+75635
+75636
+75637
+75638
+75639
+75640
+75641
+75642
+75643
+75644
+75645
+75646
+75647
+75648
+75649
+75650
+75651
+75652
+75653
+75654
+75655
+75656
+75657
+75658
+75659
+75660
+75661
+75662
+75663
+75664
+75665
+75666
+75667
+75668
+75669
+75670
+75671
+75672
+75673
+75674
+75675
+75676
+75677
+75678
+75679
+75680
+75681
+75682
+75683
+75684
+75685
+75686
+75687
+75688
+75689
+75690
+75691
+75692
+75693
+75694
+75695
+75696
+75697
+75698
+75699
+75700
+75701
+75702
+75703
+75704
+75705
+75706
+75707
+75708
+75709
+75710
+75711
+75712
+75713
+75714
+75715
+75716
+75717
+75718
+75719
+75720
+75721
+75722
+75723
+75724
+75725
+75726
+75727
+75728
+75729
+75730
+75731
+75732
+75733
+75734
+75735
+75736
+75737
+75738
+75739
+75740
+75741
+75742
+75743
+75744
+75745
+75746
+75747
+75748
+75749
+75750
+75751
+75752
+75753
+75754
+75755
+75756
+75757
+75758
+75759
+75760
+75761
+75762
+75763
+75764
+75765
+75766
+75767
+75768
+75769
+75770
+75771
+75772
+75773
+75774
+75775
+75776
+75777
+75778
+75779
+75780
+75781
+75782
+75783
+75784
+75785
+75786
+75787
+75788
+75789
+75790
+75791
+75792
+75793
+75794
+75795
+75796
+75797
+75798
+75799
+75800
+75801
+75802
+75803
+75804
+75805
+75806
+75807
+75808
+75809
+75810
+75811
+75812
+75813
+75814
+75815
+75816
+75817
+75818
+75819
+75820
+75821
+75822
+75823
+75824
+75825
+75826
+75827
+75828
+75829
+75830
+75831
+75832
+75833
+75834
+75835
+75836
+75837
+75838
+75839
+75840
+75841
+75842
+75843
+75844
+75845
+75846
+75847
+75848
+75849
+75850
+75851
+75852
+75853
+75854
+75855
+75856
+75857
+75858
+75859
+75860
+75861
+75862
+75863
+75864
+75865
+75866
+75867
+75868
+75869
+75870
+75871
+75872
+75873
+75874
+75875
+75876
+75877
+75878
+75879
+75880
+75881
+75882
+75883
+75884
+75885
+75886
+75887
+75888
+75889
+75890
+75891
+75892
+75893
+75894
+75895
+75896
+75897
+75898
+75899
+75900
+75901
+75902
+75903
+75904
+75905
+75906
+75907
+75908
+75909
+75910
+75911
+75912
+75913
+75914
+75915
+75916
+75917
+75918
+75919
+75920
+75921
+75922
+75923
+75924
+75925
+75926
+75927
+75928
+75929
+75930
+75931
+75932
+75933
+75934
+75935
+75936
+75937
+75938
+75939
+75940
+75941
+75942
+75943
+75944
+75945
+75946
+75947
+75948
+75949
+75950
+75951
+75952
+75953
+75954
+75955
+75956
+75957
+75958
+75959
+75960
+75961
+75962
+75963
+75964
+75965
+75966
+75967
+75968
+75969
+75970
+75971
+75972
+75973
+75974
+75975
+75976
+75977
+75978
+75979
+75980
+75981
+75982
+75983
+75984
+75985
+75986
+75987
+75988
+75989
+75990
+75991
+75992
+75993
+75994
+75995
+75996
+75997
+75998
+75999
+76000
+76001
+76002
+76003
+76004
+76005
+76006
+76007
+76008
+76009
+76010
+76011
+76012
+76013
+76014
+76015
+76016
+76017
+76018
+76019
+76020
+76021
+76022
+76023
+76024
+76025
+76026
+76027
+76028
+76029
+76030
+76031
+76032
+76033
+76034
+76035
+76036
+76037
+76038
+76039
+76040
+76041
+76042
+76043
+76044
+76045
+76046
+76047
+76048
+76049
+76050
+76051
+76052
+76053
+76054
+76055
+76056
+76057
+76058
+76059
+76060
+76061
+76062
+76063
+76064
+76065
+76066
+76067
+76068
+76069
+76070
+76071
+76072
+76073
+76074
+76075
+76076
+76077
+76078
+76079
+76080
+76081
+76082
+76083
+76084
+76085
+76086
+76087
+76088
+76089
+76090
+76091
+76092
+76093
+76094
+76095
+76096
+76097
+76098
+76099
+76100
+76101
+76102
+76103
+76104
+76105
+76106
+76107
+76108
+76109
+76110
+76111
+76112
+76113
+76114
+76115
+76116
+76117
+76118
+76119
+76120
+76121
+76122
+76123
+76124
+76125
+76126
+76127
+76128
+76129
+76130
+76131
+76132
+76133
+76134
+76135
+76136
+76137
+76138
+76139
+76140
+76141
+76142
+76143
+76144
+76145
+76146
+76147
+76148
+76149
+76150
+76151
+76152
+76153
+76154
+76155
+76156
+76157
+76158
+76159
+76160
+76161
+76162
+76163
+76164
+76165
+76166
+76167
+76168
+76169
+76170
+76171
+76172
+76173
+76174
+76175
+76176
+76177
+76178
+76179
+76180
+76181
+76182
+76183
+76184
+76185
+76186
+76187
+76188
+76189
+76190
+76191
+76192
+76193
+76194
+76195
+76196
+76197
+76198
+76199
+76200
+76201
+76202
+76203
+76204
+76205
+76206
+76207
+76208
+76209
+76210
+76211
+76212
+76213
+76214
+76215
+76216
+76217
+76218
+76219
+76220
+76221
+76222
+76223
+76224
+76225
+76226
+76227
+76228
+76229
+76230
+76231
+76232
+76233
+76234
+76235
+76236
+76237
+76238
+76239
+76240
+76241
+76242
+76243
+76244
+76245
+76246
+76247
+76248
+76249
+76250
+76251
+76252
+76253
+76254
+76255
+76256
+76257
+76258
+76259
+76260
+76261
+76262
+76263
+76264
+76265
+76266
+76267
+76268
+76269
+76270
+76271
+76272
+76273
+76274
+76275
+76276
+76277
+76278
+76279
+76280
+76281
+76282
+76283
+76284
+76285
+76286
+76287
+76288
+76289
+76290
+76291
+76292
+76293
+76294
+76295
+76296
+76297
+76298
+76299
+76300
+76301
+76302
+76303
+76304
+76305
+76306
+76307
+76308
+76309
+76310
+76311
+76312
+76313
+76314
+76315
+76316
+76317
+76318
+76319
+76320
+76321
+76322
+76323
+76324
+76325
+76326
+76327
+76328
+76329
+76330
+76331
+76332
+76333
+76334
+76335
+76336
+76337
+76338
+76339
+76340
+76341
+76342
+76343
+76344
+76345
+76346
+76347
+76348
+76349
+76350
+76351
+76352
+76353
+76354
+76355
+76356
+76357
+76358
+76359
+76360
+76361
+76362
+76363
+76364
+76365
+76366
+76367
+76368
+76369
+76370
+76371
+76372
+76373
+76374
+76375
+76376
+76377
+76378
+76379
+76380
+76381
+76382
+76383
+76384
+76385
+76386
+76387
+76388
+76389
+76390
+76391
+76392
+76393
+76394
+76395
+76396
+76397
+76398
+76399
+76400
+76401
+76402
+76403
+76404
+76405
+76406
+76407
+76408
+76409
+76410
+76411
+76412
+76413
+76414
+76415
+76416
+76417
+76418
+76419
+76420
+76421
+76422
+76423
+76424
+76425
+76426
+76427
+76428
+76429
+76430
+76431
+76432
+76433
+76434
+76435
+76436
+76437
+76438
+76439
+76440
+76441
+76442
+76443
+76444
+76445
+76446
+76447
+76448
+76449
+76450
+76451
+76452
+76453
+76454
+76455
+76456
+76457
+76458
+76459
+76460
+76461
+76462
+76463
+76464
+76465
+76466
+76467
+76468
+76469
+76470
+76471
+76472
+76473
+76474
+76475
+76476
+76477
+76478
+76479
+76480
+76481
+76482
+76483
+76484
+76485
+76486
+76487
+76488
+76489
+76490
+76491
+76492
+76493
+76494
+76495
+76496
+76497
+76498
+76499
+76500
+76501
+76502
+76503
+76504
+76505
+76506
+76507
+76508
+76509
+76510
+76511
+76512
+76513
+76514
+76515
+76516
+76517
+76518
+76519
+76520
+76521
+76522
+76523
+76524
+76525
+76526
+76527
+76528
+76529
+76530
+76531
+76532
+76533
+76534
+76535
+76536
+76537
+76538
+76539
+76540
+76541
+76542
+76543
+76544
+76545
+76546
+76547
+76548
+76549
+76550
+76551
+76552
+76553
+76554
+76555
+76556
+76557
+76558
+76559
+76560
+76561
+76562
+76563
+76564
+76565
+76566
+76567
+76568
+76569
+76570
+76571
+76572
+76573
+76574
+76575
+76576
+76577
+76578
+76579
+76580
+76581
+76582
+76583
+76584
+76585
+76586
+76587
+76588
+76589
+76590
+76591
+76592
+76593
+76594
+76595
+76596
+76597
+76598
+76599
+76600
+76601
+76602
+76603
+76604
+76605
+76606
+76607
+76608
+76609
+76610
+76611
+76612
+76613
+76614
+76615
+76616
+76617
+76618
+76619
+76620
+76621
+76622
+76623
+76624
+76625
+76626
+76627
+76628
+76629
+76630
+76631
+76632
+76633
+76634
+76635
+76636
+76637
+76638
+76639
+76640
+76641
+76642
+76643
+76644
+76645
+76646
+76647
+76648
+76649
+76650
+76651
+76652
+76653
+76654
+76655
+76656
+76657
+76658
+76659
+76660
+76661
+76662
+76663
+76664
+76665
+76666
+76667
+76668
+76669
+76670
+76671
+76672
+76673
+76674
+76675
+76676
+76677
+76678
+76679
+76680
+76681
+76682
+76683
+76684
+76685
+76686
+76687
+76688
+76689
+76690
+76691
+76692
+76693
+76694
+76695
+76696
+76697
+76698
+76699
+76700
+76701
+76702
+76703
+76704
+76705
+76706
+76707
+76708
+76709
+76710
+76711
+76712
+76713
+76714
+76715
+76716
+76717
+76718
+76719
+76720
+76721
+76722
+76723
+76724
+76725
+76726
+76727
+76728
+76729
+76730
+76731
+76732
+76733
+76734
+76735
+76736
+76737
+76738
+76739
+76740
+76741
+76742
+76743
+76744
+76745
+76746
+76747
+76748
+76749
+76750
+76751
+76752
+76753
+76754
+76755
+76756
+76757
+76758
+76759
+76760
+76761
+76762
+76763
+76764
+76765
+76766
+76767
+76768
+76769
+76770
+76771
+76772
+76773
+76774
+76775
+76776
+76777
+76778
+76779
+76780
+76781
+76782
+76783
+76784
+76785
+76786
+76787
+76788
+76789
+76790
+76791
+76792
+76793
+76794
+76795
+76796
+76797
+76798
+76799
+76800
+76801
+76802
+76803
+76804
+76805
+76806
+76807
+76808
+76809
+76810
+76811
+76812
+76813
+76814
+76815
+76816
+76817
+76818
+76819
+76820
+76821
+76822
+76823
+76824
+76825
+76826
+76827
+76828
+76829
+76830
+76831
+76832
+76833
+76834
+76835
+76836
+76837
+76838
+76839
+76840
+76841
+76842
+76843
+76844
+76845
+76846
+76847
+76848
+76849
+76850
+76851
+76852
+76853
+76854
+76855
+76856
+76857
+76858
+76859
+76860
+76861
+76862
+76863
+76864
+76865
+76866
+76867
+76868
+76869
+76870
+76871
+76872
+76873
+76874
+76875
+76876
+76877
+76878
+76879
+76880
+76881
+76882
+76883
+76884
+76885
+76886
+76887
+76888
+76889
+76890
+76891
+76892
+76893
+76894
+76895
+76896
+76897
+76898
+76899
+76900
+76901
+76902
+76903
+76904
+76905
+76906
+76907
+76908
+76909
+76910
+76911
+76912
+76913
+76914
+76915
+76916
+76917
+76918
+76919
+76920
+76921
+76922
+76923
+76924
+76925
+76926
+76927
+76928
+76929
+76930
+76931
+76932
+76933
+76934
+76935
+76936
+76937
+76938
+76939
+76940
+76941
+76942
+76943
+76944
+76945
+76946
+76947
+76948
+76949
+76950
+76951
+76952
+76953
+76954
+76955
+76956
+76957
+76958
+76959
+76960
+76961
+76962
+76963
+76964
+76965
+76966
+76967
+76968
+76969
+76970
+76971
+76972
+76973
+76974
+76975
+76976
+76977
+76978
+76979
+76980
+76981
+76982
+76983
+76984
+76985
+76986
+76987
+76988
+76989
+76990
+76991
+76992
+76993
+76994
+76995
+76996
+76997
+76998
+76999
+77000
+77001
+77002
+77003
+77004
+77005
+77006
+77007
+77008
+77009
+77010
+77011
+77012
+77013
+77014
+77015
+77016
+77017
+77018
+77019
+77020
+77021
+77022
+77023
+77024
+77025
+77026
+77027
+77028
+77029
+77030
+77031
+77032
+77033
+77034
+77035
+77036
+77037
+77038
+77039
+77040
+77041
+77042
+77043
+77044
+77045
+77046
+77047
+77048
+77049
+77050
+77051
+77052
+77053
+77054
+77055
+77056
+77057
+77058
+77059
+77060
+77061
+77062
+77063
+77064
+77065
+77066
+77067
+77068
+77069
+77070
+77071
+77072
+77073
+77074
+77075
+77076
+77077
+77078
+77079
+77080
+77081
+77082
+77083
+77084
+77085
+77086
+77087
+77088
+77089
+77090
+77091
+77092
+77093
+77094
+77095
+77096
+77097
+77098
+77099
+77100
+77101
+77102
+77103
+77104
+77105
+77106
+77107
+77108
+77109
+77110
+77111
+77112
+77113
+77114
+77115
+77116
+77117
+77118
+77119
+77120
+77121
+77122
+77123
+77124
+77125
+77126
+77127
+77128
+77129
+77130
+77131
+77132
+77133
+77134
+77135
+77136
+77137
+77138
+77139
+77140
+77141
+77142
+77143
+77144
+77145
+77146
+77147
+77148
+77149
+77150
+77151
+77152
+77153
+77154
+77155
+77156
+77157
+77158
+77159
+77160
+77161
+77162
+77163
+77164
+77165
+77166
+77167
+77168
+77169
+77170
+77171
+77172
+77173
+77174
+77175
+77176
+77177
+77178
+77179
+77180
+77181
+77182
+77183
+77184
+77185
+77186
+77187
+77188
+77189
+77190
+77191
+77192
+77193
+77194
+77195
+77196
+77197
+77198
+77199
+77200
+77201
+77202
+77203
+77204
+77205
+77206
+77207
+77208
+77209
+77210
+77211
+77212
+77213
+77214
+77215
+77216
+77217
+77218
+77219
+77220
+77221
+77222
+77223
+77224
+77225
+77226
+77227
+77228
+77229
+77230
+77231
+77232
+77233
+77234
+77235
+77236
+77237
+77238
+77239
+77240
+77241
+77242
+77243
+77244
+77245
+77246
+77247
+77248
+77249
+77250
+77251
+77252
+77253
+77254
+77255
+77256
+77257
+77258
+77259
+77260
+77261
+77262
+77263
+77264
+77265
+77266
+77267
+77268
+77269
+77270
+77271
+77272
+77273
+77274
+77275
+77276
+77277
+77278
+77279
+77280
+77281
+77282
+77283
+77284
+77285
+77286
+77287
+77288
+77289
+77290
+77291
+77292
+77293
+77294
+77295
+77296
+77297
+77298
+77299
+77300
+77301
+77302
+77303
+77304
+77305
+77306
+77307
+77308
+77309
+77310
+77311
+77312
+77313
+77314
+77315
+77316
+77317
+77318
+77319
+77320
+77321
+77322
+77323
+77324
+77325
+77326
+77327
+77328
+77329
+77330
+77331
+77332
+77333
+77334
+77335
+77336
+77337
+77338
+77339
+77340
+77341
+77342
+77343
+77344
+77345
+77346
+77347
+77348
+77349
+77350
+77351
+77352
+77353
+77354
+77355
+77356
+77357
+77358
+77359
+77360
+77361
+77362
+77363
+77364
+77365
+77366
+77367
+77368
+77369
+77370
+77371
+77372
+77373
+77374
+77375
+77376
+77377
+77378
+77379
+77380
+77381
+77382
+77383
+77384
+77385
+77386
+77387
+77388
+77389
+77390
+77391
+77392
+77393
+77394
+77395
+77396
+77397
+77398
+77399
+77400
+77401
+77402
+77403
+77404
+77405
+77406
+77407
+77408
+77409
+77410
+77411
+77412
+77413
+77414
+77415
+77416
+77417
+77418
+77419
+77420
+77421
+77422
+77423
+77424
+77425
+77426
+77427
+77428
+77429
+77430
+77431
+77432
+77433
+77434
+77435
+77436
+77437
+77438
+77439
+77440
+77441
+77442
+77443
+77444
+77445
+77446
+77447
+77448
+77449
+77450
+77451
+77452
+77453
+77454
+77455
+77456
+77457
+77458
+77459
+77460
+77461
+77462
+77463
+77464
+77465
+77466
+77467
+77468
+77469
+77470
+77471
+77472
+77473
+77474
+77475
+77476
+77477
+77478
+77479
+77480
+77481
+77482
+77483
+77484
+77485
+77486
+77487
+77488
+77489
+77490
+77491
+77492
+77493
+77494
+77495
+77496
+77497
+77498
+77499
+77500
+77501
+77502
+77503
+77504
+77505
+77506
+77507
+77508
+77509
+77510
+77511
+77512
+77513
+77514
+77515
+77516
+77517
+77518
+77519
+77520
+77521
+77522
+77523
+77524
+77525
+77526
+77527
+77528
+77529
+77530
+77531
+77532
+77533
+77534
+77535
+77536
+77537
+77538
+77539
+77540
+77541
+77542
+77543
+77544
+77545
+77546
+77547
+77548
+77549
+77550
+77551
+77552
+77553
+77554
+77555
+77556
+77557
+77558
+77559
+77560
+77561
+77562
+77563
+77564
+77565
+77566
+77567
+77568
+77569
+77570
+77571
+77572
+77573
+77574
+77575
+77576
+77577
+77578
+77579
+77580
+77581
+77582
+77583
+77584
+77585
+77586
+77587
+77588
+77589
+77590
+77591
+77592
+77593
+77594
+77595
+77596
+77597
+77598
+77599
+77600
+77601
+77602
+77603
+77604
+77605
+77606
+77607
+77608
+77609
+77610
+77611
+77612
+77613
+77614
+77615
+77616
+77617
+77618
+77619
+77620
+77621
+77622
+77623
+77624
+77625
+77626
+77627
+77628
+77629
+77630
+77631
+77632
+77633
+77634
+77635
+77636
+77637
+77638
+77639
+77640
+77641
+77642
+77643
+77644
+77645
+77646
+77647
+77648
+77649
+77650
+77651
+77652
+77653
+77654
+77655
+77656
+77657
+77658
+77659
+77660
+77661
+77662
+77663
+77664
+77665
+77666
+77667
+77668
+77669
+77670
+77671
+77672
+77673
+77674
+77675
+77676
+77677
+77678
+77679
+77680
+77681
+77682
+77683
+77684
+77685
+77686
+77687
+77688
+77689
+77690
+77691
+77692
+77693
+77694
+77695
+77696
+77697
+77698
+77699
+77700
+77701
+77702
+77703
+77704
+77705
+77706
+77707
+77708
+77709
+77710
+77711
+77712
+77713
+77714
+77715
+77716
+77717
+77718
+77719
+77720
+77721
+77722
+77723
+77724
+77725
+77726
+77727
+77728
+77729
+77730
+77731
+77732
+77733
+77734
+77735
+77736
+77737
+77738
+77739
+77740
+77741
+77742
+77743
+77744
+77745
+77746
+77747
+77748
+77749
+77750
+77751
+77752
+77753
+77754
+77755
+77756
+77757
+77758
+77759
+77760
+77761
+77762
+77763
+77764
+77765
+77766
+77767
+77768
+77769
+77770
+77771
+77772
+77773
+77774
+77775
+77776
+77777
+77778
+77779
+77780
+77781
+77782
+77783
+77784
+77785
+77786
+77787
+77788
+77789
+77790
+77791
+77792
+77793
+77794
+77795
+77796
+77797
+77798
+77799
+77800
+77801
+77802
+77803
+77804
+77805
+77806
+77807
+77808
+77809
+77810
+77811
+77812
+77813
+77814
+77815
+77816
+77817
+77818
+77819
+77820
+77821
+77822
+77823
+77824
+77825
+77826
+77827
+77828
+77829
+77830
+77831
+77832
+77833
+77834
+77835
+77836
+77837
+77838
+77839
+77840
+77841
+77842
+77843
+77844
+77845
+77846
+77847
+77848
+77849
+77850
+77851
+77852
+77853
+77854
+77855
+77856
+77857
+77858
+77859
+77860
+77861
+77862
+77863
+77864
+77865
+77866
+77867
+77868
+77869
+77870
+77871
+77872
+77873
+77874
+77875
+77876
+77877
+77878
+77879
+77880
+77881
+77882
+77883
+77884
+77885
+77886
+77887
+77888
+77889
+77890
+77891
+77892
+77893
+77894
+77895
+77896
+77897
+77898
+77899
+77900
+77901
+77902
+77903
+77904
+77905
+77906
+77907
+77908
+77909
+77910
+77911
+77912
+77913
+77914
+77915
+77916
+77917
+77918
+77919
+77920
+77921
+77922
+77923
+77924
+77925
+77926
+77927
+77928
+77929
+77930
+77931
+77932
+77933
+77934
+77935
+77936
+77937
+77938
+77939
+77940
+77941
+77942
+77943
+77944
+77945
+77946
+77947
+77948
+77949
+77950
+77951
+77952
+77953
+77954
+77955
+77956
+77957
+77958
+77959
+77960
+77961
+77962
+77963
+77964
+77965
+77966
+77967
+77968
+77969
+77970
+77971
+77972
+77973
+77974
+77975
+77976
+77977
+77978
+77979
+77980
+77981
+77982
+77983
+77984
+77985
+77986
+77987
+77988
+77989
+77990
+77991
+77992
+77993
+77994
+77995
+77996
+77997
+77998
+77999
+78000
+78001
+78002
+78003
+78004
+78005
+78006
+78007
+78008
+78009
+78010
+78011
+78012
+78013
+78014
+78015
+78016
+78017
+78018
+78019
+78020
+78021
+78022
+78023
+78024
+78025
+78026
+78027
+78028
+78029
+78030
+78031
+78032
+78033
+78034
+78035
+78036
+78037
+78038
+78039
+78040
+78041
+78042
+78043
+78044
+78045
+78046
+78047
+78048
+78049
+78050
+78051
+78052
+78053
+78054
+78055
+78056
+78057
+78058
+78059
+78060
+78061
+78062
+78063
+78064
+78065
+78066
+78067
+78068
+78069
+78070
+78071
+78072
+78073
+78074
+78075
+78076
+78077
+78078
+78079
+78080
+78081
+78082
+78083
+78084
+78085
+78086
+78087
+78088
+78089
+78090
+78091
+78092
+78093
+78094
+78095
+78096
+78097
+78098
+78099
+78100
+78101
+78102
+78103
+78104
+78105
+78106
+78107
+78108
+78109
+78110
+78111
+78112
+78113
+78114
+78115
+78116
+78117
+78118
+78119
+78120
+78121
+78122
+78123
+78124
+78125
+78126
+78127
+78128
+78129
+78130
+78131
+78132
+78133
+78134
+78135
+78136
+78137
+78138
+78139
+78140
+78141
+78142
+78143
+78144
+78145
+78146
+78147
+78148
+78149
+78150
+78151
+78152
+78153
+78154
+78155
+78156
+78157
+78158
+78159
+78160
+78161
+78162
+78163
+78164
+78165
+78166
+78167
+78168
+78169
+78170
+78171
+78172
+78173
+78174
+78175
+78176
+78177
+78178
+78179
+78180
+78181
+78182
+78183
+78184
+78185
+78186
+78187
+78188
+78189
+78190
+78191
+78192
+78193
+78194
+78195
+78196
+78197
+78198
+78199
+78200
+78201
+78202
+78203
+78204
+78205
+78206
+78207
+78208
+78209
+78210
+78211
+78212
+78213
+78214
+78215
+78216
+78217
+78218
+78219
+78220
+78221
+78222
+78223
+78224
+78225
+78226
+78227
+78228
+78229
+78230
+78231
+78232
+78233
+78234
+78235
+78236
+78237
+78238
+78239
+78240
+78241
+78242
+78243
+78244
+78245
+78246
+78247
+78248
+78249
+78250
+78251
+78252
+78253
+78254
+78255
+78256
+78257
+78258
+78259
+78260
+78261
+78262
+78263
+78264
+78265
+78266
+78267
+78268
+78269
+78270
+78271
+78272
+78273
+78274
+78275
+78276
+78277
+78278
+78279
+78280
+78281
+78282
+78283
+78284
+78285
+78286
+78287
+78288
+78289
+78290
+78291
+78292
+78293
+78294
+78295
+78296
+78297
+78298
+78299
+78300
+78301
+78302
+78303
+78304
+78305
+78306
+78307
+78308
+78309
+78310
+78311
+78312
+78313
+78314
+78315
+78316
+78317
+78318
+78319
+78320
+78321
+78322
+78323
+78324
+78325
+78326
+78327
+78328
+78329
+78330
+78331
+78332
+78333
+78334
+78335
+78336
+78337
+78338
+78339
+78340
+78341
+78342
+78343
+78344
+78345
+78346
+78347
+78348
+78349
+78350
+78351
+78352
+78353
+78354
+78355
+78356
+78357
+78358
+78359
+78360
+78361
+78362
+78363
+78364
+78365
+78366
+78367
+78368
+78369
+78370
+78371
+78372
+78373
+78374
+78375
+78376
+78377
+78378
+78379
+78380
+78381
+78382
+78383
+78384
+78385
+78386
+78387
+78388
+78389
+78390
+78391
+78392
+78393
+78394
+78395
+78396
+78397
+78398
+78399
+78400
+78401
+78402
+78403
+78404
+78405
+78406
+78407
+78408
+78409
+78410
+78411
+78412
+78413
+78414
+78415
+78416
+78417
+78418
+78419
+78420
+78421
+78422
+78423
+78424
+78425
+78426
+78427
+78428
+78429
+78430
+78431
+78432
+78433
+78434
+78435
+78436
+78437
+78438
+78439
+78440
+78441
+78442
+78443
+78444
+78445
+78446
+78447
+78448
+78449
+78450
+78451
+78452
+78453
+78454
+78455
+78456
+78457
+78458
+78459
+78460
+78461
+78462
+78463
+78464
+78465
+78466
+78467
+78468
+78469
+78470
+78471
+78472
+78473
+78474
+78475
+78476
+78477
+78478
+78479
+78480
+78481
+78482
+78483
+78484
+78485
+78486
+78487
+78488
+78489
+78490
+78491
+78492
+78493
+78494
+78495
+78496
+78497
+78498
+78499
+78500
+78501
+78502
+78503
+78504
+78505
+78506
+78507
+78508
+78509
+78510
+78511
+78512
+78513
+78514
+78515
+78516
+78517
+78518
+78519
+78520
+78521
+78522
+78523
+78524
+78525
+78526
+78527
+78528
+78529
+78530
+78531
+78532
+78533
+78534
+78535
+78536
+78537
+78538
+78539
+78540
+78541
+78542
+78543
+78544
+78545
+78546
+78547
+78548
+78549
+78550
+78551
+78552
+78553
+78554
+78555
+78556
+78557
+78558
+78559
+78560
+78561
+78562
+78563
+78564
+78565
+78566
+78567
+78568
+78569
+78570
+78571
+78572
+78573
+78574
+78575
+78576
+78577
+78578
+78579
+78580
+78581
+78582
+78583
+78584
+78585
+78586
+78587
+78588
+78589
+78590
+78591
+78592
+78593
+78594
+78595
+78596
+78597
+78598
+78599
+78600
+78601
+78602
+78603
+78604
+78605
+78606
+78607
+78608
+78609
+78610
+78611
+78612
+78613
+78614
+78615
+78616
+78617
+78618
+78619
+78620
+78621
+78622
+78623
+78624
+78625
+78626
+78627
+78628
+78629
+78630
+78631
+78632
+78633
+78634
+78635
+78636
+78637
+78638
+78639
+78640
+78641
+78642
+78643
+78644
+78645
+78646
+78647
+78648
+78649
+78650
+78651
+78652
+78653
+78654
+78655
+78656
+78657
+78658
+78659
+78660
+78661
+78662
+78663
+78664
+78665
+78666
+78667
+78668
+78669
+78670
+78671
+78672
+78673
+78674
+78675
+78676
+78677
+78678
+78679
+78680
+78681
+78682
+78683
+78684
+78685
+78686
+78687
+78688
+78689
+78690
+78691
+78692
+78693
+78694
+78695
+78696
+78697
+78698
+78699
+78700
+78701
+78702
+78703
+78704
+78705
+78706
+78707
+78708
+78709
+78710
+78711
+78712
+78713
+78714
+78715
+78716
+78717
+78718
+78719
+78720
+78721
+78722
+78723
+78724
+78725
+78726
+78727
+78728
+78729
+78730
+78731
+78732
+78733
+78734
+78735
+78736
+78737
+78738
+78739
+78740
+78741
+78742
+78743
+78744
+78745
+78746
+78747
+78748
+78749
+78750
+78751
+78752
+78753
+78754
+78755
+78756
+78757
+78758
+78759
+78760
+78761
+78762
+78763
+78764
+78765
+78766
+78767
+78768
+78769
+78770
+78771
+78772
+78773
+78774
+78775
+78776
+78777
+78778
+78779
+78780
+78781
+78782
+78783
+78784
+78785
+78786
+78787
+78788
+78789
+78790
+78791
+78792
+78793
+78794
+78795
+78796
+78797
+78798
+78799
+78800
+78801
+78802
+78803
+78804
+78805
+78806
+78807
+78808
+78809
+78810
+78811
+78812
+78813
+78814
+78815
+78816
+78817
+78818
+78819
+78820
+78821
+78822
+78823
+78824
+78825
+78826
+78827
+78828
+78829
+78830
+78831
+78832
+78833
+78834
+78835
+78836
+78837
+78838
+78839
+78840
+78841
+78842
+78843
+78844
+78845
+78846
+78847
+78848
+78849
+78850
+78851
+78852
+78853
+78854
+78855
+78856
+78857
+78858
+78859
+78860
+78861
+78862
+78863
+78864
+78865
+78866
+78867
+78868
+78869
+78870
+78871
+78872
+78873
+78874
+78875
+78876
+78877
+78878
+78879
+78880
+78881
+78882
+78883
+78884
+78885
+78886
+78887
+78888
+78889
+78890
+78891
+78892
+78893
+78894
+78895
+78896
+78897
+78898
+78899
+78900
+78901
+78902
+78903
+78904
+78905
+78906
+78907
+78908
+78909
+78910
+78911
+78912
+78913
+78914
+78915
+78916
+78917
+78918
+78919
+78920
+78921
+78922
+78923
+78924
+78925
+78926
+78927
+78928
+78929
+78930
+78931
+78932
+78933
+78934
+78935
+78936
+78937
+78938
+78939
+78940
+78941
+78942
+78943
+78944
+78945
+78946
+78947
+78948
+78949
+78950
+78951
+78952
+78953
+78954
+78955
+78956
+78957
+78958
+78959
+78960
+78961
+78962
+78963
+78964
+78965
+78966
+78967
+78968
+78969
+78970
+78971
+78972
+78973
+78974
+78975
+78976
+78977
+78978
+78979
+78980
+78981
+78982
+78983
+78984
+78985
+78986
+78987
+78988
+78989
+78990
+78991
+78992
+78993
+78994
+78995
+78996
+78997
+78998
+78999
+79000
+79001
+79002
+79003
+79004
+79005
+79006
+79007
+79008
+79009
+79010
+79011
+79012
+79013
+79014
+79015
+79016
+79017
+79018
+79019
+79020
+79021
+79022
+79023
+79024
+79025
+79026
+79027
+79028
+79029
+79030
+79031
+79032
+79033
+79034
+79035
+79036
+79037
+79038
+79039
+79040
+79041
+79042
+79043
+79044
+79045
+79046
+79047
+79048
+79049
+79050
+79051
+79052
+79053
+79054
+79055
+79056
+79057
+79058
+79059
+79060
+79061
+79062
+79063
+79064
+79065
+79066
+79067
+79068
+79069
+79070
+79071
+79072
+79073
+79074
+79075
+79076
+79077
+79078
+79079
+79080
+79081
+79082
+79083
+79084
+79085
+79086
+79087
+79088
+79089
+79090
+79091
+79092
+79093
+79094
+79095
+79096
+79097
+79098
+79099
+79100
+79101
+79102
+79103
+79104
+79105
+79106
+79107
+79108
+79109
+79110
+79111
+79112
+79113
+79114
+79115
+79116
+79117
+79118
+79119
+79120
+79121
+79122
+79123
+79124
+79125
+79126
+79127
+79128
+79129
+79130
+79131
+79132
+79133
+79134
+79135
+79136
+79137
+79138
+79139
+79140
+79141
+79142
+79143
+79144
+79145
+79146
+79147
+79148
+79149
+79150
+79151
+79152
+79153
+79154
+79155
+79156
+79157
+79158
+79159
+79160
+79161
+79162
+79163
+79164
+79165
+79166
+79167
+79168
+79169
+79170
+79171
+79172
+79173
+79174
+79175
+79176
+79177
+79178
+79179
+79180
+79181
+79182
+79183
+79184
+79185
+79186
+79187
+79188
+79189
+79190
+79191
+79192
+79193
+79194
+79195
+79196
+79197
+79198
+79199
+79200
+79201
+79202
+79203
+79204
+79205
+79206
+79207
+79208
+79209
+79210
+79211
+79212
+79213
+79214
+79215
+79216
+79217
+79218
+79219
+79220
+79221
+79222
+79223
+79224
+79225
+79226
+79227
+79228
+79229
+79230
+79231
+79232
+79233
+79234
+79235
+79236
+79237
+79238
+79239
+79240
+79241
+79242
+79243
+79244
+79245
+79246
+79247
+79248
+79249
+79250
+79251
+79252
+79253
+79254
+79255
+79256
+79257
+79258
+79259
+79260
+79261
+79262
+79263
+79264
+79265
+79266
+79267
+79268
+79269
+79270
+79271
+79272
+79273
+79274
+79275
+79276
+79277
+79278
+79279
+79280
+79281
+79282
+79283
+79284
+79285
+79286
+79287
+79288
+79289
+79290
+79291
+79292
+79293
+79294
+79295
+79296
+79297
+79298
+79299
+79300
+79301
+79302
+79303
+79304
+79305
+79306
+79307
+79308
+79309
+79310
+79311
+79312
+79313
+79314
+79315
+79316
+79317
+79318
+79319
+79320
+79321
+79322
+79323
+79324
+79325
+79326
+79327
+79328
+79329
+79330
+79331
+79332
+79333
+79334
+79335
+79336
+79337
+79338
+79339
+79340
+79341
+79342
+79343
+79344
+79345
+79346
+79347
+79348
+79349
+79350
+79351
+79352
+79353
+79354
+79355
+79356
+79357
+79358
+79359
+79360
+79361
+79362
+79363
+79364
+79365
+79366
+79367
+79368
+79369
+79370
+79371
+79372
+79373
+79374
+79375
+79376
+79377
+79378
+79379
+79380
+79381
+79382
+79383
+79384
+79385
+79386
+79387
+79388
+79389
+79390
+79391
+79392
+79393
+79394
+79395
+79396
+79397
+79398
+79399
+79400
+79401
+79402
+79403
+79404
+79405
+79406
+79407
+79408
+79409
+79410
+79411
+79412
+79413
+79414
+79415
+79416
+79417
+79418
+79419
+79420
+79421
+79422
+79423
+79424
+79425
+79426
+79427
+79428
+79429
+79430
+79431
+79432
+79433
+79434
+79435
+79436
+79437
+79438
+79439
+79440
+79441
+79442
+79443
+79444
+79445
+79446
+79447
+79448
+79449
+79450
+79451
+79452
+79453
+79454
+79455
+79456
+79457
+79458
+79459
+79460
+79461
+79462
+79463
+79464
+79465
+79466
+79467
+79468
+79469
+79470
+79471
+79472
+79473
+79474
+79475
+79476
+79477
+79478
+79479
+79480
+79481
+79482
+79483
+79484
+79485
+79486
+79487
+79488
+79489
+79490
+79491
+79492
+79493
+79494
+79495
+79496
+79497
+79498
+79499
+79500
+79501
+79502
+79503
+79504
+79505
+79506
+79507
+79508
+79509
+79510
+79511
+79512
+79513
+79514
+79515
+79516
+79517
+79518
+79519
+79520
+79521
+79522
+79523
+79524
+79525
+79526
+79527
+79528
+79529
+79530
+79531
+79532
+79533
+79534
+79535
+79536
+79537
+79538
+79539
+79540
+79541
+79542
+79543
+79544
+79545
+79546
+79547
+79548
+79549
+79550
+79551
+79552
+79553
+79554
+79555
+79556
+79557
+79558
+79559
+79560
+79561
+79562
+79563
+79564
+79565
+79566
+79567
+79568
+79569
+79570
+79571
+79572
+79573
+79574
+79575
+79576
+79577
+79578
+79579
+79580
+79581
+79582
+79583
+79584
+79585
+79586
+79587
+79588
+79589
+79590
+79591
+79592
+79593
+79594
+79595
+79596
+79597
+79598
+79599
+79600
+79601
+79602
+79603
+79604
+79605
+79606
+79607
+79608
+79609
+79610
+79611
+79612
+79613
+79614
+79615
+79616
+79617
+79618
+79619
+79620
+79621
+79622
+79623
+79624
+79625
+79626
+79627
+79628
+79629
+79630
+79631
+79632
+79633
+79634
+79635
+79636
+79637
+79638
+79639
+79640
+79641
+79642
+79643
+79644
+79645
+79646
+79647
+79648
+79649
+79650
+79651
+79652
+79653
+79654
+79655
+79656
+79657
+79658
+79659
+79660
+79661
+79662
+79663
+79664
+79665
+79666
+79667
+79668
+79669
+79670
+79671
+79672
+79673
+79674
+79675
+79676
+79677
+79678
+79679
+79680
+79681
+79682
+79683
+79684
+79685
+79686
+79687
+79688
+79689
+79690
+79691
+79692
+79693
+79694
+79695
+79696
+79697
+79698
+79699
+79700
+79701
+79702
+79703
+79704
+79705
+79706
+79707
+79708
+79709
+79710
+79711
+79712
+79713
+79714
+79715
+79716
+79717
+79718
+79719
+79720
+79721
+79722
+79723
+79724
+79725
+79726
+79727
+79728
+79729
+79730
+79731
+79732
+79733
+79734
+79735
+79736
+79737
+79738
+79739
+79740
+79741
+79742
+79743
+79744
+79745
+79746
+79747
+79748
+79749
+79750
+79751
+79752
+79753
+79754
+79755
+79756
+79757
+79758
+79759
+79760
+79761
+79762
+79763
+79764
+79765
+79766
+79767
+79768
+79769
+79770
+79771
+79772
+79773
+79774
+79775
+79776
+79777
+79778
+79779
+79780
+79781
+79782
+79783
+79784
+79785
+79786
+79787
+79788
+79789
+79790
+79791
+79792
+79793
+79794
+79795
+79796
+79797
+79798
+79799
+79800
+79801
+79802
+79803
+79804
+79805
+79806
+79807
+79808
+79809
+79810
+79811
+79812
+79813
+79814
+79815
+79816
+79817
+79818
+79819
+79820
+79821
+79822
+79823
+79824
+79825
+79826
+79827
+79828
+79829
+79830
+79831
+79832
+79833
+79834
+79835
+79836
+79837
+79838
+79839
+79840
+79841
+79842
+79843
+79844
+79845
+79846
+79847
+79848
+79849
+79850
+79851
+79852
+79853
+79854
+79855
+79856
+79857
+79858
+79859
+79860
+79861
+79862
+79863
+79864
+79865
+79866
+79867
+79868
+79869
+79870
+79871
+79872
+79873
+79874
+79875
+79876
+79877
+79878
+79879
+79880
+79881
+79882
+79883
+79884
+79885
+79886
+79887
+79888
+79889
+79890
+79891
+79892
+79893
+79894
+79895
+79896
+79897
+79898
+79899
+79900
+79901
+79902
+79903
+79904
+79905
+79906
+79907
+79908
+79909
+79910
+79911
+79912
+79913
+79914
+79915
+79916
+79917
+79918
+79919
+79920
+79921
+79922
+79923
+79924
+79925
+79926
+79927
+79928
+79929
+79930
+79931
+79932
+79933
+79934
+79935
+79936
+79937
+79938
+79939
+79940
+79941
+79942
+79943
+79944
+79945
+79946
+79947
+79948
+79949
+79950
+79951
+79952
+79953
+79954
+79955
+79956
+79957
+79958
+79959
+79960
+79961
+79962
+79963
+79964
+79965
+79966
+79967
+79968
+79969
+79970
+79971
+79972
+79973
+79974
+79975
+79976
+79977
+79978
+79979
+79980
+79981
+79982
+79983
+79984
+79985
+79986
+79987
+79988
+79989
+79990
+79991
+79992
+79993
+79994
+79995
+79996
+79997
+79998
+79999
+80000
+80001
+80002
+80003
+80004
+80005
+80006
+80007
+80008
+80009
+80010
+80011
+80012
+80013
+80014
+80015
+80016
+80017
+80018
+80019
+80020
+80021
+80022
+80023
+80024
+80025
+80026
+80027
+80028
+80029
+80030
+80031
+80032
+80033
+80034
+80035
+80036
+80037
+80038
+80039
+80040
+80041
+80042
+80043
+80044
+80045
+80046
+80047
+80048
+80049
+80050
+80051
+80052
+80053
+80054
+80055
+80056
+80057
+80058
+80059
+80060
+80061
+80062
+80063
+80064
+80065
+80066
+80067
+80068
+80069
+80070
+80071
+80072
+80073
+80074
+80075
+80076
+80077
+80078
+80079
+80080
+80081
+80082
+80083
+80084
+80085
+80086
+80087
+80088
+80089
+80090
+80091
+80092
+80093
+80094
+80095
+80096
+80097
+80098
+80099
+80100
+80101
+80102
+80103
+80104
+80105
+80106
+80107
+80108
+80109
+80110
+80111
+80112
+80113
+80114
+80115
+80116
+80117
+80118
+80119
+80120
+80121
+80122
+80123
+80124
+80125
+80126
+80127
+80128
+80129
+80130
+80131
+80132
+80133
+80134
+80135
+80136
+80137
+80138
+80139
+80140
+80141
+80142
+80143
+80144
+80145
+80146
+80147
+80148
+80149
+80150
+80151
+80152
+80153
+80154
+80155
+80156
+80157
+80158
+80159
+80160
+80161
+80162
+80163
+80164
+80165
+80166
+80167
+80168
+80169
+80170
+80171
+80172
+80173
+80174
+80175
+80176
+80177
+80178
+80179
+80180
+80181
+80182
+80183
+80184
+80185
+80186
+80187
+80188
+80189
+80190
+80191
+80192
+80193
+80194
+80195
+80196
+80197
+80198
+80199
+80200
+80201
+80202
+80203
+80204
+80205
+80206
+80207
+80208
+80209
+80210
+80211
+80212
+80213
+80214
+80215
+80216
+80217
+80218
+80219
+80220
+80221
+80222
+80223
+80224
+80225
+80226
+80227
+80228
+80229
+80230
+80231
+80232
+80233
+80234
+80235
+80236
+80237
+80238
+80239
+80240
+80241
+80242
+80243
+80244
+80245
+80246
+80247
+80248
+80249
+80250
+80251
+80252
+80253
+80254
+80255
+80256
+80257
+80258
+80259
+80260
+80261
+80262
+80263
+80264
+80265
+80266
+80267
+80268
+80269
+80270
+80271
+80272
+80273
+80274
+80275
+80276
+80277
+80278
+80279
+80280
+80281
+80282
+80283
+80284
+80285
+80286
+80287
+80288
+80289
+80290
+80291
+80292
+80293
+80294
+80295
+80296
+80297
+80298
+80299
+80300
+80301
+80302
+80303
+80304
+80305
+80306
+80307
+80308
+80309
+80310
+80311
+80312
+80313
+80314
+80315
+80316
+80317
+80318
+80319
+80320
+80321
+80322
+80323
+80324
+80325
+80326
+80327
+80328
+80329
+80330
+80331
+80332
+80333
+80334
+80335
+80336
+80337
+80338
+80339
+80340
+80341
+80342
+80343
+80344
+80345
+80346
+80347
+80348
+80349
+80350
+80351
+80352
+80353
+80354
+80355
+80356
+80357
+80358
+80359
+80360
+80361
+80362
+80363
+80364
+80365
+80366
+80367
+80368
+80369
+80370
+80371
+80372
+80373
+80374
+80375
+80376
+80377
+80378
+80379
+80380
+80381
+80382
+80383
+80384
+80385
+80386
+80387
+80388
+80389
+80390
+80391
+80392
+80393
+80394
+80395
+80396
+80397
+80398
+80399
+80400
+80401
+80402
+80403
+80404
+80405
+80406
+80407
+80408
+80409
+80410
+80411
+80412
+80413
+80414
+80415
+80416
+80417
+80418
+80419
+80420
+80421
+80422
+80423
+80424
+80425
+80426
+80427
+80428
+80429
+80430
+80431
+80432
+80433
+80434
+80435
+80436
+80437
+80438
+80439
+80440
+80441
+80442
+80443
+80444
+80445
+80446
+80447
+80448
+80449
+80450
+80451
+80452
+80453
+80454
+80455
+80456
+80457
+80458
+80459
+80460
+80461
+80462
+80463
+80464
+80465
+80466
+80467
+80468
+80469
+80470
+80471
+80472
+80473
+80474
+80475
+80476
+80477
+80478
+80479
+80480
+80481
+80482
+80483
+80484
+80485
+80486
+80487
+80488
+80489
+80490
+80491
+80492
+80493
+80494
+80495
+80496
+80497
+80498
+80499
+80500
+80501
+80502
+80503
+80504
+80505
+80506
+80507
+80508
+80509
+80510
+80511
+80512
+80513
+80514
+80515
+80516
+80517
+80518
+80519
+80520
+80521
+80522
+80523
+80524
+80525
+80526
+80527
+80528
+80529
+80530
+80531
+80532
+80533
+80534
+80535
+80536
+80537
+80538
+80539
+80540
+80541
+80542
+80543
+80544
+80545
+80546
+80547
+80548
+80549
+80550
+80551
+80552
+80553
+80554
+80555
+80556
+80557
+80558
+80559
+80560
+80561
+80562
+80563
+80564
+80565
+80566
+80567
+80568
+80569
+80570
+80571
+80572
+80573
+80574
+80575
+80576
+80577
+80578
+80579
+80580
+80581
+80582
+80583
+80584
+80585
+80586
+80587
+80588
+80589
+80590
+80591
+80592
+80593
+80594
+80595
+80596
+80597
+80598
+80599
+80600
+80601
+80602
+80603
+80604
+80605
+80606
+80607
+80608
+80609
+80610
+80611
+80612
+80613
+80614
+80615
+80616
+80617
+80618
+80619
+80620
+80621
+80622
+80623
+80624
+80625
+80626
+80627
+80628
+80629
+80630
+80631
+80632
+80633
+80634
+80635
+80636
+80637
+80638
+80639
+80640
+80641
+80642
+80643
+80644
+80645
+80646
+80647
+80648
+80649
+80650
+80651
+80652
+80653
+80654
+80655
+80656
+80657
+80658
+80659
+80660
+80661
+80662
+80663
+80664
+80665
+80666
+80667
+80668
+80669
+80670
+80671
+80672
+80673
+80674
+80675
+80676
+80677
+80678
+80679
+80680
+80681
+80682
+80683
+80684
+80685
+80686
+80687
+80688
+80689
+80690
+80691
+80692
+80693
+80694
+80695
+80696
+80697
+80698
+80699
+80700
+80701
+80702
+80703
+80704
+80705
+80706
+80707
+80708
+80709
+80710
+80711
+80712
+80713
+80714
+80715
+80716
+80717
+80718
+80719
+80720
+80721
+80722
+80723
+80724
+80725
+80726
+80727
+80728
+80729
+80730
+80731
+80732
+80733
+80734
+80735
+80736
+80737
+80738
+80739
+80740
+80741
+80742
+80743
+80744
+80745
+80746
+80747
+80748
+80749
+80750
+80751
+80752
+80753
+80754
+80755
+80756
+80757
+80758
+80759
+80760
+80761
+80762
+80763
+80764
+80765
+80766
+80767
+80768
+80769
+80770
+80771
+80772
+80773
+80774
+80775
+80776
+80777
+80778
+80779
+80780
+80781
+80782
+80783
+80784
+80785
+80786
+80787
+80788
+80789
+80790
+80791
+80792
+80793
+80794
+80795
+80796
+80797
+80798
+80799
+80800
+80801
+80802
+80803
+80804
+80805
+80806
+80807
+80808
+80809
+80810
+80811
+80812
+80813
+80814
+80815
+80816
+80817
+80818
+80819
+80820
+80821
+80822
+80823
+80824
+80825
+80826
+80827
+80828
+80829
+80830
+80831
+80832
+80833
+80834
+80835
+80836
+80837
+80838
+80839
+80840
+80841
+80842
+80843
+80844
+80845
+80846
+80847
+80848
+80849
+80850
+80851
+80852
+80853
+80854
+80855
+80856
+80857
+80858
+80859
+80860
+80861
+80862
+80863
+80864
+80865
+80866
+80867
+80868
+80869
+80870
+80871
+80872
+80873
+80874
+80875
+80876
+80877
+80878
+80879
+80880
+80881
+80882
+80883
+80884
+80885
+80886
+80887
+80888
+80889
+80890
+80891
+80892
+80893
+80894
+80895
+80896
+80897
+80898
+80899
+80900
+80901
+80902
+80903
+80904
+80905
+80906
+80907
+80908
+80909
+80910
+80911
+80912
+80913
+80914
+80915
+80916
+80917
+80918
+80919
+80920
+80921
+80922
+80923
+80924
+80925
+80926
+80927
+80928
+80929
+80930
+80931
+80932
+80933
+80934
+80935
+80936
+80937
+80938
+80939
+80940
+80941
+80942
+80943
+80944
+80945
+80946
+80947
+80948
+80949
+80950
+80951
+80952
+80953
+80954
+80955
+80956
+80957
+80958
+80959
+80960
+80961
+80962
+80963
+80964
+80965
+80966
+80967
+80968
+80969
+80970
+80971
+80972
+80973
+80974
+80975
+80976
+80977
+80978
+80979
+80980
+80981
+80982
+80983
+80984
+80985
+80986
+80987
+80988
+80989
+80990
+80991
+80992
+80993
+80994
+80995
+80996
+80997
+80998
+80999
+81000
+81001
+81002
+81003
+81004
+81005
+81006
+81007
+81008
+81009
+81010
+81011
+81012
+81013
+81014
+81015
+81016
+81017
+81018
+81019
+81020
+81021
+81022
+81023
+81024
+81025
+81026
+81027
+81028
+81029
+81030
+81031
+81032
+81033
+81034
+81035
+81036
+81037
+81038
+81039
+81040
+81041
+81042
+81043
+81044
+81045
+81046
+81047
+81048
+81049
+81050
+81051
+81052
+81053
+81054
+81055
+81056
+81057
+81058
+81059
+81060
+81061
+81062
+81063
+81064
+81065
+81066
+81067
+81068
+81069
+81070
+81071
+81072
+81073
+81074
+81075
+81076
+81077
+81078
+81079
+81080
+81081
+81082
+81083
+81084
+81085
+81086
+81087
+81088
+81089
+81090
+81091
+81092
+81093
+81094
+81095
+81096
+81097
+81098
+81099
+81100
+81101
+81102
+81103
+81104
+81105
+81106
+81107
+81108
+81109
+81110
+81111
+81112
+81113
+81114
+81115
+81116
+81117
+81118
+81119
+81120
+81121
+81122
+81123
+81124
+81125
+81126
+81127
+81128
+81129
+81130
+81131
+81132
+81133
+81134
+81135
+81136
+81137
+81138
+81139
+81140
+81141
+81142
+81143
+81144
+81145
+81146
+81147
+81148
+81149
+81150
+81151
+81152
+81153
+81154
+81155
+81156
+81157
+81158
+81159
+81160
+81161
+81162
+81163
+81164
+81165
+81166
+81167
+81168
+81169
+81170
+81171
+81172
+81173
+81174
+81175
+81176
+81177
+81178
+81179
+81180
+81181
+81182
+81183
+81184
+81185
+81186
+81187
+81188
+81189
+81190
+81191
+81192
+81193
+81194
+81195
+81196
+81197
+81198
+81199
+81200
+81201
+81202
+81203
+81204
+81205
+81206
+81207
+81208
+81209
+81210
+81211
+81212
+81213
+81214
+81215
+81216
+81217
+81218
+81219
+81220
+81221
+81222
+81223
+81224
+81225
+81226
+81227
+81228
+81229
+81230
+81231
+81232
+81233
+81234
+81235
+81236
+81237
+81238
+81239
+81240
+81241
+81242
+81243
+81244
+81245
+81246
+81247
+81248
+81249
+81250
+81251
+81252
+81253
+81254
+81255
+81256
+81257
+81258
+81259
+81260
+81261
+81262
+81263
+81264
+81265
+81266
+81267
+81268
+81269
+81270
+81271
+81272
+81273
+81274
+81275
+81276
+81277
+81278
+81279
+81280
+81281
+81282
+81283
+81284
+81285
+81286
+81287
+81288
+81289
+81290
+81291
+81292
+81293
+81294
+81295
+81296
+81297
+81298
+81299
+81300
+81301
+81302
+81303
+81304
+81305
+81306
+81307
+81308
+81309
+81310
+81311
+81312
+81313
+81314
+81315
+81316
+81317
+81318
+81319
+81320
+81321
+81322
+81323
+81324
+81325
+81326
+81327
+81328
+81329
+81330
+81331
+81332
+81333
+81334
+81335
+81336
+81337
+81338
+81339
+81340
+81341
+81342
+81343
+81344
+81345
+81346
+81347
+81348
+81349
+81350
+81351
+81352
+81353
+81354
+81355
+81356
+81357
+81358
+81359
+81360
+81361
+81362
+81363
+81364
+81365
+81366
+81367
+81368
+81369
+81370
+81371
+81372
+81373
+81374
+81375
+81376
+81377
+81378
+81379
+81380
+81381
+81382
+81383
+81384
+81385
+81386
+81387
+81388
+81389
+81390
+81391
+81392
+81393
+81394
+81395
+81396
+81397
+81398
+81399
+81400
+81401
+81402
+81403
+81404
+81405
+81406
+81407
+81408
+81409
+81410
+81411
+81412
+81413
+81414
+81415
+81416
+81417
+81418
+81419
+81420
+81421
+81422
+81423
+81424
+81425
+81426
+81427
+81428
+81429
+81430
+81431
+81432
+81433
+81434
+81435
+81436
+81437
+81438
+81439
+81440
+81441
+81442
+81443
+81444
+81445
+81446
+81447
+81448
+81449
+81450
+81451
+81452
+81453
+81454
+81455
+81456
+81457
+81458
+81459
+81460
+81461
+81462
+81463
+81464
+81465
+81466
+81467
+81468
+81469
+81470
+81471
+81472
+81473
+81474
+81475
+81476
+81477
+81478
+81479
+81480
+81481
+81482
+81483
+81484
+81485
+81486
+81487
+81488
+81489
+81490
+81491
+81492
+81493
+81494
+81495
+81496
+81497
+81498
+81499
+81500
+81501
+81502
+81503
+81504
+81505
+81506
+81507
+81508
+81509
+81510
+81511
+81512
+81513
+81514
+81515
+81516
+81517
+81518
+81519
+81520
+81521
+81522
+81523
+81524
+81525
+81526
+81527
+81528
+81529
+81530
+81531
+81532
+81533
+81534
+81535
+81536
+81537
+81538
+81539
+81540
+81541
+81542
+81543
+81544
+81545
+81546
+81547
+81548
+81549
+81550
+81551
+81552
+81553
+81554
+81555
+81556
+81557
+81558
+81559
+81560
+81561
+81562
+81563
+81564
+81565
+81566
+81567
+81568
+81569
+81570
+81571
+81572
+81573
+81574
+81575
+81576
+81577
+81578
+81579
+81580
+81581
+81582
+81583
+81584
+81585
+81586
+81587
+81588
+81589
+81590
+81591
+81592
+81593
+81594
+81595
+81596
+81597
+81598
+81599
+81600
+81601
+81602
+81603
+81604
+81605
+81606
+81607
+81608
+81609
+81610
+81611
+81612
+81613
+81614
+81615
+81616
+81617
+81618
+81619
+81620
+81621
+81622
+81623
+81624
+81625
+81626
+81627
+81628
+81629
+81630
+81631
+81632
+81633
+81634
+81635
+81636
+81637
+81638
+81639
+81640
+81641
+81642
+81643
+81644
+81645
+81646
+81647
+81648
+81649
+81650
+81651
+81652
+81653
+81654
+81655
+81656
+81657
+81658
+81659
+81660
+81661
+81662
+81663
+81664
+81665
+81666
+81667
+81668
+81669
+81670
+81671
+81672
+81673
+81674
+81675
+81676
+81677
+81678
+81679
+81680
+81681
+81682
+81683
+81684
+81685
+81686
+81687
+81688
+81689
+81690
+81691
+81692
+81693
+81694
+81695
+81696
+81697
+81698
+81699
+81700
+81701
+81702
+81703
+81704
+81705
+81706
+81707
+81708
+81709
+81710
+81711
+81712
+81713
+81714
+81715
+81716
+81717
+81718
+81719
+81720
+81721
+81722
+81723
+81724
+81725
+81726
+81727
+81728
+81729
+81730
+81731
+81732
+81733
+81734
+81735
+81736
+81737
+81738
+81739
+81740
+81741
+81742
+81743
+81744
+81745
+81746
+81747
+81748
+81749
+81750
+81751
+81752
+81753
+81754
+81755
+81756
+81757
+81758
+81759
+81760
+81761
+81762
+81763
+81764
+81765
+81766
+81767
+81768
+81769
+81770
+81771
+81772
+81773
+81774
+81775
+81776
+81777
+81778
+81779
+81780
+81781
+81782
+81783
+81784
+81785
+81786
+81787
+81788
+81789
+81790
+81791
+81792
+81793
+81794
+81795
+81796
+81797
+81798
+81799
+81800
+81801
+81802
+81803
+81804
+81805
+81806
+81807
+81808
+81809
+81810
+81811
+81812
+81813
+81814
+81815
+81816
+81817
+81818
+81819
+81820
+81821
+81822
+81823
+81824
+81825
+81826
+81827
+81828
+81829
+81830
+81831
+81832
+81833
+81834
+81835
+81836
+81837
+81838
+81839
+81840
+81841
+81842
+81843
+81844
+81845
+81846
+81847
+81848
+81849
+81850
+81851
+81852
+81853
+81854
+81855
+81856
+81857
+81858
+81859
+81860
+81861
+81862
+81863
+81864
+81865
+81866
+81867
+81868
+81869
+81870
+81871
+81872
+81873
+81874
+81875
+81876
+81877
+81878
+81879
+81880
+81881
+81882
+81883
+81884
+81885
+81886
+81887
+81888
+81889
+81890
+81891
+81892
+81893
+81894
+81895
+81896
+81897
+81898
+81899
+81900
+81901
+81902
+81903
+81904
+81905
+81906
+81907
+81908
+81909
+81910
+81911
+81912
+81913
+81914
+81915
+81916
+81917
+81918
+81919
+81920
+81921
+81922
+81923
+81924
+81925
+81926
+81927
+81928
+81929
+81930
+81931
+81932
+81933
+81934
+81935
+81936
+81937
+81938
+81939
+81940
+81941
+81942
+81943
+81944
+81945
+81946
+81947
+81948
+81949
+81950
+81951
+81952
+81953
+81954
+81955
+81956
+81957
+81958
+81959
+81960
+81961
+81962
+81963
+81964
+81965
+81966
+81967
+81968
+81969
+81970
+81971
+81972
+81973
+81974
+81975
+81976
+81977
+81978
+81979
+81980
+81981
+81982
+81983
+81984
+81985
+81986
+81987
+81988
+81989
+81990
+81991
+81992
+81993
+81994
+81995
+81996
+81997
+81998
+81999
+82000
+82001
+82002
+82003
+82004
+82005
+82006
+82007
+82008
+82009
+82010
+82011
+82012
+82013
+82014
+82015
+82016
+82017
+82018
+82019
+82020
+82021
+82022
+82023
+82024
+82025
+82026
+82027
+82028
+82029
+82030
+82031
+82032
+82033
+82034
+82035
+82036
+82037
+82038
+82039
+82040
+82041
+82042
+82043
+82044
+82045
+82046
+82047
+82048
+82049
+82050
+82051
+82052
+82053
+82054
+82055
+82056
+82057
+82058
+82059
+82060
+82061
+82062
+82063
+82064
+82065
+82066
+82067
+82068
+82069
+82070
+82071
+82072
+82073
+82074
+82075
+82076
+82077
+82078
+82079
+82080
+82081
+82082
+82083
+82084
+82085
+82086
+82087
+82088
+82089
+82090
+82091
+82092
+82093
+82094
+82095
+82096
+82097
+82098
+82099
+82100
+82101
+82102
+82103
+82104
+82105
+82106
+82107
+82108
+82109
+82110
+82111
+82112
+82113
+82114
+82115
+82116
+82117
+82118
+82119
+82120
+82121
+82122
+82123
+82124
+82125
+82126
+82127
+82128
+82129
+82130
+82131
+82132
+82133
+82134
+82135
+82136
+82137
+82138
+82139
+82140
+82141
+82142
+82143
+82144
+82145
+82146
+82147
+82148
+82149
+82150
+82151
+82152
+82153
+82154
+82155
+82156
+82157
+82158
+82159
+82160
+82161
+82162
+82163
+82164
+82165
+82166
+82167
+82168
+82169
+82170
+82171
+82172
+82173
+82174
+82175
+82176
+82177
+82178
+82179
+82180
+82181
+82182
+82183
+82184
+82185
+82186
+82187
+82188
+82189
+82190
+82191
+82192
+82193
+82194
+82195
+82196
+82197
+82198
+82199
+82200
+82201
+82202
+82203
+82204
+82205
+82206
+82207
+82208
+82209
+82210
+82211
+82212
+82213
+82214
+82215
+82216
+82217
+82218
+82219
+82220
+82221
+82222
+82223
+82224
+82225
+82226
+82227
+82228
+82229
+82230
+82231
+82232
+82233
+82234
+82235
+82236
+82237
+82238
+82239
+82240
+82241
+82242
+82243
+82244
+82245
+82246
+82247
+82248
+82249
+82250
+82251
+82252
+82253
+82254
+82255
+82256
+82257
+82258
+82259
+82260
+82261
+82262
+82263
+82264
+82265
+82266
+82267
+82268
+82269
+82270
+82271
+82272
+82273
+82274
+82275
+82276
+82277
+82278
+82279
+82280
+82281
+82282
+82283
+82284
+82285
+82286
+82287
+82288
+82289
+82290
+82291
+82292
+82293
+82294
+82295
+82296
+82297
+82298
+82299
+82300
+82301
+82302
+82303
+82304
+82305
+82306
+82307
+82308
+82309
+82310
+82311
+82312
+82313
+82314
+82315
+82316
+82317
+82318
+82319
+82320
+82321
+82322
+82323
+82324
+82325
+82326
+82327
+82328
+82329
+82330
+82331
+82332
+82333
+82334
+82335
+82336
+82337
+82338
+82339
+82340
+82341
+82342
+82343
+82344
+82345
+82346
+82347
+82348
+82349
+82350
+82351
+82352
+82353
+82354
+82355
+82356
+82357
+82358
+82359
+82360
+82361
+82362
+82363
+82364
+82365
+82366
+82367
+82368
+82369
+82370
+82371
+82372
+82373
+82374
+82375
+82376
+82377
+82378
+82379
+82380
+82381
+82382
+82383
+82384
+82385
+82386
+82387
+82388
+82389
+82390
+82391
+82392
+82393
+82394
+82395
+82396
+82397
+82398
+82399
+82400
+82401
+82402
+82403
+82404
+82405
+82406
+82407
+82408
+82409
+82410
+82411
+82412
+82413
+82414
+82415
+82416
+82417
+82418
+82419
+82420
+82421
+82422
+82423
+82424
+82425
+82426
+82427
+82428
+82429
+82430
+82431
+82432
+82433
+82434
+82435
+82436
+82437
+82438
+82439
+82440
+82441
+82442
+82443
+82444
+82445
+82446
+82447
+82448
+82449
+82450
+82451
+82452
+82453
+82454
+82455
+82456
+82457
+82458
+82459
+82460
+82461
+82462
+82463
+82464
+82465
+82466
+82467
+82468
+82469
+82470
+82471
+82472
+82473
+82474
+82475
+82476
+82477
+82478
+82479
+82480
+82481
+82482
+82483
+82484
+82485
+82486
+82487
+82488
+82489
+82490
+82491
+82492
+82493
+82494
+82495
+82496
+82497
+82498
+82499
+82500
+82501
+82502
+82503
+82504
+82505
+82506
+82507
+82508
+82509
+82510
+82511
+82512
+82513
+82514
+82515
+82516
+82517
+82518
+82519
+82520
+82521
+82522
+82523
+82524
+82525
+82526
+82527
+82528
+82529
+82530
+82531
+82532
+82533
+82534
+82535
+82536
+82537
+82538
+82539
+82540
+82541
+82542
+82543
+82544
+82545
+82546
+82547
+82548
+82549
+82550
+82551
+82552
+82553
+82554
+82555
+82556
+82557
+82558
+82559
+82560
+82561
+82562
+82563
+82564
+82565
+82566
+82567
+82568
+82569
+82570
+82571
+82572
+82573
+82574
+82575
+82576
+82577
+82578
+82579
+82580
+82581
+82582
+82583
+82584
+82585
+82586
+82587
+82588
+82589
+82590
+82591
+82592
+82593
+82594
+82595
+82596
+82597
+82598
+82599
+82600
+82601
+82602
+82603
+82604
+82605
+82606
+82607
+82608
+82609
+82610
+82611
+82612
+82613
+82614
+82615
+82616
+82617
+82618
+82619
+82620
+82621
+82622
+82623
+82624
+82625
+82626
+82627
+82628
+82629
+82630
+82631
+82632
+82633
+82634
+82635
+82636
+82637
+82638
+82639
+82640
+82641
+82642
+82643
+82644
+82645
+82646
+82647
+82648
+82649
+82650
+82651
+82652
+82653
+82654
+82655
+82656
+82657
+82658
+82659
+82660
+82661
+82662
+82663
+82664
+82665
+82666
+82667
+82668
+82669
+82670
+82671
+82672
+82673
+82674
+82675
+82676
+82677
+82678
+82679
+82680
+82681
+82682
+82683
+82684
+82685
+82686
+82687
+82688
+82689
+82690
+82691
+82692
+82693
+82694
+82695
+82696
+82697
+82698
+82699
+82700
+82701
+82702
+82703
+82704
+82705
+82706
+82707
+82708
+82709
+82710
+82711
+82712
+82713
+82714
+82715
+82716
+82717
+82718
+82719
+82720
+82721
+82722
+82723
+82724
+82725
+82726
+82727
+82728
+82729
+82730
+82731
+82732
+82733
+82734
+82735
+82736
+82737
+82738
+82739
+82740
+82741
+82742
+82743
+82744
+82745
+82746
+82747
+82748
+82749
+82750
+82751
+82752
+82753
+82754
+82755
+82756
+82757
+82758
+82759
+82760
+82761
+82762
+82763
+82764
+82765
+82766
+82767
+82768
+82769
+82770
+82771
+82772
+82773
+82774
+82775
+82776
+82777
+82778
+82779
+82780
+82781
+82782
+82783
+82784
+82785
+82786
+82787
+82788
+82789
+82790
+82791
+82792
+82793
+82794
+82795
+82796
+82797
+82798
+82799
+82800
+82801
+82802
+82803
+82804
+82805
+82806
+82807
+82808
+82809
+82810
+82811
+82812
+82813
+82814
+82815
+82816
+82817
+82818
+82819
+82820
+82821
+82822
+82823
+82824
+82825
+82826
+82827
+82828
+82829
+82830
+82831
+82832
+82833
+82834
+82835
+82836
+82837
+82838
+82839
+82840
+82841
+82842
+82843
+82844
+82845
+82846
+82847
+82848
+82849
+82850
+82851
+82852
+82853
+82854
+82855
+82856
+82857
+82858
+82859
+82860
+82861
+82862
+82863
+82864
+82865
+82866
+82867
+82868
+82869
+82870
+82871
+82872
+82873
+82874
+82875
+82876
+82877
+82878
+82879
+82880
+82881
+82882
+82883
+82884
+82885
+82886
+82887
+82888
+82889
+82890
+82891
+82892
+82893
+82894
+82895
+82896
+82897
+82898
+82899
+82900
+82901
+82902
+82903
+82904
+82905
+82906
+82907
+82908
+82909
+82910
+82911
+82912
+82913
+82914
+82915
+82916
+82917
+82918
+82919
+82920
+82921
+82922
+82923
+82924
+82925
+82926
+82927
+82928
+82929
+82930
+82931
+82932
+82933
+82934
+82935
+82936
+82937
+82938
+82939
+82940
+82941
+82942
+82943
+82944
+82945
+82946
+82947
+82948
+82949
+82950
+82951
+82952
+82953
+82954
+82955
+82956
+82957
+82958
+82959
+82960
+82961
+82962
+82963
+82964
+82965
+82966
+82967
+82968
+82969
+82970
+82971
+82972
+82973
+82974
+82975
+82976
+82977
+82978
+82979
+82980
+82981
+82982
+82983
+82984
+82985
+82986
+82987
+82988
+82989
+82990
+82991
+82992
+82993
+82994
+82995
+82996
+82997
+82998
+82999
+83000
+83001
+83002
+83003
+83004
+83005
+83006
+83007
+83008
+83009
+83010
+83011
+83012
+83013
+83014
+83015
+83016
+83017
+83018
+83019
+83020
+83021
+83022
+83023
+83024
+83025
+83026
+83027
+83028
+83029
+83030
+83031
+83032
+83033
+83034
+83035
+83036
+83037
+83038
+83039
+83040
+83041
+83042
+83043
+83044
+83045
+83046
+83047
+83048
+83049
+83050
+83051
+83052
+83053
+83054
+83055
+83056
+83057
+83058
+83059
+83060
+83061
+83062
+83063
+83064
+83065
+83066
+83067
+83068
+83069
+83070
+83071
+83072
+83073
+83074
+83075
+83076
+83077
+83078
+83079
+83080
+83081
+83082
+83083
+83084
+83085
+83086
+83087
+83088
+83089
+83090
+83091
+83092
+83093
+83094
+83095
+83096
+83097
+83098
+83099
+83100
+83101
+83102
+83103
+83104
+83105
+83106
+83107
+83108
+83109
+83110
+83111
+83112
+83113
+83114
+83115
+83116
+83117
+83118
+83119
+83120
+83121
+83122
+83123
+83124
+83125
+83126
+83127
+83128
+83129
+83130
+83131
+83132
+83133
+83134
+83135
+83136
+83137
+83138
+83139
+83140
+83141
+83142
+83143
+83144
+83145
+83146
+83147
+83148
+83149
+83150
+83151
+83152
+83153
+83154
+83155
+83156
+83157
+83158
+83159
+83160
+83161
+83162
+83163
+83164
+83165
+83166
+83167
+83168
+83169
+83170
+83171
+83172
+83173
+83174
+83175
+83176
+83177
+83178
+83179
+83180
+83181
+83182
+83183
+83184
+83185
+83186
+83187
+83188
+83189
+83190
+83191
+83192
+83193
+83194
+83195
+83196
+83197
+83198
+83199
+83200
+83201
+83202
+83203
+83204
+83205
+83206
+83207
+83208
+83209
+83210
+83211
+83212
+83213
+83214
+83215
+83216
+83217
+83218
+83219
+83220
+83221
+83222
+83223
+83224
+83225
+83226
+83227
+83228
+83229
+83230
+83231
+83232
+83233
+83234
+83235
+83236
+83237
+83238
+83239
+83240
+83241
+83242
+83243
+83244
+83245
+83246
+83247
+83248
+83249
+83250
+83251
+83252
+83253
+83254
+83255
+83256
+83257
+83258
+83259
+83260
+83261
+83262
+83263
+83264
+83265
+83266
+83267
+83268
+83269
+83270
+83271
+83272
+83273
+83274
+83275
+83276
+83277
+83278
+83279
+83280
+83281
+83282
+83283
+83284
+83285
+83286
+83287
+83288
+83289
+83290
+83291
+83292
+83293
+83294
+83295
+83296
+83297
+83298
+83299
+83300
+83301
+83302
+83303
+83304
+83305
+83306
+83307
+83308
+83309
+83310
+83311
+83312
+83313
+83314
+83315
+83316
+83317
+83318
+83319
+83320
+83321
+83322
+83323
+83324
+83325
+83326
+83327
+83328
+83329
+83330
+83331
+83332
+83333
+83334
+83335
+83336
+83337
+83338
+83339
+83340
+83341
+83342
+83343
+83344
+83345
+83346
+83347
+83348
+83349
+83350
+83351
+83352
+83353
+83354
+83355
+83356
+83357
+83358
+83359
+83360
+83361
+83362
+83363
+83364
+83365
+83366
+83367
+83368
+83369
+83370
+83371
+83372
+83373
+83374
+83375
+83376
+83377
+83378
+83379
+83380
+83381
+83382
+83383
+83384
+83385
+83386
+83387
+83388
+83389
+83390
+83391
+83392
+83393
+83394
+83395
+83396
+83397
+83398
+83399
+83400
+83401
+83402
+83403
+83404
+83405
+83406
+83407
+83408
+83409
+83410
+83411
+83412
+83413
+83414
+83415
+83416
+83417
+83418
+83419
+83420
+83421
+83422
+83423
+83424
+83425
+83426
+83427
+83428
+83429
+83430
+83431
+83432
+83433
+83434
+83435
+83436
+83437
+83438
+83439
+83440
+83441
+83442
+83443
+83444
+83445
+83446
+83447
+83448
+83449
+83450
+83451
+83452
+83453
+83454
+83455
+83456
+83457
+83458
+83459
+83460
+83461
+83462
+83463
+83464
+83465
+83466
+83467
+83468
+83469
+83470
+83471
+83472
+83473
+83474
+83475
+83476
+83477
+83478
+83479
+83480
+83481
+83482
+83483
+83484
+83485
+83486
+83487
+83488
+83489
+83490
+83491
+83492
+83493
+83494
+83495
+83496
+83497
+83498
+83499
+83500
+83501
+83502
+83503
+83504
+83505
+83506
+83507
+83508
+83509
+83510
+83511
+83512
+83513
+83514
+83515
+83516
+83517
+83518
+83519
+83520
+83521
+83522
+83523
+83524
+83525
+83526
+83527
+83528
+83529
+83530
+83531
+83532
+83533
+83534
+83535
+83536
+83537
+83538
+83539
+83540
+83541
+83542
+83543
+83544
+83545
+83546
+83547
+83548
+83549
+83550
+83551
+83552
+83553
+83554
+83555
+83556
+83557
+83558
+83559
+83560
+83561
+83562
+83563
+83564
+83565
+83566
+83567
+83568
+83569
+83570
+83571
+83572
+83573
+83574
+83575
+83576
+83577
+83578
+83579
+83580
+83581
+83582
+83583
+83584
+83585
+83586
+83587
+83588
+83589
+83590
+83591
+83592
+83593
+83594
+83595
+83596
+83597
+83598
+83599
+83600
+83601
+83602
+83603
+83604
+83605
+83606
+83607
+83608
+83609
+83610
+83611
+83612
+83613
+83614
+83615
+83616
+83617
+83618
+83619
+83620
+83621
+83622
+83623
+83624
+83625
+83626
+83627
+83628
+83629
+83630
+83631
+83632
+83633
+83634
+83635
+83636
+83637
+83638
+83639
+83640
+83641
+83642
+83643
+83644
+83645
+83646
+83647
+83648
+83649
+83650
+83651
+83652
+83653
+83654
+83655
+83656
+83657
+83658
+83659
+83660
+83661
+83662
+83663
+83664
+83665
+83666
+83667
+83668
+83669
+83670
+83671
+83672
+83673
+83674
+83675
+83676
+83677
+83678
+83679
+83680
+83681
+83682
+83683
+83684
+83685
+83686
+83687
+83688
+83689
+83690
+83691
+83692
+83693
+83694
+83695
+83696
+83697
+83698
+83699
+83700
+83701
+83702
+83703
+83704
+83705
+83706
+83707
+83708
+83709
+83710
+83711
+83712
+83713
+83714
+83715
+83716
+83717
+83718
+83719
+83720
+83721
+83722
+83723
+83724
+83725
+83726
+83727
+83728
+83729
+83730
+83731
+83732
+83733
+83734
+83735
+83736
+83737
+83738
+83739
+83740
+83741
+83742
+83743
+83744
+83745
+83746
+83747
+83748
+83749
+83750
+83751
+83752
+83753
+83754
+83755
+83756
+83757
+83758
+83759
+83760
+83761
+83762
+83763
+83764
+83765
+83766
+83767
+83768
+83769
+83770
+83771
+83772
+83773
+83774
+83775
+83776
+83777
+83778
+83779
+83780
+83781
+83782
+83783
+83784
+83785
+83786
+83787
+83788
+83789
+83790
+83791
+83792
+83793
+83794
+83795
+83796
+83797
+83798
+83799
+83800
+83801
+83802
+83803
+83804
+83805
+83806
+83807
+83808
+83809
+83810
+83811
+83812
+83813
+83814
+83815
+83816
+83817
+83818
+83819
+83820
+83821
+83822
+83823
+83824
+83825
+83826
+83827
+83828
+83829
+83830
+83831
+83832
+83833
+83834
+83835
+83836
+83837
+83838
+83839
+83840
+83841
+83842
+83843
+83844
+83845
+83846
+83847
+83848
+83849
+83850
+83851
+83852
+83853
+83854
+83855
+83856
+83857
+83858
+83859
+83860
+83861
+83862
+83863
+83864
+83865
+83866
+83867
+83868
+83869
+83870
+83871
+83872
+83873
+83874
+83875
+83876
+83877
+83878
+83879
+83880
+83881
+83882
+83883
+83884
+83885
+83886
+83887
+83888
+83889
+83890
+83891
+83892
+83893
+83894
+83895
+83896
+83897
+83898
+83899
+83900
+83901
+83902
+83903
+83904
+83905
+83906
+83907
+83908
+83909
+83910
+83911
+83912
+83913
+83914
+83915
+83916
+83917
+83918
+83919
+83920
+83921
+83922
+83923
+83924
+83925
+83926
+83927
+83928
+83929
+83930
+83931
+83932
+83933
+83934
+83935
+83936
+83937
+83938
+83939
+83940
+83941
+83942
+83943
+83944
+83945
+83946
+83947
+83948
+83949
+83950
+83951
+83952
+83953
+83954
+83955
+83956
+83957
+83958
+83959
+83960
+83961
+83962
+83963
+83964
+83965
+83966
+83967
+83968
+83969
+83970
+83971
+83972
+83973
+83974
+83975
+83976
+83977
+83978
+83979
+83980
+83981
+83982
+83983
+83984
+83985
+83986
+83987
+83988
+83989
+83990
+83991
+83992
+83993
+83994
+83995
+83996
+83997
+83998
+83999
+84000
+84001
+84002
+84003
+84004
+84005
+84006
+84007
+84008
+84009
+84010
+84011
+84012
+84013
+84014
+84015
+84016
+84017
+84018
+84019
+84020
+84021
+84022
+84023
+84024
+84025
+84026
+84027
+84028
+84029
+84030
+84031
+84032
+84033
+84034
+84035
+84036
+84037
+84038
+84039
+84040
+84041
+84042
+84043
+84044
+84045
+84046
+84047
+84048
+84049
+84050
+84051
+84052
+84053
+84054
+84055
+84056
+84057
+84058
+84059
+84060
+84061
+84062
+84063
+84064
+84065
+84066
+84067
+84068
+84069
+84070
+84071
+84072
+84073
+84074
+84075
+84076
+84077
+84078
+84079
+84080
+84081
+84082
+84083
+84084
+84085
+84086
+84087
+84088
+84089
+84090
+84091
+84092
+84093
+84094
+84095
+84096
+84097
+84098
+84099
+84100
+84101
+84102
+84103
+84104
+84105
+84106
+84107
+84108
+84109
+84110
+84111
+84112
+84113
+84114
+84115
+84116
+84117
+84118
+84119
+84120
+84121
+84122
+84123
+84124
+84125
+84126
+84127
+84128
+84129
+84130
+84131
+84132
+84133
+84134
+84135
+84136
+84137
+84138
+84139
+84140
+84141
+84142
+84143
+84144
+84145
+84146
+84147
+84148
+84149
+84150
+84151
+84152
+84153
+84154
+84155
+84156
+84157
+84158
+84159
+84160
+84161
+84162
+84163
+84164
+84165
+84166
+84167
+84168
+84169
+84170
+84171
+84172
+84173
+84174
+84175
+84176
+84177
+84178
+84179
+84180
+84181
+84182
+84183
+84184
+84185
+84186
+84187
+84188
+84189
+84190
+84191
+84192
+84193
+84194
+84195
+84196
+84197
+84198
+84199
+84200
+84201
+84202
+84203
+84204
+84205
+84206
+84207
+84208
+84209
+84210
+84211
+84212
+84213
+84214
+84215
+84216
+84217
+84218
+84219
+84220
+84221
+84222
+84223
+84224
+84225
+84226
+84227
+84228
+84229
+84230
+84231
+84232
+84233
+84234
+84235
+84236
+84237
+84238
+84239
+84240
+84241
+84242
+84243
+84244
+84245
+84246
+84247
+84248
+84249
+84250
+84251
+84252
+84253
+84254
+84255
+84256
+84257
+84258
+84259
+84260
+84261
+84262
+84263
+84264
+84265
+84266
+84267
+84268
+84269
+84270
+84271
+84272
+84273
+84274
+84275
+84276
+84277
+84278
+84279
+84280
+84281
+84282
+84283
+84284
+84285
+84286
+84287
+84288
+84289
+84290
+84291
+84292
+84293
+84294
+84295
+84296
+84297
+84298
+84299
+84300
+84301
+84302
+84303
+84304
+84305
+84306
+84307
+84308
+84309
+84310
+84311
+84312
+84313
+84314
+84315
+84316
+84317
+84318
+84319
+84320
+84321
+84322
+84323
+84324
+84325
+84326
+84327
+84328
+84329
+84330
+84331
+84332
+84333
+84334
+84335
+84336
+84337
+84338
+84339
+84340
+84341
+84342
+84343
+84344
+84345
+84346
+84347
+84348
+84349
+84350
+84351
+84352
+84353
+84354
+84355
+84356
+84357
+84358
+84359
+84360
+84361
+84362
+84363
+84364
+84365
+84366
+84367
+84368
+84369
+84370
+84371
+84372
+84373
+84374
+84375
+84376
+84377
+84378
+84379
+84380
+84381
+84382
+84383
+84384
+84385
+84386
+84387
+84388
+84389
+84390
+84391
+84392
+84393
+84394
+84395
+84396
+84397
+84398
+84399
+84400
+84401
+84402
+84403
+84404
+84405
+84406
+84407
+84408
+84409
+84410
+84411
+84412
+84413
+84414
+84415
+84416
+84417
+84418
+84419
+84420
+84421
+84422
+84423
+84424
+84425
+84426
+84427
+84428
+84429
+84430
+84431
+84432
+84433
+84434
+84435
+84436
+84437
+84438
+84439
+84440
+84441
+84442
+84443
+84444
+84445
+84446
+84447
+84448
+84449
+84450
+84451
+84452
+84453
+84454
+84455
+84456
+84457
+84458
+84459
+84460
+84461
+84462
+84463
+84464
+84465
+84466
+84467
+84468
+84469
+84470
+84471
+84472
+84473
+84474
+84475
+84476
+84477
+84478
+84479
+84480
+84481
+84482
+84483
+84484
+84485
+84486
+84487
+84488
+84489
+84490
+84491
+84492
+84493
+84494
+84495
+84496
+84497
+84498
+84499
+84500
+84501
+84502
+84503
+84504
+84505
+84506
+84507
+84508
+84509
+84510
+84511
+84512
+84513
+84514
+84515
+84516
+84517
+84518
+84519
+84520
+84521
+84522
+84523
+84524
+84525
+84526
+84527
+84528
+84529
+84530
+84531
+84532
+84533
+84534
+84535
+84536
+84537
+84538
+84539
+84540
+84541
+84542
+84543
+84544
+84545
+84546
+84547
+84548
+84549
+84550
+84551
+84552
+84553
+84554
+84555
+84556
+84557
+84558
+84559
+84560
+84561
+84562
+84563
+84564
+84565
+84566
+84567
+84568
+84569
+84570
+84571
+84572
+84573
+84574
+84575
+84576
+84577
+84578
+84579
+84580
+84581
+84582
+84583
+84584
+84585
+84586
+84587
+84588
+84589
+84590
+84591
+84592
+84593
+84594
+84595
+84596
+84597
+84598
+84599
+84600
+84601
+84602
+84603
+84604
+84605
+84606
+84607
+84608
+84609
+84610
+84611
+84612
+84613
+84614
+84615
+84616
+84617
+84618
+84619
+84620
+84621
+84622
+84623
+84624
+84625
+84626
+84627
+84628
+84629
+84630
+84631
+84632
+84633
+84634
+84635
+84636
+84637
+84638
+84639
+84640
+84641
+84642
+84643
+84644
+84645
+84646
+84647
+84648
+84649
+84650
+84651
+84652
+84653
+84654
+84655
+84656
+84657
+84658
+84659
+84660
+84661
+84662
+84663
+84664
+84665
+84666
+84667
+84668
+84669
+84670
+84671
+84672
+84673
+84674
+84675
+84676
+84677
+84678
+84679
+84680
+84681
+84682
+84683
+84684
+84685
+84686
+84687
+84688
+84689
+84690
+84691
+84692
+84693
+84694
+84695
+84696
+84697
+84698
+84699
+84700
+84701
+84702
+84703
+84704
+84705
+84706
+84707
+84708
+84709
+84710
+84711
+84712
+84713
+84714
+84715
+84716
+84717
+84718
+84719
+84720
+84721
+84722
+84723
+84724
+84725
+84726
+84727
+84728
+84729
+84730
+84731
+84732
+84733
+84734
+84735
+84736
+84737
+84738
+84739
+84740
+84741
+84742
+84743
+84744
+84745
+84746
+84747
+84748
+84749
+84750
+84751
+84752
+84753
+84754
+84755
+84756
+84757
+84758
+84759
+84760
+84761
+84762
+84763
+84764
+84765
+84766
+84767
+84768
+84769
+84770
+84771
+84772
+84773
+84774
+84775
+84776
+84777
+84778
+84779
+84780
+84781
+84782
+84783
+84784
+84785
+84786
+84787
+84788
+84789
+84790
+84791
+84792
+84793
+84794
+84795
+84796
+84797
+84798
+84799
+84800
+84801
+84802
+84803
+84804
+84805
+84806
+84807
+84808
+84809
+84810
+84811
+84812
+84813
+84814
+84815
+84816
+84817
+84818
+84819
+84820
+84821
+84822
+84823
+84824
+84825
+84826
+84827
+84828
+84829
+84830
+84831
+84832
+84833
+84834
+84835
+84836
+84837
+84838
+84839
+84840
+84841
+84842
+84843
+84844
+84845
+84846
+84847
+84848
+84849
+84850
+84851
+84852
+84853
+84854
+84855
+84856
+84857
+84858
+84859
+84860
+84861
+84862
+84863
+84864
+84865
+84866
+84867
+84868
+84869
+84870
+84871
+84872
+84873
+84874
+84875
+84876
+84877
+84878
+84879
+84880
+84881
+84882
+84883
+84884
+84885
+84886
+84887
+84888
+84889
+84890
+84891
+84892
+84893
+84894
+84895
+84896
+84897
+84898
+84899
+84900
+84901
+84902
+84903
+84904
+84905
+84906
+84907
+84908
+84909
+84910
+84911
+84912
+84913
+84914
+84915
+84916
+84917
+84918
+84919
+84920
+84921
+84922
+84923
+84924
+84925
+84926
+84927
+84928
+84929
+84930
+84931
+84932
+84933
+84934
+84935
+84936
+84937
+84938
+84939
+84940
+84941
+84942
+84943
+84944
+84945
+84946
+84947
+84948
+84949
+84950
+84951
+84952
+84953
+84954
+84955
+84956
+84957
+84958
+84959
+84960
+84961
+84962
+84963
+84964
+84965
+84966
+84967
+84968
+84969
+84970
+84971
+84972
+84973
+84974
+84975
+84976
+84977
+84978
+84979
+84980
+84981
+84982
+84983
+84984
+84985
+84986
+84987
+84988
+84989
+84990
+84991
+84992
+84993
+84994
+84995
+84996
+84997
+84998
+84999
+85000
+85001
+85002
+85003
+85004
+85005
+85006
+85007
+85008
+85009
+85010
+85011
+85012
+85013
+85014
+85015
+85016
+85017
+85018
+85019
+85020
+85021
+85022
+85023
+85024
+85025
+85026
+85027
+85028
+85029
+85030
+85031
+85032
+85033
+85034
+85035
+85036
+85037
+85038
+85039
+85040
+85041
+85042
+85043
+85044
+85045
+85046
+85047
+85048
+85049
+85050
+85051
+85052
+85053
+85054
+85055
+85056
+85057
+85058
+85059
+85060
+85061
+85062
+85063
+85064
+85065
+85066
+85067
+85068
+85069
+85070
+85071
+85072
+85073
+85074
+85075
+85076
+85077
+85078
+85079
+85080
+85081
+85082
+85083
+85084
+85085
+85086
+85087
+85088
+85089
+85090
+85091
+85092
+85093
+85094
+85095
+85096
+85097
+85098
+85099
+85100
+85101
+85102
+85103
+85104
+85105
+85106
+85107
+85108
+85109
+85110
+85111
+85112
+85113
+85114
+85115
+85116
+85117
+85118
+85119
+85120
+85121
+85122
+85123
+85124
+85125
+85126
+85127
+85128
+85129
+85130
+85131
+85132
+85133
+85134
+85135
+85136
+85137
+85138
+85139
+85140
+85141
+85142
+85143
+85144
+85145
+85146
+85147
+85148
+85149
+85150
+85151
+85152
+85153
+85154
+85155
+85156
+85157
+85158
+85159
+85160
+85161
+85162
+85163
+85164
+85165
+85166
+85167
+85168
+85169
+85170
+85171
+85172
+85173
+85174
+85175
+85176
+85177
+85178
+85179
+85180
+85181
+85182
+85183
+85184
+85185
+85186
+85187
+85188
+85189
+85190
+85191
+85192
+85193
+85194
+85195
+85196
+85197
+85198
+85199
+85200
+85201
+85202
+85203
+85204
+85205
+85206
+85207
+85208
+85209
+85210
+85211
+85212
+85213
+85214
+85215
+85216
+85217
+85218
+85219
+85220
+85221
+85222
+85223
+85224
+85225
+85226
+85227
+85228
+85229
+85230
+85231
+85232
+85233
+85234
+85235
+85236
+85237
+85238
+85239
+85240
+85241
+85242
+85243
+85244
+85245
+85246
+85247
+85248
+85249
+85250
+85251
+85252
+85253
+85254
+85255
+85256
+85257
+85258
+85259
+85260
+85261
+85262
+85263
+85264
+85265
+85266
+85267
+85268
+85269
+85270
+85271
+85272
+85273
+85274
+85275
+85276
+85277
+85278
+85279
+85280
+85281
+85282
+85283
+85284
+85285
+85286
+85287
+85288
+85289
+85290
+85291
+85292
+85293
+85294
+85295
+85296
+85297
+85298
+85299
+85300
+85301
+85302
+85303
+85304
+85305
+85306
+85307
+85308
+85309
+85310
+85311
+85312
+85313
+85314
+85315
+85316
+85317
+85318
+85319
+85320
+85321
+85322
+85323
+85324
+85325
+85326
+85327
+85328
+85329
+85330
+85331
+85332
+85333
+85334
+85335
+85336
+85337
+85338
+85339
+85340
+85341
+85342
+85343
+85344
+85345
+85346
+85347
+85348
+85349
+85350
+85351
+85352
+85353
+85354
+85355
+85356
+85357
+85358
+85359
+85360
+85361
+85362
+85363
+85364
+85365
+85366
+85367
+85368
+85369
+85370
+85371
+85372
+85373
+85374
+85375
+85376
+85377
+85378
+85379
+85380
+85381
+85382
+85383
+85384
+85385
+85386
+85387
+85388
+85389
+85390
+85391
+85392
+85393
+85394
+85395
+85396
+85397
+85398
+85399
+85400
+85401
+85402
+85403
+85404
+85405
+85406
+85407
+85408
+85409
+85410
+85411
+85412
+85413
+85414
+85415
+85416
+85417
+85418
+85419
+85420
+85421
+85422
+85423
+85424
+85425
+85426
+85427
+85428
+85429
+85430
+85431
+85432
+85433
+85434
+85435
+85436
+85437
+85438
+85439
+85440
+85441
+85442
+85443
+85444
+85445
+85446
+85447
+85448
+85449
+85450
+85451
+85452
+85453
+85454
+85455
+85456
+85457
+85458
+85459
+85460
+85461
+85462
+85463
+85464
+85465
+85466
+85467
+85468
+85469
+85470
+85471
+85472
+85473
+85474
+85475
+85476
+85477
+85478
+85479
+85480
+85481
+85482
+85483
+85484
+85485
+85486
+85487
+85488
+85489
+85490
+85491
+85492
+85493
+85494
+85495
+85496
+85497
+85498
+85499
+85500
+85501
+85502
+85503
+85504
+85505
+85506
+85507
+85508
+85509
+85510
+85511
+85512
+85513
+85514
+85515
+85516
+85517
+85518
+85519
+85520
+85521
+85522
+85523
+85524
+85525
+85526
+85527
+85528
+85529
+85530
+85531
+85532
+85533
+85534
+85535
+85536
+85537
+85538
+85539
+85540
+85541
+85542
+85543
+85544
+85545
+85546
+85547
+85548
+85549
+85550
+85551
+85552
+85553
+85554
+85555
+85556
+85557
+85558
+85559
+85560
+85561
+85562
+85563
+85564
+85565
+85566
+85567
+85568
+85569
+85570
+85571
+85572
+85573
+85574
+85575
+85576
+85577
+85578
+85579
+85580
+85581
+85582
+85583
+85584
+85585
+85586
+85587
+85588
+85589
+85590
+85591
+85592
+85593
+85594
+85595
+85596
+85597
+85598
+85599
+85600
+85601
+85602
+85603
+85604
+85605
+85606
+85607
+85608
+85609
+85610
+85611
+85612
+85613
+85614
+85615
+85616
+85617
+85618
+85619
+85620
+85621
+85622
+85623
+85624
+85625
+85626
+85627
+85628
+85629
+85630
+85631
+85632
+85633
+85634
+85635
+85636
+85637
+85638
+85639
+85640
+85641
+85642
+85643
+85644
+85645
+85646
+85647
+85648
+85649
+85650
+85651
+85652
+85653
+85654
+85655
+85656
+85657
+85658
+85659
+85660
+85661
+85662
+85663
+85664
+85665
+85666
+85667
+85668
+85669
+85670
+85671
+85672
+85673
+85674
+85675
+85676
+85677
+85678
+85679
+85680
+85681
+85682
+85683
+85684
+85685
+85686
+85687
+85688
+85689
+85690
+85691
+85692
+85693
+85694
+85695
+85696
+85697
+85698
+85699
+85700
+85701
+85702
+85703
+85704
+85705
+85706
+85707
+85708
+85709
+85710
+85711
+85712
+85713
+85714
+85715
+85716
+85717
+85718
+85719
+85720
+85721
+85722
+85723
+85724
+85725
+85726
+85727
+85728
+85729
+85730
+85731
+85732
+85733
+85734
+85735
+85736
+85737
+85738
+85739
+85740
+85741
+85742
+85743
+85744
+85745
+85746
+85747
+85748
+85749
+85750
+85751
+85752
+85753
+85754
+85755
+85756
+85757
+85758
+85759
+85760
+85761
+85762
+85763
+85764
+85765
+85766
+85767
+85768
+85769
+85770
+85771
+85772
+85773
+85774
+85775
+85776
+85777
+85778
+85779
+85780
+85781
+85782
+85783
+85784
+85785
+85786
+85787
+85788
+85789
+85790
+85791
+85792
+85793
+85794
+85795
+85796
+85797
+85798
+85799
+85800
+85801
+85802
+85803
+85804
+85805
+85806
+85807
+85808
+85809
+85810
+85811
+85812
+85813
+85814
+85815
+85816
+85817
+85818
+85819
+85820
+85821
+85822
+85823
+85824
+85825
+85826
+85827
+85828
+85829
+85830
+85831
+85832
+85833
+85834
+85835
+85836
+85837
+85838
+85839
+85840
+85841
+85842
+85843
+85844
+85845
+85846
+85847
+85848
+85849
+85850
+85851
+85852
+85853
+85854
+85855
+85856
+85857
+85858
+85859
+85860
+85861
+85862
+85863
+85864
+85865
+85866
+85867
+85868
+85869
+85870
+85871
+85872
+85873
+85874
+85875
+85876
+85877
+85878
+85879
+85880
+85881
+85882
+85883
+85884
+85885
+85886
+85887
+85888
+85889
+85890
+85891
+85892
+85893
+85894
+85895
+85896
+85897
+85898
+85899
+85900
+85901
+85902
+85903
+85904
+85905
+85906
+85907
+85908
+85909
+85910
+85911
+85912
+85913
+85914
+85915
+85916
+85917
+85918
+85919
+85920
+85921
+85922
+85923
+85924
+85925
+85926
+85927
+85928
+85929
+85930
+85931
+85932
+85933
+85934
+85935
+85936
+85937
+85938
+85939
+85940
+85941
+85942
+85943
+85944
+85945
+85946
+85947
+85948
+85949
+85950
+85951
+85952
+85953
+85954
+85955
+85956
+85957
+85958
+85959
+85960
+85961
+85962
+85963
+85964
+85965
+85966
+85967
+85968
+85969
+85970
+85971
+85972
+85973
+85974
+85975
+85976
+85977
+85978
+85979
+85980
+85981
+85982
+85983
+85984
+85985
+85986
+85987
+85988
+85989
+85990
+85991
+85992
+85993
+85994
+85995
+85996
+85997
+85998
+85999
+86000
+86001
+86002
+86003
+86004
+86005
+86006
+86007
+86008
+86009
+86010
+86011
+86012
+86013
+86014
+86015
+86016
+86017
+86018
+86019
+86020
+86021
+86022
+86023
+86024
+86025
+86026
+86027
+86028
+86029
+86030
+86031
+86032
+86033
+86034
+86035
+86036
+86037
+86038
+86039
+86040
+86041
+86042
+86043
+86044
+86045
+86046
+86047
+86048
+86049
+86050
+86051
+86052
+86053
+86054
+86055
+86056
+86057
+86058
+86059
+86060
+86061
+86062
+86063
+86064
+86065
+86066
+86067
+86068
+86069
+86070
+86071
+86072
+86073
+86074
+86075
+86076
+86077
+86078
+86079
+86080
+86081
+86082
+86083
+86084
+86085
+86086
+86087
+86088
+86089
+86090
+86091
+86092
+86093
+86094
+86095
+86096
+86097
+86098
+86099
+86100
+86101
+86102
+86103
+86104
+86105
+86106
+86107
+86108
+86109
+86110
+86111
+86112
+86113
+86114
+86115
+86116
+86117
+86118
+86119
+86120
+86121
+86122
+86123
+86124
+86125
+86126
+86127
+86128
+86129
+86130
+86131
+86132
+86133
+86134
+86135
+86136
+86137
+86138
+86139
+86140
+86141
+86142
+86143
+86144
+86145
+86146
+86147
+86148
+86149
+86150
+86151
+86152
+86153
+86154
+86155
+86156
+86157
+86158
+86159
+86160
+86161
+86162
+86163
+86164
+86165
+86166
+86167
+86168
+86169
+86170
+86171
+86172
+86173
+86174
+86175
+86176
+86177
+86178
+86179
+86180
+86181
+86182
+86183
+86184
+86185
+86186
+86187
+86188
+86189
+86190
+86191
+86192
+86193
+86194
+86195
+86196
+86197
+86198
+86199
+86200
+86201
+86202
+86203
+86204
+86205
+86206
+86207
+86208
+86209
+86210
+86211
+86212
+86213
+86214
+86215
+86216
+86217
+86218
+86219
+86220
+86221
+86222
+86223
+86224
+86225
+86226
+86227
+86228
+86229
+86230
+86231
+86232
+86233
+86234
+86235
+86236
+86237
+86238
+86239
+86240
+86241
+86242
+86243
+86244
+86245
+86246
+86247
+86248
+86249
+86250
+86251
+86252
+86253
+86254
+86255
+86256
+86257
+86258
+86259
+86260
+86261
+86262
+86263
+86264
+86265
+86266
+86267
+86268
+86269
+86270
+86271
+86272
+86273
+86274
+86275
+86276
+86277
+86278
+86279
+86280
+86281
+86282
+86283
+86284
+86285
+86286
+86287
+86288
+86289
+86290
+86291
+86292
+86293
+86294
+86295
+86296
+86297
+86298
+86299
+86300
+86301
+86302
+86303
+86304
+86305
+86306
+86307
+86308
+86309
+86310
+86311
+86312
+86313
+86314
+86315
+86316
+86317
+86318
+86319
+86320
+86321
+86322
+86323
+86324
+86325
+86326
+86327
+86328
+86329
+86330
+86331
+86332
+86333
+86334
+86335
+86336
+86337
+86338
+86339
+86340
+86341
+86342
+86343
+86344
+86345
+86346
+86347
+86348
+86349
+86350
+86351
+86352
+86353
+86354
+86355
+86356
+86357
+86358
+86359
+86360
+86361
+86362
+86363
+86364
+86365
+86366
+86367
+86368
+86369
+86370
+86371
+86372
+86373
+86374
+86375
+86376
+86377
+86378
+86379
+86380
+86381
+86382
+86383
+86384
+86385
+86386
+86387
+86388
+86389
+86390
+86391
+86392
+86393
+86394
+86395
+86396
+86397
+86398
+86399
+86400
+86401
+86402
+86403
+86404
+86405
+86406
+86407
+86408
+86409
+86410
+86411
+86412
+86413
+86414
+86415
+86416
+86417
+86418
+86419
+86420
+86421
+86422
+86423
+86424
+86425
+86426
+86427
+86428
+86429
+86430
+86431
+86432
+86433
+86434
+86435
+86436
+86437
+86438
+86439
+86440
+86441
+86442
+86443
+86444
+86445
+86446
+86447
+86448
+86449
+86450
+86451
+86452
+86453
+86454
+86455
+86456
+86457
+86458
+86459
+86460
+86461
+86462
+86463
+86464
+86465
+86466
+86467
+86468
+86469
+86470
+86471
+86472
+86473
+86474
+86475
+86476
+86477
+86478
+86479
+86480
+86481
+86482
+86483
+86484
+86485
+86486
+86487
+86488
+86489
+86490
+86491
+86492
+86493
+86494
+86495
+86496
+86497
+86498
+86499
+86500
+86501
+86502
+86503
+86504
+86505
+86506
+86507
+86508
+86509
+86510
+86511
+86512
+86513
+86514
+86515
+86516
+86517
+86518
+86519
+86520
+86521
+86522
+86523
+86524
+86525
+86526
+86527
+86528
+86529
+86530
+86531
+86532
+86533
+86534
+86535
+86536
+86537
+86538
+86539
+86540
+86541
+86542
+86543
+86544
+86545
+86546
+86547
+86548
+86549
+86550
+86551
+86552
+86553
+86554
+86555
+86556
+86557
+86558
+86559
+86560
+86561
+86562
+86563
+86564
+86565
+86566
+86567
+86568
+86569
+86570
+86571
+86572
+86573
+86574
+86575
+86576
+86577
+86578
+86579
+86580
+86581
+86582
+86583
+86584
+86585
+86586
+86587
+86588
+86589
+86590
+86591
+86592
+86593
+86594
+86595
+86596
+86597
+86598
+86599
+86600
+86601
+86602
+86603
+86604
+86605
+86606
+86607
+86608
+86609
+86610
+86611
+86612
+86613
+86614
+86615
+86616
+86617
+86618
+86619
+86620
+86621
+86622
+86623
+86624
+86625
+86626
+86627
+86628
+86629
+86630
+86631
+86632
+86633
+86634
+86635
+86636
+86637
+86638
+86639
+86640
+86641
+86642
+86643
+86644
+86645
+86646
+86647
+86648
+86649
+86650
+86651
+86652
+86653
+86654
+86655
+86656
+86657
+86658
+86659
+86660
+86661
+86662
+86663
+86664
+86665
+86666
+86667
+86668
+86669
+86670
+86671
+86672
+86673
+86674
+86675
+86676
+86677
+86678
+86679
+86680
+86681
+86682
+86683
+86684
+86685
+86686
+86687
+86688
+86689
+86690
+86691
+86692
+86693
+86694
+86695
+86696
+86697
+86698
+86699
+86700
+86701
+86702
+86703
+86704
+86705
+86706
+86707
+86708
+86709
+86710
+86711
+86712
+86713
+86714
+86715
+86716
+86717
+86718
+86719
+86720
+86721
+86722
+86723
+86724
+86725
+86726
+86727
+86728
+86729
+86730
+86731
+86732
+86733
+86734
+86735
+86736
+86737
+86738
+86739
+86740
+86741
+86742
+86743
+86744
+86745
+86746
+86747
+86748
+86749
+86750
+86751
+86752
+86753
+86754
+86755
+86756
+86757
+86758
+86759
+86760
+86761
+86762
+86763
+86764
+86765
+86766
+86767
+86768
+86769
+86770
+86771
+86772
+86773
+86774
+86775
+86776
+86777
+86778
+86779
+86780
+86781
+86782
+86783
+86784
+86785
+86786
+86787
+86788
+86789
+86790
+86791
+86792
+86793
+86794
+86795
+86796
+86797
+86798
+86799
+86800
+86801
+86802
+86803
+86804
+86805
+86806
+86807
+86808
+86809
+86810
+86811
+86812
+86813
+86814
+86815
+86816
+86817
+86818
+86819
+86820
+86821
+86822
+86823
+86824
+86825
+86826
+86827
+86828
+86829
+86830
+86831
+86832
+86833
+86834
+86835
+86836
+86837
+86838
+86839
+86840
+86841
+86842
+86843
+86844
+86845
+86846
+86847
+86848
+86849
+86850
+86851
+86852
+86853
+86854
+86855
+86856
+86857
+86858
+86859
+86860
+86861
+86862
+86863
+86864
+86865
+86866
+86867
+86868
+86869
+86870
+86871
+86872
+86873
+86874
+86875
+86876
+86877
+86878
+86879
+86880
+86881
+86882
+86883
+86884
+86885
+86886
+86887
+86888
+86889
+86890
+86891
+86892
+86893
+86894
+86895
+86896
+86897
+86898
+86899
+86900
+86901
+86902
+86903
+86904
+86905
+86906
+86907
+86908
+86909
+86910
+86911
+86912
+86913
+86914
+86915
+86916
+86917
+86918
+86919
+86920
+86921
+86922
+86923
+86924
+86925
+86926
+86927
+86928
+86929
+86930
+86931
+86932
+86933
+86934
+86935
+86936
+86937
+86938
+86939
+86940
+86941
+86942
+86943
+86944
+86945
+86946
+86947
+86948
+86949
+86950
+86951
+86952
+86953
+86954
+86955
+86956
+86957
+86958
+86959
+86960
+86961
+86962
+86963
+86964
+86965
+86966
+86967
+86968
+86969
+86970
+86971
+86972
+86973
+86974
+86975
+86976
+86977
+86978
+86979
+86980
+86981
+86982
+86983
+86984
+86985
+86986
+86987
+86988
+86989
+86990
+86991
+86992
+86993
+86994
+86995
+86996
+86997
+86998
+86999
+87000
+87001
+87002
+87003
+87004
+87005
+87006
+87007
+87008
+87009
+87010
+87011
+87012
+87013
+87014
+87015
+87016
+87017
+87018
+87019
+87020
+87021
+87022
+87023
+87024
+87025
+87026
+87027
+87028
+87029
+87030
+87031
+87032
+87033
+87034
+87035
+87036
+87037
+87038
+87039
+87040
+87041
+87042
+87043
+87044
+87045
+87046
+87047
+87048
+87049
+87050
+87051
+87052
+87053
+87054
+87055
+87056
+87057
+87058
+87059
+87060
+87061
+87062
+87063
+87064
+87065
+87066
+87067
+87068
+87069
+87070
+87071
+87072
+87073
+87074
+87075
+87076
+87077
+87078
+87079
+87080
+87081
+87082
+87083
+87084
+87085
+87086
+87087
+87088
+87089
+87090
+87091
+87092
+87093
+87094
+87095
+87096
+87097
+87098
+87099
+87100
+87101
+87102
+87103
+87104
+87105
+87106
+87107
+87108
+87109
+87110
+87111
+87112
+87113
+87114
+87115
+87116
+87117
+87118
+87119
+87120
+87121
+87122
+87123
+87124
+87125
+87126
+87127
+87128
+87129
+87130
+87131
+87132
+87133
+87134
+87135
+87136
+87137
+87138
+87139
+87140
+87141
+87142
+87143
+87144
+87145
+87146
+87147
+87148
+87149
+87150
+87151
+87152
+87153
+87154
+87155
+87156
+87157
+87158
+87159
+87160
+87161
+87162
+87163
+87164
+87165
+87166
+87167
+87168
+87169
+87170
+87171
+87172
+87173
+87174
+87175
+87176
+87177
+87178
+87179
+87180
+87181
+87182
+87183
+87184
+87185
+87186
+87187
+87188
+87189
+87190
+87191
+87192
+87193
+87194
+87195
+87196
+87197
+87198
+87199
+87200
+87201
+87202
+87203
+87204
+87205
+87206
+87207
+87208
+87209
+87210
+87211
+87212
+87213
+87214
+87215
+87216
+87217
+87218
+87219
+87220
+87221
+87222
+87223
+87224
+87225
+87226
+87227
+87228
+87229
+87230
+87231
+87232
+87233
+87234
+87235
+87236
+87237
+87238
+87239
+87240
+87241
+87242
+87243
+87244
+87245
+87246
+87247
+87248
+87249
+87250
+87251
+87252
+87253
+87254
+87255
+87256
+87257
+87258
+87259
+87260
+87261
+87262
+87263
+87264
+87265
+87266
+87267
+87268
+87269
+87270
+87271
+87272
+87273
+87274
+87275
+87276
+87277
+87278
+87279
+87280
+87281
+87282
+87283
+87284
+87285
+87286
+87287
+87288
+87289
+87290
+87291
+87292
+87293
+87294
+87295
+87296
+87297
+87298
+87299
+87300
+87301
+87302
+87303
+87304
+87305
+87306
+87307
+87308
+87309
+87310
+87311
+87312
+87313
+87314
+87315
+87316
+87317
+87318
+87319
+87320
+87321
+87322
+87323
+87324
+87325
+87326
+87327
+87328
+87329
+87330
+87331
+87332
+87333
+87334
+87335
+87336
+87337
+87338
+87339
+87340
+87341
+87342
+87343
+87344
+87345
+87346
+87347
+87348
+87349
+87350
+87351
+87352
+87353
+87354
+87355
+87356
+87357
+87358
+87359
+87360
+87361
+87362
+87363
+87364
+87365
+87366
+87367
+87368
+87369
+87370
+87371
+87372
+87373
+87374
+87375
+87376
+87377
+87378
+87379
+87380
+87381
+87382
+87383
+87384
+87385
+87386
+87387
+87388
+87389
+87390
+87391
+87392
+87393
+87394
+87395
+87396
+87397
+87398
+87399
+87400
+87401
+87402
+87403
+87404
+87405
+87406
+87407
+87408
+87409
+87410
+87411
+87412
+87413
+87414
+87415
+87416
+87417
+87418
+87419
+87420
+87421
+87422
+87423
+87424
+87425
+87426
+87427
+87428
+87429
+87430
+87431
+87432
+87433
+87434
+87435
+87436
+87437
+87438
+87439
+87440
+87441
+87442
+87443
+87444
+87445
+87446
+87447
+87448
+87449
+87450
+87451
+87452
+87453
+87454
+87455
+87456
+87457
+87458
+87459
+87460
+87461
+87462
+87463
+87464
+87465
+87466
+87467
+87468
+87469
+87470
+87471
+87472
+87473
+87474
+87475
+87476
+87477
+87478
+87479
+87480
+87481
+87482
+87483
+87484
+87485
+87486
+87487
+87488
+87489
+87490
+87491
+87492
+87493
+87494
+87495
+87496
+87497
+87498
+87499
+87500
+87501
+87502
+87503
+87504
+87505
+87506
+87507
+87508
+87509
+87510
+87511
+87512
+87513
+87514
+87515
+87516
+87517
+87518
+87519
+87520
+87521
+87522
+87523
+87524
+87525
+87526
+87527
+87528
+87529
+87530
+87531
+87532
+87533
+87534
+87535
+87536
+87537
+87538
+87539
+87540
+87541
+87542
+87543
+87544
+87545
+87546
+87547
+87548
+87549
+87550
+87551
+87552
+87553
+87554
+87555
+87556
+87557
+87558
+87559
+87560
+87561
+87562
+87563
+87564
+87565
+87566
+87567
+87568
+87569
+87570
+87571
+87572
+87573
+87574
+87575
+87576
+87577
+87578
+87579
+87580
+87581
+87582
+87583
+87584
+87585
+87586
+87587
+87588
+87589
+87590
+87591
+87592
+87593
+87594
+87595
+87596
+87597
+87598
+87599
+87600
+87601
+87602
+87603
+87604
+87605
+87606
+87607
+87608
+87609
+87610
+87611
+87612
+87613
+87614
+87615
+87616
+87617
+87618
+87619
+87620
+87621
+87622
+87623
+87624
+87625
+87626
+87627
+87628
+87629
+87630
+87631
+87632
+87633
+87634
+87635
+87636
+87637
+87638
+87639
+87640
+87641
+87642
+87643
+87644
+87645
+87646
+87647
+87648
+87649
+87650
+87651
+87652
+87653
+87654
+87655
+87656
+87657
+87658
+87659
+87660
+87661
+87662
+87663
+87664
+87665
+87666
+87667
+87668
+87669
+87670
+87671
+87672
+87673
+87674
+87675
+87676
+87677
+87678
+87679
+87680
+87681
+87682
+87683
+87684
+87685
+87686
+87687
+87688
+87689
+87690
+87691
+87692
+87693
+87694
+87695
+87696
+87697
+87698
+87699
+87700
+87701
+87702
+87703
+87704
+87705
+87706
+87707
+87708
+87709
+87710
+87711
+87712
+87713
+87714
+87715
+87716
+87717
+87718
+87719
+87720
+87721
+87722
+87723
+87724
+87725
+87726
+87727
+87728
+87729
+87730
+87731
+87732
+87733
+87734
+87735
+87736
+87737
+87738
+87739
+87740
+87741
+87742
+87743
+87744
+87745
+87746
+87747
+87748
+87749
+87750
+87751
+87752
+87753
+87754
+87755
+87756
+87757
+87758
+87759
+87760
+87761
+87762
+87763
+87764
+87765
+87766
+87767
+87768
+87769
+87770
+87771
+87772
+87773
+87774
+87775
+87776
+87777
+87778
+87779
+87780
+87781
+87782
+87783
+87784
+87785
+87786
+87787
+87788
+87789
+87790
+87791
+87792
+87793
+87794
+87795
+87796
+87797
+87798
+87799
+87800
+87801
+87802
+87803
+87804
+87805
+87806
+87807
+87808
+87809
+87810
+87811
+87812
+87813
+87814
+87815
+87816
+87817
+87818
+87819
+87820
+87821
+87822
+87823
+87824
+87825
+87826
+87827
+87828
+87829
+87830
+87831
+87832
+87833
+87834
+87835
+87836
+87837
+87838
+87839
+87840
+87841
+87842
+87843
+87844
+87845
+87846
+87847
+87848
+87849
+87850
+87851
+87852
+87853
+87854
+87855
+87856
+87857
+87858
+87859
+87860
+87861
+87862
+87863
+87864
+87865
+87866
+87867
+87868
+87869
+87870
+87871
+87872
+87873
+87874
+87875
+87876
+87877
+87878
+87879
+87880
+87881
+87882
+87883
+87884
+87885
+87886
+87887
+87888
+87889
+87890
+87891
+87892
+87893
+87894
+87895
+87896
+87897
+87898
+87899
+87900
+87901
+87902
+87903
+87904
+87905
+87906
+87907
+87908
+87909
+87910
+87911
+87912
+87913
+87914
+87915
+87916
+87917
+87918
+87919
+87920
+87921
+87922
+87923
+87924
+87925
+87926
+87927
+87928
+87929
+87930
+87931
+87932
+87933
+87934
+87935
+87936
+87937
+87938
+87939
+87940
+87941
+87942
+87943
+87944
+87945
+87946
+87947
+87948
+87949
+87950
+87951
+87952
+87953
+87954
+87955
+87956
+87957
+87958
+87959
+87960
+87961
+87962
+87963
+87964
+87965
+87966
+87967
+87968
+87969
+87970
+87971
+87972
+87973
+87974
+87975
+87976
+87977
+87978
+87979
+87980
+87981
+87982
+87983
+87984
+87985
+87986
+87987
+87988
+87989
+87990
+87991
+87992
+87993
+87994
+87995
+87996
+87997
+87998
+87999
+88000
+88001
+88002
+88003
+88004
+88005
+88006
+88007
+88008
+88009
+88010
+88011
+88012
+88013
+88014
+88015
+88016
+88017
+88018
+88019
+88020
+88021
+88022
+88023
+88024
+88025
+88026
+88027
+88028
+88029
+88030
+88031
+88032
+88033
+88034
+88035
+88036
+88037
+88038
+88039
+88040
+88041
+88042
+88043
+88044
+88045
+88046
+88047
+88048
+88049
+88050
+88051
+88052
+88053
+88054
+88055
+88056
+88057
+88058
+88059
+88060
+88061
+88062
+88063
+88064
+88065
+88066
+88067
+88068
+88069
+88070
+88071
+88072
+88073
+88074
+88075
+88076
+88077
+88078
+88079
+88080
+88081
+88082
+88083
+88084
+88085
+88086
+88087
+88088
+88089
+88090
+88091
+88092
+88093
+88094
+88095
+88096
+88097
+88098
+88099
+88100
+88101
+88102
+88103
+88104
+88105
+88106
+88107
+88108
+88109
+88110
+88111
+88112
+88113
+88114
+88115
+88116
+88117
+88118
+88119
+88120
+88121
+88122
+88123
+88124
+88125
+88126
+88127
+88128
+88129
+88130
+88131
+88132
+88133
+88134
+88135
+88136
+88137
+88138
+88139
+88140
+88141
+88142
+88143
+88144
+88145
+88146
+88147
+88148
+88149
+88150
+88151
+88152
+88153
+88154
+88155
+88156
+88157
+88158
+88159
+88160
+88161
+88162
+88163
+88164
+88165
+88166
+88167
+88168
+88169
+88170
+88171
+88172
+88173
+88174
+88175
+88176
+88177
+88178
+88179
+88180
+88181
+88182
+88183
+88184
+88185
+88186
+88187
+88188
+88189
+88190
+88191
+88192
+88193
+88194
+88195
+88196
+88197
+88198
+88199
+88200
+88201
+88202
+88203
+88204
+88205
+88206
+88207
+88208
+88209
+88210
+88211
+88212
+88213
+88214
+88215
+88216
+88217
+88218
+88219
+88220
+88221
+88222
+88223
+88224
+88225
+88226
+88227
+88228
+88229
+88230
+88231
+88232
+88233
+88234
+88235
+88236
+88237
+88238
+88239
+88240
+88241
+88242
+88243
+88244
+88245
+88246
+88247
+88248
+88249
+88250
+88251
+88252
+88253
+88254
+88255
+88256
+88257
+88258
+88259
+88260
+88261
+88262
+88263
+88264
+88265
+88266
+88267
+88268
+88269
+88270
+88271
+88272
+88273
+88274
+88275
+88276
+88277
+88278
+88279
+88280
+88281
+88282
+88283
+88284
+88285
+88286
+88287
+88288
+88289
+88290
+88291
+88292
+88293
+88294
+88295
+88296
+88297
+88298
+88299
+88300
+88301
+88302
+88303
+88304
+88305
+88306
+88307
+88308
+88309
+88310
+88311
+88312
+88313
+88314
+88315
+88316
+88317
+88318
+88319
+88320
+88321
+88322
+88323
+88324
+88325
+88326
+88327
+88328
+88329
+88330
+88331
+88332
+88333
+88334
+88335
+88336
+88337
+88338
+88339
+88340
+88341
+88342
+88343
+88344
+88345
+88346
+88347
+88348
+88349
+88350
+88351
+88352
+88353
+88354
+88355
+88356
+88357
+88358
+88359
+88360
+88361
+88362
+88363
+88364
+88365
+88366
+88367
+88368
+88369
+88370
+88371
+88372
+88373
+88374
+88375
+88376
+88377
+88378
+88379
+88380
+88381
+88382
+88383
+88384
+88385
+88386
+88387
+88388
+88389
+88390
+88391
+88392
+88393
+88394
+88395
+88396
+88397
+88398
+88399
+88400
+88401
+88402
+88403
+88404
+88405
+88406
+88407
+88408
+88409
+88410
+88411
+88412
+88413
+88414
+88415
+88416
+88417
+88418
+88419
+88420
+88421
+88422
+88423
+88424
+88425
+88426
+88427
+88428
+88429
+88430
+88431
+88432
+88433
+88434
+88435
+88436
+88437
+88438
+88439
+88440
+88441
+88442
+88443
+88444
+88445
+88446
+88447
+88448
+88449
+88450
+88451
+88452
+88453
+88454
+88455
+88456
+88457
+88458
+88459
+88460
+88461
+88462
+88463
+88464
+88465
+88466
+88467
+88468
+88469
+88470
+88471
+88472
+88473
+88474
+88475
+88476
+88477
+88478
+88479
+88480
+88481
+88482
+88483
+88484
+88485
+88486
+88487
+88488
+88489
+88490
+88491
+88492
+88493
+88494
+88495
+88496
+88497
+88498
+88499
+88500
+88501
+88502
+88503
+88504
+88505
+88506
+88507
+88508
+88509
+88510
+88511
+88512
+88513
+88514
+88515
+88516
+88517
+88518
+88519
+88520
+88521
+88522
+88523
+88524
+88525
+88526
+88527
+88528
+88529
+88530
+88531
+88532
+88533
+88534
+88535
+88536
+88537
+88538
+88539
+88540
+88541
+88542
+88543
+88544
+88545
+88546
+88547
+88548
+88549
+88550
+88551
+88552
+88553
+88554
+88555
+88556
+88557
+88558
+88559
+88560
+88561
+88562
+88563
+88564
+88565
+88566
+88567
+88568
+88569
+88570
+88571
+88572
+88573
+88574
+88575
+88576
+88577
+88578
+88579
+88580
+88581
+88582
+88583
+88584
+88585
+88586
+88587
+88588
+88589
+88590
+88591
+88592
+88593
+88594
+88595
+88596
+88597
+88598
+88599
+88600
+88601
+88602
+88603
+88604
+88605
+88606
+88607
+88608
+88609
+88610
+88611
+88612
+88613
+88614
+88615
+88616
+88617
+88618
+88619
+88620
+88621
+88622
+88623
+88624
+88625
+88626
+88627
+88628
+88629
+88630
+88631
+88632
+88633
+88634
+88635
+88636
+88637
+88638
+88639
+88640
+88641
+88642
+88643
+88644
+88645
+88646
+88647
+88648
+88649
+88650
+88651
+88652
+88653
+88654
+88655
+88656
+88657
+88658
+88659
+88660
+88661
+88662
+88663
+88664
+88665
+88666
+88667
+88668
+88669
+88670
+88671
+88672
+88673
+88674
+88675
+88676
+88677
+88678
+88679
+88680
+88681
+88682
+88683
+88684
+88685
+88686
+88687
+88688
+88689
+88690
+88691
+88692
+88693
+88694
+88695
+88696
+88697
+88698
+88699
+88700
+88701
+88702
+88703
+88704
+88705
+88706
+88707
+88708
+88709
+88710
+88711
+88712
+88713
+88714
+88715
+88716
+88717
+88718
+88719
+88720
+88721
+88722
+88723
+88724
+88725
+88726
+88727
+88728
+88729
+88730
+88731
+88732
+88733
+88734
+88735
+88736
+88737
+88738
+88739
+88740
+88741
+88742
+88743
+88744
+88745
+88746
+88747
+88748
+88749
+88750
+88751
+88752
+88753
+88754
+88755
+88756
+88757
+88758
+88759
+88760
+88761
+88762
+88763
+88764
+88765
+88766
+88767
+88768
+88769
+88770
+88771
+88772
+88773
+88774
+88775
+88776
+88777
+88778
+88779
+88780
+88781
+88782
+88783
+88784
+88785
+88786
+88787
+88788
+88789
+88790
+88791
+88792
+88793
+88794
+88795
+88796
+88797
+88798
+88799
+88800
+88801
+88802
+88803
+88804
+88805
+88806
+88807
+88808
+88809
+88810
+88811
+88812
+88813
+88814
+88815
+88816
+88817
+88818
+88819
+88820
+88821
+88822
+88823
+88824
+88825
+88826
+88827
+88828
+88829
+88830
+88831
+88832
+88833
+88834
+88835
+88836
+88837
+88838
+88839
+88840
+88841
+88842
+88843
+88844
+88845
+88846
+88847
+88848
+88849
+88850
+88851
+88852
+88853
+88854
+88855
+88856
+88857
+88858
+88859
+88860
+88861
+88862
+88863
+88864
+88865
+88866
+88867
+88868
+88869
+88870
+88871
+88872
+88873
+88874
+88875
+88876
+88877
+88878
+88879
+88880
+88881
+88882
+88883
+88884
+88885
+88886
+88887
+88888
+88889
+88890
+88891
+88892
+88893
+88894
+88895
+88896
+88897
+88898
+88899
+88900
+88901
+88902
+88903
+88904
+88905
+88906
+88907
+88908
+88909
+88910
+88911
+88912
+88913
+88914
+88915
+88916
+88917
+88918
+88919
+88920
+88921
+88922
+88923
+88924
+88925
+88926
+88927
+88928
+88929
+88930
+88931
+88932
+88933
+88934
+88935
+88936
+88937
+88938
+88939
+88940
+88941
+88942
+88943
+88944
+88945
+88946
+88947
+88948
+88949
+88950
+88951
+88952
+88953
+88954
+88955
+88956
+88957
+88958
+88959
+88960
+88961
+88962
+88963
+88964
+88965
+88966
+88967
+88968
+88969
+88970
+88971
+88972
+88973
+88974
+88975
+88976
+88977
+88978
+88979
+88980
+88981
+88982
+88983
+88984
+88985
+88986
+88987
+88988
+88989
+88990
+88991
+88992
+88993
+88994
+88995
+88996
+88997
+88998
+88999
+89000
+89001
+89002
+89003
+89004
+89005
+89006
+89007
+89008
+89009
+89010
+89011
+89012
+89013
+89014
+89015
+89016
+89017
+89018
+89019
+89020
+89021
+89022
+89023
+89024
+89025
+89026
+89027
+89028
+89029
+89030
+89031
+89032
+89033
+89034
+89035
+89036
+89037
+89038
+89039
+89040
+89041
+89042
+89043
+89044
+89045
+89046
+89047
+89048
+89049
+89050
+89051
+89052
+89053
+89054
+89055
+89056
+89057
+89058
+89059
+89060
+89061
+89062
+89063
+89064
+89065
+89066
+89067
+89068
+89069
+89070
+89071
+89072
+89073
+89074
+89075
+89076
+89077
+89078
+89079
+89080
+89081
+89082
+89083
+89084
+89085
+89086
+89087
+89088
+89089
+89090
+89091
+89092
+89093
+89094
+89095
+89096
+89097
+89098
+89099
+89100
+89101
+89102
+89103
+89104
+89105
+89106
+89107
+89108
+89109
+89110
+89111
+89112
+89113
+89114
+89115
+89116
+89117
+89118
+89119
+89120
+89121
+89122
+89123
+89124
+89125
+89126
+89127
+89128
+89129
+89130
+89131
+89132
+89133
+89134
+89135
+89136
+89137
+89138
+89139
+89140
+89141
+89142
+89143
+89144
+89145
+89146
+89147
+89148
+89149
+89150
+89151
+89152
+89153
+89154
+89155
+89156
+89157
+89158
+89159
+89160
+89161
+89162
+89163
+89164
+89165
+89166
+89167
+89168
+89169
+89170
+89171
+89172
+89173
+89174
+89175
+89176
+89177
+89178
+89179
+89180
+89181
+89182
+89183
+89184
+89185
+89186
+89187
+89188
+89189
+89190
+89191
+89192
+89193
+89194
+89195
+89196
+89197
+89198
+89199
+89200
+89201
+89202
+89203
+89204
+89205
+89206
+89207
+89208
+89209
+89210
+89211
+89212
+89213
+89214
+89215
+89216
+89217
+89218
+89219
+89220
+89221
+89222
+89223
+89224
+89225
+89226
+89227
+89228
+89229
+89230
+89231
+89232
+89233
+89234
+89235
+89236
+89237
+89238
+89239
+89240
+89241
+89242
+89243
+89244
+89245
+89246
+89247
+89248
+89249
+89250
+89251
+89252
+89253
+89254
+89255
+89256
+89257
+89258
+89259
+89260
+89261
+89262
+89263
+89264
+89265
+89266
+89267
+89268
+89269
+89270
+89271
+89272
+89273
+89274
+89275
+89276
+89277
+89278
+89279
+89280
+89281
+89282
+89283
+89284
+89285
+89286
+89287
+89288
+89289
+89290
+89291
+89292
+89293
+89294
+89295
+89296
+89297
+89298
+89299
+89300
+89301
+89302
+89303
+89304
+89305
+89306
+89307
+89308
+89309
+89310
+89311
+89312
+89313
+89314
+89315
+89316
+89317
+89318
+89319
+89320
+89321
+89322
+89323
+89324
+89325
+89326
+89327
+89328
+89329
+89330
+89331
+89332
+89333
+89334
+89335
+89336
+89337
+89338
+89339
+89340
+89341
+89342
+89343
+89344
+89345
+89346
+89347
+89348
+89349
+89350
+89351
+89352
+89353
+89354
+89355
+89356
+89357
+89358
+89359
+89360
+89361
+89362
+89363
+89364
+89365
+89366
+89367
+89368
+89369
+89370
+89371
+89372
+89373
+89374
+89375
+89376
+89377
+89378
+89379
+89380
+89381
+89382
+89383
+89384
+89385
+89386
+89387
+89388
+89389
+89390
+89391
+89392
+89393
+89394
+89395
+89396
+89397
+89398
+89399
+89400
+89401
+89402
+89403
+89404
+89405
+89406
+89407
+89408
+89409
+89410
+89411
+89412
+89413
+89414
+89415
+89416
+89417
+89418
+89419
+89420
+89421
+89422
+89423
+89424
+89425
+89426
+89427
+89428
+89429
+89430
+89431
+89432
+89433
+89434
+89435
+89436
+89437
+89438
+89439
+89440
+89441
+89442
+89443
+89444
+89445
+89446
+89447
+89448
+89449
+89450
+89451
+89452
+89453
+89454
+89455
+89456
+89457
+89458
+89459
+89460
+89461
+89462
+89463
+89464
+89465
+89466
+89467
+89468
+89469
+89470
+89471
+89472
+89473
+89474
+89475
+89476
+89477
+89478
+89479
+89480
+89481
+89482
+89483
+89484
+89485
+89486
+89487
+89488
+89489
+89490
+89491
+89492
+89493
+89494
+89495
+89496
+89497
+89498
+89499
+89500
+89501
+89502
+89503
+89504
+89505
+89506
+89507
+89508
+89509
+89510
+89511
+89512
+89513
+89514
+89515
+89516
+89517
+89518
+89519
+89520
+89521
+89522
+89523
+89524
+89525
+89526
+89527
+89528
+89529
+89530
+89531
+89532
+89533
+89534
+89535
+89536
+89537
+89538
+89539
+89540
+89541
+89542
+89543
+89544
+89545
+89546
+89547
+89548
+89549
+89550
+89551
+89552
+89553
+89554
+89555
+89556
+89557
+89558
+89559
+89560
+89561
+89562
+89563
+89564
+89565
+89566
+89567
+89568
+89569
+89570
+89571
+89572
+89573
+89574
+89575
+89576
+89577
+89578
+89579
+89580
+89581
+89582
+89583
+89584
+89585
+89586
+89587
+89588
+89589
+89590
+89591
+89592
+89593
+89594
+89595
+89596
+89597
+89598
+89599
+89600
+89601
+89602
+89603
+89604
+89605
+89606
+89607
+89608
+89609
+89610
+89611
+89612
+89613
+89614
+89615
+89616
+89617
+89618
+89619
+89620
+89621
+89622
+89623
+89624
+89625
+89626
+89627
+89628
+89629
+89630
+89631
+89632
+89633
+89634
+89635
+89636
+89637
+89638
+89639
+89640
+89641
+89642
+89643
+89644
+89645
+89646
+89647
+89648
+89649
+89650
+89651
+89652
+89653
+89654
+89655
+89656
+89657
+89658
+89659
+89660
+89661
+89662
+89663
+89664
+89665
+89666
+89667
+89668
+89669
+89670
+89671
+89672
+89673
+89674
+89675
+89676
+89677
+89678
+89679
+89680
+89681
+89682
+89683
+89684
+89685
+89686
+89687
+89688
+89689
+89690
+89691
+89692
+89693
+89694
+89695
+89696
+89697
+89698
+89699
+89700
+89701
+89702
+89703
+89704
+89705
+89706
+89707
+89708
+89709
+89710
+89711
+89712
+89713
+89714
+89715
+89716
+89717
+89718
+89719
+89720
+89721
+89722
+89723
+89724
+89725
+89726
+89727
+89728
+89729
+89730
+89731
+89732
+89733
+89734
+89735
+89736
+89737
+89738
+89739
+89740
+89741
+89742
+89743
+89744
+89745
+89746
+89747
+89748
+89749
+89750
+89751
+89752
+89753
+89754
+89755
+89756
+89757
+89758
+89759
+89760
+89761
+89762
+89763
+89764
+89765
+89766
+89767
+89768
+89769
+89770
+89771
+89772
+89773
+89774
+89775
+89776
+89777
+89778
+89779
+89780
+89781
+89782
+89783
+89784
+89785
+89786
+89787
+89788
+89789
+89790
+89791
+89792
+89793
+89794
+89795
+89796
+89797
+89798
+89799
+89800
+89801
+89802
+89803
+89804
+89805
+89806
+89807
+89808
+89809
+89810
+89811
+89812
+89813
+89814
+89815
+89816
+89817
+89818
+89819
+89820
+89821
+89822
+89823
+89824
+89825
+89826
+89827
+89828
+89829
+89830
+89831
+89832
+89833
+89834
+89835
+89836
+89837
+89838
+89839
+89840
+89841
+89842
+89843
+89844
+89845
+89846
+89847
+89848
+89849
+89850
+89851
+89852
+89853
+89854
+89855
+89856
+89857
+89858
+89859
+89860
+89861
+89862
+89863
+89864
+89865
+89866
+89867
+89868
+89869
+89870
+89871
+89872
+89873
+89874
+89875
+89876
+89877
+89878
+89879
+89880
+89881
+89882
+89883
+89884
+89885
+89886
+89887
+89888
+89889
+89890
+89891
+89892
+89893
+89894
+89895
+89896
+89897
+89898
+89899
+89900
+89901
+89902
+89903
+89904
+89905
+89906
+89907
+89908
+89909
+89910
+89911
+89912
+89913
+89914
+89915
+89916
+89917
+89918
+89919
+89920
+89921
+89922
+89923
+89924
+89925
+89926
+89927
+89928
+89929
+89930
+89931
+89932
+89933
+89934
+89935
+89936
+89937
+89938
+89939
+89940
+89941
+89942
+89943
+89944
+89945
+89946
+89947
+89948
+89949
+89950
+89951
+89952
+89953
+89954
+89955
+89956
+89957
+89958
+89959
+89960
+89961
+89962
+89963
+89964
+89965
+89966
+89967
+89968
+89969
+89970
+89971
+89972
+89973
+89974
+89975
+89976
+89977
+89978
+89979
+89980
+89981
+89982
+89983
+89984
+89985
+89986
+89987
+89988
+89989
+89990
+89991
+89992
+89993
+89994
+89995
+89996
+89997
+89998
+89999
+90000
+90001
+90002
+90003
+90004
+90005
+90006
+90007
+90008
+90009
+90010
+90011
+90012
+90013
+90014
+90015
+90016
+90017
+90018
+90019
+90020
+90021
+90022
+90023
+90024
+90025
+90026
+90027
+90028
+90029
+90030
+90031
+90032
+90033
+90034
+90035
+90036
+90037
+90038
+90039
+90040
+90041
+90042
+90043
+90044
+90045
+90046
+90047
+90048
+90049
+90050
+90051
+90052
+90053
+90054
+90055
+90056
+90057
+90058
+90059
+90060
+90061
+90062
+90063
+90064
+90065
+90066
+90067
+90068
+90069
+90070
+90071
+90072
+90073
+90074
+90075
+90076
+90077
+90078
+90079
+90080
+90081
+90082
+90083
+90084
+90085
+90086
+90087
+90088
+90089
+90090
+90091
+90092
+90093
+90094
+90095
+90096
+90097
+90098
+90099
+90100
+90101
+90102
+90103
+90104
+90105
+90106
+90107
+90108
+90109
+90110
+90111
+90112
+90113
+90114
+90115
+90116
+90117
+90118
+90119
+90120
+90121
+90122
+90123
+90124
+90125
+90126
+90127
+90128
+90129
+90130
+90131
+90132
+90133
+90134
+90135
+90136
+90137
+90138
+90139
+90140
+90141
+90142
+90143
+90144
+90145
+90146
+90147
+90148
+90149
+90150
+90151
+90152
+90153
+90154
+90155
+90156
+90157
+90158
+90159
+90160
+90161
+90162
+90163
+90164
+90165
+90166
+90167
+90168
+90169
+90170
+90171
+90172
+90173
+90174
+90175
+90176
+90177
+90178
+90179
+90180
+90181
+90182
+90183
+90184
+90185
+90186
+90187
+90188
+90189
+90190
+90191
+90192
+90193
+90194
+90195
+90196
+90197
+90198
+90199
+90200
+90201
+90202
+90203
+90204
+90205
+90206
+90207
+90208
+90209
+90210
+90211
+90212
+90213
+90214
+90215
+90216
+90217
+90218
+90219
+90220
+90221
+90222
+90223
+90224
+90225
+90226
+90227
+90228
+90229
+90230
+90231
+90232
+90233
+90234
+90235
+90236
+90237
+90238
+90239
+90240
+90241
+90242
+90243
+90244
+90245
+90246
+90247
+90248
+90249
+90250
+90251
+90252
+90253
+90254
+90255
+90256
+90257
+90258
+90259
+90260
+90261
+90262
+90263
+90264
+90265
+90266
+90267
+90268
+90269
+90270
+90271
+90272
+90273
+90274
+90275
+90276
+90277
+90278
+90279
+90280
+90281
+90282
+90283
+90284
+90285
+90286
+90287
+90288
+90289
+90290
+90291
+90292
+90293
+90294
+90295
+90296
+90297
+90298
+90299
+90300
+90301
+90302
+90303
+90304
+90305
+90306
+90307
+90308
+90309
+90310
+90311
+90312
+90313
+90314
+90315
+90316
+90317
+90318
+90319
+90320
+90321
+90322
+90323
+90324
+90325
+90326
+90327
+90328
+90329
+90330
+90331
+90332
+90333
+90334
+90335
+90336
+90337
+90338
+90339
+90340
+90341
+90342
+90343
+90344
+90345
+90346
+90347
+90348
+90349
+90350
+90351
+90352
+90353
+90354
+90355
+90356
+90357
+90358
+90359
+90360
+90361
+90362
+90363
+90364
+90365
+90366
+90367
+90368
+90369
+90370
+90371
+90372
+90373
+90374
+90375
+90376
+90377
+90378
+90379
+90380
+90381
+90382
+90383
+90384
+90385
+90386
+90387
+90388
+90389
+90390
+90391
+90392
+90393
+90394
+90395
+90396
+90397
+90398
+90399
+90400
+90401
+90402
+90403
+90404
+90405
+90406
+90407
+90408
+90409
+90410
+90411
+90412
+90413
+90414
+90415
+90416
+90417
+90418
+90419
+90420
+90421
+90422
+90423
+90424
+90425
+90426
+90427
+90428
+90429
+90430
+90431
+90432
+90433
+90434
+90435
+90436
+90437
+90438
+90439
+90440
+90441
+90442
+90443
+90444
+90445
+90446
+90447
+90448
+90449
+90450
+90451
+90452
+90453
+90454
+90455
+90456
+90457
+90458
+90459
+90460
+90461
+90462
+90463
+90464
+90465
+90466
+90467
+90468
+90469
+90470
+90471
+90472
+90473
+90474
+90475
+90476
+90477
+90478
+90479
+90480
+90481
+90482
+90483
+90484
+90485
+90486
+90487
+90488
+90489
+90490
+90491
+90492
+90493
+90494
+90495
+90496
+90497
+90498
+90499
+90500
+90501
+90502
+90503
+90504
+90505
+90506
+90507
+90508
+90509
+90510
+90511
+90512
+90513
+90514
+90515
+90516
+90517
+90518
+90519
+90520
+90521
+90522
+90523
+90524
+90525
+90526
+90527
+90528
+90529
+90530
+90531
+90532
+90533
+90534
+90535
+90536
+90537
+90538
+90539
+90540
+90541
+90542
+90543
+90544
+90545
+90546
+90547
+90548
+90549
+90550
+90551
+90552
+90553
+90554
+90555
+90556
+90557
+90558
+90559
+90560
+90561
+90562
+90563
+90564
+90565
+90566
+90567
+90568
+90569
+90570
+90571
+90572
+90573
+90574
+90575
+90576
+90577
+90578
+90579
+90580
+90581
+90582
+90583
+90584
+90585
+90586
+90587
+90588
+90589
+90590
+90591
+90592
+90593
+90594
+90595
+90596
+90597
+90598
+90599
+90600
+90601
+90602
+90603
+90604
+90605
+90606
+90607
+90608
+90609
+90610
+90611
+90612
+90613
+90614
+90615
+90616
+90617
+90618
+90619
+90620
+90621
+90622
+90623
+90624
+90625
+90626
+90627
+90628
+90629
+90630
+90631
+90632
+90633
+90634
+90635
+90636
+90637
+90638
+90639
+90640
+90641
+90642
+90643
+90644
+90645
+90646
+90647
+90648
+90649
+90650
+90651
+90652
+90653
+90654
+90655
+90656
+90657
+90658
+90659
+90660
+90661
+90662
+90663
+90664
+90665
+90666
+90667
+90668
+90669
+90670
+90671
+90672
+90673
+90674
+90675
+90676
+90677
+90678
+90679
+90680
+90681
+90682
+90683
+90684
+90685
+90686
+90687
+90688
+90689
+90690
+90691
+90692
+90693
+90694
+90695
+90696
+90697
+90698
+90699
+90700
+90701
+90702
+90703
+90704
+90705
+90706
+90707
+90708
+90709
+90710
+90711
+90712
+90713
+90714
+90715
+90716
+90717
+90718
+90719
+90720
+90721
+90722
+90723
+90724
+90725
+90726
+90727
+90728
+90729
+90730
+90731
+90732
+90733
+90734
+90735
+90736
+90737
+90738
+90739
+90740
+90741
+90742
+90743
+90744
+90745
+90746
+90747
+90748
+90749
+90750
+90751
+90752
+90753
+90754
+90755
+90756
+90757
+90758
+90759
+90760
+90761
+90762
+90763
+90764
+90765
+90766
+90767
+90768
+90769
+90770
+90771
+90772
+90773
+90774
+90775
+90776
+90777
+90778
+90779
+90780
+90781
+90782
+90783
+90784
+90785
+90786
+90787
+90788
+90789
+90790
+90791
+90792
+90793
+90794
+90795
+90796
+90797
+90798
+90799
+90800
+90801
+90802
+90803
+90804
+90805
+90806
+90807
+90808
+90809
+90810
+90811
+90812
+90813
+90814
+90815
+90816
+90817
+90818
+90819
+90820
+90821
+90822
+90823
+90824
+90825
+90826
+90827
+90828
+90829
+90830
+90831
+90832
+90833
+90834
+90835
+90836
+90837
+90838
+90839
+90840
+90841
+90842
+90843
+90844
+90845
+90846
+90847
+90848
+90849
+90850
+90851
+90852
+90853
+90854
+90855
+90856
+90857
+90858
+90859
+90860
+90861
+90862
+90863
+90864
+90865
+90866
+90867
+90868
+90869
+90870
+90871
+90872
+90873
+90874
+90875
+90876
+90877
+90878
+90879
+90880
+90881
+90882
+90883
+90884
+90885
+90886
+90887
+90888
+90889
+90890
+90891
+90892
+90893
+90894
+90895
+90896
+90897
+90898
+90899
+90900
+90901
+90902
+90903
+90904
+90905
+90906
+90907
+90908
+90909
+90910
+90911
+90912
+90913
+90914
+90915
+90916
+90917
+90918
+90919
+90920
+90921
+90922
+90923
+90924
+90925
+90926
+90927
+90928
+90929
+90930
+90931
+90932
+90933
+90934
+90935
+90936
+90937
+90938
+90939
+90940
+90941
+90942
+90943
+90944
+90945
+90946
+90947
+90948
+90949
+90950
+90951
+90952
+90953
+90954
+90955
+90956
+90957
+90958
+90959
+90960
+90961
+90962
+90963
+90964
+90965
+90966
+90967
+90968
+90969
+90970
+90971
+90972
+90973
+90974
+90975
+90976
+90977
+90978
+90979
+90980
+90981
+90982
+90983
+90984
+90985
+90986
+90987
+90988
+90989
+90990
+90991
+90992
+90993
+90994
+90995
+90996
+90997
+90998
+90999
+91000
+91001
+91002
+91003
+91004
+91005
+91006
+91007
+91008
+91009
+91010
+91011
+91012
+91013
+91014
+91015
+91016
+91017
+91018
+91019
+91020
+91021
+91022
+91023
+91024
+91025
+91026
+91027
+91028
+91029
+91030
+91031
+91032
+91033
+91034
+91035
+91036
+91037
+91038
+91039
+91040
+91041
+91042
+91043
+91044
+91045
+91046
+91047
+91048
+91049
+91050
+91051
+91052
+91053
+91054
+91055
+91056
+91057
+91058
+91059
+91060
+91061
+91062
+91063
+91064
+91065
+91066
+91067
+91068
+91069
+91070
+91071
+91072
+91073
+91074
+91075
+91076
+91077
+91078
+91079
+91080
+91081
+91082
+91083
+91084
+91085
+91086
+91087
+91088
+91089
+91090
+91091
+91092
+91093
+91094
+91095
+91096
+91097
+91098
+91099
+91100
+91101
+91102
+91103
+91104
+91105
+91106
+91107
+91108
+91109
+91110
+91111
+91112
+91113
+91114
+91115
+91116
+91117
+91118
+91119
+91120
+91121
+91122
+91123
+91124
+91125
+91126
+91127
+91128
+91129
+91130
+91131
+91132
+91133
+91134
+91135
+91136
+91137
+91138
+91139
+91140
+91141
+91142
+91143
+91144
+91145
+91146
+91147
+91148
+91149
+91150
+91151
+91152
+91153
+91154
+91155
+91156
+91157
+91158
+91159
+91160
+91161
+91162
+91163
+91164
+91165
+91166
+91167
+91168
+91169
+91170
+91171
+91172
+91173
+91174
+91175
+91176
+91177
+91178
+91179
+91180
+91181
+91182
+91183
+91184
+91185
+91186
+91187
+91188
+91189
+91190
+91191
+91192
+91193
+91194
+91195
+91196
+91197
+91198
+91199
+91200
+91201
+91202
+91203
+91204
+91205
+91206
+91207
+91208
+91209
+91210
+91211
+91212
+91213
+91214
+91215
+91216
+91217
+91218
+91219
+91220
+91221
+91222
+91223
+91224
+91225
+91226
+91227
+91228
+91229
+91230
+91231
+91232
+91233
+91234
+91235
+91236
+91237
+91238
+91239
+91240
+91241
+91242
+91243
+91244
+91245
+91246
+91247
+91248
+91249
+91250
+91251
+91252
+91253
+91254
+91255
+91256
+91257
+91258
+91259
+91260
+91261
+91262
+91263
+91264
+91265
+91266
+91267
+91268
+91269
+91270
+91271
+91272
+91273
+91274
+91275
+91276
+91277
+91278
+91279
+91280
+91281
+91282
+91283
+91284
+91285
+91286
+91287
+91288
+91289
+91290
+91291
+91292
+91293
+91294
+91295
+91296
+91297
+91298
+91299
+91300
+91301
+91302
+91303
+91304
+91305
+91306
+91307
+91308
+91309
+91310
+91311
+91312
+91313
+91314
+91315
+91316
+91317
+91318
+91319
+91320
+91321
+91322
+91323
+91324
+91325
+91326
+91327
+91328
+91329
+91330
+91331
+91332
+91333
+91334
+91335
+91336
+91337
+91338
+91339
+91340
+91341
+91342
+91343
+91344
+91345
+91346
+91347
+91348
+91349
+91350
+91351
+91352
+91353
+91354
+91355
+91356
+91357
+91358
+91359
+91360
+91361
+91362
+91363
+91364
+91365
+91366
+91367
+91368
+91369
+91370
+91371
+91372
+91373
+91374
+91375
+91376
+91377
+91378
+91379
+91380
+91381
+91382
+91383
+91384
+91385
+91386
+91387
+91388
+91389
+91390
+91391
+91392
+91393
+91394
+91395
+91396
+91397
+91398
+91399
+91400
+91401
+91402
+91403
+91404
+91405
+91406
+91407
+91408
+91409
+91410
+91411
+91412
+91413
+91414
+91415
+91416
+91417
+91418
+91419
+91420
+91421
+91422
+91423
+91424
+91425
+91426
+91427
+91428
+91429
+91430
+91431
+91432
+91433
+91434
+91435
+91436
+91437
+91438
+91439
+91440
+91441
+91442
+91443
+91444
+91445
+91446
+91447
+91448
+91449
+91450
+91451
+91452
+91453
+91454
+91455
+91456
+91457
+91458
+91459
+91460
+91461
+91462
+91463
+91464
+91465
+91466
+91467
+91468
+91469
+91470
+91471
+91472
+91473
+91474
+91475
+91476
+91477
+91478
+91479
+91480
+91481
+91482
+91483
+91484
+91485
+91486
+91487
+91488
+91489
+91490
+91491
+91492
+91493
+91494
+91495
+91496
+91497
+91498
+91499
+91500
+91501
+91502
+91503
+91504
+91505
+91506
+91507
+91508
+91509
+91510
+91511
+91512
+91513
+91514
+91515
+91516
+91517
+91518
+91519
+91520
+91521
+91522
+91523
+91524
+91525
+91526
+91527
+91528
+91529
+91530
+91531
+91532
+91533
+91534
+91535
+91536
+91537
+91538
+91539
+91540
+91541
+91542
+91543
+91544
+91545
+91546
+91547
+91548
+91549
+91550
+91551
+91552
+91553
+91554
+91555
+91556
+91557
+91558
+91559
+91560
+91561
+91562
+91563
+91564
+91565
+91566
+91567
+91568
+91569
+91570
+91571
+91572
+91573
+91574
+91575
+91576
+91577
+91578
+91579
+91580
+91581
+91582
+91583
+91584
+91585
+91586
+91587
+91588
+91589
+91590
+91591
+91592
+91593
+91594
+91595
+91596
+91597
+91598
+91599
+91600
+91601
+91602
+91603
+91604
+91605
+91606
+91607
+91608
+91609
+91610
+91611
+91612
+91613
+91614
+91615
+91616
+91617
+91618
+91619
+91620
+91621
+91622
+91623
+91624
+91625
+91626
+91627
+91628
+91629
+91630
+91631
+91632
+91633
+91634
+91635
+91636
+91637
+91638
+91639
+91640
+91641
+91642
+91643
+91644
+91645
+91646
+91647
+91648
+91649
+91650
+91651
+91652
+91653
+91654
+91655
+91656
+91657
+91658
+91659
+91660
+91661
+91662
+91663
+91664
+91665
+91666
+91667
+91668
+91669
+91670
+91671
+91672
+91673
+91674
+91675
+91676
+91677
+91678
+91679
+91680
+91681
+91682
+91683
+91684
+91685
+91686
+91687
+91688
+91689
+91690
+91691
+91692
+91693
+91694
+91695
+91696
+91697
+91698
+91699
+91700
+91701
+91702
+91703
+91704
+91705
+91706
+91707
+91708
+91709
+91710
+91711
+91712
+91713
+91714
+91715
+91716
+91717
+91718
+91719
+91720
+91721
+91722
+91723
+91724
+91725
+91726
+91727
+91728
+91729
+91730
+91731
+91732
+91733
+91734
+91735
+91736
+91737
+91738
+91739
+91740
+91741
+91742
+91743
+91744
+91745
+91746
+91747
+91748
+91749
+91750
+91751
+91752
+91753
+91754
+91755
+91756
+91757
+91758
+91759
+91760
+91761
+91762
+91763
+91764
+91765
+91766
+91767
+91768
+91769
+91770
+91771
+91772
+91773
+91774
+91775
+91776
+91777
+91778
+91779
+91780
+91781
+91782
+91783
+91784
+91785
+91786
+91787
+91788
+91789
+91790
+91791
+91792
+91793
+91794
+91795
+91796
+91797
+91798
+91799
+91800
+91801
+91802
+91803
+91804
+91805
+91806
+91807
+91808
+91809
+91810
+91811
+91812
+91813
+91814
+91815
+91816
+91817
+91818
+91819
+91820
+91821
+91822
+91823
+91824
+91825
+91826
+91827
+91828
+91829
+91830
+91831
+91832
+91833
+91834
+91835
+91836
+91837
+91838
+91839
+91840
+91841
+91842
+91843
+91844
+91845
+91846
+91847
+91848
+91849
+91850
+91851
+91852
+91853
+91854
+91855
+91856
+91857
+91858
+91859
+91860
+91861
+91862
+91863
+91864
+91865
+91866
+91867
+91868
+91869
+91870
+91871
+91872
+91873
+91874
+91875
+91876
+91877
+91878
+91879
+91880
+91881
+91882
+91883
+91884
+91885
+91886
+91887
+91888
+91889
+91890
+91891
+91892
+91893
+91894
+91895
+91896
+91897
+91898
+91899
+91900
+91901
+91902
+91903
+91904
+91905
+91906
+91907
+91908
+91909
+91910
+91911
+91912
+91913
+91914
+91915
+91916
+91917
+91918
+91919
+91920
+91921
+91922
+91923
+91924
+91925
+91926
+91927
+91928
+91929
+91930
+91931
+91932
+91933
+91934
+91935
+91936
+91937
+91938
+91939
+91940
+91941
+91942
+91943
+91944
+91945
+91946
+91947
+91948
+91949
+91950
+91951
+91952
+91953
+91954
+91955
+91956
+91957
+91958
+91959
+91960
+91961
+91962
+91963
+91964
+91965
+91966
+91967
+91968
+91969
+91970
+91971
+91972
+91973
+91974
+91975
+91976
+91977
+91978
+91979
+91980
+91981
+91982
+91983
+91984
+91985
+91986
+91987
+91988
+91989
+91990
+91991
+91992
+91993
+91994
+91995
+91996
+91997
+91998
+91999
+92000
+92001
+92002
+92003
+92004
+92005
+92006
+92007
+92008
+92009
+92010
+92011
+92012
+92013
+92014
+92015
+92016
+92017
+92018
+92019
+92020
+92021
+92022
+92023
+92024
+92025
+92026
+92027
+92028
+92029
+92030
+92031
+92032
+92033
+92034
+92035
+92036
+92037
+92038
+92039
+92040
+92041
+92042
+92043
+92044
+92045
+92046
+92047
+92048
+92049
+92050
+92051
+92052
+92053
+92054
+92055
+92056
+92057
+92058
+92059
+92060
+92061
+92062
+92063
+92064
+92065
+92066
+92067
+92068
+92069
+92070
+92071
+92072
+92073
+92074
+92075
+92076
+92077
+92078
+92079
+92080
+92081
+92082
+92083
+92084
+92085
+92086
+92087
+92088
+92089
+92090
+92091
+92092
+92093
+92094
+92095
+92096
+92097
+92098
+92099
+92100
+92101
+92102
+92103
+92104
+92105
+92106
+92107
+92108
+92109
+92110
+92111
+92112
+92113
+92114
+92115
+92116
+92117
+92118
+92119
+92120
+92121
+92122
+92123
+92124
+92125
+92126
+92127
+92128
+92129
+92130
+92131
+92132
+92133
+92134
+92135
+92136
+92137
+92138
+92139
+92140
+92141
+92142
+92143
+92144
+92145
+92146
+92147
+92148
+92149
+92150
+92151
+92152
+92153
+92154
+92155
+92156
+92157
+92158
+92159
+92160
+92161
+92162
+92163
+92164
+92165
+92166
+92167
+92168
+92169
+92170
+92171
+92172
+92173
+92174
+92175
+92176
+92177
+92178
+92179
+92180
+92181
+92182
+92183
+92184
+92185
+92186
+92187
+92188
+92189
+92190
+92191
+92192
+92193
+92194
+92195
+92196
+92197
+92198
+92199
+92200
+92201
+92202
+92203
+92204
+92205
+92206
+92207
+92208
+92209
+92210
+92211
+92212
+92213
+92214
+92215
+92216
+92217
+92218
+92219
+92220
+92221
+92222
+92223
+92224
+92225
+92226
+92227
+92228
+92229
+92230
+92231
+92232
+92233
+92234
+92235
+92236
+92237
+92238
+92239
+92240
+92241
+92242
+92243
+92244
+92245
+92246
+92247
+92248
+92249
+92250
+92251
+92252
+92253
+92254
+92255
+92256
+92257
+92258
+92259
+92260
+92261
+92262
+92263
+92264
+92265
+92266
+92267
+92268
+92269
+92270
+92271
+92272
+92273
+92274
+92275
+92276
+92277
+92278
+92279
+92280
+92281
+92282
+92283
+92284
+92285
+92286
+92287
+92288
+92289
+92290
+92291
+92292
+92293
+92294
+92295
+92296
+92297
+92298
+92299
+92300
+92301
+92302
+92303
+92304
+92305
+92306
+92307
+92308
+92309
+92310
+92311
+92312
+92313
+92314
+92315
+92316
+92317
+92318
+92319
+92320
+92321
+92322
+92323
+92324
+92325
+92326
+92327
+92328
+92329
+92330
+92331
+92332
+92333
+92334
+92335
+92336
+92337
+92338
+92339
+92340
+92341
+92342
+92343
+92344
+92345
+92346
+92347
+92348
+92349
+92350
+92351
+92352
+92353
+92354
+92355
+92356
+92357
+92358
+92359
+92360
+92361
+92362
+92363
+92364
+92365
+92366
+92367
+92368
+92369
+92370
+92371
+92372
+92373
+92374
+92375
+92376
+92377
+92378
+92379
+92380
+92381
+92382
+92383
+92384
+92385
+92386
+92387
+92388
+92389
+92390
+92391
+92392
+92393
+92394
+92395
+92396
+92397
+92398
+92399
+92400
+92401
+92402
+92403
+92404
+92405
+92406
+92407
+92408
+92409
+92410
+92411
+92412
+92413
+92414
+92415
+92416
+92417
+92418
+92419
+92420
+92421
+92422
+92423
+92424
+92425
+92426
+92427
+92428
+92429
+92430
+92431
+92432
+92433
+92434
+92435
+92436
+92437
+92438
+92439
+92440
+92441
+92442
+92443
+92444
+92445
+92446
+92447
+92448
+92449
+92450
+92451
+92452
+92453
+92454
+92455
+92456
+92457
+92458
+92459
+92460
+92461
+92462
+92463
+92464
+92465
+92466
+92467
+92468
+92469
+92470
+92471
+92472
+92473
+92474
+92475
+92476
+92477
+92478
+92479
+92480
+92481
+92482
+92483
+92484
+92485
+92486
+92487
+92488
+92489
+92490
+92491
+92492
+92493
+92494
+92495
+92496
+92497
+92498
+92499
+92500
+92501
+92502
+92503
+92504
+92505
+92506
+92507
+92508
+92509
+92510
+92511
+92512
+92513
+92514
+92515
+92516
+92517
+92518
+92519
+92520
+92521
+92522
+92523
+92524
+92525
+92526
+92527
+92528
+92529
+92530
+92531
+92532
+92533
+92534
+92535
+92536
+92537
+92538
+92539
+92540
+92541
+92542
+92543
+92544
+92545
+92546
+92547
+92548
+92549
+92550
+92551
+92552
+92553
+92554
+92555
+92556
+92557
+92558
+92559
+92560
+92561
+92562
+92563
+92564
+92565
+92566
+92567
+92568
+92569
+92570
+92571
+92572
+92573
+92574
+92575
+92576
+92577
+92578
+92579
+92580
+92581
+92582
+92583
+92584
+92585
+92586
+92587
+92588
+92589
+92590
+92591
+92592
+92593
+92594
+92595
+92596
+92597
+92598
+92599
+92600
+92601
+92602
+92603
+92604
+92605
+92606
+92607
+92608
+92609
+92610
+92611
+92612
+92613
+92614
+92615
+92616
+92617
+92618
+92619
+92620
+92621
+92622
+92623
+92624
+92625
+92626
+92627
+92628
+92629
+92630
+92631
+92632
+92633
+92634
+92635
+92636
+92637
+92638
+92639
+92640
+92641
+92642
+92643
+92644
+92645
+92646
+92647
+92648
+92649
+92650
+92651
+92652
+92653
+92654
+92655
+92656
+92657
+92658
+92659
+92660
+92661
+92662
+92663
+92664
+92665
+92666
+92667
+92668
+92669
+92670
+92671
+92672
+92673
+92674
+92675
+92676
+92677
+92678
+92679
+92680
+92681
+92682
+92683
+92684
+92685
+92686
+92687
+92688
+92689
+92690
+92691
+92692
+92693
+92694
+92695
+92696
+92697
+92698
+92699
+92700
+92701
+92702
+92703
+92704
+92705
+92706
+92707
+92708
+92709
+92710
+92711
+92712
+92713
+92714
+92715
+92716
+92717
+92718
+92719
+92720
+92721
+92722
+92723
+92724
+92725
+92726
+92727
+92728
+92729
+92730
+92731
+92732
+92733
+92734
+92735
+92736
+92737
+92738
+92739
+92740
+92741
+92742
+92743
+92744
+92745
+92746
+92747
+92748
+92749
+92750
+92751
+92752
+92753
+92754
+92755
+92756
+92757
+92758
+92759
+92760
+92761
+92762
+92763
+92764
+92765
+92766
+92767
+92768
+92769
+92770
+92771
+92772
+92773
+92774
+92775
+92776
+92777
+92778
+92779
+92780
+92781
+92782
+92783
+92784
+92785
+92786
+92787
+92788
+92789
+92790
+92791
+92792
+92793
+92794
+92795
+92796
+92797
+92798
+92799
+92800
+92801
+92802
+92803
+92804
+92805
+92806
+92807
+92808
+92809
+92810
+92811
+92812
+92813
+92814
+92815
+92816
+92817
+92818
+92819
+92820
+92821
+92822
+92823
+92824
+92825
+92826
+92827
+92828
+92829
+92830
+92831
+92832
+92833
+92834
+92835
+92836
+92837
+92838
+92839
+92840
+92841
+92842
+92843
+92844
+92845
+92846
+92847
+92848
+92849
+92850
+92851
+92852
+92853
+92854
+92855
+92856
+92857
+92858
+92859
+92860
+92861
+92862
+92863
+92864
+92865
+92866
+92867
+92868
+92869
+92870
+92871
+92872
+92873
+92874
+92875
+92876
+92877
+92878
+92879
+92880
+92881
+92882
+92883
+92884
+92885
+92886
+92887
+92888
+92889
+92890
+92891
+92892
+92893
+92894
+92895
+92896
+92897
+92898
+92899
+92900
+92901
+92902
+92903
+92904
+92905
+92906
+92907
+92908
+92909
+92910
+92911
+92912
+92913
+92914
+92915
+92916
+92917
+92918
+92919
+92920
+92921
+92922
+92923
+92924
+92925
+92926
+92927
+92928
+92929
+92930
+92931
+92932
+92933
+92934
+92935
+92936
+92937
+92938
+92939
+92940
+92941
+92942
+92943
+92944
+92945
+92946
+92947
+92948
+92949
+92950
+92951
+92952
+92953
+92954
+92955
+92956
+92957
+92958
+92959
+92960
+92961
+92962
+92963
+92964
+92965
+92966
+92967
+92968
+92969
+92970
+92971
+92972
+92973
+92974
+92975
+92976
+92977
+92978
+92979
+92980
+92981
+92982
+92983
+92984
+92985
+92986
+92987
+92988
+92989
+92990
+92991
+92992
+92993
+92994
+92995
+92996
+92997
+92998
+92999
+93000
+93001
+93002
+93003
+93004
+93005
+93006
+93007
+93008
+93009
+93010
+93011
+93012
+93013
+93014
+93015
+93016
+93017
+93018
+93019
+93020
+93021
+93022
+93023
+93024
+93025
+93026
+93027
+93028
+93029
+93030
+93031
+93032
+93033
+93034
+93035
+93036
+93037
+93038
+93039
+93040
+93041
+93042
+93043
+93044
+93045
+93046
+93047
+93048
+93049
+93050
+93051
+93052
+93053
+93054
+93055
+93056
+93057
+93058
+93059
+93060
+93061
+93062
+93063
+93064
+93065
+93066
+93067
+93068
+93069
+93070
+93071
+93072
+93073
+93074
+93075
+93076
+93077
+93078
+93079
+93080
+93081
+93082
+93083
+93084
+93085
+93086
+93087
+93088
+93089
+93090
+93091
+93092
+93093
+93094
+93095
+93096
+93097
+93098
+93099
+93100
+93101
+93102
+93103
+93104
+93105
+93106
+93107
+93108
+93109
+93110
+93111
+93112
+93113
+93114
+93115
+93116
+93117
+93118
+93119
+93120
+93121
+93122
+93123
+93124
+93125
+93126
+93127
+93128
+93129
+93130
+93131
+93132
+93133
+93134
+93135
+93136
+93137
+93138
+93139
+93140
+93141
+93142
+93143
+93144
+93145
+93146
+93147
+93148
+93149
+93150
+93151
+93152
+93153
+93154
+93155
+93156
+93157
+93158
+93159
+93160
+93161
+93162
+93163
+93164
+93165
+93166
+93167
+93168
+93169
+93170
+93171
+93172
+93173
+93174
+93175
+93176
+93177
+93178
+93179
+93180
+93181
+93182
+93183
+93184
+93185
+93186
+93187
+93188
+93189
+93190
+93191
+93192
+93193
+93194
+93195
+93196
+93197
+93198
+93199
+93200
+93201
+93202
+93203
+93204
+93205
+93206
+93207
+93208
+93209
+93210
+93211
+93212
+93213
+93214
+93215
+93216
+93217
+93218
+93219
+93220
+93221
+93222
+93223
+93224
+93225
+93226
+93227
+93228
+93229
+93230
+93231
+93232
+93233
+93234
+93235
+93236
+93237
+93238
+93239
+93240
+93241
+93242
+93243
+93244
+93245
+93246
+93247
+93248
+93249
+93250
+93251
+93252
+93253
+93254
+93255
+93256
+93257
+93258
+93259
+93260
+93261
+93262
+93263
+93264
+93265
+93266
+93267
+93268
+93269
+93270
+93271
+93272
+93273
+93274
+93275
+93276
+93277
+93278
+93279
+93280
+93281
+93282
+93283
+93284
+93285
+93286
+93287
+93288
+93289
+93290
+93291
+93292
+93293
+93294
+93295
+93296
+93297
+93298
+93299
+93300
+93301
+93302
+93303
+93304
+93305
+93306
+93307
+93308
+93309
+93310
+93311
+93312
+93313
+93314
+93315
+93316
+93317
+93318
+93319
+93320
+93321
+93322
+93323
+93324
+93325
+93326
+93327
+93328
+93329
+93330
+93331
+93332
+93333
+93334
+93335
+93336
+93337
+93338
+93339
+93340
+93341
+93342
+93343
+93344
+93345
+93346
+93347
+93348
+93349
+93350
+93351
+93352
+93353
+93354
+93355
+93356
+93357
+93358
+93359
+93360
+93361
+93362
+93363
+93364
+93365
+93366
+93367
+93368
+93369
+93370
+93371
+93372
+93373
+93374
+93375
+93376
+93377
+93378
+93379
+93380
+93381
+93382
+93383
+93384
+93385
+93386
+93387
+93388
+93389
+93390
+93391
+93392
+93393
+93394
+93395
+93396
+93397
+93398
+93399
+93400
+93401
+93402
+93403
+93404
+93405
+93406
+93407
+93408
+93409
+93410
+93411
+93412
+93413
+93414
+93415
+93416
+93417
+93418
+93419
+93420
+93421
+93422
+93423
+93424
+93425
+93426
+93427
+93428
+93429
+93430
+93431
+93432
+93433
+93434
+93435
+93436
+93437
+93438
+93439
+93440
+93441
+93442
+93443
+93444
+93445
+93446
+93447
+93448
+93449
+93450
+93451
+93452
+93453
+93454
+93455
+93456
+93457
+93458
+93459
+93460
+93461
+93462
+93463
+93464
+93465
+93466
+93467
+93468
+93469
+93470
+93471
+93472
+93473
+93474
+93475
+93476
+93477
+93478
+93479
+93480
+93481
+93482
+93483
+93484
+93485
+93486
+93487
+93488
+93489
+93490
+93491
+93492
+93493
+93494
+93495
+93496
+93497
+93498
+93499
+93500
+93501
+93502
+93503
+93504
+93505
+93506
+93507
+93508
+93509
+93510
+93511
+93512
+93513
+93514
+93515
+93516
+93517
+93518
+93519
+93520
+93521
+93522
+93523
+93524
+93525
+93526
+93527
+93528
+93529
+93530
+93531
+93532
+93533
+93534
+93535
+93536
+93537
+93538
+93539
+93540
+93541
+93542
+93543
+93544
+93545
+93546
+93547
+93548
+93549
+93550
+93551
+93552
+93553
+93554
+93555
+93556
+93557
+93558
+93559
+93560
+93561
+93562
+93563
+93564
+93565
+93566
+93567
+93568
+93569
+93570
+93571
+93572
+93573
+93574
+93575
+93576
+93577
+93578
+93579
+93580
+93581
+93582
+93583
+93584
+93585
+93586
+93587
+93588
+93589
+93590
+93591
+93592
+93593
+93594
+93595
+93596
+93597
+93598
+93599
+93600
+93601
+93602
+93603
+93604
+93605
+93606
+93607
+93608
+93609
+93610
+93611
+93612
+93613
+93614
+93615
+93616
+93617
+93618
+93619
+93620
+93621
+93622
+93623
+93624
+93625
+93626
+93627
+93628
+93629
+93630
+93631
+93632
+93633
+93634
+93635
+93636
+93637
+93638
+93639
+93640
+93641
+93642
+93643
+93644
+93645
+93646
+93647
+93648
+93649
+93650
+93651
+93652
+93653
+93654
+93655
+93656
+93657
+93658
+93659
+93660
+93661
+93662
+93663
+93664
+93665
+93666
+93667
+93668
+93669
+93670
+93671
+93672
+93673
+93674
+93675
+93676
+93677
+93678
+93679
+93680
+93681
+93682
+93683
+93684
+93685
+93686
+93687
+93688
+93689
+93690
+93691
+93692
+93693
+93694
+93695
+93696
+93697
+93698
+93699
+93700
+93701
+93702
+93703
+93704
+93705
+93706
+93707
+93708
+93709
+93710
+93711
+93712
+93713
+93714
+93715
+93716
+93717
+93718
+93719
+93720
+93721
+93722
+93723
+93724
+93725
+93726
+93727
+93728
+93729
+93730
+93731
+93732
+93733
+93734
+93735
+93736
+93737
+93738
+93739
+93740
+93741
+93742
+93743
+93744
+93745
+93746
+93747
+93748
+93749
+93750
+93751
+93752
+93753
+93754
+93755
+93756
+93757
+93758
+93759
+93760
+93761
+93762
+93763
+93764
+93765
+93766
+93767
+93768
+93769
+93770
+93771
+93772
+93773
+93774
+93775
+93776
+93777
+93778
+93779
+93780
+93781
+93782
+93783
+93784
+93785
+93786
+93787
+93788
+93789
+93790
+93791
+93792
+93793
+93794
+93795
+93796
+93797
+93798
+93799
+93800
+93801
+93802
+93803
+93804
+93805
+93806
+93807
+93808
+93809
+93810
+93811
+93812
+93813
+93814
+93815
+93816
+93817
+93818
+93819
+93820
+93821
+93822
+93823
+93824
+93825
+93826
+93827
+93828
+93829
+93830
+93831
+93832
+93833
+93834
+93835
+93836
+93837
+93838
+93839
+93840
+93841
+93842
+93843
+93844
+93845
+93846
+93847
+93848
+93849
+93850
+93851
+93852
+93853
+93854
+93855
+93856
+93857
+93858
+93859
+93860
+93861
+93862
+93863
+93864
+93865
+93866
+93867
+93868
+93869
+93870
+93871
+93872
+93873
+93874
+93875
+93876
+93877
+93878
+93879
+93880
+93881
+93882
+93883
+93884
+93885
+93886
+93887
+93888
+93889
+93890
+93891
+93892
+93893
+93894
+93895
+93896
+93897
+93898
+93899
+93900
+93901
+93902
+93903
+93904
+93905
+93906
+93907
+93908
+93909
+93910
+93911
+93912
+93913
+93914
+93915
+93916
+93917
+93918
+93919
+93920
+93921
+93922
+93923
+93924
+93925
+93926
+93927
+93928
+93929
+93930
+93931
+93932
+93933
+93934
+93935
+93936
+93937
+93938
+93939
+93940
+93941
+93942
+93943
+93944
+93945
+93946
+93947
+93948
+93949
+93950
+93951
+93952
+93953
+93954
+93955
+93956
+93957
+93958
+93959
+93960
+93961
+93962
+93963
+93964
+93965
+93966
+93967
+93968
+93969
+93970
+93971
+93972
+93973
+93974
+93975
+93976
+93977
+93978
+93979
+93980
+93981
+93982
+93983
+93984
+93985
+93986
+93987
+93988
+93989
+93990
+93991
+93992
+93993
+93994
+93995
+93996
+93997
+93998
+93999
+94000
+94001
+94002
+94003
+94004
+94005
+94006
+94007
+94008
+94009
+94010
+94011
+94012
+94013
+94014
+94015
+94016
+94017
+94018
+94019
+94020
+94021
+94022
+94023
+94024
+94025
+94026
+94027
+94028
+94029
+94030
+94031
+94032
+94033
+94034
+94035
+94036
+94037
+94038
+94039
+94040
+94041
+94042
+94043
+94044
+94045
+94046
+94047
+94048
+94049
+94050
+94051
+94052
+94053
+94054
+94055
+94056
+94057
+94058
+94059
+94060
+94061
+94062
+94063
+94064
+94065
+94066
+94067
+94068
+94069
+94070
+94071
+94072
+94073
+94074
+94075
+94076
+94077
+94078
+94079
+94080
+94081
+94082
+94083
+94084
+94085
+94086
+94087
+94088
+94089
+94090
+94091
+94092
+94093
+94094
+94095
+94096
+94097
+94098
+94099
+94100
+94101
+94102
+94103
+94104
+94105
+94106
+94107
+94108
+94109
+94110
+94111
+94112
+94113
+94114
+94115
+94116
+94117
+94118
+94119
+94120
+94121
+94122
+94123
+94124
+94125
+94126
+94127
+94128
+94129
+94130
+94131
+94132
+94133
+94134
+94135
+94136
+94137
+94138
+94139
+94140
+94141
+94142
+94143
+94144
+94145
+94146
+94147
+94148
+94149
+94150
+94151
+94152
+94153
+94154
+94155
+94156
+94157
+94158
+94159
+94160
+94161
+94162
+94163
+94164
+94165
+94166
+94167
+94168
+94169
+94170
+94171
+94172
+94173
+94174
+94175
+94176
+94177
+94178
+94179
+94180
+94181
+94182
+94183
+94184
+94185
+94186
+94187
+94188
+94189
+94190
+94191
+94192
+94193
+94194
+94195
+94196
+94197
+94198
+94199
+94200
+94201
+94202
+94203
+94204
+94205
+94206
+94207
+94208
+94209
+94210
+94211
+94212
+94213
+94214
+94215
+94216
+94217
+94218
+94219
+94220
+94221
+94222
+94223
+94224
+94225
+94226
+94227
+94228
+94229
+94230
+94231
+94232
+94233
+94234
+94235
+94236
+94237
+94238
+94239
+94240
+94241
+94242
+94243
+94244
+94245
+94246
+94247
+94248
+94249
+94250
+94251
+94252
+94253
+94254
+94255
+94256
+94257
+94258
+94259
+94260
+94261
+94262
+94263
+94264
+94265
+94266
+94267
+94268
+94269
+94270
+94271
+94272
+94273
+94274
+94275
+94276
+94277
+94278
+94279
+94280
+94281
+94282
+94283
+94284
+94285
+94286
+94287
+94288
+94289
+94290
+94291
+94292
+94293
+94294
+94295
+94296
+94297
+94298
+94299
+94300
+94301
+94302
+94303
+94304
+94305
+94306
+94307
+94308
+94309
+94310
+94311
+94312
+94313
+94314
+94315
+94316
+94317
+94318
+94319
+94320
+94321
+94322
+94323
+94324
+94325
+94326
+94327
+94328
+94329
+94330
+94331
+94332
+94333
+94334
+94335
+94336
+94337
+94338
+94339
+94340
+94341
+94342
+94343
+94344
+94345
+94346
+94347
+94348
+94349
+94350
+94351
+94352
+94353
+94354
+94355
+94356
+94357
+94358
+94359
+94360
+94361
+94362
+94363
+94364
+94365
+94366
+94367
+94368
+94369
+94370
+94371
+94372
+94373
+94374
+94375
+94376
+94377
+94378
+94379
+94380
+94381
+94382
+94383
+94384
+94385
+94386
+94387
+94388
+94389
+94390
+94391
+94392
+94393
+94394
+94395
+94396
+94397
+94398
+94399
+94400
+94401
+94402
+94403
+94404
+94405
+94406
+94407
+94408
+94409
+94410
+94411
+94412
+94413
+94414
+94415
+94416
+94417
+94418
+94419
+94420
+94421
+94422
+94423
+94424
+94425
+94426
+94427
+94428
+94429
+94430
+94431
+94432
+94433
+94434
+94435
+94436
+94437
+94438
+94439
+94440
+94441
+94442
+94443
+94444
+94445
+94446
+94447
+94448
+94449
+94450
+94451
+94452
+94453
+94454
+94455
+94456
+94457
+94458
+94459
+94460
+94461
+94462
+94463
+94464
+94465
+94466
+94467
+94468
+94469
+94470
+94471
+94472
+94473
+94474
+94475
+94476
+94477
+94478
+94479
+94480
+94481
+94482
+94483
+94484
+94485
+94486
+94487
+94488
+94489
+94490
+94491
+94492
+94493
+94494
+94495
+94496
+94497
+94498
+94499
+94500
+94501
+94502
+94503
+94504
+94505
+94506
+94507
+94508
+94509
+94510
+94511
+94512
+94513
+94514
+94515
+94516
+94517
+94518
+94519
+94520
+94521
+94522
+94523
+94524
+94525
+94526
+94527
+94528
+94529
+94530
+94531
+94532
+94533
+94534
+94535
+94536
+94537
+94538
+94539
+94540
+94541
+94542
+94543
+94544
+94545
+94546
+94547
+94548
+94549
+94550
+94551
+94552
+94553
+94554
+94555
+94556
+94557
+94558
+94559
+94560
+94561
+94562
+94563
+94564
+94565
+94566
+94567
+94568
+94569
+94570
+94571
+94572
+94573
+94574
+94575
+94576
+94577
+94578
+94579
+94580
+94581
+94582
+94583
+94584
+94585
+94586
+94587
+94588
+94589
+94590
+94591
+94592
+94593
+94594
+94595
+94596
+94597
+94598
+94599
+94600
+94601
+94602
+94603
+94604
+94605
+94606
+94607
+94608
+94609
+94610
+94611
+94612
+94613
+94614
+94615
+94616
+94617
+94618
+94619
+94620
+94621
+94622
+94623
+94624
+94625
+94626
+94627
+94628
+94629
+94630
+94631
+94632
+94633
+94634
+94635
+94636
+94637
+94638
+94639
+94640
+94641
+94642
+94643
+94644
+94645
+94646
+94647
+94648
+94649
+94650
+94651
+94652
+94653
+94654
+94655
+94656
+94657
+94658
+94659
+94660
+94661
+94662
+94663
+94664
+94665
+94666
+94667
+94668
+94669
+94670
+94671
+94672
+94673
+94674
+94675
+94676
+94677
+94678
+94679
+94680
+94681
+94682
+94683
+94684
+94685
+94686
+94687
+94688
+94689
+94690
+94691
+94692
+94693
+94694
+94695
+94696
+94697
+94698
+94699
+94700
+94701
+94702
+94703
+94704
+94705
+94706
+94707
+94708
+94709
+94710
+94711
+94712
+94713
+94714
+94715
+94716
+94717
+94718
+94719
+94720
+94721
+94722
+94723
+94724
+94725
+94726
+94727
+94728
+94729
+94730
+94731
+94732
+94733
+94734
+94735
+94736
+94737
+94738
+94739
+94740
+94741
+94742
+94743
+94744
+94745
+94746
+94747
+94748
+94749
+94750
+94751
+94752
+94753
+94754
+94755
+94756
+94757
+94758
+94759
+94760
+94761
+94762
+94763
+94764
+94765
+94766
+94767
+94768
+94769
+94770
+94771
+94772
+94773
+94774
+94775
+94776
+94777
+94778
+94779
+94780
+94781
+94782
+94783
+94784
+94785
+94786
+94787
+94788
+94789
+94790
+94791
+94792
+94793
+94794
+94795
+94796
+94797
+94798
+94799
+94800
+94801
+94802
+94803
+94804
+94805
+94806
+94807
+94808
+94809
+94810
+94811
+94812
+94813
+94814
+94815
+94816
+94817
+94818
+94819
+94820
+94821
+94822
+94823
+94824
+94825
+94826
+94827
+94828
+94829
+94830
+94831
+94832
+94833
+94834
+94835
+94836
+94837
+94838
+94839
+94840
+94841
+94842
+94843
+94844
+94845
+94846
+94847
+94848
+94849
+94850
+94851
+94852
+94853
+94854
+94855
+94856
+94857
+94858
+94859
+94860
+94861
+94862
+94863
+94864
+94865
+94866
+94867
+94868
+94869
+94870
+94871
+94872
+94873
+94874
+94875
+94876
+94877
+94878
+94879
+94880
+94881
+94882
+94883
+94884
+94885
+94886
+94887
+94888
+94889
+94890
+94891
+94892
+94893
+94894
+94895
+94896
+94897
+94898
+94899
+94900
+94901
+94902
+94903
+94904
+94905
+94906
+94907
+94908
+94909
+94910
+94911
+94912
+94913
+94914
+94915
+94916
+94917
+94918
+94919
+94920
+94921
+94922
+94923
+94924
+94925
+94926
+94927
+94928
+94929
+94930
+94931
+94932
+94933
+94934
+94935
+94936
+94937
+94938
+94939
+94940
+94941
+94942
+94943
+94944
+94945
+94946
+94947
+94948
+94949
+94950
+94951
+94952
+94953
+94954
+94955
+94956
+94957
+94958
+94959
+94960
+94961
+94962
+94963
+94964
+94965
+94966
+94967
+94968
+94969
+94970
+94971
+94972
+94973
+94974
+94975
+94976
+94977
+94978
+94979
+94980
+94981
+94982
+94983
+94984
+94985
+94986
+94987
+94988
+94989
+94990
+94991
+94992
+94993
+94994
+94995
+94996
+94997
+94998
+94999
+95000
+95001
+95002
+95003
+95004
+95005
+95006
+95007
+95008
+95009
+95010
+95011
+95012
+95013
+95014
+95015
+95016
+95017
+95018
+95019
+95020
+95021
+95022
+95023
+95024
+95025
+95026
+95027
+95028
+95029
+95030
+95031
+95032
+95033
+95034
+95035
+95036
+95037
+95038
+95039
+95040
+95041
+95042
+95043
+95044
+95045
+95046
+95047
+95048
+95049
+95050
+95051
+95052
+95053
+95054
+95055
+95056
+95057
+95058
+95059
+95060
+95061
+95062
+95063
+95064
+95065
+95066
+95067
+95068
+95069
+95070
+95071
+95072
+95073
+95074
+95075
+95076
+95077
+95078
+95079
+95080
+95081
+95082
+95083
+95084
+95085
+95086
+95087
+95088
+95089
+95090
+95091
+95092
+95093
+95094
+95095
+95096
+95097
+95098
+95099
+95100
+95101
+95102
+95103
+95104
+95105
+95106
+95107
+95108
+95109
+95110
+95111
+95112
+95113
+95114
+95115
+95116
+95117
+95118
+95119
+95120
+95121
+95122
+95123
+95124
+95125
+95126
+95127
+95128
+95129
+95130
+95131
+95132
+95133
+95134
+95135
+95136
+95137
+95138
+95139
+95140
+95141
+95142
+95143
+95144
+95145
+95146
+95147
+95148
+95149
+95150
+95151
+95152
+95153
+95154
+95155
+95156
+95157
+95158
+95159
+95160
+95161
+95162
+95163
+95164
+95165
+95166
+95167
+95168
+95169
+95170
+95171
+95172
+95173
+95174
+95175
+95176
+95177
+95178
+95179
+95180
+95181
+95182
+95183
+95184
+95185
+95186
+95187
+95188
+95189
+95190
+95191
+95192
+95193
+95194
+95195
+95196
+95197
+95198
+95199
+95200
+95201
+95202
+95203
+95204
+95205
+95206
+95207
+95208
+95209
+95210
+95211
+95212
+95213
+95214
+95215
+95216
+95217
+95218
+95219
+95220
+95221
+95222
+95223
+95224
+95225
+95226
+95227
+95228
+95229
+95230
+95231
+95232
+95233
+95234
+95235
+95236
+95237
+95238
+95239
+95240
+95241
+95242
+95243
+95244
+95245
+95246
+95247
+95248
+95249
+95250
+95251
+95252
+95253
+95254
+95255
+95256
+95257
+95258
+95259
+95260
+95261
+95262
+95263
+95264
+95265
+95266
+95267
+95268
+95269
+95270
+95271
+95272
+95273
+95274
+95275
+95276
+95277
+95278
+95279
+95280
+95281
+95282
+95283
+95284
+95285
+95286
+95287
+95288
+95289
+95290
+95291
+95292
+95293
+95294
+95295
+95296
+95297
+95298
+95299
+95300
+95301
+95302
+95303
+95304
+95305
+95306
+95307
+95308
+95309
+95310
+95311
+95312
+95313
+95314
+95315
+95316
+95317
+95318
+95319
+95320
+95321
+95322
+95323
+95324
+95325
+95326
+95327
+95328
+95329
+95330
+95331
+95332
+95333
+95334
+95335
+95336
+95337
+95338
+95339
+95340
+95341
+95342
+95343
+95344
+95345
+95346
+95347
+95348
+95349
+95350
+95351
+95352
+95353
+95354
+95355
+95356
+95357
+95358
+95359
+95360
+95361
+95362
+95363
+95364
+95365
+95366
+95367
+95368
+95369
+95370
+95371
+95372
+95373
+95374
+95375
+95376
+95377
+95378
+95379
+95380
+95381
+95382
+95383
+95384
+95385
+95386
+95387
+95388
+95389
+95390
+95391
+95392
+95393
+95394
+95395
+95396
+95397
+95398
+95399
+95400
+95401
+95402
+95403
+95404
+95405
+95406
+95407
+95408
+95409
+95410
+95411
+95412
+95413
+95414
+95415
+95416
+95417
+95418
+95419
+95420
+95421
+95422
+95423
+95424
+95425
+95426
+95427
+95428
+95429
+95430
+95431
+95432
+95433
+95434
+95435
+95436
+95437
+95438
+95439
+95440
+95441
+95442
+95443
+95444
+95445
+95446
+95447
+95448
+95449
+95450
+95451
+95452
+95453
+95454
+95455
+95456
+95457
+95458
+95459
+95460
+95461
+95462
+95463
+95464
+95465
+95466
+95467
+95468
+95469
+95470
+95471
+95472
+95473
+95474
+95475
+95476
+95477
+95478
+95479
+95480
+95481
+95482
+95483
+95484
+95485
+95486
+95487
+95488
+95489
+95490
+95491
+95492
+95493
+95494
+95495
+95496
+95497
+95498
+95499
+95500
+95501
+95502
+95503
+95504
+95505
+95506
+95507
+95508
+95509
+95510
+95511
+95512
+95513
+95514
+95515
+95516
+95517
+95518
+95519
+95520
+95521
+95522
+95523
+95524
+95525
+95526
+95527
+95528
+95529
+95530
+95531
+95532
+95533
+95534
+95535
+95536
+95537
+95538
+95539
+95540
+95541
+95542
+95543
+95544
+95545
+95546
+95547
+95548
+95549
+95550
+95551
+95552
+95553
+95554
+95555
+95556
+95557
+95558
+95559
+95560
+95561
+95562
+95563
+95564
+95565
+95566
+95567
+95568
+95569
+95570
+95571
+95572
+95573
+95574
+95575
+95576
+95577
+95578
+95579
+95580
+95581
+95582
+95583
+95584
+95585
+95586
+95587
+95588
+95589
+95590
+95591
+95592
+95593
+95594
+95595
+95596
+95597
+95598
+95599
+95600
+95601
+95602
+95603
+95604
+95605
+95606
+95607
+95608
+95609
+95610
+95611
+95612
+95613
+95614
+95615
+95616
+95617
+95618
+95619
+95620
+95621
+95622
+95623
+95624
+95625
+95626
+95627
+95628
+95629
+95630
+95631
+95632
+95633
+95634
+95635
+95636
+95637
+95638
+95639
+95640
+95641
+95642
+95643
+95644
+95645
+95646
+95647
+95648
+95649
+95650
+95651
+95652
+95653
+95654
+95655
+95656
+95657
+95658
+95659
+95660
+95661
+95662
+95663
+95664
+95665
+95666
+95667
+95668
+95669
+95670
+95671
+95672
+95673
+95674
+95675
+95676
+95677
+95678
+95679
+95680
+95681
+95682
+95683
+95684
+95685
+95686
+95687
+95688
+95689
+95690
+95691
+95692
+95693
+95694
+95695
+95696
+95697
+95698
+95699
+95700
+95701
+95702
+95703
+95704
+95705
+95706
+95707
+95708
+95709
+95710
+95711
+95712
+95713
+95714
+95715
+95716
+95717
+95718
+95719
+95720
+95721
+95722
+95723
+95724
+95725
+95726
+95727
+95728
+95729
+95730
+95731
+95732
+95733
+95734
+95735
+95736
+95737
+95738
+95739
+95740
+95741
+95742
+95743
+95744
+95745
+95746
+95747
+95748
+95749
+95750
+95751
+95752
+95753
+95754
+95755
+95756
+95757
+95758
+95759
+95760
+95761
+95762
+95763
+95764
+95765
+95766
+95767
+95768
+95769
+95770
+95771
+95772
+95773
+95774
+95775
+95776
+95777
+95778
+95779
+95780
+95781
+95782
+95783
+95784
+95785
+95786
+95787
+95788
+95789
+95790
+95791
+95792
+95793
+95794
+95795
+95796
+95797
+95798
+95799
+95800
+95801
+95802
+95803
+95804
+95805
+95806
+95807
+95808
+95809
+95810
+95811
+95812
+95813
+95814
+95815
+95816
+95817
+95818
+95819
+95820
+95821
+95822
+95823
+95824
+95825
+95826
+95827
+95828
+95829
+95830
+95831
+95832
+95833
+95834
+95835
+95836
+95837
+95838
+95839
+95840
+95841
+95842
+95843
+95844
+95845
+95846
+95847
+95848
+95849
+95850
+95851
+95852
+95853
+95854
+95855
+95856
+95857
+95858
+95859
+95860
+95861
+95862
+95863
+95864
+95865
+95866
+95867
+95868
+95869
+95870
+95871
+95872
+95873
+95874
+95875
+95876
+95877
+95878
+95879
+95880
+95881
+95882
+95883
+95884
+95885
+95886
+95887
+95888
+95889
+95890
+95891
+95892
+95893
+95894
+95895
+95896
+95897
+95898
+95899
+95900
+95901
+95902
+95903
+95904
+95905
+95906
+95907
+95908
+95909
+95910
+95911
+95912
+95913
+95914
+95915
+95916
+95917
+95918
+95919
+95920
+95921
+95922
+95923
+95924
+95925
+95926
+95927
+95928
+95929
+95930
+95931
+95932
+95933
+95934
+95935
+95936
+95937
+95938
+95939
+95940
+95941
+95942
+95943
+95944
+95945
+95946
+95947
+95948
+95949
+95950
+95951
+95952
+95953
+95954
+95955
+95956
+95957
+95958
+95959
+95960
+95961
+95962
+95963
+95964
+95965
+95966
+95967
+95968
+95969
+95970
+95971
+95972
+95973
+95974
+95975
+95976
+95977
+95978
+95979
+95980
+95981
+95982
+95983
+95984
+95985
+95986
+95987
+95988
+95989
+95990
+95991
+95992
+95993
+95994
+95995
+95996
+95997
+95998
+95999
+96000
+96001
+96002
+96003
+96004
+96005
+96006
+96007
+96008
+96009
+96010
+96011
+96012
+96013
+96014
+96015
+96016
+96017
+96018
+96019
+96020
+96021
+96022
+96023
+96024
+96025
+96026
+96027
+96028
+96029
+96030
+96031
+96032
+96033
+96034
+96035
+96036
+96037
+96038
+96039
+96040
+96041
+96042
+96043
+96044
+96045
+96046
+96047
+96048
+96049
+96050
+96051
+96052
+96053
+96054
+96055
+96056
+96057
+96058
+96059
+96060
+96061
+96062
+96063
+96064
+96065
+96066
+96067
+96068
+96069
+96070
+96071
+96072
+96073
+96074
+96075
+96076
+96077
+96078
+96079
+96080
+96081
+96082
+96083
+96084
+96085
+96086
+96087
+96088
+96089
+96090
+96091
+96092
+96093
+96094
+96095
+96096
+96097
+96098
+96099
+96100
+96101
+96102
+96103
+96104
+96105
+96106
+96107
+96108
+96109
+96110
+96111
+96112
+96113
+96114
+96115
+96116
+96117
+96118
+96119
+96120
+96121
+96122
+96123
+96124
+96125
+96126
+96127
+96128
+96129
+96130
+96131
+96132
+96133
+96134
+96135
+96136
+96137
+96138
+96139
+96140
+96141
+96142
+96143
+96144
+96145
+96146
+96147
+96148
+96149
+96150
+96151
+96152
+96153
+96154
+96155
+96156
+96157
+96158
+96159
+96160
+96161
+96162
+96163
+96164
+96165
+96166
+96167
+96168
+96169
+96170
+96171
+96172
+96173
+96174
+96175
+96176
+96177
+96178
+96179
+96180
+96181
+96182
+96183
+96184
+96185
+96186
+96187
+96188
+96189
+96190
+96191
+96192
+96193
+96194
+96195
+96196
+96197
+96198
+96199
+96200
+96201
+96202
+96203
+96204
+96205
+96206
+96207
+96208
+96209
+96210
+96211
+96212
+96213
+96214
+96215
+96216
+96217
+96218
+96219
+96220
+96221
+96222
+96223
+96224
+96225
+96226
+96227
+96228
+96229
+96230
+96231
+96232
+96233
+96234
+96235
+96236
+96237
+96238
+96239
+96240
+96241
+96242
+96243
+96244
+96245
+96246
+96247
+96248
+96249
+96250
+96251
+96252
+96253
+96254
+96255
+96256
+96257
+96258
+96259
+96260
+96261
+96262
+96263
+96264
+96265
+96266
+96267
+96268
+96269
+96270
+96271
+96272
+96273
+96274
+96275
+96276
+96277
+96278
+96279
+96280
+96281
+96282
+96283
+96284
+96285
+96286
+96287
+96288
+96289
+96290
+96291
+96292
+96293
+96294
+96295
+96296
+96297
+96298
+96299
+96300
+96301
+96302
+96303
+96304
+96305
+96306
+96307
+96308
+96309
+96310
+96311
+96312
+96313
+96314
+96315
+96316
+96317
+96318
+96319
+96320
+96321
+96322
+96323
+96324
+96325
+96326
+96327
+96328
+96329
+96330
+96331
+96332
+96333
+96334
+96335
+96336
+96337
+96338
+96339
+96340
+96341
+96342
+96343
+96344
+96345
+96346
+96347
+96348
+96349
+96350
+96351
+96352
+96353
+96354
+96355
+96356
+96357
+96358
+96359
+96360
+96361
+96362
+96363
+96364
+96365
+96366
+96367
+96368
+96369
+96370
+96371
+96372
+96373
+96374
+96375
+96376
+96377
+96378
+96379
+96380
+96381
+96382
+96383
+96384
+96385
+96386
+96387
+96388
+96389
+96390
+96391
+96392
+96393
+96394
+96395
+96396
+96397
+96398
+96399
+96400
+96401
+96402
+96403
+96404
+96405
+96406
+96407
+96408
+96409
+96410
+96411
+96412
+96413
+96414
+96415
+96416
+96417
+96418
+96419
+96420
+96421
+96422
+96423
+96424
+96425
+96426
+96427
+96428
+96429
+96430
+96431
+96432
+96433
+96434
+96435
+96436
+96437
+96438
+96439
+96440
+96441
+96442
+96443
+96444
+96445
+96446
+96447
+96448
+96449
+96450
+96451
+96452
+96453
+96454
+96455
+96456
+96457
+96458
+96459
+96460
+96461
+96462
+96463
+96464
+96465
+96466
+96467
+96468
+96469
+96470
+96471
+96472
+96473
+96474
+96475
+96476
+96477
+96478
+96479
+96480
+96481
+96482
+96483
+96484
+96485
+96486
+96487
+96488
+96489
+96490
+96491
+96492
+96493
+96494
+96495
+96496
+96497
+96498
+96499
+96500
+96501
+96502
+96503
+96504
+96505
+96506
+96507
+96508
+96509
+96510
+96511
+96512
+96513
+96514
+96515
+96516
+96517
+96518
+96519
+96520
+96521
+96522
+96523
+96524
+96525
+96526
+96527
+96528
+96529
+96530
+96531
+96532
+96533
+96534
+96535
+96536
+96537
+96538
+96539
+96540
+96541
+96542
+96543
+96544
+96545
+96546
+96547
+96548
+96549
+96550
+96551
+96552
+96553
+96554
+96555
+96556
+96557
+96558
+96559
+96560
+96561
+96562
+96563
+96564
+96565
+96566
+96567
+96568
+96569
+96570
+96571
+96572
+96573
+96574
+96575
+96576
+96577
+96578
+96579
+96580
+96581
+96582
+96583
+96584
+96585
+96586
+96587
+96588
+96589
+96590
+96591
+96592
+96593
+96594
+96595
+96596
+96597
+96598
+96599
+96600
+96601
+96602
+96603
+96604
+96605
+96606
+96607
+96608
+96609
+96610
+96611
+96612
+96613
+96614
+96615
+96616
+96617
+96618
+96619
+96620
+96621
+96622
+96623
+96624
+96625
+96626
+96627
+96628
+96629
+96630
+96631
+96632
+96633
+96634
+96635
+96636
+96637
+96638
+96639
+96640
+96641
+96642
+96643
+96644
+96645
+96646
+96647
+96648
+96649
+96650
+96651
+96652
+96653
+96654
+96655
+96656
+96657
+96658
+96659
+96660
+96661
+96662
+96663
+96664
+96665
+96666
+96667
+96668
+96669
+96670
+96671
+96672
+96673
+96674
+96675
+96676
+96677
+96678
+96679
+96680
+96681
+96682
+96683
+96684
+96685
+96686
+96687
+96688
+96689
+96690
+96691
+96692
+96693
+96694
+96695
+96696
+96697
+96698
+96699
+96700
+96701
+96702
+96703
+96704
+96705
+96706
+96707
+96708
+96709
+96710
+96711
+96712
+96713
+96714
+96715
+96716
+96717
+96718
+96719
+96720
+96721
+96722
+96723
+96724
+96725
+96726
+96727
+96728
+96729
+96730
+96731
+96732
+96733
+96734
+96735
+96736
+96737
+96738
+96739
+96740
+96741
+96742
+96743
+96744
+96745
+96746
+96747
+96748
+96749
+96750
+96751
+96752
+96753
+96754
+96755
+96756
+96757
+96758
+96759
+96760
+96761
+96762
+96763
+96764
+96765
+96766
+96767
+96768
+96769
+96770
+96771
+96772
+96773
+96774
+96775
+96776
+96777
+96778
+96779
+96780
+96781
+96782
+96783
+96784
+96785
+96786
+96787
+96788
+96789
+96790
+96791
+96792
+96793
+96794
+96795
+96796
+96797
+96798
+96799
+96800
+96801
+96802
+96803
+96804
+96805
+96806
+96807
+96808
+96809
+96810
+96811
+96812
+96813
+96814
+96815
+96816
+96817
+96818
+96819
+96820
+96821
+96822
+96823
+96824
+96825
+96826
+96827
+96828
+96829
+96830
+96831
+96832
+96833
+96834
+96835
+96836
+96837
+96838
+96839
+96840
+96841
+96842
+96843
+96844
+96845
+96846
+96847
+96848
+96849
+96850
+96851
+96852
+96853
+96854
+96855
+96856
+96857
+96858
+96859
+96860
+96861
+96862
+96863
+96864
+96865
+96866
+96867
+96868
+96869
+96870
+96871
+96872
+96873
+96874
+96875
+96876
+96877
+96878
+96879
+96880
+96881
+96882
+96883
+96884
+96885
+96886
+96887
+96888
+96889
+96890
+96891
+96892
+96893
+96894
+96895
+96896
+96897
+96898
+96899
+96900
+96901
+96902
+96903
+96904
+96905
+96906
+96907
+96908
+96909
+96910
+96911
+96912
+96913
+96914
+96915
+96916
+96917
+96918
+96919
+96920
+96921
+96922
+96923
+96924
+96925
+96926
+96927
+96928
+96929
+96930
+96931
+96932
+96933
+96934
+96935
+96936
+96937
+96938
+96939
+96940
+96941
+96942
+96943
+96944
+96945
+96946
+96947
+96948
+96949
+96950
+96951
+96952
+96953
+96954
+96955
+96956
+96957
+96958
+96959
+96960
+96961
+96962
+96963
+96964
+96965
+96966
+96967
+96968
+96969
+96970
+96971
+96972
+96973
+96974
+96975
+96976
+96977
+96978
+96979
+96980
+96981
+96982
+96983
+96984
+96985
+96986
+96987
+96988
+96989
+96990
+96991
+96992
+96993
+96994
+96995
+96996
+96997
+96998
+96999
+97000
+97001
+97002
+97003
+97004
+97005
+97006
+97007
+97008
+97009
+97010
+97011
+97012
+97013
+97014
+97015
+97016
+97017
+97018
+97019
+97020
+97021
+97022
+97023
+97024
+97025
+97026
+97027
+97028
+97029
+97030
+97031
+97032
+97033
+97034
+97035
+97036
+97037
+97038
+97039
+97040
+97041
+97042
+97043
+97044
+97045
+97046
+97047
+97048
+97049
+97050
+97051
+97052
+97053
+97054
+97055
+97056
+97057
+97058
+97059
+97060
+97061
+97062
+97063
+97064
+97065
+97066
+97067
+97068
+97069
+97070
+97071
+97072
+97073
+97074
+97075
+97076
+97077
+97078
+97079
+97080
+97081
+97082
+97083
+97084
+97085
+97086
+97087
+97088
+97089
+97090
+97091
+97092
+97093
+97094
+97095
+97096
+97097
+97098
+97099
+97100
+97101
+97102
+97103
+97104
+97105
+97106
+97107
+97108
+97109
+97110
+97111
+97112
+97113
+97114
+97115
+97116
+97117
+97118
+97119
+97120
+97121
+97122
+97123
+97124
+97125
+97126
+97127
+97128
+97129
+97130
+97131
+97132
+97133
+97134
+97135
+97136
+97137
+97138
+97139
+97140
+97141
+97142
+97143
+97144
+97145
+97146
+97147
+97148
+97149
+97150
+97151
+97152
+97153
+97154
+97155
+97156
+97157
+97158
+97159
+97160
+97161
+97162
+97163
+97164
+97165
+97166
+97167
+97168
+97169
+97170
+97171
+97172
+97173
+97174
+97175
+97176
+97177
+97178
+97179
+97180
+97181
+97182
+97183
+97184
+97185
+97186
+97187
+97188
+97189
+97190
+97191
+97192
+97193
+97194
+97195
+97196
+97197
+97198
+97199
+97200
+97201
+97202
+97203
+97204
+97205
+97206
+97207
+97208
+97209
+97210
+97211
+97212
+97213
+97214
+97215
+97216
+97217
+97218
+97219
+97220
+97221
+97222
+97223
+97224
+97225
+97226
+97227
+97228
+97229
+97230
+97231
+97232
+97233
+97234
+97235
+97236
+97237
+97238
+97239
+97240
+97241
+97242
+97243
+97244
+97245
+97246
+97247
+97248
+97249
+97250
+97251
+97252
+97253
+97254
+97255
+97256
+97257
+97258
+97259
+97260
+97261
+97262
+97263
+97264
+97265
+97266
+97267
+97268
+97269
+97270
+97271
+97272
+97273
+97274
+97275
+97276
+97277
+97278
+97279
+97280
+97281
+97282
+97283
+97284
+97285
+97286
+97287
+97288
+97289
+97290
+97291
+97292
+97293
+97294
+97295
+97296
+97297
+97298
+97299
+97300
+97301
+97302
+97303
+97304
+97305
+97306
+97307
+97308
+97309
+97310
+97311
+97312
+97313
+97314
+97315
+97316
+97317
+97318
+97319
+97320
+97321
+97322
+97323
+97324
+97325
+97326
+97327
+97328
+97329
+97330
+97331
+97332
+97333
+97334
+97335
+97336
+97337
+97338
+97339
+97340
+97341
+97342
+97343
+97344
+97345
+97346
+97347
+97348
+97349
+97350
+97351
+97352
+97353
+97354
+97355
+97356
+97357
+97358
+97359
+97360
+97361
+97362
+97363
+97364
+97365
+97366
+97367
+97368
+97369
+97370
+97371
+97372
+97373
+97374
+97375
+97376
+97377
+97378
+97379
+97380
+97381
+97382
+97383
+97384
+97385
+97386
+97387
+97388
+97389
+97390
+97391
+97392
+97393
+97394
+97395
+97396
+97397
+97398
+97399
+97400
+97401
+97402
+97403
+97404
+97405
+97406
+97407
+97408
+97409
+97410
+97411
+97412
+97413
+97414
+97415
+97416
+97417
+97418
+97419
+97420
+97421
+97422
+97423
+97424
+97425
+97426
+97427
+97428
+97429
+97430
+97431
+97432
+97433
+97434
+97435
+97436
+97437
+97438
+97439
+97440
+97441
+97442
+97443
+97444
+97445
+97446
+97447
+97448
+97449
+97450
+97451
+97452
+97453
+97454
+97455
+97456
+97457
+97458
+97459
+97460
+97461
+97462
+97463
+97464
+97465
+97466
+97467
+97468
+97469
+97470
+97471
+97472
+97473
+97474
+97475
+97476
+97477
+97478
+97479
+97480
+97481
+97482
+97483
+97484
+97485
+97486
+97487
+97488
+97489
+97490
+97491
+97492
+97493
+97494
+97495
+97496
+97497
+97498
+97499
+97500
+97501
+97502
+97503
+97504
+97505
+97506
+97507
+97508
+97509
+97510
+97511
+97512
+97513
+97514
+97515
+97516
+97517
+97518
+97519
+97520
+97521
+97522
+97523
+97524
+97525
+97526
+97527
+97528
+97529
+97530
+97531
+97532
+97533
+97534
+97535
+97536
+97537
+97538
+97539
+97540
+97541
+97542
+97543
+97544
+97545
+97546
+97547
+97548
+97549
+97550
+97551
+97552
+97553
+97554
+97555
+97556
+97557
+97558
+97559
+97560
+97561
+97562
+97563
+97564
+97565
+97566
+97567
+97568
+97569
+97570
+97571
+97572
+97573
+97574
+97575
+97576
+97577
+97578
+97579
+97580
+97581
+97582
+97583
+97584
+97585
+97586
+97587
+97588
+97589
+97590
+97591
+97592
+97593
+97594
+97595
+97596
+97597
+97598
+97599
+97600
+97601
+97602
+97603
+97604
+97605
+97606
+97607
+97608
+97609
+97610
+97611
+97612
+97613
+97614
+97615
+97616
+97617
+97618
+97619
+97620
+97621
+97622
+97623
+97624
+97625
+97626
+97627
+97628
+97629
+97630
+97631
+97632
+97633
+97634
+97635
+97636
+97637
+97638
+97639
+97640
+97641
+97642
+97643
+97644
+97645
+97646
+97647
+97648
+97649
+97650
+97651
+97652
+97653
+97654
+97655
+97656
+97657
+97658
+97659
+97660
+97661
+97662
+97663
+97664
+97665
+97666
+97667
+97668
+97669
+97670
+97671
+97672
+97673
+97674
+97675
+97676
+97677
+97678
+97679
+97680
+97681
+97682
+97683
+97684
+97685
+97686
+97687
+97688
+97689
+97690
+97691
+97692
+97693
+97694
+97695
+97696
+97697
+97698
+97699
+97700
+97701
+97702
+97703
+97704
+97705
+97706
+97707
+97708
+97709
+97710
+97711
+97712
+97713
+97714
+97715
+97716
+97717
+97718
+97719
+97720
+97721
+97722
+97723
+97724
+97725
+97726
+97727
+97728
+97729
+97730
+97731
+97732
+97733
+97734
+97735
+97736
+97737
+97738
+97739
+97740
+97741
+97742
+97743
+97744
+97745
+97746
+97747
+97748
+97749
+97750
+97751
+97752
+97753
+97754
+97755
+97756
+97757
+97758
+97759
+97760
+97761
+97762
+97763
+97764
+97765
+97766
+97767
+97768
+97769
+97770
+97771
+97772
+97773
+97774
+97775
+97776
+97777
+97778
+97779
+97780
+97781
+97782
+97783
+97784
+97785
+97786
+97787
+97788
+97789
+97790
+97791
+97792
+97793
+97794
+97795
+97796
+97797
+97798
+97799
+97800
+97801
+97802
+97803
+97804
+97805
+97806
+97807
+97808
+97809
+97810
+97811
+97812
+97813
+97814
+97815
+97816
+97817
+97818
+97819
+97820
+97821
+97822
+97823
+97824
+97825
+97826
+97827
+97828
+97829
+97830
+97831
+97832
+97833
+97834
+97835
+97836
+97837
+97838
+97839
+97840
+97841
+97842
+97843
+97844
+97845
+97846
+97847
+97848
+97849
+97850
+97851
+97852
+97853
+97854
+97855
+97856
+97857
+97858
+97859
+97860
+97861
+97862
+97863
+97864
+97865
+97866
+97867
+97868
+97869
+97870
+97871
+97872
+97873
+97874
+97875
+97876
+97877
+97878
+97879
+97880
+97881
+97882
+97883
+97884
+97885
+97886
+97887
+97888
+97889
+97890
+97891
+97892
+97893
+97894
+97895
+97896
+97897
+97898
+97899
+97900
+97901
+97902
+97903
+97904
+97905
+97906
+97907
+97908
+97909
+97910
+97911
+97912
+97913
+97914
+97915
+97916
+97917
+97918
+97919
+97920
+97921
+97922
+97923
+97924
+97925
+97926
+97927
+97928
+97929
+97930
+97931
+97932
+97933
+97934
+97935
+97936
+97937
+97938
+97939
+97940
+97941
+97942
+97943
+97944
+97945
+97946
+97947
+97948
+97949
+97950
+97951
+97952
+97953
+97954
+97955
+97956
+97957
+97958
+97959
+97960
+97961
+97962
+97963
+97964
+97965
+97966
+97967
+97968
+97969
+97970
+97971
+97972
+97973
+97974
+97975
+97976
+97977
+97978
+97979
+97980
+97981
+97982
+97983
+97984
+97985
+97986
+97987
+97988
+97989
+97990
+97991
+97992
+97993
+97994
+97995
+97996
+97997
+97998
+97999
+98000
+98001
+98002
+98003
+98004
+98005
+98006
+98007
+98008
+98009
+98010
+98011
+98012
+98013
+98014
+98015
+98016
+98017
+98018
+98019
+98020
+98021
+98022
+98023
+98024
+98025
+98026
+98027
+98028
+98029
+98030
+98031
+98032
+98033
+98034
+98035
+98036
+98037
+98038
+98039
+98040
+98041
+98042
+98043
+98044
+98045
+98046
+98047
+98048
+98049
+98050
+98051
+98052
+98053
+98054
+98055
+98056
+98057
+98058
+98059
+98060
+98061
+98062
+98063
+98064
+98065
+98066
+98067
+98068
+98069
+98070
+98071
+98072
+98073
+98074
+98075
+98076
+98077
+98078
+98079
+98080
+98081
+98082
+98083
+98084
+98085
+98086
+98087
+98088
+98089
+98090
+98091
+98092
+98093
+98094
+98095
+98096
+98097
+98098
+98099
+98100
+98101
+98102
+98103
+98104
+98105
+98106
+98107
+98108
+98109
+98110
+98111
+98112
+98113
+98114
+98115
+98116
+98117
+98118
+98119
+98120
+98121
+98122
+98123
+98124
+98125
+98126
+98127
+98128
+98129
+98130
+98131
+98132
+98133
+98134
+98135
+98136
+98137
+98138
+98139
+98140
+98141
+98142
+98143
+98144
+98145
+98146
+98147
+98148
+98149
+98150
+98151
+98152
+98153
+98154
+98155
+98156
+98157
+98158
+98159
+98160
+98161
+98162
+98163
+98164
+98165
+98166
+98167
+98168
+98169
+98170
+98171
+98172
+98173
+98174
+98175
+98176
+98177
+98178
+98179
+98180
+98181
+98182
+98183
+98184
+98185
+98186
+98187
+98188
+98189
+98190
+98191
+98192
+98193
+98194
+98195
+98196
+98197
+98198
+98199
+98200
+98201
+98202
+98203
+98204
+98205
+98206
+98207
+98208
+98209
+98210
+98211
+98212
+98213
+98214
+98215
+98216
+98217
+98218
+98219
+98220
+98221
+98222
+98223
+98224
+98225
+98226
+98227
+98228
+98229
+98230
+98231
+98232
+98233
+98234
+98235
+98236
+98237
+98238
+98239
+98240
+98241
+98242
+98243
+98244
+98245
+98246
+98247
+98248
+98249
+98250
+98251
+98252
+98253
+98254
+98255
+98256
+98257
+98258
+98259
+98260
+98261
+98262
+98263
+98264
+98265
+98266
+98267
+98268
+98269
+98270
+98271
+98272
+98273
+98274
+98275
+98276
+98277
+98278
+98279
+98280
+98281
+98282
+98283
+98284
+98285
+98286
+98287
+98288
+98289
+98290
+98291
+98292
+98293
+98294
+98295
+98296
+98297
+98298
+98299
+98300
+98301
+98302
+98303
+98304
+98305
+98306
+98307
+98308
+98309
+98310
+98311
+98312
+98313
+98314
+98315
+98316
+98317
+98318
+98319
+98320
+98321
+98322
+98323
+98324
+98325
+98326
+98327
+98328
+98329
+98330
+98331
+98332
+98333
+98334
+98335
+98336
+98337
+98338
+98339
+98340
+98341
+98342
+98343
+98344
+98345
+98346
+98347
+98348
+98349
+98350
+98351
+98352
+98353
+98354
+98355
+98356
+98357
+98358
+98359
+98360
+98361
+98362
+98363
+98364
+98365
+98366
+98367
+98368
+98369
+98370
+98371
+98372
+98373
+98374
+98375
+98376
+98377
+98378
+98379
+98380
+98381
+98382
+98383
+98384
+98385
+98386
+98387
+98388
+98389
+98390
+98391
+98392
+98393
+98394
+98395
+98396
+98397
+98398
+98399
+98400
+98401
+98402
+98403
+98404
+98405
+98406
+98407
+98408
+98409
+98410
+98411
+98412
+98413
+98414
+98415
+98416
+98417
+98418
+98419
+98420
+98421
+98422
+98423
+98424
+98425
+98426
+98427
+98428
+98429
+98430
+98431
+98432
+98433
+98434
+98435
+98436
+98437
+98438
+98439
+98440
+98441
+98442
+98443
+98444
+98445
+98446
+98447
+98448
+98449
+98450
+98451
+98452
+98453
+98454
+98455
+98456
+98457
+98458
+98459
+98460
+98461
+98462
+98463
+98464
+98465
+98466
+98467
+98468
+98469
+98470
+98471
+98472
+98473
+98474
+98475
+98476
+98477
+98478
+98479
+98480
+98481
+98482
+98483
+98484
+98485
+98486
+98487
+98488
+98489
+98490
+98491
+98492
+98493
+98494
+98495
+98496
+98497
+98498
+98499
+98500
+98501
+98502
+98503
+98504
+98505
+98506
+98507
+98508
+98509
+98510
+98511
+98512
+98513
+98514
+98515
+98516
+98517
+98518
+98519
+98520
+98521
+98522
+98523
+98524
+98525
+98526
+98527
+98528
+98529
+98530
+98531
+98532
+98533
+98534
+98535
+98536
+98537
+98538
+98539
+98540
+98541
+98542
+98543
+98544
+98545
+98546
+98547
+98548
+98549
+98550
+98551
+98552
+98553
+98554
+98555
+98556
+98557
+98558
+98559
+98560
+98561
+98562
+98563
+98564
+98565
+98566
+98567
+98568
+98569
+98570
+98571
+98572
+98573
+98574
+98575
+98576
+98577
+98578
+98579
+98580
+98581
+98582
+98583
+98584
+98585
+98586
+98587
+98588
+98589
+98590
+98591
+98592
+98593
+98594
+98595
+98596
+98597
+98598
+98599
+98600
+98601
+98602
+98603
+98604
+98605
+98606
+98607
+98608
+98609
+98610
+98611
+98612
+98613
+98614
+98615
+98616
+98617
+98618
+98619
+98620
+98621
+98622
+98623
+98624
+98625
+98626
+98627
+98628
+98629
+98630
+98631
+98632
+98633
+98634
+98635
+98636
+98637
+98638
+98639
+98640
+98641
+98642
+98643
+98644
+98645
+98646
+98647
+98648
+98649
+98650
+98651
+98652
+98653
+98654
+98655
+98656
+98657
+98658
+98659
+98660
+98661
+98662
+98663
+98664
+98665
+98666
+98667
+98668
+98669
+98670
+98671
+98672
+98673
+98674
+98675
+98676
+98677
+98678
+98679
+98680
+98681
+98682
+98683
+98684
+98685
+98686
+98687
+98688
+98689
+98690
+98691
+98692
+98693
+98694
+98695
+98696
+98697
+98698
+98699
+98700
+98701
+98702
+98703
+98704
+98705
+98706
+98707
+98708
+98709
+98710
+98711
+98712
+98713
+98714
+98715
+98716
+98717
+98718
+98719
+98720
+98721
+98722
+98723
+98724
+98725
+98726
+98727
+98728
+98729
+98730
+98731
+98732
+98733
+98734
+98735
+98736
+98737
+98738
+98739
+98740
+98741
+98742
+98743
+98744
+98745
+98746
+98747
+98748
+98749
+98750
+98751
+98752
+98753
+98754
+98755
+98756
+98757
+98758
+98759
+98760
+98761
+98762
+98763
+98764
+98765
+98766
+98767
+98768
+98769
+98770
+98771
+98772
+98773
+98774
+98775
+98776
+98777
+98778
+98779
+98780
+98781
+98782
+98783
+98784
+98785
+98786
+98787
+98788
+98789
+98790
+98791
+98792
+98793
+98794
+98795
+98796
+98797
+98798
+98799
+98800
+98801
+98802
+98803
+98804
+98805
+98806
+98807
+98808
+98809
+98810
+98811
+98812
+98813
+98814
+98815
+98816
+98817
+98818
+98819
+98820
+98821
+98822
+98823
+98824
+98825
+98826
+98827
+98828
+98829
+98830
+98831
+98832
+98833
+98834
+98835
+98836
+98837
+98838
+98839
+98840
+98841
+98842
+98843
+98844
+98845
+98846
+98847
+98848
+98849
+98850
+98851
+98852
+98853
+98854
+98855
+98856
+98857
+98858
+98859
+98860
+98861
+98862
+98863
+98864
+98865
+98866
+98867
+98868
+98869
+98870
+98871
+98872
+98873
+98874
+98875
+98876
+98877
+98878
+98879
+98880
+98881
+98882
+98883
+98884
+98885
+98886
+98887
+98888
+98889
+98890
+98891
+98892
+98893
+98894
+98895
+98896
+98897
+98898
+98899
+98900
+98901
+98902
+98903
+98904
+98905
+98906
+98907
+98908
+98909
+98910
+98911
+98912
+98913
+98914
+98915
+98916
+98917
+98918
+98919
+98920
+98921
+98922
+98923
+98924
+98925
+98926
+98927
+98928
+98929
+98930
+98931
+98932
+98933
+98934
+98935
+98936
+98937
+98938
+98939
+98940
+98941
+98942
+98943
+98944
+98945
+98946
+98947
+98948
+98949
+98950
+98951
+98952
+98953
+98954
+98955
+98956
+98957
+98958
+98959
+98960
+98961
+98962
+98963
+98964
+98965
+98966
+98967
+98968
+98969
+98970
+98971
+98972
+98973
+98974
+98975
+98976
+98977
+98978
+98979
+98980
+98981
+98982
+98983
+98984
+98985
+98986
+98987
+98988
+98989
+98990
+98991
+98992
+98993
+98994
+98995
+98996
+98997
+98998
+98999
+99000
+99001
+99002
+99003
+99004
+99005
+99006
+99007
+99008
+99009
+99010
+99011
+99012
+99013
+99014
+99015
+99016
+99017
+99018
+99019
+99020
+99021
+99022
+99023
+99024
+99025
+99026
+99027
+99028
+99029
+99030
+99031
+99032
+99033
+99034
+99035
+99036
+99037
+99038
+99039
+99040
+99041
+99042
+99043
+99044
+99045
+99046
+99047
+99048
+99049
+99050
+99051
+99052
+99053
+99054
+99055
+99056
+99057
+99058
+99059
+99060
+99061
+99062
+99063
+99064
+99065
+99066
+99067
+99068
+99069
+99070
+99071
+99072
+99073
+99074
+99075
+99076
+99077
+99078
+99079
+99080
+99081
+99082
+99083
+99084
+99085
+99086
+99087
+99088
+99089
+99090
+99091
+99092
+99093
+99094
+99095
+99096
+99097
+99098
+99099
+99100
+99101
+99102
+99103
+99104
+99105
+99106
+99107
+99108
+99109
+99110
+99111
+99112
+99113
+99114
+99115
+99116
+99117
+99118
+99119
+99120
+99121
+99122
+99123
+99124
+99125
+99126
+99127
+99128
+99129
+99130
+99131
+99132
+99133
+99134
+99135
+99136
+99137
+99138
+99139
+99140
+99141
+99142
+99143
+99144
+99145
+99146
+99147
+99148
+99149
+99150
+99151
+99152
+99153
+99154
+99155
+99156
+99157
+99158
+99159
+99160
+99161
+99162
+99163
+99164
+99165
+99166
+99167
+99168
+99169
+99170
+99171
+99172
+99173
+99174
+99175
+99176
+99177
+99178
+99179
+99180
+99181
+99182
+99183
+99184
+99185
+99186
+99187
+99188
+99189
+99190
+99191
+99192
+99193
+99194
+99195
+99196
+99197
+99198
+99199
+99200
+99201
+99202
+99203
+99204
+99205
+99206
+99207
+99208
+99209
+99210
+99211
+99212
+99213
+99214
+99215
+99216
+99217
+99218
+99219
+99220
+99221
+99222
+99223
+99224
+99225
+99226
+99227
+99228
+99229
+99230
+99231
+99232
+99233
+99234
+99235
+99236
+99237
+99238
+99239
+99240
+99241
+99242
+99243
+99244
+99245
+99246
+99247
+99248
+99249
+99250
+99251
+99252
+99253
+99254
+99255
+99256
+99257
+99258
+99259
+99260
+99261
+99262
+99263
+99264
+99265
+99266
+99267
+99268
+99269
+99270
+99271
+99272
+99273
+99274
+99275
+99276
+99277
+99278
+99279
+99280
+99281
+99282
+99283
+99284
+99285
+99286
+99287
+99288
+99289
+99290
+99291
+99292
+99293
+99294
+99295
+99296
+99297
+99298
+99299
+99300
+99301
+99302
+99303
+99304
+99305
+99306
+99307
+99308
+99309
+99310
+99311
+99312
+99313
+99314
+99315
+99316
+99317
+99318
+99319
+99320
+99321
+99322
+99323
+99324
+99325
+99326
+99327
+99328
+99329
+99330
+99331
+99332
+99333
+99334
+99335
+99336
+99337
+99338
+99339
+99340
+99341
+99342
+99343
+99344
+99345
+99346
+99347
+99348
+99349
+99350
+99351
+99352
+99353
+99354
+99355
+99356
+99357
+99358
+99359
+99360
+99361
+99362
+99363
+99364
+99365
+99366
+99367
+99368
+99369
+99370
+99371
+99372
+99373
+99374
+99375
+99376
+99377
+99378
+99379
+99380
+99381
+99382
+99383
+99384
+99385
+99386
+99387
+99388
+99389
+99390
+99391
+99392
+99393
+99394
+99395
+99396
+99397
+99398
+99399
+99400
+99401
+99402
+99403
+99404
+99405
+99406
+99407
+99408
+99409
+99410
+99411
+99412
+99413
+99414
+99415
+99416
+99417
+99418
+99419
+99420
+99421
+99422
+99423
+99424
+99425
+99426
+99427
+99428
+99429
+99430
+99431
+99432
+99433
+99434
+99435
+99436
+99437
+99438
+99439
+99440
+99441
+99442
+99443
+99444
+99445
+99446
+99447
+99448
+99449
+99450
+99451
+99452
+99453
+99454
+99455
+99456
+99457
+99458
+99459
+99460
+99461
+99462
+99463
+99464
+99465
+99466
+99467
+99468
+99469
+99470
+99471
+99472
+99473
+99474
+99475
+99476
+99477
+99478
+99479
+99480
+99481
+99482
+99483
+99484
+99485
+99486
+99487
+99488
+99489
+99490
+99491
+99492
+99493
+99494
+99495
+99496
+99497
+99498
+99499
+99500
+99501
+99502
+99503
+99504
+99505
+99506
+99507
+99508
+99509
+99510
+99511
+99512
+99513
+99514
+99515
+99516
+99517
+99518
+99519
+99520
+99521
+99522
+99523
+99524
+99525
+99526
+99527
+99528
+99529
+99530
+99531
+99532
+99533
+99534
+99535
+99536
+99537
+99538
+99539
+99540
+99541
+99542
+99543
+99544
+99545
+99546
+99547
+99548
+99549
+99550
+99551
+99552
+99553
+99554
+99555
+99556
+99557
+99558
+99559
+99560
+99561
+99562
+99563
+99564
+99565
+99566
+99567
+99568
+99569
+99570
+99571
+99572
+99573
+99574
+99575
+99576
+99577
+99578
+99579
+99580
+99581
+99582
+99583
+99584
+99585
+99586
+99587
+99588
+99589
+99590
+99591
+99592
+99593
+99594
+99595
+99596
+99597
+99598
+99599
+99600
+99601
+99602
+99603
+99604
+99605
+99606
+99607
+99608
+99609
+99610
+99611
+99612
+99613
+99614
+99615
+99616
+99617
+99618
+99619
+99620
+99621
+99622
+99623
+99624
+99625
+99626
+99627
+99628
+99629
+99630
+99631
+99632
+99633
+99634
+99635
+99636
+99637
+99638
+99639
+99640
+99641
+99642
+99643
+99644
+99645
+99646
+99647
+99648
+99649
+99650
+99651
+99652
+99653
+99654
+99655
+99656
+99657
+99658
+99659
+99660
+99661
+99662
+99663
+99664
+99665
+99666
+99667
+99668
+99669
+99670
+99671
+99672
+99673
+99674
+99675
+99676
+99677
+99678
+99679
+99680
+99681
+99682
+99683
+99684
+99685
+99686
+99687
+99688
+99689
+99690
+99691
+99692
+99693
+99694
+99695
+99696
+99697
+99698
+99699
+99700
+99701
+99702
+99703
+99704
+99705
+99706
+99707
+99708
+99709
+99710
+99711
+99712
+99713
+99714
+99715
+99716
+99717
+99718
+99719
+99720
+99721
+99722
+99723
+99724
+99725
+99726
+99727
+99728
+99729
+99730
+99731
+99732
+99733
+99734
+99735
+99736
+99737
+99738
+99739
+99740
+99741
+99742
+99743
+99744
+99745
+99746
+99747
+99748
+99749
+99750
+99751
+99752
+99753
+99754
+99755
+99756
+99757
+99758
+99759
+99760
+99761
+99762
+99763
+99764
+99765
+99766
+99767
+99768
+99769
+99770
+99771
+99772
+99773
+99774
+99775
+99776
+99777
+99778
+99779
+99780
+99781
+99782
+99783
+99784
+99785
+99786
+99787
+99788
+99789
+99790
+99791
+99792
+99793
+99794
+99795
+99796
+99797
+99798
+99799
+99800
+99801
+99802
+99803
+99804
+99805
+99806
+99807
+99808
+99809
+99810
+99811
+99812
+99813
+99814
+99815
+99816
+99817
+99818
+99819
+99820
+99821
+99822
+99823
+99824
+99825
+99826
+99827
+99828
+99829
+99830
+99831
+99832
+99833
+99834
+99835
+99836
+99837
+99838
+99839
+99840
+99841
+99842
+99843
+99844
+99845
+99846
+99847
+99848
+99849
+99850
+99851
+99852
+99853
+99854
+99855
+99856
+99857
+99858
+99859
+99860
+99861
+99862
+99863
+99864
+99865
+99866
+99867
+99868
+99869
+99870
+99871
+99872
+99873
+99874
+99875
+99876
+99877
+99878
+99879
+99880
+99881
+99882
+99883
+99884
+99885
+99886
+99887
+99888
+99889
+99890
+99891
+99892
+99893
+99894
+99895
+99896
+99897
+99898
+99899
+99900
+99901
+99902
+99903
+99904
+99905
+99906
+99907
+99908
+99909
+99910
+99911
+99912
+99913
+99914
+99915
+99916
+99917
+99918
+99919
+99920
+99921
+99922
+99923
+99924
+99925
+99926
+99927
+99928
+99929
+99930
+99931
+99932
+99933
+99934
+99935
+99936
+99937
+99938
+99939
+99940
+99941
+99942
+99943
+99944
+99945
+99946
+99947
+99948
+99949
+99950
+99951
+99952
+99953
+99954
+99955
+99956
+99957
+99958
+99959
+99960
+99961
+99962
+99963
+99964
+99965
+99966
+99967
+99968
+99969
+99970
+99971
+99972
+99973
+99974
+99975
+99976
+99977
+99978
+99979
+99980
+99981
+99982
+99983
+99984
+99985
+99986
+99987
+99988
+99989
+99990
+99991
+99992
+99993
+99994
+99995
+99996
+99997
+99998
+99999
+100000
diff --git a/mysql-test/suite/binlog/r/binlog_grant.result b/mysql-test/suite/binlog/r/binlog_grant.result
index e077182fe8b..c3de2c0d981 100644
--- a/mysql-test/suite/binlog/r/binlog_grant.result
+++ b/mysql-test/suite/binlog/r/binlog_grant.result
@@ -38,6 +38,91 @@ connect rpl,localhost,mysqltest_1,,;
connection rpl;
SHOW MASTER LOGS;
SHOW BINARY LOGS;
+SHOW BINLOG STATUS;
disconnect rpl;
connection default;
DROP USER 'mysqltest_1'@'localhost';
+#
+# Start of 10.5 test
+#
+#
+# MDEV-21743 Split up SUPER privilege to smaller privileges
+#
+# Test that REPLICATION CLIENT is an alias for BINLOG MONITOR
+CREATE USER user1@localhost;
+GRANT REPLICATION CLIENT ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT BINLOG MONITOR ON *.* TO `user1`@`localhost`
+REVOKE REPLICATION CLIENT ON *.* FROM user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+Grants for user1@localhost
+GRANT USAGE ON *.* TO `user1`@`localhost`
+DROP USER user1@localhost;
+# Test if SHOW BINARY LOGS and SHOW BINGLOG STATUS are not allowed without REPLICATION CLIENT or SUPER
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION CLIENT, SUPER ON *.* FROM user1@localhost;
+connect user1,localhost,user1,,;
+connection user1;
+SHOW MASTER LOGS;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, BINLOG MONITOR privilege(s) for this operation
+SHOW BINARY LOGS;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, BINLOG MONITOR privilege(s) for this operation
+SHOW BINLOG STATUS;
+ERROR 42000: Access denied; you need (at least one of) the SUPER, BINLOG MONITOR privilege(s) for this operation
+disconnect user1;
+connection default;
+DROP USER user1@localhost;
+# Test if PURGE BINARY LOGS is not allowed without BINLOG ADMIN or SUPER
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE BINLOG ADMIN, SUPER ON *.* FROM user1@localhost;
+connect user1,localhost,user1,,;
+connection user1;
+PURGE BINARY LOGS BEFORE '2001-01-01 00:00:00';
+ERROR 42000: Access denied; you need (at least one of) the SUPER, BINLOG ADMIN privilege(s) for this operation
+disconnect user1;
+connection default;
+DROP USER user1@localhost;
+# Test if PURGE BINLOG is allowed with BINLOG ADMIN
+CREATE USER user1@localhost;
+GRANT BINLOG ADMIN ON *.* TO user1@localhost;
+connect user1,localhost,user1,,;
+connection user1;
+PURGE BINARY LOGS BEFORE '2001-01-01 00:00:00';
+disconnect user1;
+connection default;
+DROP USER user1@localhost;
+# Test if PURGE BINLOG is allowed with SUPER
+CREATE USER user1@localhost;
+GRANT SUPER ON *.* TO user1@localhost;
+connect user1,localhost,user1,,;
+connection user1;
+PURGE BINARY LOGS BEFORE '2001-01-01 00:00:00';
+disconnect user1;
+connection default;
+DROP USER user1@localhost;
+# Test if SHOW BINLOG EVENTS is not allowed without BINLOG MONITOR
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE BINLOG MONITOR ON *.* FROM user1@localhost;
+connect user1,localhost,user1,,;
+connection user1;
+SHOW BINLOG EVENTS;
+ERROR 42000: Access denied; you need (at least one of) the BINLOG MONITOR privilege(s) for this operation
+disconnect user1;
+connection default;
+DROP USER user1@localhost;
+# Test if SHOW BINLOG EVENTS is allowed with BINLOG MONITOR
+CREATE USER user1@localhost;
+GRANT BINLOG MONITOR ON *.* TO user1@localhost;
+connect user1,localhost,user1,,;
+connection user1;
+SHOW BINLOG EVENTS;
+disconnect user1;
+connection default;
+DROP USER user1@localhost;
+#
+# End of 10.5 test
+#
diff --git a/mysql-test/suite/binlog/t/binlog_grant.test b/mysql-test/suite/binlog/t/binlog_grant.test
index 8a76b11e707..72a94a5273b 100644
--- a/mysql-test/suite/binlog/t/binlog_grant.test
+++ b/mysql-test/suite/binlog/t/binlog_grant.test
@@ -68,9 +68,110 @@ GRANT REPLICATION CLIENT ON *.* TO 'mysqltest_1'@'localhost';
--disable_result_log
SHOW MASTER LOGS;
SHOW BINARY LOGS;
---enable_result_log
+SHOW BINLOG STATUS;
+--enable_result_log
# clean up
--disconnect rpl
connection default;
DROP USER 'mysqltest_1'@'localhost';
+
+
+--echo #
+--echo # Start of 10.5 test
+--echo #
+
+--echo #
+--echo # MDEV-21743 Split up SUPER privilege to smaller privileges
+--echo #
+
+--echo # Test that REPLICATION CLIENT is an alias for BINLOG MONITOR
+
+CREATE USER user1@localhost;
+GRANT REPLICATION CLIENT ON *.* TO user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+REVOKE REPLICATION CLIENT ON *.* FROM user1@localhost;
+SHOW GRANTS FOR user1@localhost;
+DROP USER user1@localhost;
+
+
+--echo # Test if SHOW BINARY LOGS and SHOW BINGLOG STATUS are not allowed without REPLICATION CLIENT or SUPER
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE REPLICATION CLIENT, SUPER ON *.* FROM user1@localhost;
+--connect(user1,localhost,user1,,)
+--connection user1
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW MASTER LOGS;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW BINARY LOGS;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW BINLOG STATUS;
+--disconnect user1
+--connection default
+DROP USER user1@localhost;
+
+
+--echo # Test if PURGE BINARY LOGS is not allowed without BINLOG ADMIN or SUPER
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE BINLOG ADMIN, SUPER ON *.* FROM user1@localhost;
+--connect(user1,localhost,user1,,)
+--connection user1
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+PURGE BINARY LOGS BEFORE '2001-01-01 00:00:00';
+--disconnect user1
+--connection default
+DROP USER user1@localhost;
+
+
+--echo # Test if PURGE BINLOG is allowed with BINLOG ADMIN
+CREATE USER user1@localhost;
+GRANT BINLOG ADMIN ON *.* TO user1@localhost;
+--connect(user1,localhost,user1,,)
+--connection user1
+PURGE BINARY LOGS BEFORE '2001-01-01 00:00:00';
+--disconnect user1
+connection default;
+DROP USER user1@localhost;
+
+
+--echo # Test if PURGE BINLOG is allowed with SUPER
+CREATE USER user1@localhost;
+GRANT SUPER ON *.* TO user1@localhost;
+--connect(user1,localhost,user1,,)
+--connection user1
+PURGE BINARY LOGS BEFORE '2001-01-01 00:00:00';
+--disconnect user1
+connection default;
+DROP USER user1@localhost;
+
+
+--echo # Test if SHOW BINLOG EVENTS is not allowed without BINLOG MONITOR
+CREATE USER user1@localhost;
+GRANT ALL PRIVILEGES ON *.* TO user1@localhost;
+REVOKE BINLOG MONITOR ON *.* FROM user1@localhost;
+--connect(user1,localhost,user1,,)
+--connection user1
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+SHOW BINLOG EVENTS;
+--disconnect user1
+--connection default
+DROP USER user1@localhost;
+
+
+--echo # Test if SHOW BINLOG EVENTS is allowed with BINLOG MONITOR
+CREATE USER user1@localhost;
+GRANT BINLOG MONITOR ON *.* TO user1@localhost;
+--connect(user1,localhost,user1,,)
+--connection user1
+--disable_result_log
+SHOW BINLOG EVENTS;
+--enable_result_log
+--disconnect user1
+connection default;
+DROP USER user1@localhost;
+
+--echo #
+--echo # End of 10.5 test
+--echo #
diff --git a/mysql-test/suite/encryption/r/innodb-scrub-log.result b/mysql-test/suite/encryption/r/innodb-scrub-log.result
deleted file mode 100644
index 8ea75000368..00000000000
--- a/mysql-test/suite/encryption/r/innodb-scrub-log.result
+++ /dev/null
@@ -1,3 +0,0 @@
-create table t1(a int not null primary key auto_increment,
-b varchar(200), c char(100), d varchar(150)) engine=innodb;
-DROP TABLE t1;
diff --git a/mysql-test/suite/encryption/t/innodb-scrub-log.opt b/mysql-test/suite/encryption/t/innodb-scrub-log.opt
deleted file mode 100644
index 0078065bbf7..00000000000
--- a/mysql-test/suite/encryption/t/innodb-scrub-log.opt
+++ /dev/null
@@ -1 +0,0 @@
---loose-innodb-scrub-log=on
diff --git a/mysql-test/suite/encryption/t/innodb-scrub-log.test b/mysql-test/suite/encryption/t/innodb-scrub-log.test
deleted file mode 100644
index e8149b6b3ff..00000000000
--- a/mysql-test/suite/encryption/t/innodb-scrub-log.test
+++ /dev/null
@@ -1,13 +0,0 @@
---source include/have_innodb.inc
-
-#
-# MDEV-11705: InnoDB: Failing assertion: (&log_sys.mutex)->is_owned() if server started with innodb-scrub-log
-#
-
-create table t1(a int not null primary key auto_increment,
-b varchar(200), c char(100), d varchar(150)) engine=innodb;
-
-let $wait_condition= SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'innodb_scrub_log';
---source include/wait_condition.inc
-
-DROP TABLE t1;
diff --git a/mysql-test/suite/federated/federated_server.result b/mysql-test/suite/federated/federated_server.result
index 45616839b89..d25676e7ad5 100644
--- a/mysql-test/suite/federated/federated_server.result
+++ b/mysql-test/suite/federated/federated_server.result
@@ -212,7 +212,7 @@ connect conn_usage,127.0.0.1,guest_usage,,,$MASTER_MYPORT;
connect conn_super,127.0.0.1,guest_super,,,$MASTER_MYPORT;
connection conn_select;
alter server s1 options (database 'db_bogus');
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
connection master;
flush tables;
select * from federated.t1;
@@ -220,7 +220,7 @@ id name
1 this is legitimate
connection conn_usage;
alter server s1 options (database 'db_bogus');
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
connection master;
flush tables;
select * from federated.t1;
@@ -234,7 +234,7 @@ select * from federated.t1;
Got one of the listed errors
connection conn_select;
drop server if exists 's1';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
create server 's1' foreign data wrapper 'mysql' options
(HOST '127.0.0.1',
DATABASE 'db_legitimate',
@@ -243,7 +243,7 @@ PASSWORD 'foo',
PORT SLAVE_PORT,
SOCKET '',
OWNER 'root');
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, FEDERATED ADMIN privilege(s) for this operation
connection conn_super;
drop server 's1';
create server 's1' foreign data wrapper 'mysql' options
diff --git a/mysql-test/suite/federated/federatedx_create_handlers.result b/mysql-test/suite/federated/federatedx_create_handlers.result
index 7d42a9bbd87..90a5234a02f 100644
--- a/mysql-test/suite/federated/federatedx_create_handlers.result
+++ b/mysql-test/suite/federated/federatedx_create_handlers.result
@@ -301,7 +301,27 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 ALL NULL NULL NULL NULL 7
1 PRIMARY <derived2> ref key0 key0 18 federated.t3.name 2
2 PUSHED DERIVED NULL NULL NULL NULL NULL NULL NULL NULL
-DROP TABLE federated.t1, federated.t2, federated.t3;
+#
+# MDEV-21887: federatedx crashes on SELECT ... INTO query in select_handler code
+#
+CREATE TABLE federated.t4 (
+id int(20) NOT NULL,
+name varchar(16) NOT NULL default ''
+) engine=myisam;
+insert into federated.t4 select * from federated.t1;
+select * from federated.t4;
+id name
+1 zzz
+3 xxx
+4 xxx
+5 yyy
+7 yyy
+select name into @var from federated.t1 where id=3 limit 1 ;
+select @var;
+@var
+xxx
+select name into outfile 'tmp.txt' from federated.t1;
+DROP TABLE federated.t1, federated.t2, federated.t3, federated.t4;
connection slave;
DROP TABLE federated.t1, federated.t2;
connection default;
diff --git a/mysql-test/suite/federated/federatedx_create_handlers.test b/mysql-test/suite/federated/federatedx_create_handlers.test
index 373b2aaaa33..42a03e60d67 100644
--- a/mysql-test/suite/federated/federatedx_create_handlers.test
+++ b/mysql-test/suite/federated/federatedx_create_handlers.test
@@ -147,8 +147,27 @@ FROM federated.t3,
SELECT * FROM federated.t1 WHERE id >= 5) t
WHERE federated.t3.name=t.name;
+--echo #
+--echo # MDEV-21887: federatedx crashes on SELECT ... INTO query in select_handler code
+--echo #
-DROP TABLE federated.t1, federated.t2, federated.t3;
+CREATE TABLE federated.t4 (
+ id int(20) NOT NULL,
+ name varchar(16) NOT NULL default ''
+) engine=myisam;
+insert into federated.t4 select * from federated.t1;
+
+--sorted_result
+select * from federated.t4;
+
+select name into @var from federated.t1 where id=3 limit 1 ;
+select @var;
+select name into outfile 'tmp.txt' from federated.t1;
+
+let $path=`select concat(@@datadir, 'test/tmp.txt')`;
+remove_file $path;
+
+DROP TABLE federated.t1, federated.t2, federated.t3, federated.t4;
connection slave;
DROP TABLE federated.t1, federated.t2;
diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_03.result b/mysql-test/suite/funcs_1/r/innodb_trig_03.result
index 9f9bf1ca4de..3c6d18c0085 100644
--- a/mysql-test/suite/funcs_1/r/innodb_trig_03.result
+++ b/mysql-test/suite/funcs_1/r/innodb_trig_03.result
@@ -78,7 +78,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke TRIGGER on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER on *.* to test_yesprivs@localhost;
grant SELECT on priv_db.t1 to test_yesprivs@localhost;
@@ -168,7 +168,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke UPDATE on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER, UPDATE on *.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
@@ -183,7 +183,7 @@ test_noprivs@localhost
use priv_db;
show grants;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
@@ -441,7 +441,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke SELECT on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER, SELECT on *.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
@@ -457,7 +457,7 @@ test_noprivs@localhost
use priv_db;
show grants;
Grants for test_noprivs@localhost
-GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
create trigger trg5a_1 before INSERT on t1 for each row
set @test_var = new.f1;
connection default;
diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_03e.result b/mysql-test/suite/funcs_1/r/innodb_trig_03e.result
index c869b5cc5bc..863aa9edb4f 100644
--- a/mysql-test/suite/funcs_1/r/innodb_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/innodb_trig_03e.result
@@ -603,7 +603,7 @@ trig 1_1-yes
revoke TRIGGER on *.* from test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
Grants for test_yesprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
disconnect yes_privs;
connect yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK;
select current_user;
@@ -656,7 +656,7 @@ root@localhost
grant TRIGGER on priv_db.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
Grants for test_yesprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT TRIGGER ON `priv_db`.* TO `test_yesprivs`@`localhost`
trigger privilege on db level for create:
@@ -1350,7 +1350,7 @@ drop trigger trg1_0;
create definer=not_ex_user@localhost trigger trg1_0
before INSERT on t1 for each row
set new.f1 = 'trig 1_0-yes';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
create definer=current_user trigger trg1_1
before INSERT on t1 for each row
set new.f1 = 'trig 1_1-yes';
@@ -1385,7 +1385,7 @@ GRANT SELECT, INSERT, UPDATE, TRIGGER ON `priv_db`.`t1` TO `test_yesprivs`@`loca
create definer=not_ex_user@localhost trigger trg1_3
after UPDATE on t1 for each row
set @var1 = 'trig 1_3-yes';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection default;
select current_user;
current_user
diff --git a/mysql-test/suite/funcs_1/r/is_user_privileges.result b/mysql-test/suite/funcs_1/r/is_user_privileges.result
index f7a83dd3ddb..27bb2b3de83 100644
--- a/mysql-test/suite/funcs_1/r/is_user_privileges.result
+++ b/mysql-test/suite/funcs_1/r/is_user_privileges.result
@@ -90,6 +90,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -98,6 +99,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -106,6 +108,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -138,6 +141,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -146,6 +150,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -154,6 +159,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -172,6 +178,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -180,6 +187,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -188,6 +196,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -228,6 +237,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 1,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -236,6 +246,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -244,6 +255,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -276,6 +288,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 1025,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -284,6 +297,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -292,6 +306,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -310,6 +325,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 1025,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -318,6 +334,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -326,6 +343,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -396,6 +414,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -404,6 +423,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -412,6 +432,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -477,6 +498,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -485,6 +507,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -493,6 +516,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -511,6 +535,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -519,6 +544,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -527,6 +553,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -552,6 +579,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -560,6 +588,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -568,6 +597,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -608,6 +638,7 @@ host localhost
user testuser1
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -616,6 +647,7 @@ host localhost
user testuser2
json_detailed(priv) {
"access": 6,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
@@ -624,6 +656,7 @@ host localhost
user testuser3
json_detailed(priv) {
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "",
"password_last_changed": #
diff --git a/mysql-test/suite/funcs_1/r/memory_trig_03.result b/mysql-test/suite/funcs_1/r/memory_trig_03.result
index 75286115d86..e2b96e2aacd 100644
--- a/mysql-test/suite/funcs_1/r/memory_trig_03.result
+++ b/mysql-test/suite/funcs_1/r/memory_trig_03.result
@@ -78,7 +78,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke TRIGGER on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER on *.* to test_yesprivs@localhost;
grant SELECT on priv_db.t1 to test_yesprivs@localhost;
@@ -168,7 +168,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke UPDATE on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER, UPDATE on *.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
@@ -183,7 +183,7 @@ test_noprivs@localhost
use priv_db;
show grants;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
@@ -441,7 +441,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke SELECT on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER, SELECT on *.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
@@ -457,7 +457,7 @@ test_noprivs@localhost
use priv_db;
show grants;
Grants for test_noprivs@localhost
-GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
create trigger trg5a_1 before INSERT on t1 for each row
set @test_var = new.f1;
connection default;
diff --git a/mysql-test/suite/funcs_1/r/memory_trig_03e.result b/mysql-test/suite/funcs_1/r/memory_trig_03e.result
index 72c269cb89a..155244d9299 100644
--- a/mysql-test/suite/funcs_1/r/memory_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/memory_trig_03e.result
@@ -604,7 +604,7 @@ trig 1_1-yes
revoke TRIGGER on *.* from test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
Grants for test_yesprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
disconnect yes_privs;
connect yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK;
select current_user;
@@ -657,7 +657,7 @@ root@localhost
grant TRIGGER on priv_db.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
Grants for test_yesprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT TRIGGER ON `priv_db`.* TO `test_yesprivs`@`localhost`
trigger privilege on db level for create:
@@ -1351,7 +1351,7 @@ drop trigger trg1_0;
create definer=not_ex_user@localhost trigger trg1_0
before INSERT on t1 for each row
set new.f1 = 'trig 1_0-yes';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
create definer=current_user trigger trg1_1
before INSERT on t1 for each row
set new.f1 = 'trig 1_1-yes';
@@ -1386,7 +1386,7 @@ GRANT SELECT, INSERT, UPDATE, TRIGGER ON `priv_db`.`t1` TO `test_yesprivs`@`loca
create definer=not_ex_user@localhost trigger trg1_3
after UPDATE on t1 for each row
set @var1 = 'trig 1_3-yes';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection default;
select current_user;
current_user
diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_03.result b/mysql-test/suite/funcs_1/r/myisam_trig_03.result
index 75286115d86..e2b96e2aacd 100644
--- a/mysql-test/suite/funcs_1/r/myisam_trig_03.result
+++ b/mysql-test/suite/funcs_1/r/myisam_trig_03.result
@@ -78,7 +78,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke TRIGGER on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER on *.* to test_yesprivs@localhost;
grant SELECT on priv_db.t1 to test_yesprivs@localhost;
@@ -168,7 +168,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke UPDATE on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER, UPDATE on *.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
@@ -183,7 +183,7 @@ test_noprivs@localhost
use priv_db;
show grants;
Grants for test_noprivs@localhost
-GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
@@ -441,7 +441,7 @@ grant ALL on *.* to test_noprivs@localhost;
revoke SELECT on *.* from test_noprivs@localhost;
show grants for test_noprivs@localhost;
Grants for test_noprivs@localhost
-GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
grant TRIGGER, SELECT on *.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
@@ -457,7 +457,7 @@ test_noprivs@localhost
use priv_db;
show grants;
Grants for test_noprivs@localhost
-GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
create trigger trg5a_1 before INSERT on t1 for each row
set @test_var = new.f1;
connection default;
diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_03e.result b/mysql-test/suite/funcs_1/r/myisam_trig_03e.result
index 8b8df4bd694..9c2740b0c4b 100644
--- a/mysql-test/suite/funcs_1/r/myisam_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/myisam_trig_03e.result
@@ -604,7 +604,7 @@ trig 1_1-yes
revoke TRIGGER on *.* from test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
Grants for test_yesprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
disconnect yes_privs;
connect yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK;
select current_user;
@@ -657,7 +657,7 @@ root@localhost
grant TRIGGER on priv_db.* to test_yesprivs@localhost;
show grants for test_yesprivs@localhost;
Grants for test_yesprivs@localhost
-GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT TRIGGER ON `priv_db`.* TO `test_yesprivs`@`localhost`
trigger privilege on db level for create:
@@ -1351,7 +1351,7 @@ drop trigger trg1_0;
create definer=not_ex_user@localhost trigger trg1_0
before INSERT on t1 for each row
set new.f1 = 'trig 1_0-yes';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
create definer=current_user trigger trg1_1
before INSERT on t1 for each row
set new.f1 = 'trig 1_1-yes';
@@ -1386,7 +1386,7 @@ GRANT SELECT, INSERT, UPDATE, TRIGGER ON `priv_db`.`t1` TO `test_yesprivs`@`loca
create definer=not_ex_user@localhost trigger trg1_3
after UPDATE on t1 for each row
set @var1 = 'trig 1_3-yes';
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
connection default;
select current_user;
current_user
diff --git a/mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result b/mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result
index f3f561fd479..c3fbc3a9137 100644
--- a/mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result
+++ b/mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result
@@ -45,7 +45,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
) DEFAULT CHARSET=utf8
SHOW processlist;
Id User Host db Command Time State Info Progress
-ID root HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID root HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
SELECT * FROM processlist ORDER BY id;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
@@ -125,7 +125,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
) DEFAULT CHARSET=utf8
SHOW processlist;
Id User Host db Command Time State Info Progress
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM processlist ORDER BY id;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM processlist ORDER BY id TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM processlist ORDER BY id TID
@@ -190,7 +190,7 @@ Grants for ddicttestuser1@localhost
GRANT PROCESS ON *.* TO `ddicttestuser1`@`localhost` IDENTIFIED BY PASSWORD '*22DA61451703738F203CDB9DB041ACBA1F4760B1'
SHOW processlist;
Id User Host db Command Time State Info Progress
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -206,7 +206,7 @@ SHOW processlist;
Id User Host db Command Time State Info Progress
ID root HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -233,7 +233,7 @@ Id User Host db Command Time State Info Progress
ID root HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -259,7 +259,7 @@ SHOW processlist;
Id User Host db Command Time State Info Progress
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -303,7 +303,7 @@ Id User Host db Command Time State Info Progress
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -331,7 +331,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -390,7 +390,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser2 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser2 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser2 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -421,7 +421,7 @@ GRANT USAGE ON *.* TO `ddicttestuser2`@`localhost` IDENTIFIED BY PASSWORD '*22DA
SHOW processlist;
Id User Host db Command Time State Info Progress
ID ddicttestuser2 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser2 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser2 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser2 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -452,7 +452,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -490,7 +490,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Query TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
diff --git a/mysql-test/suite/funcs_1/r/processlist_priv_ps.result b/mysql-test/suite/funcs_1/r/processlist_priv_ps.result
index a68e62e4642..c23665cb2de 100644
--- a/mysql-test/suite/funcs_1/r/processlist_priv_ps.result
+++ b/mysql-test/suite/funcs_1/r/processlist_priv_ps.result
@@ -45,7 +45,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
) DEFAULT CHARSET=utf8
SHOW processlist;
Id User Host db Command Time State Info Progress
-ID root HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID root HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
SELECT * FROM processlist ORDER BY id;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
@@ -125,7 +125,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
) DEFAULT CHARSET=utf8
SHOW processlist;
Id User Host db Command Time State Info Progress
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM processlist ORDER BY id;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM processlist ORDER BY id TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM processlist ORDER BY id TID
@@ -190,7 +190,7 @@ Grants for ddicttestuser1@localhost
GRANT PROCESS ON *.* TO `ddicttestuser1`@`localhost` IDENTIFIED BY PASSWORD '*22DA61451703738F203CDB9DB041ACBA1F4760B1'
SHOW processlist;
Id User Host db Command Time State Info Progress
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -206,7 +206,7 @@ SHOW processlist;
Id User Host db Command Time State Info Progress
ID root HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -233,7 +233,7 @@ Id User Host db Command Time State Info Progress
ID root HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -259,7 +259,7 @@ SHOW processlist;
Id User Host db Command Time State Info Progress
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -303,7 +303,7 @@ Id User Host db Command Time State Info Progress
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -331,7 +331,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -390,7 +390,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser2 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser2 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser2 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -421,7 +421,7 @@ GRANT USAGE ON *.* TO `ddicttestuser2`@`localhost` IDENTIFIED BY PASSWORD '*22DA
SHOW processlist;
Id User Host db Command Time State Info Progress
ID ddicttestuser2 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser2 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser2 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser2 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -452,7 +452,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
@@ -490,7 +490,7 @@ ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
ID ddicttestuser1 HOST_NAME information_schema Sleep TIME NULL TIME_MS
-ID ddicttestuser1 HOST_NAME information_schema Query TIME Init SHOW processlist TIME_MS
+ID ddicttestuser1 HOST_NAME information_schema Query TIME starting SHOW processlist TIME_MS
SELECT * FROM information_schema.processlist;
ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_USED MAX_MEMORY_USED EXAMINED_ROWS QUERY_ID INFO_BINARY TID
ID ddicttestuser1 HOST_NAME information_schema Execute TIME Filling schema table SELECT * FROM information_schema.processlist TIME_MS 0 0 0.000 MEMORY MAX_MEMORY ROWS QUERY_ID SELECT * FROM information_schema.processlist TID
diff --git a/mysql-test/suite/funcs_1/r/processlist_val_no_prot.result b/mysql-test/suite/funcs_1/r/processlist_val_no_prot.result
index ad109501f98..f99edef092f 100644
--- a/mysql-test/suite/funcs_1/r/processlist_val_no_prot.result
+++ b/mysql-test/suite/funcs_1/r/processlist_val_no_prot.result
@@ -39,7 +39,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> root <HOST_NAME> test Query <TIME> Filling schema table SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> root <HOST_NAME> test Query <TIME> Init SHOW FULL PROCESSLIST <TIME_MS>
+<ID> root <HOST_NAME> test Query <TIME> starting SHOW FULL PROCESSLIST <TIME_MS>
SET @default_id = CONNECTION_ID();
SELECT COUNT(*) = 1 AS "Expect exact one connection with this id"
FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = @default_id;
@@ -85,7 +85,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> root <HOST_NAME> information_schema Query <TIME> <STATE> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> root <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> root <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
<ID> test_user <HOST_NAME> information_schema Sleep <TIME> NULL 0.000
SELECT ID,TIME INTO @test_user_con1_id,@time FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Sleep' AND USER = 'test_user';
@@ -117,7 +117,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> test_user <HOST_NAME> information_schema Query <TIME> Filling schema table SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> test_user <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> test_user <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
# Ensure that the user test_user sees all connections with his username.
#----------------------------------------------------------------------------
@@ -133,7 +133,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
<ID> test_user <HOST_NAME> information_schema Sleep <TIME> NULL 0.000
-<ID> test_user <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> test_user <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
connection default;
SELECT ID INTO @test_user_con2_id FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE ID <> @test_user_con1_id
@@ -156,7 +156,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> root <HOST_NAME> information_schema Query <TIME> Filling schema table SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> root <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> root <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
<ID> test_user <HOST_NAME> information_schema Sleep <TIME> NULL 0.000
<ID> test_user <HOST_NAME> information_schema Query <TIME> User sleep SELECT sleep(10), 17 0.000
SELECT STATE, TIME, INFO INTO @state, @time, @info
diff --git a/mysql-test/suite/funcs_1/r/processlist_val_ps.result b/mysql-test/suite/funcs_1/r/processlist_val_ps.result
index 169053cb6be..bae43a37be5 100644
--- a/mysql-test/suite/funcs_1/r/processlist_val_ps.result
+++ b/mysql-test/suite/funcs_1/r/processlist_val_ps.result
@@ -39,7 +39,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> root <HOST_NAME> test Execute <TIME> Filling schema table SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> root <HOST_NAME> test Query <TIME> Init SHOW FULL PROCESSLIST <TIME_MS>
+<ID> root <HOST_NAME> test Query <TIME> starting SHOW FULL PROCESSLIST <TIME_MS>
SET @default_id = CONNECTION_ID();
SELECT COUNT(*) = 1 AS "Expect exact one connection with this id"
FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = @default_id;
@@ -85,7 +85,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> root <HOST_NAME> information_schema Execute <TIME> <STATE> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> root <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> root <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
<ID> test_user <HOST_NAME> information_schema Sleep <TIME> NULL 0.000
SELECT ID,TIME INTO @test_user_con1_id,@time FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Sleep' AND USER = 'test_user';
@@ -117,7 +117,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> test_user <HOST_NAME> information_schema Execute <TIME> Filling schema table SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> test_user <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> test_user <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
# Ensure that the user test_user sees all connections with his username.
#----------------------------------------------------------------------------
@@ -133,7 +133,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
<ID> test_user <HOST_NAME> information_schema Sleep <TIME> NULL 0.000
-<ID> test_user <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> test_user <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
connection default;
SELECT ID INTO @test_user_con2_id FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE ID <> @test_user_con1_id
@@ -156,7 +156,7 @@ ID USER HOST DB COMMAND TIME STATE INFO TIME_MS STAGE MAX_STAGE PROGRESS MEMORY_
<ID> root <HOST_NAME> information_schema Execute <TIME> Filling schema table SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TIME_MS> 0 0 0.000 <MEMORY> <MAX_MEMORY> <ROWS> <QUERY_ID> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST <TID>
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info Progress
-<ID> root <HOST_NAME> information_schema Query <TIME> Init SHOW FULL PROCESSLIST 0.000
+<ID> root <HOST_NAME> information_schema Query <TIME> starting SHOW FULL PROCESSLIST 0.000
<ID> test_user <HOST_NAME> information_schema Sleep <TIME> NULL 0.000
<ID> test_user <HOST_NAME> information_schema Query <TIME> User sleep SELECT sleep(10), 17 0.000
SELECT STATE, TIME, INFO INTO @state, @time, @info
diff --git a/mysql-test/suite/funcs_1/t/is_user_privileges.test b/mysql-test/suite/funcs_1/t/is_user_privileges.test
index 4293c4e16fb..3af56ad2533 100644
--- a/mysql-test/suite/funcs_1/t/is_user_privileges.test
+++ b/mysql-test/suite/funcs_1/t/is_user_privileges.test
@@ -25,6 +25,10 @@ let $other_engine_type = MyISAM;
let $is_table = USER_PRIVILEGES;
+let $REGEX_VERSION_ID=/$mysql_get_server_version/VERSION_ID/;
+let $REGEX_PASSWORD_LAST_CHANGED=/password_last_changed": [0-9]*/password_last_changed": #/;
+let $REGEX_GLOBAL_PRIV=$REGEX_PASSWORD_LAST_CHANGED $REGEX_VERSION_ID;
+
# The table INFORMATION_SCHEMA.USER_PRIVILEGES must exist
eval SHOW TABLES FROM information_schema LIKE '$is_table';
@@ -103,7 +107,7 @@ WHERE user LIKE 'testuser%' ORDER BY host, user;
let $my_show= SHOW GRANTS;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
@@ -112,7 +116,7 @@ eval $my_select2;
GRANT UPDATE ON db_datadict.* TO 'testuser1'@'localhost' WITH GRANT OPTION;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
@@ -120,7 +124,7 @@ eval $my_select2;
connect (testuser1, localhost, testuser1, , db_datadict);
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
eval $my_show;
@@ -134,7 +138,7 @@ GRANT SELECT ON *.* TO 'testuser1'@'localhost';
--echo # Here <SELECT NO> is shown correctly for testuser1;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
@@ -143,7 +147,7 @@ GRANT SELECT ON *.* TO 'testuser1'@'localhost' WITH GRANT OPTION;
--echo # Here <SELECT YES> is shown correctly for testuser1;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
@@ -151,7 +155,7 @@ eval $my_select2;
connection testuser1;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
eval $my_show;
@@ -180,7 +184,7 @@ connection default;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'testuser1'@'localhost';
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
@@ -213,14 +217,14 @@ GRANT ALL ON db_datadict.* TO 'testuser1'@'localhost' WITH GRANT OPTION;
GRANT SELECT ON mysql.global_priv TO 'testuser1'@'localhost';
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
connection testuser1;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
eval $my_show;
@@ -233,7 +237,7 @@ CREATE TABLE db_datadict.tb_56 ( c1 TEXT );
USE db_datadict;
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
eval $my_show;
@@ -248,7 +252,7 @@ connection default;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'testuser1'@'localhost';
--vertical_results
eval $my_select1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
eval $my_select2;
--horizontal_results
diff --git a/mysql-test/suite/innodb/r/alter_rename_existing.result b/mysql-test/suite/innodb/r/alter_rename_existing.result
index 8fc54adbd10..aff8a3a09a1 100644
--- a/mysql-test/suite/innodb/r/alter_rename_existing.result
+++ b/mysql-test/suite/innodb/r/alter_rename_existing.result
@@ -59,7 +59,7 @@ ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=COPY;
#
SET GLOBAL innodb_file_per_table=ON;
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
-ERROR HY000: Tablespace for table 'test/t1' exists. Please DISCARD the tablespace before IMPORT
+ERROR HY000: Tablespace for table 'test/#sql-ib' exists. Please DISCARD the tablespace before IMPORT
ALTER TABLE t1 FORCE, ALGORITHM=COPY;
ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 "Tablespace already exists")
#
diff --git a/mysql-test/suite/innodb/r/alter_rename_files.result b/mysql-test/suite/innodb/r/alter_rename_files.result
deleted file mode 100644
index 490f6773765..00000000000
--- a/mysql-test/suite/innodb/r/alter_rename_files.result
+++ /dev/null
@@ -1,19 +0,0 @@
-CREATE TABLE t1 (x INT NOT NULL UNIQUE KEY) ENGINE=InnoDB;
-INSERT INTO t1 VALUES(5);
-SET GLOBAL innodb_log_checkpoint_now=TRUE;
-SET DEBUG_SYNC='commit_cache_rebuild SIGNAL ready WAIT_FOR finish';
-ALTER TABLE t1 FORCE;;
-connect con1,localhost,root,,;
-SET DEBUG_SYNC='now WAIT_FOR ready';
-SET GLOBAL innodb_log_checkpoint_now=TRUE;
-SET DEBUG_SYNC='now SIGNAL finish';
-disconnect con1;
-connection default;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `x` int(11) NOT NULL,
- UNIQUE KEY `x` (`x`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1
-DROP TABLE t1;
-SET DEBUG_SYNC='RESET';
diff --git a/mysql-test/suite/innodb/r/alter_table.result b/mysql-test/suite/innodb/r/alter_table.result
index 0cfd3096f3f..1e7e55494d4 100644
--- a/mysql-test/suite/innodb/r/alter_table.result
+++ b/mysql-test/suite/innodb/r/alter_table.result
@@ -68,3 +68,13 @@ t2 CREATE TABLE `t2` (
alter table t1 engine=innodb;
alter table t1 add column b int;
drop table t1,t2;
+#
+# MDEV-21748 ASAN use-after-poison in PageBulk::insertPage()
+#
+CREATE TABLE t1 (pk TIMESTAMP PRIMARY KEY, a TIMESTAMP NULL UNIQUE)
+ENGINE=InnoDB;
+INSERT INTO t1 VALUES
+('2020-03-10 10:21:00', NULL),
+('0000-00-00 00:00:00', '0000-00-00 00:00:00');
+ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/r/foreign_key.result b/mysql-test/suite/innodb/r/foreign_key.result
index df5ae6088ad..55a10141995 100644
--- a/mysql-test/suite/innodb/r/foreign_key.result
+++ b/mysql-test/suite/innodb/r/foreign_key.result
@@ -237,11 +237,7 @@ SET SESSION FOREIGN_KEY_CHECKS = OFF;
ALTER TABLE t1 ADD FOREIGN KEY (f) REFERENCES non_existing_table (x);
SET SESSION FOREIGN_KEY_CHECKS = ON;
ALTER TABLE t1 ADD FULLTEXT INDEX ft1 (f);
-Warnings:
-Warning 1088 failed to load FOREIGN KEY constraints
ALTER TABLE t1 ADD FULLTEXT INDEX ft2 (f);
-Warnings:
-Warning 1088 failed to load FOREIGN KEY constraints
DROP TABLE t1;
CREATE TABLE t1 (f VARCHAR(256), FTS_DOC_ID BIGINT UNSIGNED PRIMARY KEY)
ENGINE=InnoDB;
diff --git a/mysql-test/suite/innodb/r/information_schema_grants.result b/mysql-test/suite/innodb/r/information_schema_grants.result
index 6ef1ce170cd..25eb1c632bd 100644
--- a/mysql-test/suite/innodb/r/information_schema_grants.result
+++ b/mysql-test/suite/innodb/r/information_schema_grants.result
@@ -66,8 +66,6 @@ create sql security invoker view i_sys_virtual as select * from information_sche
create sql security definer view d_sys_virtual as select * from information_schema.innodb_sys_virtual;
create sql security invoker view i_tablespaces_encryption as select * from information_schema.innodb_tablespaces_encryption;
create sql security definer view d_tablespaces_encryption as select * from information_schema.innodb_tablespaces_encryption;
-create sql security invoker view i_tablespaces_scrubbing as select * from information_schema.innodb_tablespaces_scrubbing;
-create sql security definer view d_tablespaces_scrubbing as select * from information_schema.innodb_tablespaces_scrubbing;
create sql security invoker view i_trx as select * from information_schema.innodb_trx;
create sql security definer view d_trx as select * from information_schema.innodb_trx;
connection select_only;
@@ -284,13 +282,6 @@ ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) fo
select count(*) > -1 from d_tablespaces_encryption;
count(*) > -1
1
-select count(*) > -1 from information_schema.innodb_tablespaces_scrubbing;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
-select count(*) > -1 from i_tablespaces_scrubbing;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
-select count(*) > -1 from d_tablespaces_scrubbing;
-count(*) > -1
-1
select count(*) > -1 from information_schema.innodb_trx;
ERROR 42000: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
select count(*) > -1 from i_trx;
diff --git a/mysql-test/suite/innodb/r/innodb-alter-debug.result b/mysql-test/suite/innodb/r/innodb-alter-debug.result
index 51ba58aa1ef..48722bbea44 100644
--- a/mysql-test/suite/innodb/r/innodb-alter-debug.result
+++ b/mysql-test/suite/innodb/r/innodb-alter-debug.result
@@ -98,3 +98,12 @@ disconnect con1;
connection default;
UNLOCK TABLES;
DROP TABLE t1;
+#
+# MDEV-7318 RENAME INDEX
+#
+CREATE TABLE t (c1 INT, c2 INT, KEY i2 (c2)) ENGINE=INNODB;
+SET DEBUG_DBUG= '+d,ib_rename_index_fail1';
+ALTER TABLE t RENAME INDEX i2 to x, ALGORITHM=INPLACE;
+ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
+SET DEBUG_DBUG= '-d,ib_rename_index_fail1';
+DROP TABLE t;
diff --git a/mysql-test/suite/innodb/r/innodb_rename_index.result b/mysql-test/suite/innodb/r/innodb_rename_index.result
new file mode 100644
index 00000000000..482070c4ffc
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb_rename_index.result
@@ -0,0 +1,989 @@
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+ALTER TABLE t RENAME INDEX i1 TO GEN_CLUST_INDEX;
+ERROR 42000: Incorrect index name 'GEN_CLUST_INDEX'
+ALTER TABLE t RENAME INDEX i1 TO i1;
+ALTER TABLE t RENAME INDEX aa TO aa;
+ERROR 42000: Key 'aa' doesn't exist in table 't'
+# combination: aaaa
+ALTER TABLE t ADD INDEX i4(f), DROP INDEX i4, RENAME INDEX i4 TO i4;
+ERROR 42000: Key 'i4' doesn't exist in table 't'
+# combination: aabb
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX aa, RENAME INDEX i2 TO i2;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX aa, RENAME INDEX bb TO bb;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX bb TO bb;
+ERROR 42000: Key 'bb' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i2 TO i2;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`),
+ KEY `i1` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i1 f
+test/t i2 c
+test/t i3 d
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: abcc
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX cc TO cc;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX i3 TO i3;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX cc TO cc;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i3 TO i3;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i1` (`b`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`),
+ KEY `aa` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t aa f
+test/t i1 b
+test/t i3 d
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: abaa
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i1, RENAME INDEX aa TO aa;
+ERROR 42000: Key 'aa' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i1 TO i1;
+ERROR 42000: Duplicate key name 'i1'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX bb, RENAME INDEX i1 TO i1;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX aa TO aa;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+# combination: baaa
+ALTER TABLE t ADD INDEX i2(f), DROP INDEX i1, RENAME INDEX i1 TO i1;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX bb(f), DROP INDEX i1, RENAME INDEX i1 TO i1;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i2(f), DROP INDEX aa, RENAME INDEX aa TO aa;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX bb(f), DROP INDEX aa, RENAME INDEX aa TO aa;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), RENAME INDEX aa TO bb;
+ERROR 42000: Key 'aa' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), RENAME INDEX bb TO aa;
+ERROR 42000: Key 'bb' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), RENAME INDEX i2 TO aa;
+ERROR 42000: Duplicate key name 'aa'
+ALTER TABLE t ADD INDEX i1(f), RENAME INDEX i1 TO bb;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `bb` (`b`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`),
+ KEY `i1` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t bb b
+test/t i1 f
+test/t i2 c
+test/t i3 d
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: abba
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i2 TO i1;
+ERROR 42000: Key 'i2' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i2 TO aa;
+ERROR 42000: Key 'i2' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX bb, RENAME INDEX bb TO i1;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX bb TO aa;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+# combination: cabc
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX i2 TO i3;
+ERROR 42000: Duplicate key name 'i3'
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX i2 TO i3;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX bb TO i3;
+ERROR 42000: Key 'bb' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX bb TO i3;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX i2 TO cc;
+ERROR 42000: Duplicate key name 'cc'
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX i2 TO cc;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX bb TO cc;
+ERROR 42000: Key 'bb' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX bb TO cc;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t DROP INDEX i1, RENAME INDEX i1 TO bb;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t DROP INDEX aa, RENAME INDEX i2 TO aa;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t DROP INDEX aa, RENAME INDEX aa TO i2;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t DROP INDEX i1, RENAME INDEX i4 TO i1;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i1` (`e`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i1 e
+test/t i2 c
+test/t i3 d
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: accb
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX i3 TO i2;
+ERROR 42000: Key 'i3' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX i3 TO bb;
+ERROR 42000: Key 'i3' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX cc TO i2;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX cc TO bb;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX cc TO i2;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX cc TO bb;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+# combination: aaab
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i1 TO i2;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i1 TO bb;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i1 TO i2;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX aa, RENAME INDEX aa TO bb;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+# combination: abcd
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX cc TO i4;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX cc TO dd;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX cc TO i4;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX cc TO dd;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i3 TO i4;
+ERROR 42000: Duplicate key name 'i4'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i3 TO dd;
+ERROR 42000: Duplicate key name 'i1'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i3 TO i4;
+ERROR 42000: Duplicate key name 'i4'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i3 TO dd;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i1` (`b`),
+ KEY `dd` (`d`),
+ KEY `i4` (`e`),
+ KEY `aa` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t aa f
+test/t dd d
+test/t i1 b
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: abab
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i1 TO i2;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i2` (`b`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`),
+ KEY `i1` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i1 f
+test/t i2 b
+test/t i3 d
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX bb, RENAME INDEX i1 TO bb;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX aa TO i2;
+ERROR 42000: Key 'aa' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX aa TO bb;
+ERROR 42000: Can't DROP INDEX `bb`; check that it exists
+# combination: acbc
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX i2 TO cc;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX i2 TO cc;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX bb TO cc;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX bb TO cc;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX bb TO i3;
+ERROR 42000: Key 'bb' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i3, RENAME INDEX bb TO i3;
+ERROR 42000: Key 'bb' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX i2 TO i3;
+ERROR 42000: Duplicate key name 'i1'
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i3, RENAME INDEX i2 TO i3;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i1` (`b`),
+ KEY `i3` (`c`),
+ KEY `i4` (`e`),
+ KEY `aa` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t aa f
+test/t i1 b
+test/t i3 c
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: cacb
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX cc TO i2;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX cc TO i2;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX cc TO bb;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX cc TO bb;
+ERROR 42000: Key 'cc' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX i3 TO i2;
+ERROR 42000: Duplicate key name 'i2'
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX i3 TO i2;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX i3 TO bb;
+ERROR 42000: Can't DROP INDEX `aa`; check that it exists
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX i3 TO bb;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i2` (`c`),
+ KEY `bb` (`d`),
+ KEY `i4` (`e`),
+ KEY `i3` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t bb d
+test/t i2 c
+test/t i3 f
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+# combination: ccab
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX i1 TO i2;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX i1 TO bb;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX aa TO i2;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX aa TO bb;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX cc, RENAME INDEX aa TO i2;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX cc, RENAME INDEX aa TO bb;
+ERROR 42000: Can't DROP INDEX `cc`; check that it exists
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i3, RENAME INDEX i1 TO i2;
+ERROR 42000: Duplicate key name 'i2'
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i3, RENAME INDEX i1 TO bb;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `bb` (`b`),
+ KEY `i2` (`c`),
+ KEY `i4` (`e`),
+ KEY `i3` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t bb b
+test/t i2 c
+test/t i3 f
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+ALTER TABLE t RENAME INDEX i1 TO x;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `x` (`b`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i2 c
+test/t i3 d
+test/t i4 e
+test/t PRIMARY a
+test/t x b
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+ALTER TABLE t RENAME INDEX i1 TO i2;
+ERROR 42000: Duplicate key name 'i2'
+ALTER TABLE t RENAME INDEX foo TO i1;
+ERROR 42000: Key 'foo' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i9 (f), RENAME INDEX i1 TO i8;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i8` (`b`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`),
+ KEY `i9` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i2 c
+test/t i3 d
+test/t i4 e
+test/t i8 b
+test/t i9 f
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+ALTER TABLE t ADD INDEX i1 (f), RENAME INDEX i1 TO i9;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i9` (`b`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`),
+ KEY `i1` (`f`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i1 f
+test/t i2 c
+test/t i3 d
+test/t i4 e
+test/t i9 b
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+a INT,
+b INT,
+c INT,
+d INT,
+e INT,
+f INT,
+PRIMARY KEY (a),
+INDEX i1 (b),
+INDEX i2 (c),
+INDEX i3 (d),
+INDEX i4 (e)
+) ENGINE=INNODB;
+INSERT INTO t SET a = 1;
+ALTER TABLE t ADD INDEX foo (f), RENAME INDEX i1 TO foo;
+ERROR 42000: Duplicate key name 'foo'
+ALTER TABLE t ADD INDEX i1 (f), RENAME INDEX i1 TO foo, DROP INDEX i1;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t ADD INDEX i1 (f), RENAME INDEX i1 TO foo, DROP INDEX foo;
+ERROR 42000: Can't DROP INDEX `foo`; check that it exists
+ALTER TABLE t ADD INDEX foo (f), RENAME INDEX foo TO bar, DROP INDEX foo;
+ERROR 42000: Can't DROP INDEX `foo`; check that it exists
+ALTER TABLE t RENAME INDEX i1 TO x, RENAME INDEX i2 TO x;
+ERROR 42000: Duplicate key name 'x'
+ALTER TABLE t RENAME INDEX i1 TO x, RENAME INDEX i1 TO y;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+ALTER TABLE t RENAME INDEX i1 TO x, RENAME INDEX i1 TO x;
+ERROR 42000: Key 'i1' doesn't exist in table 't'
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ `c` int(11) DEFAULT NULL,
+ `d` int(11) DEFAULT NULL,
+ `e` int(11) DEFAULT NULL,
+ `f` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`),
+ KEY `i1` (`b`),
+ KEY `i2` (`c`),
+ KEY `i3` (`d`),
+ KEY `i4` (`e`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i1 b
+test/t i2 c
+test/t i3 d
+test/t i4 e
+test/t PRIMARY a
+DROP TABLE t;
+CREATE TABLE t (
+c1 INT NOT NULL,
+c2 INT NOT NULL,
+c3 INT,
+c4 INT,
+PRIMARY KEY (c1),
+INDEX i1 (c3),
+INDEX i2 (c4)
+) ENGINE=INNODB;
+INSERT INTO t SET c1=1, c2=2;
+ALTER TABLE t DROP PRIMARY KEY, ADD PRIMARY KEY (c2), RENAME INDEX i1 TO x;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) NOT NULL,
+ `c3` int(11) DEFAULT NULL,
+ `c4` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c2`),
+ KEY `x` (`c3`),
+ KEY `i2` (`c4`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i2 c4
+test/t PRIMARY c2
+test/t x c3
+ALTER TABLE t RENAME INDEX i2 TO y, ROW_FORMAT=REDUNDANT;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) NOT NULL,
+ `c3` int(11) DEFAULT NULL,
+ `c4` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c2`),
+ KEY `x` (`c3`),
+ KEY `y` (`c4`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t PRIMARY c2
+test/t x c3
+test/t y c4
+DROP TABLE t;
+CREATE TABLE t (
+c1 INT NOT NULL,
+c2 INT,
+c3 INT,
+INDEX i1 (c2),
+INDEX i2 (c3)
+) ENGINE=INNODB;
+INSERT INTO t SET c1=1;
+ALTER TABLE t ADD PRIMARY KEY (c1), RENAME INDEX i1 TO x;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TABLE `t` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) DEFAULT NULL,
+ `c3` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c1`),
+ KEY `x` (`c2`),
+ KEY `i2` (`c3`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+table_name index_name column_name
+test/t i2 c3
+test/t PRIMARY c1
+test/t x c2
+DROP TABLE t;
+CREATE TABLE t (a INT, INDEX iiiii (a)) ENGINE=INNODB;
+INSERT INTO t SET a=NULL;
+ALTER TABLE t RENAME INDEX iiiii TO i;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+ALTER TABLE t RENAME INDEX i TO iiiii;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+ALTER TABLE t RENAME INDEX iiiii TO i;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+ALTER TABLE t RENAME INDEX i TO iiiii;
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
+DROP TABLE t;
diff --git a/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result b/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result
index 1120fe25bb6..264968e4365 100644
--- a/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result
+++ b/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result
@@ -198,7 +198,7 @@ log_checkpoints recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0
log_lsn_last_flush recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value LSN of Last flush
log_lsn_last_checkpoint recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value LSN at last checkpoint
log_lsn_current recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Current LSN value
-log_lsn_checkpoint_age recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Current LSN value minus LSN at last checkpoint
+log_lsn_checkpoint_age recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Current LSN value minus LSN at last checkpoint
log_lsn_buf_pool_oldest recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value The oldest modified block LSN in the buffer pool
log_max_modified_age_async recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Maximum LSN difference; when exceeded, start asynchronous preflush
log_max_modified_age_sync recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Maximum LSN difference; when exceeded, start synchronous preflush
@@ -393,10 +393,6 @@ select * from information_schema.innodb_tablespaces_encryption;
SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING
Warnings:
Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.innodb_tablespaces_encryption but the InnoDB storage engine is not installed
-select * from information_schema.innodb_tablespaces_scrubbing;
-SPACE NAME COMPRESSED LAST_SCRUB_COMPLETED CURRENT_SCRUB_STARTED CURRENT_SCRUB_ACTIVE_THREADS CURRENT_SCRUB_PAGE_NUMBER CURRENT_SCRUB_MAX_PAGE_NUMBER ON_SSD
-Warnings:
-Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.innodb_tablespaces_scrubbing but the InnoDB storage engine is not installed
select * from information_schema.innodb_mutexes;
NAME CREATE_FILE CREATE_LINE OS_WAITS
Warnings:
diff --git a/mysql-test/suite/innodb/r/monitor.result b/mysql-test/suite/innodb/r/monitor.result
index 16aa8630012..4cfe85090b6 100644
--- a/mysql-test/suite/innodb/r/monitor.result
+++ b/mysql-test/suite/innodb/r/monitor.result
@@ -685,6 +685,28 @@ LIKE 'buffer_page_written_index_leaf';
NAME COUNT > 0
buffer_page_written_index_leaf 1
DROP TABLE t1;
+CREATE TABLE fl0 (
+id INT NOT NULL PRIMARY KEY
+) ENGINE = InnoDB;
+CREATE TABLE fl1 (
+id INT NOT NULL PRIMARY KEY,
+fl0_id INT,
+CONSTRAINT `fkl0`
+ FOREIGN KEY (fl0_id) REFERENCES fl0 (id)
+ON DELETE CASCADE
+ON UPDATE RESTRICT
+) ENGINE = InnoDB;
+CREATE TABLE fl2 (
+id INT NOT NULL PRIMARY KEY,
+fl1_id INT,
+CONSTRAINT `fkl1`
+ FOREIGN KEY (fl1_id) REFERENCES fl1 (id)
+ON DELETE CASCADE
+ON UPDATE SET NULL
+) ENGINE = InnoDB;
+INSERT INTO fl0 VALUES (1000);
+INSERT INTO fl1 VALUES (500, 1000), (1500, 1000);
+INSERT INTO fl2 VALUES (200, 500), (800, 500), (1200, 1500), (1800, 1500);
CREATE TABLE t1(id INT PRIMARY KEY, a INT, b CHAR(1), UNIQUE KEY u(a,b))
ENGINE=InnoDB;
SET @start = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
@@ -698,7 +720,96 @@ SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
SELECT @end - @start;
@end - @start
0
+# Records must not be S/X-locked if a table is X-locked.
+SET @start = @end;
+SET autocommit = 0;
+BEGIN;
+LOCK TABLE t1 WRITE;
+SELECT * FROM t1;
+id a b
+1 1 a
+4 4 d
+3 10000 c
+SELECT * FROM t1 WHERE a>=10000;
+id a b
+3 10000 c
+SELECT * FROM t1 FOR UPDATE;
+id a b
+1 1 a
+4 4 d
+3 10000 c
+SELECT * FROM t1 WHERE a>=10000 FOR UPDATE;
+id a b
+3 10000 c
+UPDATE t1 SET b = 'b' WHERE id = 4;
+UPDATE t1 SET b = 'b' WHERE a = 10000;
+REPLACE INTO t1 VALUES (4,3,'a');
+INSERT INTO t1 VALUES (3,1,'e') ON DUPLICATE KEY UPDATE b = 'b';
+INSERT INTO t1 VALUES (5,5,'e');
+DELETE FROM t1 WHERE a = 1 AND b='a';
+DELETE FROM t1;
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+@end - @start
+0
+# Records must not be S-locked if a table is S-locked.
+SET @start = @end;
+BEGIN;
+LOCK TABLE t1 WRITE;
+INSERT INTO t1 VALUES(1,1,'a'),(2,9999,'b'),(3,10000,'c'),(4,4,'d');
+DELETE FROM t1 WHERE a = 9999 AND b='b';
+COMMIT;
+UNLOCK TABLES;
+BEGIN;
+LOCK TABLE t1 READ;
+SELECT * FROM t1 LOCK IN SHARE MODE;
+id a b
+1 1 a
+4 4 d
+3 10000 c
+SELECT * FROM t1 WHERE a>=10000 LOCK IN SHARE MODE;
+id a b
+3 10000 c
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+@end - @start
+0
+# Records must not be S-locked for foreign keys enforcement
+SET @start = @end;
+BEGIN;
+LOCK TABLE fl0 READ, fl1 READ, fl2 WRITE;
+INSERT INTO fl2 VALUES (300, 500), (700, 500), (1300, 1500), (1700, 1500);
+SELECT * FROM fl1 LOCK IN SHARE MODE;
+id fl0_id
+500 1000
+1500 1000
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+@end - @start
+0
+# Records must not be X-locked for foreign keys cascade
+SET @start = @end;
+BEGIN;
+LOCK TABLE fl0 READ, fl1 WRITE, fl2 WRITE;
+DELETE FROM fl1 WHERE id = 1500;
+UPDATE fl1 SET id = 2500 WHERE id = 500;
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+@end - @start
+0
+SET autocommit = default;
DROP TABLE t1;
+DROP TABLE fl2;
+DROP TABLE fl1;
+DROP TABLE fl0;
SET GLOBAL innodb_monitor_enable=default;
SET GLOBAL innodb_monitor_disable=default;
SET GLOBAL innodb_monitor_reset_all=default;
diff --git a/mysql-test/suite/innodb/t/alter_rename_existing.test b/mysql-test/suite/innodb/t/alter_rename_existing.test
index 0202f2b6ad3..06602ae8e74 100644
--- a/mysql-test/suite/innodb/t/alter_rename_existing.test
+++ b/mysql-test/suite/innodb/t/alter_rename_existing.test
@@ -59,7 +59,7 @@ ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=COPY;
--echo # while a blocking t1.ibd file exists.
--echo #
SET GLOBAL innodb_file_per_table=ON;
---replace_regex /$MYSQLD_DATADIR/MYSQLD_DATADIR/
+--replace_regex /#sql-ib[1-9][0-9]*/#sql-ib/
--error ER_TABLESPACE_EXISTS
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/
diff --git a/mysql-test/suite/innodb/t/alter_rename_files.test b/mysql-test/suite/innodb/t/alter_rename_files.test
deleted file mode 100644
index 27408320f7d..00000000000
--- a/mysql-test/suite/innodb/t/alter_rename_files.test
+++ /dev/null
@@ -1,31 +0,0 @@
---source include/have_debug.inc
---source include/have_debug_sync.inc
---source include/have_innodb.inc
---source include/count_sessions.inc
-
-CREATE TABLE t1 (x INT NOT NULL UNIQUE KEY) ENGINE=InnoDB;
-INSERT INTO t1 VALUES(5);
-
-SET GLOBAL innodb_log_checkpoint_now=TRUE;
-
-# Start an ALTER TABLE and stop it before renaming the files
-SET DEBUG_SYNC='commit_cache_rebuild SIGNAL ready WAIT_FOR finish';
-
---send ALTER TABLE t1 FORCE;
-
-connect (con1,localhost,root,,);
-
-SET DEBUG_SYNC='now WAIT_FOR ready';
-
-SET GLOBAL innodb_log_checkpoint_now=TRUE;
-
-SET DEBUG_SYNC='now SIGNAL finish';
-
-disconnect con1;
-connection default;
-reap;
-SHOW CREATE TABLE t1;
-DROP TABLE t1;
-SET DEBUG_SYNC='RESET';
-
---source include/wait_until_count_sessions.inc
diff --git a/mysql-test/suite/innodb/t/alter_table.test b/mysql-test/suite/innodb/t/alter_table.test
index a8b52732c91..4827e3440e1 100644
--- a/mysql-test/suite/innodb/t/alter_table.test
+++ b/mysql-test/suite/innodb/t/alter_table.test
@@ -71,3 +71,14 @@ show create table t2;
alter table t1 engine=innodb;
alter table t1 add column b int;
drop table t1,t2;
+
+--echo #
+--echo # MDEV-21748 ASAN use-after-poison in PageBulk::insertPage()
+--echo #
+CREATE TABLE t1 (pk TIMESTAMP PRIMARY KEY, a TIMESTAMP NULL UNIQUE)
+ENGINE=InnoDB;
+INSERT INTO t1 VALUES
+ ('2020-03-10 10:21:00', NULL),
+ ('0000-00-00 00:00:00', '0000-00-00 00:00:00');
+ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/information_schema_grants.opt b/mysql-test/suite/innodb/t/information_schema_grants.opt
index ce08c46f047..38c5e3cf1cd 100644
--- a/mysql-test/suite/innodb/t/information_schema_grants.opt
+++ b/mysql-test/suite/innodb/t/information_schema_grants.opt
@@ -30,4 +30,3 @@
--enable-plugin-innodb-mutexes
--enable-plugin-innodb-sys-semaphore-waits
--enable-plugin-innodb-tablespaces-encryption
---enable-plugin-innodb-tablespaces-scrubbing
diff --git a/mysql-test/suite/innodb/t/information_schema_grants.test b/mysql-test/suite/innodb/t/information_schema_grants.test
index 34565f76352..72982b3ec1c 100644
--- a/mysql-test/suite/innodb/t/information_schema_grants.test
+++ b/mysql-test/suite/innodb/t/information_schema_grants.test
@@ -103,9 +103,6 @@ create sql security definer view d_sys_virtual as select * from information_sche
create sql security invoker view i_tablespaces_encryption as select * from information_schema.innodb_tablespaces_encryption;
create sql security definer view d_tablespaces_encryption as select * from information_schema.innodb_tablespaces_encryption;
-create sql security invoker view i_tablespaces_scrubbing as select * from information_schema.innodb_tablespaces_scrubbing;
-create sql security definer view d_tablespaces_scrubbing as select * from information_schema.innodb_tablespaces_scrubbing;
-
create sql security invoker view i_trx as select * from information_schema.innodb_trx;
create sql security definer view d_trx as select * from information_schema.innodb_trx;
@@ -294,12 +291,6 @@ select count(*) > -1 from i_tablespaces_encryption;
select count(*) > -1 from d_tablespaces_encryption;
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
-select count(*) > -1 from information_schema.innodb_tablespaces_scrubbing;
---error ER_SPECIFIC_ACCESS_DENIED_ERROR
-select count(*) > -1 from i_tablespaces_scrubbing;
-select count(*) > -1 from d_tablespaces_scrubbing;
-
---error ER_SPECIFIC_ACCESS_DENIED_ERROR
select count(*) > -1 from information_schema.innodb_trx;
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
select count(*) > -1 from i_trx;
diff --git a/mysql-test/suite/innodb/t/innodb-alter-debug.test b/mysql-test/suite/innodb/t/innodb-alter-debug.test
index 00300bfdccc..792716aeb4e 100644
--- a/mysql-test/suite/innodb/t/innodb-alter-debug.test
+++ b/mysql-test/suite/innodb/t/innodb-alter-debug.test
@@ -132,3 +132,15 @@ DROP TABLE t1;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
+
+--echo #
+--echo # MDEV-7318 RENAME INDEX
+--echo #
+CREATE TABLE t (c1 INT, c2 INT, KEY i2 (c2)) ENGINE=INNODB;
+
+SET DEBUG_DBUG= '+d,ib_rename_index_fail1';
+-- error ER_LOCK_DEADLOCK
+ALTER TABLE t RENAME INDEX i2 to x, ALGORITHM=INPLACE;
+SET DEBUG_DBUG= '-d,ib_rename_index_fail1';
+
+DROP TABLE t;
diff --git a/mysql-test/suite/innodb/t/innodb_rename_index.test b/mysql-test/suite/innodb/t/innodb_rename_index.test
new file mode 100644
index 00000000000..9236259b279
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb_rename_index.test
@@ -0,0 +1,538 @@
+--source include/have_innodb.inc
+
+#
+# Test "ALTER TABLE ... RENAME INDEX" in InnoDB
+#
+
+let create =
+CREATE TABLE t (
+ a INT,
+ b INT,
+ c INT,
+ d INT,
+ e INT,
+ f INT,
+ PRIMARY KEY (a),
+ INDEX i1 (b),
+ INDEX i2 (c),
+ INDEX i3 (d),
+ INDEX i4 (e)
+) ENGINE=INNODB;
+
+let insert = INSERT INTO t SET a = 1;
+
+let show_table =
+SHOW CREATE TABLE t;
+
+let show_sys =
+SELECT
+t.name AS table_name,
+i.name AS index_name,
+f.name AS column_name
+FROM
+information_schema.innodb_sys_tables t,
+information_schema.innodb_sys_indexes i,
+information_schema.innodb_sys_fields f
+WHERE
+t.name LIKE '%/t' AND
+t.table_id = i.table_id AND
+i.index_id = f.index_id
+ORDER BY 1, 2, 3;
+
+-- eval $create
+
+# Add a row, so that affected rows would be nonzero for ALGORITHM=COPY.
+# ALGORITHM=INPLACE will report 0 affected row in the result file.
+# We will have enable_info/disable_info around every successful ALTER
+# to enable the affected rows: output in the result file.
+-- eval $insert
+
+-- error ER_WRONG_NAME_FOR_INDEX
+ALTER TABLE t RENAME INDEX i1 TO GEN_CLUST_INDEX;
+
+# Test all combinations of ADD w, DROP x, RENAME y TO z.
+#
+# Use the following names for wxyz (with 1 to 4 of wxyz being the same):
+# aaaa abcd aabb abab abba abcc acbc accb cacb cabc ccab aaab aaba abaa baaa
+#
+# Some cases should trivially succeed or fail. Test them in isolation:
+# no-op: y=z (RENAME y TO y)
+# rules out the combinations ..\(.\)\1
+# a.k.a. aaaa aabb abcc abaa baaa
+
+# We use the index names i1 to i4 for existing indexes abcd.
+# Non-existing index names will be aa,bb,cc,dd.
+# Index creation on non-existing columns will not be tested.
+
+ALTER TABLE t RENAME INDEX i1 TO i1;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t RENAME INDEX aa TO aa;
+
+-- echo # combination: aaaa
+# drop/add existing, null rename and drop the same
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i4(f), DROP INDEX i4, RENAME INDEX i4 TO i4;
+
+-- echo # combination: aabb
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX aa, RENAME INDEX i2 TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX aa, RENAME INDEX bb TO bb;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX bb TO bb;
+
+-- enable_info
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i2 TO i2;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: abcc
+
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX cc TO cc;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX i3 TO i3;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX cc TO cc;
+
+# rename existing (succeeds)
+-- enable_info
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i3 TO i3;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: abaa
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i1, RENAME INDEX aa TO aa;
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i1 TO i1;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX bb, RENAME INDEX i1 TO i1;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX aa TO aa;
+
+-- echo # combination: baaa
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i2(f), DROP INDEX i1, RENAME INDEX i1 TO i1;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX bb(f), DROP INDEX i1, RENAME INDEX i1 TO i1;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i2(f), DROP INDEX aa, RENAME INDEX aa TO aa;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX bb(f), DROP INDEX aa, RENAME INDEX aa TO aa;
+
+# refuse: w=z (ADD w, RENAME y TO w)
+# rules out the combinations \(.\)..\1
+# a.k.a. aaaa abba cabc aaba abaa
+# the case w=y (ADD w, RENAME w to z) may succeed, as seen below
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), RENAME INDEX aa TO bb;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), RENAME INDEX bb TO aa;
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX aa(f), RENAME INDEX i2 TO aa;
+
+# rename existing, add one with the same name
+-- enable_info
+ALTER TABLE t ADD INDEX i1(f), RENAME INDEX i1 TO bb;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: abba
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i2 TO i1;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i2 TO aa;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX bb, RENAME INDEX bb TO i1;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX bb TO aa;
+
+-- echo # combination: cabc
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX i2 TO i3;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX i2 TO i3;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX bb TO i3;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX bb TO i3;
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX i2 TO cc;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX i2 TO cc;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX bb TO cc;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX bb TO cc;
+
+# refuse: x=y (DROP x, RENAME x TO z)
+# rules out the combinations .\(.\)\1.
+# a.k.a. aaaa abba accb aaab baaa
+
+# rename and drop the same
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t DROP INDEX i1, RENAME INDEX i1 TO bb;
+# drop non-existing
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t DROP INDEX aa, RENAME INDEX i2 TO aa;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t DROP INDEX aa, RENAME INDEX aa TO i2;
+
+# this one will succeed (drop, replace with an existing one)
+-- enable_info
+ALTER TABLE t DROP INDEX i1, RENAME INDEX i4 TO i1;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: accb
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX i3 TO i2;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX i3 TO bb;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX cc TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX cc TO bb;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX cc TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX cc TO bb;
+
+-- echo # combination: aaab
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i1 TO i2;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i1 TO bb;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i1, RENAME INDEX i1 TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX aa, RENAME INDEX aa TO bb;
+
+# Remaining combinations: abcd abab acbc cacb ccab
+
+-- echo # combination: abcd
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX cc TO i4;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX cc TO dd;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX cc TO i4;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX cc TO dd;
+
+# add existing, rename to existing
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i3 TO i4;
+# add existing
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i3 TO dd;
+# rename to existing
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i3 TO i4;
+
+-- enable_info
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX i3 TO dd;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: abab
+
+-- enable_info
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i2, RENAME INDEX i1 TO i2;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX bb, RENAME INDEX i1 TO bb;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i2, RENAME INDEX aa TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX bb, RENAME INDEX aa TO bb;
+
+-- echo # combination: acbc
+
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX i2 TO cc;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX i2 TO cc;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX cc, RENAME INDEX bb TO cc;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX cc, RENAME INDEX bb TO cc;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX bb TO i3;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i3, RENAME INDEX bb TO i3;
+
+# add existing
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i1(f), DROP INDEX i3, RENAME INDEX i2 TO i3;
+
+-- enable_info
+ALTER TABLE t ADD INDEX aa(f), DROP INDEX i3, RENAME INDEX i2 TO i3;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: cacb
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX cc TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX cc TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX aa, RENAME INDEX cc TO bb;
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX i1, RENAME INDEX cc TO bb;
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX i3 TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX i3 TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX aa, RENAME INDEX i3 TO bb;
+
+-- enable_info
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i1, RENAME INDEX i3 TO bb;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- echo # combination: ccab
+
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX i1 TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX i1 TO bb;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX aa TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX cc(f), DROP INDEX cc, RENAME INDEX aa TO bb;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX cc, RENAME INDEX aa TO i2;
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX cc, RENAME INDEX aa TO bb;
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i3, RENAME INDEX i1 TO i2;
+
+-- enable_info
+ALTER TABLE t ADD INDEX i3(f), DROP INDEX i3, RENAME INDEX i1 TO bb;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+# A simple successful ALTER
+-- enable_info
+ALTER TABLE t RENAME INDEX i1 TO x;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t RENAME INDEX i1 TO i2;
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t RENAME INDEX foo TO i1;
+
+# Test ADD INDEX, RENAME INDEX
+
+-- enable_info
+ALTER TABLE t ADD INDEX i9 (f), RENAME INDEX i1 TO i8;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- enable_info
+ALTER TABLE t ADD INDEX i1 (f), RENAME INDEX i1 TO i9;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+DROP TABLE t;
+-- eval $create
+-- eval $insert
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t ADD INDEX foo (f), RENAME INDEX i1 TO foo;
+
+# Test ADD INDEX, RENAME INDEX, DROP INDEX
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t ADD INDEX i1 (f), RENAME INDEX i1 TO foo, DROP INDEX i1;
+
+-- error ER_CANT_DROP_FIELD_OR_KEY
+ALTER TABLE t ADD INDEX i1 (f), RENAME INDEX i1 TO foo, DROP INDEX foo;
+
+-- error ER_CANT_DROP_FIELD_OR_KEY
+# "ALTER TABLE t ADD INDEX foo (d), DROP INDEX foo;" alone fails with the
+# same error code, but we have that test here anyway
+ALTER TABLE t ADD INDEX foo (f), RENAME INDEX foo TO bar, DROP INDEX foo;
+
+# Test RENAME INDEX, RENAME INDEX
+
+-- error ER_DUP_KEYNAME
+ALTER TABLE t RENAME INDEX i1 TO x, RENAME INDEX i2 TO x;
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t RENAME INDEX i1 TO x, RENAME INDEX i1 TO y;
+
+-- error ER_KEY_DOES_NOT_EXITS
+ALTER TABLE t RENAME INDEX i1 TO x, RENAME INDEX i1 TO x;
+
+# show that the table did not change after all the erroneous ALTERs
+-- eval $show_table
+-- eval $show_sys
+
+DROP TABLE t;
+
+# now test the rebuild case (new clustered index)
+
+CREATE TABLE t (
+ c1 INT NOT NULL,
+ c2 INT NOT NULL,
+ c3 INT,
+ c4 INT,
+ PRIMARY KEY (c1),
+ INDEX i1 (c3),
+ INDEX i2 (c4)
+) ENGINE=INNODB;
+
+INSERT INTO t SET c1=1, c2=2;
+
+-- enable_info
+ALTER TABLE t DROP PRIMARY KEY, ADD PRIMARY KEY (c2), RENAME INDEX i1 TO x;
+-- disable_info
+
+-- eval $show_table
+-- eval $show_sys
+
+-- enable_info
+ALTER TABLE t RENAME INDEX i2 TO y, ROW_FORMAT=REDUNDANT;
+-- disable_info
+
+-- eval $show_table
+-- eval $show_sys
+
+DROP TABLE t;
+
+# a case where the PK does not exist prior to the ALTER TABLE command
+
+CREATE TABLE t (
+ c1 INT NOT NULL,
+ c2 INT,
+ c3 INT,
+ INDEX i1 (c2),
+ INDEX i2 (c3)
+) ENGINE=INNODB;
+
+INSERT INTO t SET c1=1;
+
+-- enable_info
+ALTER TABLE t ADD PRIMARY KEY (c1), RENAME INDEX i1 TO x;
+-- disable_info
+-- eval $show_table
+-- eval $show_sys
+
+DROP TABLE t;
+
+# Test repeated RENAMEs with alternating names
+
+CREATE TABLE t (a INT, INDEX iiiii (a)) ENGINE=INNODB;
+INSERT INTO t SET a=NULL;
+-- enable_info
+ALTER TABLE t RENAME INDEX iiiii TO i;
+ALTER TABLE t RENAME INDEX i TO iiiii;
+ALTER TABLE t RENAME INDEX iiiii TO i;
+ALTER TABLE t RENAME INDEX i TO iiiii;
+-- disable_info
+DROP TABLE t;
+
+# Below is a shell script to generate the full set of ALTER TABLE
+# DROP/ADD/RENAME combinations. The generated .sql file is 3.3MB and
+# executes in about 7 minutes.
+#
+##!/bin/sh
+#
+#create="
+#CREATE TABLE t (
+# a INT,
+# b INT,
+# c INT,
+# d INT,
+# PRIMARY KEY (a),
+# INDEX i1 (b),
+# INDEX i2 (c)
+#) ENGINE=INNODB;
+#"
+#
+#echo "DROP TABLE IF EXISTS t;"
+#for r in "" ", DROP PRIMARY KEY, ADD PRIMARY KEY (a)" ", ROW_FORMAT=REDUNDANT" ; do
+# for i1 in i1 i1noexist; do
+# for i2 in i2 i2noexist; do
+# for i3 in i3 i3noexist; do
+# for i4 in i4 i4noexist; do
+# for a in $i1 $i2 $i3 $i4; do
+# for b in $i1 $i2 $i3 $i4; do
+# for c in $i1 $i2 $i3 $i4; do
+# for d in $i1 $i2 $i3 $i4; do
+# echo "$create"
+# echo "ALTER TABLE t ADD INDEX $a (d), RENAME INDEX $b TO $c, DROP INDEX $d $r;"
+# echo "DROP TABLE t;"
+# done
+# done
+# done
+# done
+# done
+# done
+# done
+# done
+#done
diff --git a/mysql-test/suite/innodb/t/innodb_skip_innodb_is_tables.test b/mysql-test/suite/innodb/t/innodb_skip_innodb_is_tables.test
index 01ced047302..a5d5d3fe34e 100644
--- a/mysql-test/suite/innodb/t/innodb_skip_innodb_is_tables.test
+++ b/mysql-test/suite/innodb/t/innodb_skip_innodb_is_tables.test
@@ -32,6 +32,5 @@ select * from information_schema.innodb_sys_datafiles;
--error 0,1109
select * from information_schema.innodb_changed_pages;
select * from information_schema.innodb_tablespaces_encryption;
-select * from information_schema.innodb_tablespaces_scrubbing;
select * from information_schema.innodb_mutexes;
select * from information_schema.innodb_sys_semaphore_waits;
diff --git a/mysql-test/suite/innodb/t/monitor.test b/mysql-test/suite/innodb/t/monitor.test
index 10a0219767d..7fa0c64f81b 100644
--- a/mysql-test/suite/innodb/t/monitor.test
+++ b/mysql-test/suite/innodb/t/monitor.test
@@ -449,6 +449,32 @@ LIKE 'buffer_page_written_index_leaf';
DROP TABLE t1;
+CREATE TABLE fl0 (
+ id INT NOT NULL PRIMARY KEY
+) ENGINE = InnoDB;
+
+CREATE TABLE fl1 (
+ id INT NOT NULL PRIMARY KEY,
+ fl0_id INT,
+ CONSTRAINT `fkl0`
+ FOREIGN KEY (fl0_id) REFERENCES fl0 (id)
+ ON DELETE CASCADE
+ ON UPDATE RESTRICT
+) ENGINE = InnoDB;
+
+CREATE TABLE fl2 (
+ id INT NOT NULL PRIMARY KEY,
+ fl1_id INT,
+ CONSTRAINT `fkl1`
+ FOREIGN KEY (fl1_id) REFERENCES fl1 (id)
+ ON DELETE CASCADE
+ ON UPDATE SET NULL
+) ENGINE = InnoDB;
+
+INSERT INTO fl0 VALUES (1000);
+INSERT INTO fl1 VALUES (500, 1000), (1500, 1000);
+INSERT INTO fl2 VALUES (200, 500), (800, 500), (1200, 1500), (1800, 1500);
+
CREATE TABLE t1(id INT PRIMARY KEY, a INT, b CHAR(1), UNIQUE KEY u(a,b))
ENGINE=InnoDB;
@@ -464,7 +490,73 @@ SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
= 'lock_rec_lock_created');
SELECT @end - @start;
+--echo # Records must not be S/X-locked if a table is X-locked.
+SET @start = @end;
+# Tables will not be locked if autocommit is not 0.
+# See OPTION_NOT_AUTOCOMMIT in ha_innobase::external_lock().
+SET autocommit = 0;
+BEGIN;
+LOCK TABLE t1 WRITE;
+SELECT * FROM t1;
+SELECT * FROM t1 WHERE a>=10000;
+SELECT * FROM t1 FOR UPDATE;
+SELECT * FROM t1 WHERE a>=10000 FOR UPDATE;
+UPDATE t1 SET b = 'b' WHERE id = 4;
+UPDATE t1 SET b = 'b' WHERE a = 10000;
+REPLACE INTO t1 VALUES (4,3,'a');
+INSERT INTO t1 VALUES (3,1,'e') ON DUPLICATE KEY UPDATE b = 'b';
+INSERT INTO t1 VALUES (5,5,'e');
+DELETE FROM t1 WHERE a = 1 AND b='a';
+DELETE FROM t1;
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+
+--echo # Records must not be S-locked if a table is S-locked.
+SET @start = @end;
+BEGIN;
+LOCK TABLE t1 WRITE;
+INSERT INTO t1 VALUES(1,1,'a'),(2,9999,'b'),(3,10000,'c'),(4,4,'d');
+DELETE FROM t1 WHERE a = 9999 AND b='b';
+COMMIT;
+UNLOCK TABLES;
+BEGIN;
+LOCK TABLE t1 READ;
+SELECT * FROM t1 LOCK IN SHARE MODE;
+SELECT * FROM t1 WHERE a>=10000 LOCK IN SHARE MODE;
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+
+--echo # Records must not be S-locked for foreign keys enforcement
+SET @start = @end;
+BEGIN;
+LOCK TABLE fl0 READ, fl1 READ, fl2 WRITE;
+INSERT INTO fl2 VALUES (300, 500), (700, 500), (1300, 1500), (1700, 1500);
+SELECT * FROM fl1 LOCK IN SHARE MODE;
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+
+--echo # Records must not be X-locked for foreign keys cascade
+SET @start = @end;
+BEGIN;
+LOCK TABLE fl0 READ, fl1 WRITE, fl2 WRITE;
+DELETE FROM fl1 WHERE id = 1500;
+UPDATE fl1 SET id = 2500 WHERE id = 500;
+COMMIT;
+UNLOCK TABLES;
+SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'lock_rec_lock_created');
+SELECT @end - @start;
+
+SET autocommit = default;
DROP TABLE t1;
+DROP TABLE fl2;
+DROP TABLE fl1;
+DROP TABLE fl0;
--disable_warnings
SET GLOBAL innodb_monitor_enable=default;
diff --git a/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.opt b/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.opt
deleted file mode 100644
index e7999f9d727..00000000000
--- a/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.opt
+++ /dev/null
@@ -1 +0,0 @@
---innodb_tablespaces_scrubbing
diff --git a/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.result b/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.result
deleted file mode 100644
index fb28253a2bb..00000000000
--- a/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.result
+++ /dev/null
@@ -1,13 +0,0 @@
-SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING;
-Table Create Table
-INNODB_TABLESPACES_SCRUBBING CREATE TEMPORARY TABLE `INNODB_TABLESPACES_SCRUBBING` (
- `SPACE` bigint(21) unsigned NOT NULL DEFAULT 0,
- `NAME` varchar(655) DEFAULT NULL,
- `COMPRESSED` int(1) unsigned NOT NULL DEFAULT 0,
- `LAST_SCRUB_COMPLETED` datetime DEFAULT NULL,
- `CURRENT_SCRUB_STARTED` datetime DEFAULT NULL,
- `CURRENT_SCRUB_ACTIVE_THREADS` int(11) unsigned DEFAULT NULL,
- `CURRENT_SCRUB_PAGE_NUMBER` bigint(21) unsigned NOT NULL DEFAULT 0,
- `CURRENT_SCRUB_MAX_PAGE_NUMBER` bigint(21) unsigned NOT NULL DEFAULT 0,
- `ON_SSD` int(1) unsigned NOT NULL DEFAULT 0
-) ENGINE=MEMORY DEFAULT CHARSET=utf8
diff --git a/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.test b/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.test
deleted file mode 100644
index 289e1ad9d20..00000000000
--- a/mysql-test/suite/innodb_i_s/innodb_tablespaces_scrubbing.test
+++ /dev/null
@@ -1,3 +0,0 @@
---source include/have_innodb.inc
-
-SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING;
diff --git a/mysql-test/suite/innodb_zip/r/innochecksum_3.result b/mysql-test/suite/innodb_zip/r/innochecksum_3.result
index 946c86b2a09..cfe1e4852ba 100644
--- a/mysql-test/suite/innodb_zip/r/innochecksum_3.result
+++ b/mysql-test/suite/innodb_zip/r/innochecksum_3.result
@@ -172,7 +172,7 @@ Filename::tab#.ibd
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
-#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
+#::# | Freshly allocated page | -
#::# | Freshly allocated page | -
# Variables used by page type dump for ibdata1
@@ -207,7 +207,7 @@ Filename::tab#.ibd
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
-#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
+#::# | Freshly allocated page | -
#::# | Freshly allocated page | -
[6]: check the valid lower bound values for option
# allow-mismatches,page,start-page,end-page
diff --git a/mysql-test/suite/innodb_zip/r/recover.result b/mysql-test/suite/innodb_zip/r/recover.result
index b7452655268..fddb070538d 100644
--- a/mysql-test/suite/innodb_zip/r/recover.result
+++ b/mysql-test/suite/innodb_zip/r/recover.result
@@ -1,3 +1,14 @@
+FLUSH TABLES;
+#
+# MDEV-21892 Assertion 'index != clust_index || row_get_rec_trx_id()'
+#
+connect con1,localhost,root;
+CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
+INSERT INTO t1 VALUES (1),(2);
+BEGIN;
+UPDATE t1 SET pk=1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+connection default;
#
# MDEV-12720 recovery fails with "Generic error"
# for ROW_FORMAT=compressed
@@ -12,6 +23,12 @@ insert into a select null, uuid() from a a, a b, a c;
SET GLOBAL innodb_flush_log_at_trx_commit=1;
COMMIT;
# restart
+disconnect con1;
+SELECT * FROM t1;
+pk
+1
+2
+DROP TABLE t1;
SELECT COUNT(*) from a;
COUNT(*)
1010
diff --git a/mysql-test/suite/innodb_zip/t/recover.test b/mysql-test/suite/innodb_zip/t/recover.test
index f32ff3d3783..194ef10a8ef 100644
--- a/mysql-test/suite/innodb_zip/t/recover.test
+++ b/mysql-test/suite/innodb_zip/t/recover.test
@@ -1,12 +1,21 @@
--source include/innodb_page_size_small.inc
--source include/not_embedded.inc
---disable_query_log
# This test kills the server, which could corrupt some mysql.* tables
# that are not created with ENGINE=InnoDB.
# Flush any non-InnoDB tables to prevent that from happening.
FLUSH TABLES;
---enable_query_log
+
+--echo #
+--echo # MDEV-21892 Assertion 'index != clust_index || row_get_rec_trx_id()'
+--echo #
+connect (con1,localhost,root);
+CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
+INSERT INTO t1 VALUES (1),(2);
+BEGIN;
+--error ER_DUP_ENTRY
+UPDATE t1 SET pk=1;
+connection default;
--echo #
--echo # MDEV-12720 recovery fails with "Generic error"
@@ -25,6 +34,9 @@ COMMIT;
--let $shutdown_timeout=0
--source include/restart_mysqld.inc
+disconnect con1;
+SELECT * FROM t1;
+DROP TABLE t1;
SELECT COUNT(*) from a;
DROP TABLE a;
diff --git a/mysql-test/suite/multi_source/info_logs.result b/mysql-test/suite/multi_source/info_logs.result
index f8519a99964..b0a112aaf3b 100644
--- a/mysql-test/suite/multi_source/info_logs.result
+++ b/mysql-test/suite/multi_source/info_logs.result
@@ -90,16 +90,16 @@ MASTER 2.2
#
show all slaves status;
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
- Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> relay.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 1 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 7 0 60.000
-MASTER 2.2 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> relay-master@00202@002e2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space2> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 7 0 60.000
+ Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> relay.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 1 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 7 0 60.000
+MASTER 2.2 Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> relay-master@00202@002e2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space2> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 7 0 60.000
include/wait_for_slave_to_start.inc
set default_master_connection = 'MASTER 2.2';
include/wait_for_slave_to_start.inc
set default_master_connection = '';
show all slaves status;
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
- Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> relay.000004 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 1 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 6 0 60.000
-MASTER 2.2 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> relay-master@00202@002e2.000004 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space2> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 6 0 60.000
+ Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> relay.000004 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 1 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 6 0 60.000
+MASTER 2.2 Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> relay-master@00202@002e2.000004 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space2> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 6 0 60.000
#
# List of files matching '*info*' pattern
# after slave server restart
diff --git a/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
index de38313401d..b1aa31d059a 100644
--- a/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
+++ b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
@@ -21,7 +21,7 @@ connection slave;
"Command: SHOW ALL STAVES STATUS --> SHOW ALL REPLICAS STATUS"
SHOW ALL REPLICAS STATUS;
Connection_name slave1
-Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_SQL_State Slave has read all relay log; waiting for more updates
Slave_IO_State Waiting for master to send event
Master_Host 127.0.0.1
Master_User root
@@ -71,7 +71,7 @@ Replicate_Ignore_Domain_Ids
Parallel_Mode optimistic
SQL_Delay 0
SQL_Remaining_Delay NULL
-Slave_SQL_Running_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_SQL_Running_State Slave has read all relay log; waiting for more updates
Slave_DDL_Groups 0
Slave_Non_Transactional_Groups 0
Slave_Transactional_Groups 0
@@ -82,7 +82,7 @@ Slave_received_heartbeats 0
Slave_heartbeat_period 60.000
Gtid_Slave_Pos
Connection_name slave2
-Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_SQL_State Slave has read all relay log; waiting for more updates
Slave_IO_State Waiting for master to send event
Master_Host 127.0.0.1
Master_User root
@@ -132,7 +132,7 @@ Replicate_Ignore_Domain_Ids
Parallel_Mode optimistic
SQL_Delay 0
SQL_Remaining_Delay NULL
-Slave_SQL_Running_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_SQL_Running_State Slave has read all relay log; waiting for more updates
Slave_DDL_Groups 0
Slave_Non_Transactional_Groups 0
Slave_Transactional_Groups 0
diff --git a/mysql-test/suite/multi_source/simple.result b/mysql-test/suite/multi_source/simple.result
index 922c7555875..a66d49e88cb 100644
--- a/mysql-test/suite/multi_source/simple.result
+++ b/mysql-test/suite/multi_source/simple.result
@@ -19,8 +19,8 @@ connection master2;
connection slave;
show all slaves status;
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
-slave1 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave1.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 1 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 7 0 60.000
-slave2 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 7 0 60.000
+slave1 Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave1.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 1 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 7 0 60.000
+slave2 Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 7 0 60.000
start all slaves;
stop slave 'slave1';
show slave 'slave1' status;
@@ -81,11 +81,11 @@ reset slave 'slave1';
show all slaves status;
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
slave1 127.0.0.1 root MYPORT_1 60 4 <relay_log_pos> No No 0 0 0 <relay_log_space1> None 0 No NULL No 0 0 1 No optimistic 0 NULL 0 0 0 0 1073741824 7 0 60.000
-slave2 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 7 0 60.000
+slave2 Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 7 0 60.000
reset slave 'slave1' all;
show all slaves status;
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
-slave2 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for the slave I/O thread to update it 0 0 0 0 1073741824 7 0 60.000
+slave2 Slave has read all relay log; waiting for more updates Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-slave2.000002 <relay_log_pos> master-bin.000001 Yes Yes 0 0 <read_master_log_pos> <relay_log_space1> None 0 No 0 No 0 0 2 No optimistic 0 NULL Slave has read all relay log; waiting for more updates 0 0 0 0 1073741824 7 0 60.000
stop all slaves;
Warnings:
Note 1938 SLAVE 'slave2' stopped
diff --git a/mysql-test/suite/perfschema/disabled.def b/mysql-test/suite/perfschema/disabled.def
index 321cd7dcd16..9c36708729a 100644
--- a/mysql-test/suite/perfschema/disabled.def
+++ b/mysql-test/suite/perfschema/disabled.def
@@ -24,3 +24,34 @@ binlog_ok_row: needs slave_relay_log_info
binlog_ok_stmt: needs slave_relay_log_info
server_init : Nirbhay TODO: Fix the test
+show_sanity:
+threads_mysql_freebsd:
+
+transaction_gtid: needs to be updated for MariaDB gtids
+
+ddl_replication_applier_status_by_worker: todo
+ddl_replication_connection_status: todo
+dml_replication_applier_status_by_worker: todo
+dml_replication_connection_status: todo
+
+dml_replication_group_member_stats: todo?
+ddl_replication_group_member_stats: todo?
+ddl_replication_group_members: todo?
+dml_replication_group_members: todo?
+replication_group_members: todo?
+replication_group_member_stats: todo?
+rpl_group_member_stats: todo?
+rpl_group_members: todo?
+
+ddl_session_variables: todo
+ddl_global_variables: todo
+ddl_variables_by_thread: todo
+dml_global_variables: todo
+dml_session_variables: todo
+dml_variables_by_thread: todo
+variables_by_thread: todo
+show_coverage: todo
+show_misc: todo
+show_plugin: todo
+
+status_reprepare:why P_S filters out Com_* variables?
diff --git a/mysql-test/suite/perfschema/include/binlog_edge_common.inc b/mysql-test/suite/perfschema/include/binlog_edge_common.inc
index 8092c9a5427..6ecd50afe08 100644
--- a/mysql-test/suite/perfschema/include/binlog_edge_common.inc
+++ b/mysql-test/suite/perfschema/include/binlog_edge_common.inc
@@ -148,7 +148,7 @@ drop table if exists marker_multi_delete;
use my_replicated_db;
insert into performance_schema.setup_actors
- values ('FOO', 'FOO', 'FOO');
+ values ('FOO', 'FOO', 'FOO', 'YES', 'YES');
--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
delete my_tx_table.*, performance_schema.setup_actors.*
@@ -157,7 +157,7 @@ delete my_tx_table.*, performance_schema.setup_actors.*
or performance_schema.setup_actors.role='FOO';
insert into performance_schema.setup_actors
- values ('BAR', 'BAR', 'BAR');
+ values ('BAR', 'BAR', 'BAR', 'YES', 'YES');
--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
delete my_non_tx_table.*, performance_schema.setup_actors.*
@@ -166,7 +166,7 @@ delete my_non_tx_table.*, performance_schema.setup_actors.*
or performance_schema.setup_actors.role='BAR';
insert into performance_schema.setup_actors
- values ('BAZ', 'BAZ', 'BAZ');
+ values ('BAZ', 'BAZ', 'BAZ', 'YES', 'YES');
--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
delete my_bh_table.*, performance_schema.setup_actors.*
@@ -184,5 +184,5 @@ drop database my_replicated_db;
# Restore performance_schema.setup_actors, damaged by this script
truncate table performance_schema.setup_actors;
-insert into performance_schema.setup_actors values ('%', '%', '%');
+insert into performance_schema.setup_actors values ('%', '%', '%', 'YES', 'YES');
diff --git a/mysql-test/suite/perfschema/include/event_aggregate_cleanup.inc b/mysql-test/suite/perfschema/include/event_aggregate_cleanup.inc
index c50394f748b..2cb8a69e4d6 100644
--- a/mysql-test/suite/perfschema/include/event_aggregate_cleanup.inc
+++ b/mysql-test/suite/perfschema/include/event_aggregate_cleanup.inc
@@ -36,6 +36,12 @@ drop prepare dump_statements_host;
drop prepare dump_statements_history;
drop prepare dump_statements_global;
+drop prepare dump_transactions_account;
+drop prepare dump_transactions_user;
+drop prepare dump_transactions_host;
+drop prepare dump_transactions_history;
+drop prepare dump_transactions_global;
+
drop prepare dump_users;
drop prepare dump_hosts;
drop prepare dump_accounts;
@@ -49,6 +55,7 @@ insert into performance_schema.setup_actors
select * from test.setup_actors;
drop table test.setup_actors;
drop table test.t1;
+drop function test.f;
update performance_schema.threads set instrumented='YES';
update performance_schema.setup_instruments set enabled='YES', timed='YES';
diff --git a/mysql-test/suite/perfschema/include/event_aggregate_load.inc b/mysql-test/suite/perfschema/include/event_aggregate_load.inc
index 6e632b98c62..b27a3113318 100644
--- a/mysql-test/suite/perfschema/include/event_aggregate_load.inc
+++ b/mysql-test/suite/perfschema/include/event_aggregate_load.inc
@@ -21,6 +21,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -30,7 +35,7 @@ execute dump_hosts;
# The main thread does not count for BY_ACCOUNT / BY_HOST.
# The user thread does count for BY_ACCOUNT, BY_HOST
#
-# Each get_lock() causes 1 wait/synch/mutex/sql/LOCK_user_locks
+# Each uuid_short() causes 1 wait/synch/mutex/sql/LOCK_uuid_generator
#
# To avoid noise from main, the background threads are disabled.
@@ -61,15 +66,23 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
--connection con1
-select get_lock("marker", 10);
-select release_lock("marker");
+select uuid_short() <> 1;
+select uuid_short() <> 1;
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
--connection default
@@ -96,6 +109,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -131,15 +149,23 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
--connection con2
-select get_lock("marker", 10);
-select release_lock("marker");
+select uuid_short() <> 1;
+select uuid_short() <> 1;
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
--connection default
@@ -166,6 +192,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -197,15 +228,23 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
--connection con3
-select get_lock("marker", 10);
-select release_lock("marker");
+select uuid_short() <> 1;
+select uuid_short() <> 1;
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
--connection default
@@ -232,6 +271,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -263,15 +307,23 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
--connection con4
-select get_lock("marker", 10);
-select release_lock("marker");
+select uuid_short() <> 1;
+select uuid_short() <> 1;
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
--connection default
@@ -298,6 +350,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -329,6 +386,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -360,6 +422,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -391,6 +458,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -422,6 +494,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -449,6 +526,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -474,6 +556,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -499,6 +586,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -524,6 +616,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -549,6 +646,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -574,6 +676,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -599,6 +706,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -624,6 +736,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -649,6 +766,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -674,6 +796,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -699,6 +826,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -724,6 +856,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -749,6 +886,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -774,6 +916,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -799,6 +946,161 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+
+echo "================== TRANSACTIONS_BY_THREAD truncated ==================";
+
+echo "================== Step 29 ==================";
+call dump_thread();
+execute dump_waits_account;
+execute dump_waits_user;
+execute dump_waits_host;
+execute dump_waits_global;
+execute dump_waits_history;
+execute dump_stages_account;
+execute dump_stages_user;
+execute dump_stages_host;
+execute dump_stages_global;
+execute dump_stages_history;
+execute dump_statements_account;
+execute dump_statements_user;
+execute dump_statements_host;
+execute dump_statements_global;
+execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+
+echo "================== TRANSACTIONS_BY_ACCOUNT truncated ==================";
+
+echo "================== Step 30 ==================";
+call dump_thread();
+execute dump_waits_account;
+execute dump_waits_user;
+execute dump_waits_host;
+execute dump_waits_global;
+execute dump_waits_history;
+execute dump_stages_account;
+execute dump_stages_user;
+execute dump_stages_host;
+execute dump_stages_global;
+execute dump_stages_history;
+execute dump_statements_account;
+execute dump_statements_user;
+execute dump_statements_host;
+execute dump_statements_global;
+execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+
+echo "================== TRANSACTIONS_BY_USER truncated ==================";
+
+echo "================== Step 31 ==================";
+call dump_thread();
+execute dump_waits_account;
+execute dump_waits_user;
+execute dump_waits_host;
+execute dump_waits_global;
+execute dump_waits_history;
+execute dump_stages_account;
+execute dump_stages_user;
+execute dump_stages_host;
+execute dump_stages_global;
+execute dump_stages_history;
+execute dump_statements_account;
+execute dump_statements_user;
+execute dump_statements_host;
+execute dump_statements_global;
+execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+
+echo "================== TRANSACTIONS_BY_HOST truncated ==================";
+
+echo "================== Step 32 ==================";
+call dump_thread();
+execute dump_waits_account;
+execute dump_waits_user;
+execute dump_waits_host;
+execute dump_waits_global;
+execute dump_waits_history;
+execute dump_stages_account;
+execute dump_stages_user;
+execute dump_stages_host;
+execute dump_stages_global;
+execute dump_stages_history;
+execute dump_statements_account;
+execute dump_statements_user;
+execute dump_statements_host;
+execute dump_statements_global;
+execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+
+echo "================== TRANSACTIONS_GLOBAL truncated ==================";
+
+echo "================== Step 33 ==================";
+call dump_thread();
+execute dump_waits_account;
+execute dump_waits_user;
+execute dump_waits_host;
+execute dump_waits_global;
+execute dump_waits_history;
+execute dump_stages_account;
+execute dump_stages_user;
+execute dump_stages_host;
+execute dump_stages_global;
+execute dump_stages_history;
+execute dump_statements_account;
+execute dump_statements_user;
+execute dump_statements_host;
+execute dump_statements_global;
+execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -807,7 +1109,7 @@ truncate performance_schema.accounts;
echo "================== ACCOUNTS truncated ==================";
-echo "================== Step 29 ==================";
+echo "================== Step 34 ==================";
call dump_thread();
execute dump_waits_account;
execute dump_waits_user;
@@ -824,6 +1126,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -832,7 +1139,7 @@ truncate performance_schema.users;
echo "================== USERS truncated ==================";
-echo "================== Step 30 ==================";
+echo "================== Step 35 ==================";
call dump_thread();
execute dump_waits_account;
execute dump_waits_user;
@@ -849,6 +1156,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
@@ -857,7 +1169,7 @@ truncate performance_schema.hosts;
echo "================== HOSTS truncated ==================";
-echo "================== Step 31 ==================";
+echo "================== Step 36 ==================";
call dump_thread();
execute dump_waits_account;
execute dump_waits_user;
@@ -874,6 +1186,11 @@ execute dump_statements_user;
execute dump_statements_host;
execute dump_statements_global;
execute dump_statements_history;
+execute dump_transactions_account;
+execute dump_transactions_user;
+execute dump_transactions_host;
+execute dump_transactions_global;
+execute dump_transactions_history;
execute dump_accounts;
execute dump_users;
execute dump_hosts;
diff --git a/mysql-test/suite/perfschema/include/event_aggregate_setup.inc b/mysql-test/suite/perfschema/include/event_aggregate_setup.inc
index 59431e31682..03f88e97eef 100644
--- a/mysql-test/suite/perfschema/include/event_aggregate_setup.inc
+++ b/mysql-test/suite/perfschema/include/event_aggregate_setup.inc
@@ -19,11 +19,16 @@
# - events_statements_summary_by_account_by_event_name
# - events_statements_summary_by_user_by_event_name
# - events_statements_summary_by_host_by_event_name
+# - events_transactions_summary_by_thread_by_event_name
+# - events_transactions_summary_by_account_by_event_name
+# - events_transactions_summary_by_user_by_event_name
+# - events_transactions_summary_by_host_by_event_name
#
# Globally:
# - events_waits_summary_global_by_event_name
# - events_stages_summary_global_by_event_name
# - events_statements_summary_global_by_event_name
+# - events_transactions_summary_global_by_event_name
#
# The tests are written with the following helpers:
# - include/event_aggregate_setup.inc
@@ -90,6 +95,8 @@ drop table if exists test.t1;
--enable_warnings
create table test.t1(a varchar(64));
+create function test.f(a int, b int) returns int
+return a+b;
create table test.setup_actors as
select * from performance_schema.setup_actors;
@@ -111,14 +118,16 @@ update performance_schema.threads set instrumented='NO';
update performance_schema.setup_instruments set enabled='NO', timed='NO';
update performance_schema.setup_instruments set enabled='YES', timed='YES'
- where name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ where name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log',
'idle');
update performance_schema.setup_instruments set enabled='YES', timed='YES'
- where name in ('stage/sql/Init', 'stage/sql/Init for update',
- 'stage/sql/Checking permissions',
+ where name in ('stage/sql/starting',
+ 'stage/sql/init',
+ 'stage/sql/checking permissions',
'stage/sql/Opening tables',
'stage/sql/Closing tables');
@@ -128,7 +137,11 @@ update performance_schema.setup_instruments set enabled='YES', timed='YES'
'statement/abstract/new_packet',
'statement/abstract/Query',
'statement/com/Quit',
- 'statement/com/error');
+ 'statement/com/error',
+ 'statement/sp/freturn');
+
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name in ('transaction');
# Start from a known clean state, to avoid noise from previous tests
flush tables;
@@ -154,6 +167,13 @@ truncate performance_schema.events_statements_summary_by_host_by_event_name;
truncate performance_schema.events_statements_summary_global_by_event_name;
truncate performance_schema.events_statements_history_long;
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+truncate performance_schema.events_transactions_history_long;
+
--disable_warnings
drop procedure if exists dump_thread;
drop procedure if exists dump_one_thread;
@@ -180,7 +200,8 @@ begin
if (my_thread_id is not null) then
select username, event_name, count_star
from performance_schema.events_waits_summary_by_thread_by_event_name
- where event_name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ where event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log')
and thread_id = my_thread_id
@@ -197,7 +218,8 @@ prepare dump_waits_account from
"select user, host, event_name, count_star
from performance_schema.events_waits_summary_by_account_by_event_name
where user like \'user%\'
- and event_name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ and event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log')
order by user, host, event_name;";
@@ -206,7 +228,8 @@ prepare dump_waits_user from
"select user, event_name, count_star
from performance_schema.events_waits_summary_by_user_by_event_name
where user like \'user%\'
- and event_name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ and event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log')
order by user, event_name;";
@@ -215,7 +238,8 @@ prepare dump_waits_host from
"select host, event_name, count_star
from performance_schema.events_waits_summary_by_host_by_event_name
where host=\'localhost\'
- and event_name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ and event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log')
order by host, event_name;";
@@ -223,7 +247,8 @@ prepare dump_waits_host from
prepare dump_waits_global from
"select event_name, count_star
from performance_schema.events_waits_summary_global_by_event_name
- where event_name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ where event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log')
order by event_name;";
@@ -231,7 +256,8 @@ prepare dump_waits_global from
prepare dump_waits_history from
"select event_name, count(event_name)
from performance_schema.events_waits_history_long
- where event_name in ('wait/synch/mutex/sql/LOCK_user_locks',
+ where event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
+ 'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/rwlock/sql/LOCK_grant',
'wait/io/file/sql/query_log')
group by event_name order by event_name;";
@@ -240,7 +266,8 @@ prepare dump_stages_account from
"select user, host, event_name, count_star
from performance_schema.events_stages_summary_by_account_by_event_name
where user like \'user%\'
- and event_name in ('stage/sql/init', 'stage/sql/Init for update',
+ and event_name in ('stage/sql/starting',
+ 'stage/sql/init',
'stage/sql/checking permissions',
'stage/sql/Opening tables',
'stage/sql/closing tables')
@@ -250,7 +277,8 @@ prepare dump_stages_user from
"select user, event_name, count_star
from performance_schema.events_stages_summary_by_user_by_event_name
where user like \'user%\'
- and event_name in ('stage/sql/init', 'stage/sql/Init for update',
+ and event_name in ('stage/sql/starting',
+ 'stage/sql/init',
'stage/sql/checking permissions',
'stage/sql/Opening tables',
'stage/sql/closing tables')
@@ -260,7 +288,8 @@ prepare dump_stages_host from
"select host, event_name, count_star
from performance_schema.events_stages_summary_by_host_by_event_name
where host=\'localhost\'
- and event_name in ('stage/sql/init', 'stage/sql/Init for update',
+ and event_name in ('stage/sql/starting',
+ 'stage/sql/init',
'stage/sql/checking permissions',
'stage/sql/Opening tables',
'stage/sql/closing tables')
@@ -269,7 +298,8 @@ prepare dump_stages_host from
prepare dump_stages_global from
"select event_name, count_star
from performance_schema.events_stages_summary_global_by_event_name
- where event_name in ('stage/sql/init', 'stage/sql/Init for update',
+ where event_name in ('stage/sql/starting',
+ 'stage/sql/init',
'stage/sql/checking permissions',
'stage/sql/Opening tables',
'stage/sql/closing tables')
@@ -278,7 +308,8 @@ prepare dump_stages_global from
prepare dump_stages_history from
"select event_name, count(event_name)
from performance_schema.events_stages_history_long
- where event_name in ('stage/sql/init', 'stage/sql/Init for update',
+ where event_name in ('stage/sql/starting',
+ 'stage/sql/init',
'stage/sql/checking permissions',
'stage/sql/Opening tables',
'stage/sql/closing tables')
@@ -291,7 +322,8 @@ prepare dump_statements_account from
and event_name in ('statement/sql/select',
'statement/sql/insert',
'statement/com/Quit',
- 'statement/com/error')
+ 'statement/com/error',
+ 'statement/sp/freturn')
order by user, host, event_name;";
prepare dump_statements_user from
@@ -301,7 +333,8 @@ prepare dump_statements_user from
and event_name in ('statement/sql/select',
'statement/sql/insert',
'statement/com/Quit',
- 'statement/com/error')
+ 'statement/com/error',
+ 'statement/sp/freturn')
order by user, event_name;";
prepare dump_statements_host from
@@ -311,7 +344,8 @@ prepare dump_statements_host from
and event_name in ('statement/sql/select',
'statement/sql/insert',
'statement/com/Quit',
- 'statement/com/error')
+ 'statement/com/error',
+ 'statement/sp/freturn')
order by host, event_name;";
prepare dump_statements_global from
@@ -320,7 +354,8 @@ prepare dump_statements_global from
where event_name in ('statement/sql/select',
'statement/sql/insert',
'statement/com/Quit',
- 'statement/com/error')
+ 'statement/com/error',
+ 'statement/sp/freturn')
order by event_name;";
prepare dump_statements_history from
@@ -329,7 +364,41 @@ prepare dump_statements_history from
where event_name in ('statement/sql/select',
'statement/sql/insert',
'statement/com/Quit',
- 'statement/com/error')
+ 'statement/com/error',
+ 'statement/sp/freturn')
+ group by event_name order by event_name;";
+
+prepare dump_transactions_account from
+ "select user, host, event_name, count_star
+ from performance_schema.events_transactions_summary_by_account_by_event_name
+ where user like \'user%\'
+ and event_name in ('transaction')
+ order by user, host, event_name;";
+
+prepare dump_transactions_user from
+ "select user, event_name, count_star
+ from performance_schema.events_transactions_summary_by_user_by_event_name
+ where user like \'user%\'
+ and event_name in ('transaction')
+ order by user, event_name;";
+
+prepare dump_transactions_host from
+ "select host, event_name, count_star
+ from performance_schema.events_transactions_summary_by_host_by_event_name
+ where host=\'localhost\'
+ and event_name in ('transaction')
+ order by host, event_name;";
+
+prepare dump_transactions_global from
+ "select event_name, count_star
+ from performance_schema.events_transactions_summary_global_by_event_name
+ where event_name in ('transaction')
+ order by event_name;";
+
+prepare dump_transactions_history from
+ "select event_name, count(event_name)
+ from performance_schema.events_transactions_history_long
+ where event_name in ('transaction')
group by event_name order by event_name;";
prepare dump_users from
diff --git a/mysql-test/suite/perfschema/include/memory_aggregate_cleanup.inc b/mysql-test/suite/perfschema/include/memory_aggregate_cleanup.inc
new file mode 100644
index 00000000000..1e2cfa99e5c
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/memory_aggregate_cleanup.inc
@@ -0,0 +1,45 @@
+# Tests for the performance schema
+
+# ===========================================
+# HELPER include/memory_aggregate_cleanup.inc
+# ===========================================
+
+--disable_query_log
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+revoke all privileges, grant option from user3@localhost;
+revoke all privileges, grant option from user4@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+drop user user3@localhost;
+drop user user4@localhost;
+flush privileges;
+
+drop procedure dump_thread;
+drop procedure dump_one_thread;
+
+drop prepare dump_memory_account;
+drop prepare dump_memory_user;
+drop prepare dump_memory_host;
+drop prepare dump_memory_global;
+
+drop prepare dump_users;
+drop prepare dump_hosts;
+drop prepare dump_accounts;
+
+truncate table performance_schema.accounts;
+truncate table performance_schema.users;
+truncate table performance_schema.hosts;
+
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+ select * from test.setup_actors;
+drop table test.setup_actors;
+
+set global query_cache_size=0;
+
+update performance_schema.threads set instrumented='YES';
+update performance_schema.setup_instruments set enabled='YES', timed='YES';
+
+--enable_query_log
+
diff --git a/mysql-test/suite/perfschema/include/memory_aggregate_load.inc b/mysql-test/suite/perfschema/include/memory_aggregate_load.inc
new file mode 100644
index 00000000000..7a54d25216e
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/memory_aggregate_load.inc
@@ -0,0 +1,506 @@
+# Tests for the performance schema
+
+# ========================================
+# HELPER include/memory_aggregate_load.inc
+# ========================================
+
+echo "================== Step 1 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+# Notes about this test
+#
+# get_lock("marker") causes the following memory allocation:
+# memory/sql/User_level_lock, 1 malloc, size 16 (size 8 for 32-bit systems).
+# release_lock("marker") causes the following memory free:
+# memory/sql/User_level_lock, 1 free, size 16 (size 8 for 32-bit systems).
+#
+# To avoid noise from main, the background threads are disabled.
+
+connect (con1, localhost, user1, , );
+
+echo "================== con1 connected ==================";
+
+--connection default
+
+# Wait for the connect to complete
+let $wait_condition=
+ select count(*) = 1 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user1';
+--source include/wait_condition.inc
+
+echo "================== Step 2 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--connection con1
+
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+select release_lock("marker_1");
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+
+echo "================== con1 marker ==================";
+
+--connection default
+
+# Wait for the payload to complete
+let $wait_condition=
+ select count(*) = 1 from performance_schema.events_waits_current
+ where EVENT_NAME= 'idle';
+--source include/wait_condition.inc
+
+echo "================== Step 3 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+# Debugging helpers
+# select * from performance_schema.events_waits_history_long;
+# select PROCESSLIST_USER, PROCESSLIST_HOST, INSTRUMENTED from performance_schema.threads;
+
+connect (con2, localhost, user2, , );
+
+echo "================== con2 connected ==================";
+
+--connection default
+
+# Wait for the connect to complete
+let $wait_condition=
+ select count(*) = 1 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user2';
+--source include/wait_condition.inc
+
+echo "================== Step 4 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--connection con2
+
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+select release_lock("marker_2");
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+
+echo "================== con2 marker ==================";
+
+--connection default
+
+# Wait for the payload to complete
+let $wait_condition=
+ select count(*) = 2 from performance_schema.events_waits_current
+ where EVENT_NAME= 'idle';
+--source include/wait_condition.inc
+
+echo "================== Step 5 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+
+echo "================== MEMORY_BY_THREAD truncated ==================";
+
+echo "================== Step 5b ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+connect (con3, localhost, user3, , );
+
+echo "================== con3 connected ==================";
+
+--connection default
+
+# Wait for the connect to complete
+let $wait_condition=
+ select count(*) = 1 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user3';
+--source include/wait_condition.inc
+
+echo "================== Step 6 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--connection con3
+
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+select release_lock("marker_3");
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+
+echo "================== con3 marker ==================";
+
+--connection default
+
+# Wait for the payload to complete
+let $wait_condition=
+ select count(*) = 3 from performance_schema.events_waits_current
+ where EVENT_NAME= 'idle';
+--source include/wait_condition.inc
+
+echo "================== Step 7 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+connect (con4, localhost, user4, , );
+connect (con5, localhost, user4, , );
+
+echo "================== con4/con5 (both user4) connected ==================";
+
+--connection default
+
+# Wait for the connects to complete
+let $wait_condition=
+ select count(*) = 2 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user4';
+--source include/wait_condition.inc
+
+echo "================== Step 8 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--connection con4
+
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+select release_lock("marker_4");
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+
+--connection con5
+select get_lock("marker_5", 10);
+select release_lock("marker_5");
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+
+echo "================== con4/con5 marker ==================";
+
+--connection default
+
+# Wait for the payload to complete
+let $wait_condition=
+ select count(*) = 5 from performance_schema.events_waits_current
+ where EVENT_NAME= 'idle';
+--source include/wait_condition.inc
+
+echo "================== Step 9 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--disconnect con1
+--disconnect con5
+
+--connection default
+
+# Wait for the disconnects to complete
+let $wait_condition=
+ select count(*) = 0 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user1';
+--source include/wait_condition.inc
+let $wait_condition=
+ select count(*) = 1 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user4';
+--source include/wait_condition.inc
+
+echo "================== con1/con5 disconnected ==================";
+
+echo "================== Step 10 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--disconnect con2
+
+--connection default
+
+# Wait for the disconnect to complete
+let $wait_condition=
+ select count(*) = 0 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user2';
+--source include/wait_condition.inc
+
+echo "================== con2 disconnected ==================";
+
+echo "================== Step 11 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--disconnect con3
+
+--connection default
+
+# Wait for the disconnect to complete
+let $wait_condition=
+ select count(*) = 0 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user3';
+--source include/wait_condition.inc
+
+echo "================== con3 disconnected ==================";
+
+echo "================== Step 12 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--disconnect con4
+
+--connection default
+
+# Wait for the disconnect to complete
+let $wait_condition=
+ select count(*) = 0 from performance_schema.threads
+ where `TYPE`='FOREGROUND' and PROCESSLIST_USER= 'user4';
+--source include/wait_condition.inc
+
+echo "================== con4 disconnected ==================";
+
+echo "================== Step 13 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+--connection default
+
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+
+echo "================== MEMORY_BY_THREAD truncated ==================";
+
+echo "================== Step 14 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.memory_summary_by_account_by_event_name;
+
+echo "================== MEMORY_BY_ACCOUNT truncated ==================";
+
+echo "================== Step 15 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.memory_summary_by_user_by_event_name;
+
+echo "================== MEMORY_BY_USER truncated ==================";
+
+echo "================== Step 16 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.memory_summary_by_host_by_event_name;
+
+echo "================== MEMORY_BY_HOST truncated ==================";
+
+echo "================== Step 17 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.memory_summary_global_by_event_name;
+
+echo "================== MEMORY_GLOBAL truncated ==================";
+
+echo "================== Step 18 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.accounts;
+
+echo "================== ACCOUNTS truncated ==================";
+
+echo "================== Step 19 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.users;
+
+echo "================== USERS truncated ==================";
+
+echo "================== Step 20 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
+truncate performance_schema.hosts;
+
+echo "================== HOSTS truncated ==================";
+
+echo "================== Step 21 ==================";
+--vertical_results
+call dump_thread();
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+--horizontal_results
+execute dump_accounts;
+execute dump_users;
+execute dump_hosts;
+
diff --git a/mysql-test/suite/perfschema/include/memory_aggregate_setup.inc b/mysql-test/suite/perfschema/include/memory_aggregate_setup.inc
new file mode 100644
index 00000000000..1272c0921e7
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/memory_aggregate_setup.inc
@@ -0,0 +1,208 @@
+# Tests for the performance schema
+
+# =============
+# DOCUMENTATION
+# =============
+
+# Verify how memory stats are aggregated into various tables
+#
+# In the thread dimension:
+# - memory_summary_by_thread_by_event_name
+# - memory_summary_by_account_by_event_name
+# - memory_summary_by_user_by_event_name
+# - memory_summary_by_host_by_event_name
+#
+# Globally:
+# - memory_summary_global_by_event_name
+#
+# The tests are written with the following helpers:
+# - include/memory_aggregate_setup.inc
+# - include/memory_aggregate_load.inc
+# - include/memory_aggregate_cleanup.inc
+#
+# Helpers are intended to be used as follows.
+#
+# A Typical test t/memory_aggregate_xxx.test will consist of:
+# --source ../include/memory_aggregate_setup.inc
+# --source ../include/memory_aggregate_load.inc
+# --source ../include/memory_aggregate_cleanup.inc
+# and a t/memory_aggregate_xxx-master.opt file
+#
+# Naming conventions for t/memory_aggregate_xxx.test are as follows:
+# t/memory_aggregate_<account><user><host>
+#
+# <account> corresponds to different sizing settings for
+# the variable performance-schema-accounts-size
+# - (blank): accounts-size sufficient to represent all records
+# - no_a: accounts-size set to 0
+#
+# <user> corresponds to different sizing settings for
+# the variable performance-schema-users-size
+# - (blank): users-size sufficient to represent all records
+# - no_u: users-size set to 0
+#
+# <host> corresponds to different sizing settings for
+# the variable performance-schema-hosts-size
+# - (blank): hosts-size sufficient to represent all records
+# - no_h: hosts-size set to 0
+
+# =========================================
+# HELPER include/memory_aggregate_setup.inc
+# =========================================
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+--source ../include/wait_for_pfs_thread_count.inc
+--source include/not_windows.inc
+
+--disable_query_log
+
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+grant ALL on *.* to user3@localhost;
+grant ALL on *.* to user4@localhost;
+set sql_mode= @orig_sql_mode;
+
+flush privileges;
+
+# Purge old users, hosts, user/host from previous tests
+truncate table performance_schema.accounts;
+truncate table performance_schema.users;
+truncate table performance_schema.hosts;
+
+# Save the setup
+
+--disable_warnings
+drop table if exists test.setup_actors;
+--enable_warnings
+
+create table test.setup_actors as
+ select * from performance_schema.setup_actors;
+
+# Only instrument the user connections
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+ set host= 'localhost', user= 'user1', role= '%';
+insert into performance_schema.setup_actors
+ set host= 'localhost', user= 'user2', role= '%';
+insert into performance_schema.setup_actors
+ set host= 'localhost', user= 'user3', role= '%';
+insert into performance_schema.setup_actors
+ set host= 'localhost', user= 'user4', role= '%';
+
+update performance_schema.threads set instrumented='NO';
+
+# Only instrument a few events of each kind
+update performance_schema.setup_instruments set enabled='NO', timed='NO';
+
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name in ('memory/sql/user_var_entry::value',
+ 'memory/sql/User_level_lock',
+ 'memory/sql/Query_cache',
+ 'idle');
+
+# Start from a known clean state, to avoid noise from previous tests
+flush tables;
+flush status;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+truncate performance_schema.memory_summary_by_account_by_event_name;
+truncate performance_schema.memory_summary_by_user_by_event_name;
+truncate performance_schema.memory_summary_by_host_by_event_name;
+truncate performance_schema.memory_summary_global_by_event_name;
+
+--disable_warnings
+drop procedure if exists dump_thread;
+drop procedure if exists dump_one_thread;
+--enable_warnings
+
+delimiter $$;
+
+create procedure dump_thread()
+begin
+ call dump_one_thread('user1');
+ call dump_one_thread('user2');
+ call dump_one_thread('user3');
+ call dump_one_thread('user4');
+end
+$$
+
+create procedure dump_one_thread(in username varchar(64))
+begin
+ declare my_thread_id int;
+
+ set my_thread_id = (select thread_id from performance_schema.threads
+ where processlist_user=username LIMIT 1);
+
+ if (my_thread_id is not null) then
+ select username,
+ EVENT_NAME, COUNT_ALLOC, COUNT_FREE,
+ SUM_NUMBER_OF_BYTES_ALLOC, SUM_NUMBER_OF_BYTES_FREE,
+ LOW_COUNT_USED, CURRENT_COUNT_USED, HIGH_COUNT_USED,
+ LOW_NUMBER_OF_BYTES_USED, CURRENT_NUMBER_OF_BYTES_USED, HIGH_NUMBER_OF_BYTES_USED
+ from performance_schema.memory_summary_by_thread_by_event_name
+ where event_name in ('memory/sql/user_var_entry::value',
+ 'memory/sql/User_level_lock',
+ 'memory/sql/Query_cache')
+ and thread_id = my_thread_id
+ order by event_name;
+ else
+ select username, "not found" as status;
+ end if;
+end
+$$
+
+delimiter ;$$
+
+prepare dump_memory_account from
+ "select *
+ from performance_schema.memory_summary_by_account_by_event_name
+ where user like \'user%\'
+ and event_name in ('memory/sql/user_var_entry::value',
+ 'memory/sql/User_level_lock',
+ 'memory/sql/Query_cache')
+ order by user, host, event_name;";
+
+prepare dump_memory_user from
+ "select *
+ from performance_schema.memory_summary_by_user_by_event_name
+ where user like \'user%\'
+ and event_name in ('memory/sql/user_var_entry::value',
+ 'memory/sql/User_level_lock',
+ 'memory/sql/Query_cache')
+ order by user, event_name;";
+
+prepare dump_memory_host from
+ "select *
+ from performance_schema.memory_summary_by_host_by_event_name
+ where host=\'localhost\'
+ and event_name in ('memory/sql/user_var_entry::value',
+ 'memory/sql/User_level_lock',
+ 'memory/sql/Query_cache')
+ order by host, event_name;";
+
+prepare dump_memory_global from
+ "select *
+ from performance_schema.memory_summary_global_by_event_name
+ where event_name in ('memory/sql/user_var_entry::value',
+ 'memory/sql/User_level_lock',
+ 'memory/sql/Query_cache')
+ order by event_name;";
+
+prepare dump_users from
+ "select * from performance_schema.users where user is not null order by user;";
+
+prepare dump_hosts from
+ "select * from performance_schema.hosts where host is not null order by host;";
+
+prepare dump_accounts from
+ "select * from performance_schema.accounts where (user is not null) and (host is not null) order by user, host;";
+
+--enable_query_log
+
+# Make sure all the instrumentation is present
+show global status like "performance_schema_memory_classes_lost";
+
+
diff --git a/mysql-test/suite/perfschema/include/prepared_stmts_deallocation.inc b/mysql-test/suite/perfschema/include/prepared_stmts_deallocation.inc
new file mode 100644
index 00000000000..1601c027984
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/prepared_stmts_deallocation.inc
@@ -0,0 +1,11 @@
+#
+# Deallocates all the prepared statements
+# created in prepares_stmts_setup.inc
+#
+
+DEALLOCATE PREPARE st1;
+DEALLOCATE PREPARE st2;
+DEALLOCATE PREPARE st3;
+DEALLOCATE PREPARE st4;
+
+DROP TABLE t1;
diff --git a/mysql-test/suite/perfschema/include/prepared_stmts_execution.inc b/mysql-test/suite/perfschema/include/prepared_stmts_execution.inc
new file mode 100644
index 00000000000..dbb0696f67c
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/prepared_stmts_execution.inc
@@ -0,0 +1,18 @@
+#
+# Execution of all the prepared statements created in
+# prepared_statements_setup.inc.
+#
+
+SET @a = 3;
+SET @b = 4;
+EXECUTE st1 USING @a, @b;
+
+#SET @table = 't1';
+EXECUTE st2;
+
+SET @c=3;
+EXECUTE st3 using @c;
+
+EXECUTE st4;
+
+
diff --git a/mysql-test/suite/perfschema/include/prepared_stmts_setup.inc b/mysql-test/suite/perfschema/include/prepared_stmts_setup.inc
new file mode 100644
index 00000000000..0fb14a36698
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/prepared_stmts_setup.inc
@@ -0,0 +1,20 @@
+#
+# Creating various prepared statements.
+# HELPER include/prepared_stmts_setup.inc
+#
+
+CREATE TABLE t1 (a INT NOT NULL);
+INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
+
+# Prepared statments
+
+PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
+
+SET @table = 't1';
+SET @s = CONCAT('SELECT * FROM ', @table);
+PREPARE st2 FROM @s;
+
+PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?';
+
+PREPARE st4 FROM
+ '(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
diff --git a/mysql-test/suite/perfschema/include/program_cleanup.inc b/mysql-test/suite/perfschema/include/program_cleanup.inc
new file mode 100644
index 00000000000..ffcedccd937
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/program_cleanup.inc
@@ -0,0 +1,31 @@
+#
+# clean up of set-up created in
+# suite/perfschema/include/program_setup.inc
+#
+
+--disable_warnings
+DROP PROCEDURE SampleProc1;
+DROP PROCEDURE SampleProc2;
+DROP PROCEDURE SampleProc3;
+DROP PROCEDURE SampleProc4;
+
+DROP FUNCTION wt_avg;
+DROP FUNCTION fac;
+DROP FUNCTION append;
+
+DROP TRIGGER trg1;
+DROP TRIGGER trg2;
+DROP TRIGGER trg3;
+DROP TRIGGER trg4;
+DROP TRIGGER trg5;
+
+DROP EVENT IF EXISTS e1;
+
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+DROP TABLE t4;
+DROP TABLE table_t;
+
+DROP DATABASE stored_programs;
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/include/program_execution.inc b/mysql-test/suite/perfschema/include/program_execution.inc
new file mode 100644
index 00000000000..8c0bc691898
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/program_execution.inc
@@ -0,0 +1,54 @@
+#
+# Execute the stored programs created in
+# suite/perfschema/include/program_setup.inc
+#
+
+--echo #####################
+--echo # Executing queries #
+--echo #####################
+INSERT INTO t1 VALUES (10,20);
+CALL SampleProc1(30,40,50);
+SET @a=1;
+SELECT @a;
+CALL SampleProc2("Jwalamukhi",34);
+SELECT @a;
+CALL SampleProc3();
+CALL SampleProc4();
+SET @change=1;
+SELECT @change;
+UPDATE t2 SET id=22 WHERE name="Jwalamukhi";
+SELECT @change;
+SET @del=1;
+SELECT @del;
+DELETE FROM t1 WHERE i=76;
+SELECT @del;
+SELECT wt_avg(1, 12, 1990, 1121990);
+SELECT fac(5);
+SELECT append("Bolly", "wood");
+
+--echo # Event
+
+SET GLOBAL event_scheduler=ON;
+
+CREATE TABLE table_t(a INT);
+DELIMITER |;
+CREATE EVENT e1 ON SCHEDULE EVERY 2 SECOND DO
+BEGIN
+ INSERT INTO table_t VALUES(1);
+END|
+DELIMITER ;|
+
+# Let e1 insert 1 record into the table table_t
+
+--let $wait_condition= select count(*) = 1 from table_t
+--source include/wait_condition.inc
+SELECT * FROM table_t;
+
+# Wait till the above one execution of event is instrumented.
+
+--let $wait_condition= select count(*) = 1 from performance_schema.events_statements_history_long where object_type='EVENT'
+--source include/wait_condition.inc
+
+SET GLOBAL event_scheduler=OFF;
+--source include/no_running_event_scheduler.inc
+
diff --git a/mysql-test/suite/perfschema/include/program_nested_cleanup.inc b/mysql-test/suite/perfschema/include/program_nested_cleanup.inc
new file mode 100644
index 00000000000..0f5b26f3d1b
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/program_nested_cleanup.inc
@@ -0,0 +1,21 @@
+#
+# clean up if set-up created in
+# suite/perfschema/include/program_nested_setup.inc
+#
+
+DROP PROCEDURE c4;
+DROP PROCEDURE c3;
+DROP PROCEDURE c2;
+DROP PROCEDURE c1;
+DROP PROCEDURE inc;
+DROP PROCEDURE inc2;
+DROP PROCEDURE iotest;
+DROP FUNCTION mul;
+DROP FUNCTION inc;
+DROP FUNCTION fac;
+DROP FUNCTION fun;
+DROP PROCEDURE ifac;
+DROP TRIGGER trg;
+DROP TABLE t1,t2;
+
+DROP DATABASE nested_sp;
diff --git a/mysql-test/suite/perfschema/include/program_nested_execution.inc b/mysql-test/suite/perfschema/include/program_nested_execution.inc
new file mode 100644
index 00000000000..dbf0eafe123
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/program_nested_execution.inc
@@ -0,0 +1,22 @@
+#
+# Execute the nested stored programs created in
+# suite/include/perfschema/program_nested_setup.inc
+#
+
+--echo #####################
+--echo # Executing queries #
+--echo #####################
+
+CALL c1(42);
+SELECT * FROM t1;
+DELETE FROM t1;
+
+CALL iotest("io1", "io2", 1);
+SELECT * FROM t1 ORDER BY data DESC;
+DELETE FROM t1;
+
+SELECT fun(6,10);
+
+INSERT INTO t1 VALUES (20,13);
+
+SELECT * FROM t2;
diff --git a/mysql-test/suite/perfschema/include/program_nested_setup.inc b/mysql-test/suite/perfschema/include/program_nested_setup.inc
new file mode 100644
index 00000000000..1f96fa28f93
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/program_nested_setup.inc
@@ -0,0 +1,88 @@
+#
+# SET-UP - Creation of various nested stored programs
+#
+
+--source include/no_protocol.inc
+--source include/have_innodb.inc
+
+--echo # SET-UP
+CREATE DATABASE nested_sp;
+USE nested_sp;
+
+CREATE TABLE t1(
+ id CHAR(16) NOT NULL DEFAULT '',
+ data INT NOT NULL
+);
+
+CREATE TABLE t2(
+ n INT UNSIGNED NOT NULL,
+ f BIGINT UNSIGNED
+) engine=innodb;
+
+--echo ############################
+--echo # Creating Stored Programs #
+--echo ############################
+DELIMITER |;
+
+# Nested Stored Procedure - 1
+CREATE PROCEDURE c1(x INT)
+ CALL c2("c", x)|
+CREATE PROCEDURE c2(s CHAR(16), x INT)
+ CALL c3(x, s)|
+CREATE PROCEDURE c3(x INT, s CHAR(16))
+ CALL c4("level", x, s)|
+CREATE PROCEDURE c4(l CHAR(8), x INT, s CHAR(16))
+ INSERT INTO t1 VALUES (concat(l,s), x)|
+
+# Nested Stored Procedure - 2
+CREATE PROCEDURE iotest(x1 CHAR(16), x2 CHAR(16), y INT)
+BEGIN
+ CALL inc2(x2, y);
+ INSERT INTO t1 VALUES (x1, y);
+END|
+CREATE PROCEDURE inc2(x CHAR(16), y INT)
+BEGIN
+ CALL inc(y);
+ INSERT INTO t1 VALUES (x, y);
+END|
+CREATE PROCEDURE inc(inout io INT)
+ SET io = io + 1|
+
+# Nested Stored Function
+CREATE FUNCTION mul(x INT, y INT) RETURNS INT
+ RETURN x*y|
+CREATE FUNCTION inc(i INT) RETURNS INT
+ RETURN i+1|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+ DECLARE f BIGINT UNSIGNED DEFAULT 1;
+ WHILE n > 1 DO
+ SET f = f * n;
+ SET n = n - 1;
+ END WHILE;
+ RETURN f;
+END|
+CREATE FUNCTION fun(i INT, u INT UNSIGNED) RETURNS DOUBLE
+ RETURN mul(inc(i), fac(u))|
+#
+# A nested stored program
+#
+CREATE PROCEDURE ifac(n INT UNSIGNED)
+BEGIN
+ DECLARE i BIGINT UNSIGNED DEFAULT 1;
+
+ IF n > 20 THEN
+ SET n = 20; # bigint overflow otherwise
+ END IF;
+ WHILE i <= n DO
+ BEGIN
+ INSERT INTO t2 VALUES (i, fac(i));
+ SET i = i + 1;
+ END;
+ END WHILE;
+END|
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+ CALL ifac(10)|
+
+DELIMITER ;|
+
diff --git a/mysql-test/suite/perfschema/include/program_setup.inc b/mysql-test/suite/perfschema/include/program_setup.inc
new file mode 100644
index 00000000000..a4e7f2451b6
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/program_setup.inc
@@ -0,0 +1,136 @@
+#
+# SET-UP - Creation of various non-nested stored programs
+#
+
+--source include/no_protocol.inc
+--source include/have_innodb.inc
+
+--echo # SET-UP
+
+CREATE DATABASE stored_programs;
+USE stored_programs;
+
+CREATE TABLE t1(
+ i INT NOT NULL,
+ j INT
+) engine=innodb;
+
+CREATE TABLE t2(
+ name CHAR(16) NOT NULL DEFAULT '',
+ id INT NOT NULL
+) engine=innodb;
+
+CREATE TABLE t3(
+ d DATE,
+ n INT,
+ f DOUBLE,
+ s VARCHAR(32)
+);
+
+CREATE TABLE t4(
+ `k` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `word` varchar(100) NOT NULL,
+ `mean` varchar(300) NOT NULL,
+ PRIMARY KEY (`k`)
+);
+
+
+--echo ############################
+--echo # Creating Stored Programs #
+--echo ############################
+
+--echo # Stored Routine ( Procedure & Function )
+
+DELIMITER |;
+CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
+BEGIN
+ INSERT INTO t1 VALUES (x1, y);
+ INSERT INTO t1 VALUES (x2, y);
+END|
+
+CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
+BEGIN
+ DECLARE z1, z2 INT;
+ SET z1 = y;
+ SET z2 = z1+2;
+ INSERT INTO t2 VALUES (x, z2);
+END|
+
+CREATE PROCEDURE SampleProc3()
+BEGIN
+ DECLARE ld DATE;
+ DECLARE li INT;
+ DECLARE lf DOUBLE;
+ DECLARE ls VARCHAR(32);
+
+ SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
+ INSERT INTO t3 VALUES (ld, li, lf, ls);
+
+ INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+ ((li IS NULL), 1, "li is null"),
+ ((li = 0), NULL, "li = 0"),
+ ((lf IS NULL), 1, "lf is null"),
+ ((lf = 0), NULL, "lf = 0"),
+ ((ls IS NULL), 1, "ls is null");
+END|
+
+
+CREATE PROCEDURE SampleProc4()
+BEGIN
+ DECLARE x INT;
+ SET x = 1;
+ WHILE x <= 2 DO
+ INSERT INTO t4(word, mean) VALUES('a','a mean');
+ SET x = x + 1;
+ END WHILE;
+END|
+
+CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
+ RETURN concat(s1, s2)|
+
+CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
+ RETURNS INT
+ DETERMINISTIC
+ BEGIN
+ DECLARE avg INT;
+ SET avg = (n1+n2+n3*2+n4*4)/8;
+ RETURN avg;
+ END|
+
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+ DECLARE f BIGINT UNSIGNED DEFAULT 1;
+ WHILE n > 1 DO
+ SET f = f * n;
+ SET n = n - 1;
+ END WHILE;
+ RETURN f;
+END|
+
+--echo # Triggers
+
+# INSERT triggers
+CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+ if isnull(new.j) then
+ SET new.j:= new.i * 10;
+ END if;
+END|
+
+CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
+BEGIN
+ UPDATE t1 SET i=new.id+i ;
+END|
+
+# UPDATE trigger
+CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
+ SET @change:= @change + new.id - old.id|
+
+# DELETE triggers
+CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
+ SET @del:= @del + 1|
+
+CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
+ SET @del:= @del + 8 + old.j|
+
+DELIMITER ;|
diff --git a/mysql-test/suite/perfschema/include/reset_transaction_gtid.inc b/mysql-test/suite/perfschema/include/reset_transaction_gtid.inc
new file mode 100644
index 00000000000..c8eaf53afe9
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/reset_transaction_gtid.inc
@@ -0,0 +1,20 @@
+# ==== Purpose ====
+#
+# Auxiliary file used by transaction_gtid.test
+#
+# Invoked between transactions in order to reset the state:
+# - set GTID_NEXT to AUTOMATIC since this is required after
+# any transaction that has GTID_NEXT=UUID:NUMBER
+# - RESET MASTER in order to clear @@global.gtid_executed, so
+# that the same GTID can be executed again.
+# - truncate the performance_schema.events_transaction_* tables
+#
+# All this is done on the connection 'server_1'.
+
+--disable_query_log
+--connection server_1
+RESET MASTER;
+TRUNCATE TABLE performance_schema.events_transactions_history;
+TRUNCATE TABLE performance_schema.events_transactions_current;
+--enable_query_log
+--connection default
diff --git a/mysql-test/suite/perfschema/include/schema.inc b/mysql-test/suite/perfschema/include/schema.inc
index f5f23893d37..8a8be180e47 100644
--- a/mysql-test/suite/perfschema/include/schema.inc
+++ b/mysql-test/suite/perfschema/include/schema.inc
@@ -27,6 +27,14 @@ show create table events_statements_summary_by_thread_by_event_name;
show create table events_statements_summary_by_user_by_event_name;
show create table events_statements_summary_by_account_by_event_name;
show create table events_statements_summary_global_by_event_name;
+show create table events_transactions_current;
+show create table events_transactions_history;
+show create table events_transactions_history_long;
+show create table events_transactions_summary_by_host_by_event_name;
+show create table events_transactions_summary_by_thread_by_event_name;
+show create table events_transactions_summary_by_user_by_event_name;
+show create table events_transactions_summary_by_account_by_event_name;
+show create table events_transactions_summary_global_by_event_name;
show create table events_waits_current;
show create table events_waits_history;
show create table events_waits_history_long;
@@ -36,6 +44,12 @@ show create table events_waits_summary_by_thread_by_event_name;
show create table events_waits_summary_by_user_by_event_name;
show create table events_waits_summary_by_account_by_event_name;
show create table events_waits_summary_global_by_event_name;
+show create table memory_summary_by_host_by_event_name;
+show create table memory_summary_by_thread_by_event_name;
+show create table memory_summary_by_user_by_event_name;
+show create table memory_summary_by_account_by_event_name;
+show create table memory_summary_global_by_event_name;
+show create table metadata_locks;
show create table file_instances;
show create table file_summary_by_event_name;
show create table file_summary_by_instance;
@@ -53,6 +67,7 @@ show create table setup_timers;
show create table socket_instances;
show create table socket_summary_by_instance;
show create table socket_summary_by_event_name;
+show create table table_handles;
show create table table_io_waits_summary_by_index_usage;
show create table table_io_waits_summary_by_table;
show create table table_lock_waits_summary_by_table;
diff --git a/mysql-test/suite/perfschema/include/show_aggregate.inc b/mysql-test/suite/perfschema/include/show_aggregate.inc
new file mode 100644
index 00000000000..a637e7b54dd
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/show_aggregate.inc
@@ -0,0 +1,125 @@
+############### suite/perfschema/include/show_aggregate.inc ####################
+# #
+# Gather status by thread, by user, by host, by account and global. #
+# #
+################################################################################
+
+--echo #=================
+--echo # Global results
+--echo #=================
+USE test;
+UPDATE test.status_results sr, performance_schema.global_status sg
+ SET sr.stop = sg.variable_value
+ WHERE sr.variable_name = sg.variable_name
+ AND sg.variable_name IN ('handler_delete', 'handler_rollback');
+--echo
+--echo # Global deltas: END - START.
+UPDATE test.status_results sr
+ SET sr.delta = sr.stop - sr.start;
+
+#--echo DEBUG
+#SELECT * FROM test.status_results;
+#SELECT * from performance_schema.global_status where variable_name in ('handler_delete', 'handler_rollback');
+
+--echo #=================
+--echo # Status by thread
+--echo #=================
+--echo # Thread results from CON1.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+ SET sr.t1 = sbt.variable_value
+ WHERE sr.variable_name = sbt.variable_name
+ AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbt.thread_id = @con1_id;
+--echo
+--echo # Thread results from CON2.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+ SET sr.t2 = sbt.variable_value
+ WHERE sr.variable_name = sbt.variable_name
+ AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbt.thread_id = @con2_id;
+--echo
+--echo # Thread results from CON3.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+ SET sr.t3 = sbt.variable_value
+ WHERE sr.variable_name = sbt.variable_name
+ AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbt.thread_id = @con3_id;
+--echo
+--echo # Thread totals for 3 connections.
+UPDATE test.status_results sr
+ SET sr.thread = sr.t1 + sr.t2 + sr.t3;
+
+--echo #=================
+--echo # Status by user
+--echo #=================
+--echo # User1
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+ SET sr.u1 = sbu.variable_value
+ WHERE sr.variable_name = sbu.variable_name
+ AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbu.user IN ('user1');
+--echo
+--echo # User2
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+ SET sr.u2 = sbu.variable_value
+ WHERE sr.variable_name = sbu.variable_name
+ AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbu.user IN ('user2');
+--echo
+--echo # User3
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+ SET sr.u3 = sbu.variable_value
+ WHERE sr.variable_name = sbu.variable_name
+ AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbu.user IN ('user3');
+--echo
+--echo # Status totals for 3 users.
+UPDATE test.status_results sr
+ SET sr.user = sr.u1 + sr.u2 + sr.u3;
+
+--echo #===========================
+--echo # Status by host (localhost)
+--echo #===========================
+--echo
+--echo # host1 = localhost
+UPDATE test.status_results sr, performance_schema.status_by_host sbh
+ SET sr.h1 = sbh.variable_value
+ WHERE sr.variable_name = sbh.variable_name
+ AND sbh.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sbh.host IN ('localhost');
+--echo
+--echo # Status totals for 'localhost' only.
+UPDATE test.status_results sr
+ SET sr.host = sr.h1 + sr.h2 + sr.h3;
+
+--echo #==================
+--echo # Status by account
+--echo #==================
+--echo # User1@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+ SET sr.a1 = sba.variable_value
+ WHERE sr.variable_name = sba.variable_name
+ AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sba.user IN ('user1');
+--echo
+--echo # User2@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+ SET sr.a2 = sba.variable_value
+ WHERE sr.variable_name = sba.variable_name
+ AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sba.user IN ('user2');
+--echo
+--echo # User3@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+ SET sr.a3 = sba.variable_value
+ WHERE sr.variable_name = sba.variable_name
+ AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+ AND sba.user IN ('user3');
+--echo
+--echo
+--echo # Status totals for 3 accounts.
+UPDATE test.status_results sr
+ SET sr.acct = sr.a1 + sr.a2 + sr.a3;
+
+#--echo DEBUG
+#SELECT * FROM test.status_results;
diff --git a/mysql-test/suite/perfschema/include/show_plugin_verifier.inc b/mysql-test/suite/perfschema/include/show_plugin_verifier.inc
new file mode 100644
index 00000000000..9705a1914c1
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/show_plugin_verifier.inc
@@ -0,0 +1,29 @@
+--disable_warnings
+
+--echo
+SHOW GLOBAL STATUS LIKE "example_%";
+--echo
+SHOW SESSION STATUS LIKE "example_%";
+--echo
+SHOW GLOBAL VARIABLES LIKE "example_%";
+--echo
+SHOW SESSION VARIABLES LIKE "example_%";
+--echo
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+--echo
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+--echo
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+--echo
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+
+#
+# Force sync of local and global system variables.
+#
+--disable_result_log
+--disable_query_log
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread WHERE variable_name LIKE "example_%";
+--enable_query_log
+--enable_result_log
+
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/include/show_transaction_gtid.inc b/mysql-test/suite/perfschema/include/show_transaction_gtid.inc
new file mode 100644
index 00000000000..758354ea2b8
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/show_transaction_gtid.inc
@@ -0,0 +1,29 @@
+# ==== Purpose ====
+#
+# Auxiliary file used by transaction_gtid.test
+#
+# Invoked to check the contents of the
+# performance_schema.events_transaction_[current|history] tables and
+# write the result to the result log. This is executed on the
+# 'server_1' connection and shows only status of transactions on the
+# 'default' connection.
+
+--connection server_1
+
+--replace_result $server_uuid SERVER_UUID aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa A
+--let $history_result= `SELECT GTID FROM performance_schema.events_transactions_history WHERE THREAD_ID = $thread_id`
+if ($history_result == '')
+{
+ --let $history_result= none
+}
+
+--replace_result $server_uuid SERVER_UUID aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa A
+--let $current_result= `SELECT GTID FROM performance_schema.events_transactions_current WHERE THREAD_ID = $thread_id`
+if ($current_result == '')
+{
+ --let $current_result= none
+}
+
+--echo - history=$history_result current=$current_result
+
+--connection default
diff --git a/mysql-test/suite/perfschema/include/sizing_auto.inc b/mysql-test/suite/perfschema/include/sizing_auto.inc
deleted file mode 100644
index 3bb4db2276f..00000000000
--- a/mysql-test/suite/perfschema/include/sizing_auto.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-
-show variables like "table_definition_cache";
-show variables like "table_open_cache";
-show variables like "max_connections";
-# open_files_limit depends on OS configuration (ulimit -n)
-#show variables like "open_files_limit";
-show variables where
- `Variable_name` != "performance_schema_max_statement_classes" and
- `Variable_name` like "performance_schema%";
-show status like "%performance_schema%";
-
-# Each test script should provide a different test.cnf file,
-# with different settings.
-# This output will show the sizes computed automatically.
-# Note that this output is very dependent on the platform.
-# The output of SHOW ENGINE PERFORMANCE_SCHEMA STATUS
-# is very dependent on the platform,
-# so it is not printed here to ensure stability of the .results files.
-# To troubleshoot the performance schema memory consumption at different
-# configuration settings, comment the following line.
-# Debug only:
-
-# show engine performance_schema status;
-
diff --git a/mysql-test/suite/perfschema/include/start_server_common.inc b/mysql-test/suite/perfschema/include/start_server_common.inc
index 8cbd40c2bc1..1297bcdff82 100644
--- a/mysql-test/suite/perfschema/include/start_server_common.inc
+++ b/mysql-test/suite/perfschema/include/start_server_common.inc
@@ -7,13 +7,13 @@ select count(*) from performance_schema.setup_consumers;
# wait/io/table/sql/handler is a native instrument
# wait/lock/table/sql/handler is a native instrument
# idle/io/socket is a native instrument
-select count(*) > 3 from performance_schema.setup_instruments;
+# wait/lock/metadata is a native instrument
+select count(*) > 4 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
---disable_query_log
select * from performance_schema.accounts;
select * from performance_schema.cond_instances;
select * from performance_schema.events_stages_current;
@@ -33,6 +33,14 @@ select * from performance_schema.events_statements_summary_by_host_by_event_name
select * from performance_schema.events_statements_summary_by_thread_by_event_name;
select * from performance_schema.events_statements_summary_by_user_by_event_name;
select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
select * from performance_schema.events_waits_current;
select * from performance_schema.events_waits_history;
select * from performance_schema.events_waits_history_long;
@@ -42,11 +50,22 @@ 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_by_user_by_event_name;
select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
select * from performance_schema.mutex_instances;
select * from performance_schema.objects_summary_global_by_type;
select * from performance_schema.performance_timers;
@@ -61,13 +80,31 @@ select * from performance_schema.setup_timers;
select * from performance_schema.socket_instances;
select * from performance_schema.socket_summary_by_instance;
select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
select * from performance_schema.table_io_waits_summary_by_index_usage;
select * from performance_schema.table_io_waits_summary_by_table;
select * from performance_schema.table_lock_waits_summary_by_table;
select * from performance_schema.threads;
select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+#select * from performance_schema.replication_connection_status;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+#select * from performance_schema.replication_applier_status_by_worker;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+#select * from performance_schema.global_variables;
+#select * from performance_schema.variables_by_thread;
+#select * from performance_schema.session_variables;
--enable_result_log
---enable_query_log
+
+# This has a stable output, printing the result:
+show global variables like "performance_schema%";
# This has an unrepeatable output, it does depends too much on
# - the platform hardware (sizeof structures, padding)
@@ -78,6 +115,6 @@ select * from performance_schema.users;
--disable_result_log
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
--enable_result_log
diff --git a/mysql-test/suite/perfschema/include/table_aggregate_load.inc b/mysql-test/suite/perfschema/include/table_aggregate_load.inc
index 80c622d77be..9d757617cad 100644
--- a/mysql-test/suite/perfschema/include/table_aggregate_load.inc
+++ b/mysql-test/suite/perfschema/include/table_aggregate_load.inc
@@ -2,6 +2,19 @@
#
# See comments in include/table_aggregate_setup.inc
+#
+# Notes about the optimizer and query plans:
+# The following statement
+# SELECT * from t1 where b=5;
+# can be executed either:
+# - by using the index "index_b" on column b
+# - by using a full table scan and the where clause.
+# Which plan is used can be unpredictable.
+# To ensure that the index is really used,
+# so that table io against the index is measured,
+# the payload in this test uses:
+# SELECT * from t1 force index(index_b) where b=5;
+#
# Display the current setup used
@@ -88,13 +101,34 @@ update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
# select with index
-select * from test.t1 where b=5;
-select * from test.t2 where b=5;
-select * from test.t3 where b=5;
+select * from test.t1 force index(index_b) where b=5;
+select * from test.t2 force index(index_b) where b=5;
+select * from test.t3 force index(index_b) where b=5;
+
+--connection default
+
+echo "================== Step 3-A ==================";
+call dump_thread();
+execute dump_waits_account;
+execute dump_waits_user;
+execute dump_waits_host;
+execute dump_waits_global;
+execute dump_waits_history;
+execute dump_waits_index_io;
+execute dump_waits_table_io;
+execute dump_waits_table_lock;
+execute dump_objects_summary;
+
+--connection con1
+
+# This cause aggregation, so that index names are finally recorded
+flush tables;
+
+echo "================== con1 FLUSH ==================";
--connection default
-echo "================== Step 3 ==================";
+echo "================== Step 3-B ==================";
call dump_thread();
execute dump_waits_account;
execute dump_waits_user;
@@ -147,9 +181,9 @@ update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
# select with index
-select * from test.t1 where b=5;
-select * from test.t2 where b=5;
-select * from test.t3 where b=5;
+select * from test.t1 force index(index_b) where b=5;
+select * from test.t2 force index(index_b) where b=5;
+select * from test.t3 force index(index_b) where b=5;
--connection default
@@ -202,9 +236,9 @@ update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
# select with index
-select * from test.t1 where b=5;
-select * from test.t2 where b=5;
-select * from test.t3 where b=5;
+select * from test.t1 force index(index_b) where b=5;
+select * from test.t2 force index(index_b) where b=5;
+select * from test.t3 force index(index_b) where b=5;
--connection default
@@ -257,9 +291,9 @@ update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
# select with index
-select * from test.t1 where b=5;
-select * from test.t2 where b=5;
-select * from test.t3 where b=5;
+select * from test.t1 force index(index_b) where b=5;
+select * from test.t2 force index(index_b) where b=5;
+select * from test.t3 force index(index_b) where b=5;
--connection default
@@ -494,4 +528,5 @@ execute dump_waits_table_lock;
execute dump_objects_summary;
# On test failures, may help to track the root cause
-show status like "performance_schema%";
+show global status like "performance_schema%";
+
diff --git a/mysql-test/suite/perfschema/include/table_aggregate_setup.inc b/mysql-test/suite/perfschema/include/table_aggregate_setup.inc
index 79aa5482838..79f7bd70a3f 100644
--- a/mysql-test/suite/perfschema/include/table_aggregate_setup.inc
+++ b/mysql-test/suite/perfschema/include/table_aggregate_setup.inc
@@ -222,7 +222,9 @@ prepare dump_waits_global from
order by event_name;";
prepare dump_waits_history from
- "select event_name, count(event_name), object_type, object_schema, object_name
+ "select event_name,
+ sum(if(number_of_bytes is null, 1, number_of_bytes)) as 'count(event_name)',
+ object_type, object_schema, object_name
from performance_schema.events_waits_history_long
where event_name in
(\'wait/io/table/sql/handler\',
@@ -254,7 +256,7 @@ prepare dump_waits_table_lock from
count_read_normal, count_read_with_shared_locks,
count_read_high_priority, count_read_no_insert,
count_read_external,
- count_write_delayed, count_write_low_priority,
+ count_write_low_priority,
count_write_external
from performance_schema.table_lock_waits_summary_by_table
where object_type='TABLE' and object_schema='test'
diff --git a/mysql-test/suite/perfschema/include/table_io_result_helper.inc b/mysql-test/suite/perfschema/include/table_io_result_helper.inc
index 4732806488e..66431b6a8c6 100644
--- a/mysql-test/suite/perfschema/include/table_io_result_helper.inc
+++ b/mysql-test/suite/perfschema/include/table_io_result_helper.inc
@@ -14,8 +14,7 @@ eval select event_name,
order by thread_id, event_id;
# In case of failures, this will tell if table io are lost.
-show status where Variable_name like 'performance_schema_%' and
- Variable_name not like 'performance_schema_%_classes_lost';
+show global status like 'performance_schema_%';
# Cleanup
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/include/transaction_cleanup.inc b/mysql-test/suite/perfschema/include/transaction_cleanup.inc
new file mode 100644
index 00000000000..3b8ed02d6b6
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/transaction_cleanup.inc
@@ -0,0 +1,12 @@
+# Tests for the performance schema
+
+# ==========================================
+# HELPER include/transaction_cleanup.inc
+# ==========================================
+
+DROP PROCEDURE clear_transaction_tables;
+DROP PROCEDURE clear_transaction_history;
+DROP PROCEDURE clear_statement_history;
+DROP PROCEDURE clear_history;
+DROP PROCEDURE transaction_verifier;
+
diff --git a/mysql-test/suite/perfschema/include/transaction_nested_events_verifier.inc b/mysql-test/suite/perfschema/include/transaction_nested_events_verifier.inc
new file mode 100644
index 00000000000..6a6e2dc5ada
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/transaction_nested_events_verifier.inc
@@ -0,0 +1,144 @@
+# Tests for the performance schema
+
+# =====================================================
+# HELPER include/transaction_nested_events_verifier.inc
+# =====================================================
+
+--connection default
+--disable_query_log
+
+# Poll till the activity of the actor connection con1 caused by the last
+# statement issued has finished.
+let $wait_timeout= 10;
+let $wait_condition=
+ SELECT COUNT(*) > 0 FROM performance_schema.threads
+ WHERE THREAD_ID = @con1_thread_id
+ AND (PROCESSLIST_STATE = 'Sleep' OR PROCESSLIST_STATE IS NULL);
+--source include/wait_condition.inc
+if(!$success)
+{
+ --echo The activity of connection con1 did not finish.
+ SELECT thread_id , PROCESSLIST_id, PROCESSLIST_STATE, PROCESSLIST_INFO
+ FROM performance_schema.threads
+ WHERE thread_id = @con1_thread_id;
+ --echo Abort.
+ exit;
+}
+
+--echo #========================================================================
+--echo # Verify
+--echo #========================================================================
+
+SELECT event_id into @base_tx_event_id
+ from performance_schema.events_transactions_history_long
+ where (THREAD_ID = @con1_thread_id)
+ order by event_id limit 1;
+
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+ where (THREAD_ID = @con1_thread_id)
+ order by event_id limit 1;
+
+select if(@base_tx_event_id < @base_stmt_event_id,
+ @base_tx_event_id - 1,
+ @base_stmt_event_id - 1)
+ into @base_event_id;
+
+# Debug helpers
+# set @base_event_id = 0;
+# select @base_tx_event_id, @base_stmt_event_id, @base_event_id;
+
+--echo EVENTS_TRANSACTIONS_CURRENT
+--echo
+
+--replace_column 1 thread_id
+
+SELECT THREAD_ID,
+ LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+ LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+ RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+ RPAD(STATE, 11, ' ') 'STATE ',
+ RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+ RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+ RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+ LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+ RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+
+--echo
+--echo EVENTS_TRANSACTIONS_HISTORY_LONG
+--echo
+
+--replace_column 1 thread_id
+
+SELECT THREAD_ID,
+ LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+ LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+ RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+ RPAD(STATE, 11, ' ') 'STATE ',
+ RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+ RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+ RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+ LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+ RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+
+--echo
+--echo EVENTS_STATEMENTS_HISTORY_LONG
+--echo
+
+--replace_column 1 thread_id
+
+SELECT THREAD_ID,
+ LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+ LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+ RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+ RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+ LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+ RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+ LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+ SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+
+--echo
+--echo ## Combined statement and transaction event history ordered by event id
+--echo
+--echo EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+--echo
+
+--replace_column 1 thread_id
+
+SELECT THREAD_ID,
+ LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+ LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+ RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+ LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+ RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+ '<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+ LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+ LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+ RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+ LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+ RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+ SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+
+--echo
+--echo ## Clear statement and transaction history
+--echo CALL test.clear_history();
+CALL test.clear_history();
+--enable_query_log
+--echo ## Reset db.t1
+DELETE FROM db.t1;
+--echo
diff --git a/mysql-test/suite/perfschema/include/transaction_setup.inc b/mysql-test/suite/perfschema/include/transaction_setup.inc
new file mode 100644
index 00000000000..78697425731
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/transaction_setup.inc
@@ -0,0 +1,231 @@
+# Tests for the performance schema
+
+# ==========================================
+# HELPER include/transaction_setup.inc
+# ==========================================
+
+#
+# UTILITY QUERIES
+#
+let $get_thread_id=
+ SELECT thread_id INTO @my_thread_id
+ FROM performance_schema.threads
+ WHERE processlist_id = connection_id();
+
+let $disable_instruments=
+ UPDATE performance_schema.setup_instruments
+ SET enabled='no', timed='no'
+ WHERE name IN ('transaction');
+
+let $enable_instruments=
+ UPDATE performance_schema.setup_instruments
+ SET enabled='yes', timed='yes'
+ WHERE name IN ('transaction');
+
+let $def_count = -1;
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS clear_transaction_tables;
+--enable_warnings
+
+--disable_result_log
+
+DELIMITER $$;
+CREATE PROCEDURE clear_transaction_tables()
+BEGIN
+ truncate table performance_schema.events_transactions_current;
+ truncate table performance_schema.events_transactions_history;
+ truncate table performance_schema.events_transactions_history_long;
+ truncate table performance_schema.events_transactions_summary_by_thread_by_event_name;
+ truncate table performance_schema.events_transactions_summary_by_account_by_event_name;
+ truncate table performance_schema.events_transactions_summary_by_host_by_event_name;
+ truncate table performance_schema.events_transactions_summary_by_user_by_event_name;
+ truncate table performance_schema.events_transactions_summary_global_by_event_name;
+END$$
+
+CREATE PROCEDURE clear_transaction_history()
+BEGIN
+ truncate table performance_schema.events_transactions_current;
+ truncate table performance_schema.events_transactions_history;
+ truncate table performance_schema.events_transactions_history_long;
+END$$
+
+CREATE PROCEDURE clear_statement_history()
+BEGIN
+ truncate table performance_schema.events_statements_current;
+ truncate table performance_schema.events_statements_history;
+ truncate table performance_schema.events_statements_history_long;
+END$$
+
+CREATE PROCEDURE clear_history()
+BEGIN
+ truncate table performance_schema.events_statements_current;
+ truncate table performance_schema.events_statements_history;
+ truncate table performance_schema.events_statements_history_long;
+ truncate table performance_schema.events_transactions_current;
+ truncate table performance_schema.events_transactions_history;
+ truncate table performance_schema.events_transactions_history_long;
+END$$
+
+CREATE PROCEDURE transaction_verifier(IN i_table INT,
+ IN i_thread_id INT,
+ IN i_event_name VARCHAR(64),
+ IN i_state VARCHAR(32),
+ IN i_xid_format_id INT,
+ IN i_xid_gtrid VARCHAR(130),
+ IN i_xid_bqual VARCHAR(130),
+ IN i_xa_state VARCHAR(64),
+ IN i_gtid VARCHAR(64),
+ IN i_access_mode VARCHAR(32),
+ IN i_isolation_level VARCHAR(64),
+ IN i_autocommit VARCHAR(16),
+ IN i_savepoints INT,
+ IN i_rb_savepoint INT,
+ IN i_rel_savepoint INT,
+ IN i_expected INT)
+BEGIN
+ DECLARE table_name VARCHAR(64);
+ SET @thread_id = i_thread_id;
+ SET @event_id = 0;
+ SET @event_name = i_event_name;
+ SET @state = i_state;
+ SET @xid_format_id = i_xid_format_id;
+ SET @xid_gtrid = i_xid_gtrid;
+ SET @xid_bqual = i_xid_bqual;
+ SET @xa_state = i_xa_state;
+ SET @gtid = i_gtid;
+ SET @access_mode = i_access_mode;
+ SET @isolation_level = i_isolation_level;
+ SET @autocommit = i_autocommit;
+ SET @savepoints = i_savepoints;
+ SET @rb_savepoint = i_rb_savepoint;
+ SET @rel_savepoint = i_rel_savepoint;
+ SET @expected = i_expected;
+
+ #
+ # Build verification query based upon input parameters
+ #
+
+ IF i_table = 0 THEN
+ SET table_name = 'performance_schema.events_transactions_current';
+ ELSEIF i_table = 1 THEN
+ SET table_name = 'performance_schema.events_transactions_history';
+ ELSEIF i_table = 2 THEN
+ SET table_name = 'performance_schema.events_transactions_history_long';
+ ELSE
+ SET table_name = 'performance_schema.events_transactions_history';
+ END IF;
+
+ SET @query = CONCAT('SELECT COUNT(*) INTO @actual FROM ', table_name, ' WHERE');
+
+ IF i_thread_id != 0 THEN
+ SET @query = CONCAT(@query, ' (thread_id = @thread_id)');
+ END IF;
+ IF i_event_name != '' THEN
+ SET @query = CONCAT(@query, ' AND (event_name = @event_name)');
+ END IF;
+ IF i_state != '' THEN
+ SET @query = CONCAT(@query, ' AND (state = @state)');
+ END IF;
+ IF i_xid_format_id != '' THEN
+ SET @query = CONCAT(@query, ' AND (xid_format_id = @xid_format_id)');
+ END IF;
+ IF i_xid_gtrid != '' THEN
+ SET @query = CONCAT(@query, ' AND (xid_gtrid = @xid_gtrid)');
+ END IF;
+ IF i_xid_bqual != '' THEN
+ SET @query = CONCAT(@query, ' AND (xid_bqual = @xid_bqual)');
+ END IF;
+ IF i_xa_state != '' THEN
+ SET @query = CONCAT(@query, ' AND (xa_state = @xa_state)');
+ END IF;
+ IF i_gtid = 'NULL' THEN
+ SET @query = CONCAT(@query, ' AND (gtid IS NULL)');
+ ELSEIF i_gtid != '' THEN
+ SET @query = CONCAT(@query, ' AND (gtid = @gtid)');
+ END IF;
+ IF i_access_mode != '' THEN
+ SET @query = CONCAT(@query, ' AND (access_mode = @access_mode)');
+ END IF;
+ IF i_isolation_level != '' THEN
+ SET @query = CONCAT(@query, ' AND (isolation_level = @isolation_level)');
+ END IF;
+ IF i_autocommit != '' THEN
+ SET @query = CONCAT(@query, ' AND (autocommit = @autocommit)');
+ END IF;
+ IF i_savepoints != 0 THEN
+ SET @query = CONCAT(@query, ' AND (number_of_savepoints = @savepoints)');
+ END IF;
+ IF i_rb_savepoint != 0 THEN
+ SET @query = CONCAT(@query, ' AND (number_of_rollback_to_savepoint = @rb_savepoint)');
+ END IF;
+ IF i_rel_savepoint != 0 THEN
+ SET @query = CONCAT(@query, ' AND (number_of_release_savepoint = @rel_savepoint)');
+ END IF;
+
+ SET @query = CONCAT(@query, ' ORDER BY event_id;');
+
+ ## DEBUG ## SELECT * FROM performance_schema.events_transactions_history ORDER BY event_id;
+ ## SELECT @query AS "QUERY";
+ PREPARE stmt1 FROM @query;
+ EXECUTE stmt1;
+ DEALLOCATE PREPARE stmt1;
+
+ SELECT LPAD(@actual, 6, ' ') AS "ACTUAL", LPAD(@expected, 8, ' ') AS "EXPECTED";
+
+ IF @actual != @expected THEN
+ SELECT "" AS "ERROR: Row count mismatch";
+ SELECT @query AS "VERIFIER QUERY:";
+ SELECT "";
+
+ SET @columns = ' LPAD(@thread_id, 9, " ") AS thread_id,';
+ SET @columns = CONCAT(@columns, ' LPAD(@event_id, 10, " ") AS "..event_id",');
+ SET @columns = CONCAT(@columns, ' RPAD(@event_name, 11, " ") AS "event_name ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@state, 11, " ") AS "state ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@xid_format_id, 15, " ") AS "xid_format_id ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@xid_gtrid, 15, " ") AS "xid_gtrid ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@xid_bqual, 15, " ") AS "xid_bqual ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@xa_state, 12, " ") AS "xa_state ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@gtid, 38, " ") AS "gtid ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@access_mode, 11, " ") AS access_mode,');
+ SET @columns = CONCAT(@columns, ' RPAD(@isolation_level, 16, " ") AS "isolation_level ",');
+ SET @columns = CONCAT(@columns, ' RPAD(@autocommit, 10, " ") AS autocommit,');
+ SET @columns = CONCAT(@columns, ' LPAD(@savepoints, 10, " ") AS savepoints,');
+ SET @columns = CONCAT(@columns, ' LPAD(@rb_savepoint, 21, " ") AS rollback_to_savepoint,');
+ SET @columns = CONCAT(@columns, ' LPAD(@rel_savepoint, 17, " ") AS release_savepoint');
+ SET @query2 = CONCAT('SELECT', ' LPAD(@expected, 13, " ") AS ROWS_EXPECTED, ', @columns, ';');
+# SET @query2 = CONCAT('SELECT " " AS EXPECTED, ', @columns, ';');
+ PREPARE stmt2 FROM @query2;
+ EXECUTE stmt2;
+ DEALLOCATE PREPARE stmt2;
+
+ SET @columns = ' LPAD(thread_id, 9, " ") AS thread_id,';
+ SET @columns = CONCAT(@columns, ' LPAD(event_id, 10, " ") AS "..event_id",');
+ SET @columns = CONCAT(@columns, ' RPAD(event_name, 11, " ") AS "event_name ",');
+ SET @columns = CONCAT(@columns, ' RPAD(state, 11, " ") AS "state ",');
+ SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xid_format_id, "NULL"), 15, " ") AS "xid_format_id ",');
+ SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xid_gtrid, "NULL"), 15, " ") AS "xid_gtrid ",');
+ SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xid_bqual, "NULL"), 15, " ") AS "xid_bqual ",');
+ SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xa_state, "NULL"), 12, " ") AS "xa_state ",');
+ SET @columns = CONCAT(@columns, ' RPAD(IFNULL(gtid, "NULL"), 38, " ") AS "gtid ",');
+ SET @columns = CONCAT(@columns, ' RPAD(access_mode, 11, " ") AS access_mode,');
+ SET @columns = CONCAT(@columns, ' RPAD(isolation_level, 16, " ") AS "isolation_level ",');
+ SET @columns = CONCAT(@columns, ' RPAD(autocommit, 10, " ") AS autocommit,');
+ SET @columns = CONCAT(@columns, ' LPAD(number_of_savepoints, 10, " ") AS savepoints,');
+ SET @columns = CONCAT(@columns, ' LPAD(number_of_rollback_to_savepoint, 21, " ") AS rollback_to_savepoint,');
+ SET @columns = CONCAT(@columns, ' LPAD(number_of_release_savepoint, 17, " ") AS release_savepoint');
+# SET @query3 = CONCAT('SELECT " " AS "ACTUAL ", ', @columns, ' FROM ', table_name, ' ORDER BY event_id;');
+ SET @query3 = CONCAT('SELECT', ' LPAD(@actual, 13, " ") AS "ROWS_ACTUAL ",', @columns, ' FROM ', table_name, ' ORDER BY event_id;');
+ PREPARE stmt3 FROM @query3;
+ EXECUTE stmt3;
+ DEALLOCATE PREPARE stmt3;
+
+ END IF;
+END$$
+
+DELIMITER ;$$
+
+--enable_result_log
+
+
+
diff --git a/mysql-test/suite/perfschema/include/upgrade_check.inc b/mysql-test/suite/perfschema/include/upgrade_check.inc
index 79a81311b05..c16e90c78c2 100644
--- a/mysql-test/suite/perfschema/include/upgrade_check.inc
+++ b/mysql-test/suite/perfschema/include/upgrade_check.inc
@@ -13,4 +13,3 @@
--remove_file $MYSQLTEST_VARDIR/tmp/out_file
--remove_file $MYSQLTEST_VARDIR/tmp/err_file
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
-
diff --git a/mysql-test/suite/perfschema/include/wait_for_pfs_thread_count.inc b/mysql-test/suite/perfschema/include/wait_for_pfs_thread_count.inc
index a2ed41d9d1b..2375bdf1cac 100644
--- a/mysql-test/suite/perfschema/include/wait_for_pfs_thread_count.inc
+++ b/mysql-test/suite/perfschema/include/wait_for_pfs_thread_count.inc
@@ -14,7 +14,7 @@ let $wait_condition=
# Because instrumentation is optional, we use "<=" here.
let $wait_condition=
- select count(*) <= 1 from performance_schema.threads
+ select count(*) <= 2 from performance_schema.threads
where `TYPE`='FOREGROUND';
--source include/wait_condition.inc
diff --git a/mysql-test/suite/perfschema/r/all_tests.result b/mysql-test/suite/perfschema/r/all_tests.result
index 3f413ca9a1e..6b343d9d801 100644
--- a/mysql-test/suite/perfschema/r/all_tests.result
+++ b/mysql-test/suite/perfschema/r/all_tests.result
@@ -10,10 +10,13 @@ where table_schema='performance_schema';
update t2 set test_name= replace(test_name, "events_waits_summary_", "ews_");
update t2 set test_name= replace(test_name, "events_stages_summary_", "esgs_");
update t2 set test_name= replace(test_name, "events_statements_summary_", "esms_");
+update t2 set test_name= replace(test_name, "events_transactions_summary_", "ets_");
update t2 set test_name= replace(test_name, "file_summary_", "fs_");
update t2 set test_name= replace(test_name, "objects_summary_", "os_");
update t2 set test_name= replace(test_name, "table_io_waits_summary_", "tiws_");
update t2 set test_name= replace(test_name, "table_lock_waits_summary_", "tlws_");
+update t2 set test_name= replace(test_name, "memory_summary_", "mems_");
+update t2 set test_name= replace(test_name, "user_variables_", "uvar_");
delete from t2 where t2.test_name in (select t1.test_name from t1);
select test_name as `MISSING DDL/DML TESTS` from t2;
MISSING DDL/DML TESTS
diff --git a/mysql-test/suite/perfschema/r/alter_table_progress.result b/mysql-test/suite/perfschema/r/alter_table_progress.result
new file mode 100644
index 00000000000..96516993a5c
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/alter_table_progress.result
@@ -0,0 +1,100 @@
+connect con1, localhost, root, , ;
+drop table if exists t1;
+create table t1(a int) engine = myisam;
+insert into t1 values (1), (2), (3), (4), (5);
+connection default;
+update performance_schema.threads
+set instrumented = 'NO'
+ where processlist_id = connection_id();
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_history_long;
+connection con1;
+SET DEBUG_SYNC='RESET';
+SET DEBUG_SYNC='copy_data_between_tables_before SIGNAL found_row WAIT_FOR wait_row EXECUTE 5';
+ALTER TABLE t1 engine = innodb;;
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+select event_id from performance_schema.events_statements_current
+where thread_id = @con1_thread_id into @con1_stmt_id;
+Warnings:
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+from performance_schema.events_stages_current
+where (thread_id = @con1_thread_id);
+EVENT_NAME WORK_COMPLETED WORK_ESTIMATED
+stage/sql/copy to tmp table 0 5
+SET DEBUG_SYNC='now SIGNAL wait_row';
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+from performance_schema.events_stages_current
+where (thread_id = @con1_thread_id);
+EVENT_NAME WORK_COMPLETED WORK_ESTIMATED
+stage/sql/copy to tmp table 1 5
+SET DEBUG_SYNC='now SIGNAL wait_row';
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+from performance_schema.events_stages_current
+where (thread_id = @con1_thread_id);
+EVENT_NAME WORK_COMPLETED WORK_ESTIMATED
+stage/sql/copy to tmp table 2 5
+SET DEBUG_SYNC='now SIGNAL wait_row';
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+from performance_schema.events_stages_current
+where (thread_id = @con1_thread_id);
+EVENT_NAME WORK_COMPLETED WORK_ESTIMATED
+stage/sql/copy to tmp table 3 5
+SET DEBUG_SYNC='now SIGNAL wait_row';
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+from performance_schema.events_stages_current
+where (thread_id = @con1_thread_id);
+EVENT_NAME WORK_COMPLETED WORK_ESTIMATED
+stage/sql/copy to tmp table 4 5
+SET DEBUG_SYNC='now SIGNAL wait_row';
+connection con1;
+select "After payload";
+After payload
+After payload
+connection default;
+Dumping ALTER TABLE stages
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+from performance_schema.events_stages_history_long
+where (thread_id = @con1_thread_id)
+and (nesting_event_id = @con1_stmt_id)
+order by thread_id, event_id;
+EVENT_NAME WORK_COMPLETED WORK_ESTIMATED
+stage/sql/starting NULL NULL
+stage/sql/checking permissions NULL NULL
+stage/sql/init for update NULL NULL
+stage/sql/Opening tables NULL NULL
+stage/sql/After opening tables NULL NULL
+stage/sql/setup NULL NULL
+stage/sql/creating table NULL NULL
+stage/sql/After create NULL NULL
+stage/sql/System lock NULL NULL
+stage/sql/table lock NULL NULL
+stage/sql/After create NULL NULL
+stage/sql/copy to tmp table 5 5
+stage/sql/Enabling keys NULL NULL
+stage/sql/Rename result table NULL NULL
+stage/sql/Unlocking tables NULL NULL
+stage/sql/Rename result table NULL NULL
+stage/sql/End of update loop NULL NULL
+stage/sql/Query end NULL NULL
+stage/sql/Commit NULL NULL
+stage/sql/closing tables NULL NULL
+stage/sql/Unlocking tables NULL NULL
+stage/sql/closing tables NULL NULL
+stage/sql/Commit implicit NULL NULL
+stage/sql/Starting cleanup NULL NULL
+stage/sql/Freeing items NULL NULL
+stage/sql/Reset for next command NULL NULL
+SET DEBUG_SYNC='RESET';
+connection con1;
+drop table t1;
+disconnect con1;
+connection default;
+update performance_schema.threads
+set instrumented = 'YES'
+ where processlist_id = connection_id();
diff --git a/mysql-test/suite/perfschema/r/bad_option.result b/mysql-test/suite/perfschema/r/bad_option.result
new file mode 100644
index 00000000000..b14dad9600e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/bad_option.result
@@ -0,0 +1,8 @@
+FOUND 1 /\[ERROR\].*unknown variable 'performance-schema-enabled=maybe'/ in my_restart.err
+# Server start with invalid startup option value 'performance-schema-enabled=maybe' : pass
+FOUND 1 /\[ERROR\].*unknown variable 'performance-schema-max_=12'/ in my_restart.err
+# Server start with ambigous startup option 'performance-schema-max_=12' : pass
+FOUND 1 /\[ERROR\].*unknown option '--performance-schema-unknown_99'/ in my_restart.err
+# Server start with invalid startup option '--performance-schema-unknown_99' : pass
+FOUND 1 /Can.t change dir to .*bad_option_h_param/ in my_restart.err
+# Server start with invalid startup option value '--datadir=bad_option_h_param' : pass
diff --git a/mysql-test/suite/perfschema/r/bad_option_1.result b/mysql-test/suite/perfschema/r/bad_option_1.result
deleted file mode 100644
index 05ff5663882..00000000000
--- a/mysql-test/suite/perfschema/r/bad_option_1.result
+++ /dev/null
@@ -1,4 +0,0 @@
-# Kill the server
-Found: unknown variable 'performance-schema-enabled=maybe'
-Found: Aborting
-# restart
diff --git a/mysql-test/suite/perfschema/r/bad_option_2.result b/mysql-test/suite/perfschema/r/bad_option_2.result
deleted file mode 100644
index c2809525827..00000000000
--- a/mysql-test/suite/perfschema/r/bad_option_2.result
+++ /dev/null
@@ -1,3 +0,0 @@
-# Kill the server
-FOUND 1 /ambiguous option '--performance-schema-max_=12'/ in bad_option_2.txt
-# restart
diff --git a/mysql-test/suite/perfschema/r/bad_option_3.result b/mysql-test/suite/perfschema/r/bad_option_3.result
deleted file mode 100644
index 1981f0b2044..00000000000
--- a/mysql-test/suite/perfschema/r/bad_option_3.result
+++ /dev/null
@@ -1,4 +0,0 @@
-# Kill the server
-Found: unknown option '-x'
-Found: Aborting
-# restart
diff --git a/mysql-test/suite/perfschema/r/bad_option_4.result b/mysql-test/suite/perfschema/r/bad_option_4.result
deleted file mode 100644
index 1d50a80be3d..00000000000
--- a/mysql-test/suite/perfschema/r/bad_option_4.result
+++ /dev/null
@@ -1,4 +0,0 @@
-# Kill the server
-Found: Can't change dir to.*bad_option_h_param
-Found: Aborting
-# restart
diff --git a/mysql-test/suite/perfschema/r/bad_option_5.result b/mysql-test/suite/perfschema/r/bad_option_5.result
deleted file mode 100644
index 840717023ac..00000000000
--- a/mysql-test/suite/perfschema/r/bad_option_5.result
+++ /dev/null
@@ -1,4 +0,0 @@
-# Kill the server
-Found: unknown option '-X'
-Found: Aborting
-# restart
diff --git a/mysql-test/suite/perfschema/r/batch_table_io_func.result b/mysql-test/suite/perfschema/r/batch_table_io_func.result
new file mode 100644
index 00000000000..212c08c7e90
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/batch_table_io_func.result
@@ -0,0 +1,195 @@
+UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
+UPDATE performance_schema.setup_instruments SET enabled = 'YES'
+WHERE name in ('wait/io/table/sql/handler',
+'wait/lock/table/sql/handler');
+drop procedure if exists before_payload;
+drop procedure if exists after_payload;
+create procedure before_payload()
+begin
+TRUNCATE TABLE performance_schema.table_io_waits_summary_by_index_usage;
+TRUNCATE TABLE performance_schema.table_io_waits_summary_by_table;
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+end
+$$
+create procedure after_payload()
+begin
+select count(1) as number_seen,
+OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+OPERATION, NUMBER_OF_BYTES
+from performance_schema.events_waits_history_long
+where OBJECT_SCHEMA = "test"
+ group by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME, OPERATION, NUMBER_OF_BYTES;
+select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA = "test"
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA = "test"
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+end
+$$
+drop table if exists t1;
+drop table if exists t2;
+drop table if exists t3;
+create table t0(v int);
+create table t1(id1 int, a int);
+create table t2(id1 int, id2 int, b int);
+create table t3(id2 int, id3 int, c int);
+insert into t0 values
+(0), (1), (2), (3), (4),
+(5), (6), (7), (8), (9);
+insert into t1(id1, a)
+select v, 100*v from t0;
+insert into t2(id1, id2, b)
+select X.v, 10*X.v + Y.v, 100*X.v + 10*Y.v
+from t0 X, t0 Y;
+insert into t3(id2, id3, c)
+select 10*X.v + Y.v, 100*X.v + 10*Y.v + Z.v, 100*X.v + 10*Y.v + Z.v
+from t0 X, t0 Y, t0 Z;
+analyze table t1;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+analyze table t2;
+Table Op Msg_type Msg_text
+test.t2 analyze status Engine-independent statistics collected
+test.t2 analyze status OK
+analyze table t3;
+Table Op Msg_type Msg_text
+test.t3 analyze status Engine-independent statistics collected
+test.t3 analyze status OK
+select * from t1 order by a;
+id1 a
+0 0
+1 100
+2 200
+3 300
+4 400
+5 500
+6 600
+7 700
+8 800
+9 900
+select * from t2
+where (b >= 180) and (b <= 220)
+order by b;
+id1 id2 b
+1 18 180
+1 19 190
+2 20 200
+2 21 210
+2 22 220
+select * from t3
+where (c >= 587) and (c <= 612)
+order by c;
+id2 id3 c
+58 587 587
+58 588 588
+58 589 589
+59 590 590
+59 591 591
+59 592 592
+59 593 593
+59 594 594
+59 595 595
+59 596 596
+59 597 597
+59 598 598
+59 599 599
+60 600 600
+60 601 601
+60 602 602
+60 603 603
+60 604 604
+60 605 605
+60 606 606
+60 607 607
+60 608 608
+60 609 609
+61 610 610
+61 611 611
+61 612 612
+explain extended select t1.*, t2.*, t3.*
+from t1 join t2 using (id1) join t3 using (id2);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 10 100.00
+1 SIMPLE t2 ALL NULL NULL NULL NULL 100 100.00 Using where; Using join buffer (flat, BNL join)
+1 SIMPLE t3 ALL NULL NULL NULL NULL 1000 100.00 Using where; Using join buffer (incremental, BNL join)
+Warnings:
+Note 1003 select `test`.`t1`.`id1` AS `id1`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`id1` AS `id1`,`test`.`t2`.`id2` AS `id2`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`id2` AS `id2`,`test`.`t3`.`id3` AS `id3`,`test`.`t3`.`c` AS `c` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t3`.`id2` = `test`.`t2`.`id2` and `test`.`t2`.`id1` = `test`.`t1`.`id1`
+call before_payload();
+select t1.*, t2.*, t3.*
+from t1 join t2 using (id1) join t3 using (id2);
+call after_payload();
+number_seen OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME OPERATION NUMBER_OF_BYTES
+11 TABLE test t1 NULL fetch 1
+1 TABLE test t1 NULL read external NULL
+1 TABLE test t1 NULL read normal NULL
+101 TABLE test t2 NULL fetch 1
+1 TABLE test t2 NULL read external NULL
+1 TABLE test t2 NULL read normal NULL
+1 TABLE test t3 NULL fetch 1000
+1 TABLE test t3 NULL read external NULL
+1 TABLE test t3 NULL read normal NULL
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+TABLE test t0 NULL 0 0 0
+TABLE test t1 NULL 11 11 0
+TABLE test t2 NULL 101 101 0
+TABLE test t3 NULL 1000 1000 0
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+TABLE test t0 0 0 0
+TABLE test t1 11 11 0
+TABLE test t2 101 101 0
+TABLE test t3 1000 1000 0
+alter table t1 add unique index(id1);
+alter table t2 add unique index(id2);
+alter table t2 add index(id1);
+alter table t3 add unique index(id3);
+alter table t3 add index(id2);
+explain extended select t1.*, t2.*, t3.*
+from t1 join t2 using (id1) join t3 using (id2);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL id1 NULL NULL NULL 10 100.00 Using where
+1 SIMPLE t2 ref id2,id1 id1 5 test.t1.id1 10 100.00 Using where
+1 SIMPLE t3 ref id2 id2 5 test.t2.id2 10 100.00
+Warnings:
+Note 1003 select `test`.`t1`.`id1` AS `id1`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`id1` AS `id1`,`test`.`t2`.`id2` AS `id2`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`id2` AS `id2`,`test`.`t3`.`id3` AS `id3`,`test`.`t3`.`c` AS `c` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t3`.`id2` = `test`.`t2`.`id2` and `test`.`t2`.`id1` = `test`.`t1`.`id1`
+call before_payload();
+select t1.*, t2.*, t3.*
+from t1 join t2 using (id1) join t3 using (id2);
+call after_payload();
+number_seen OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME OPERATION NUMBER_OF_BYTES
+11 TABLE test t1 NULL fetch 1
+1 TABLE test t1 id1 read external NULL
+1 TABLE test t1 id1 read normal NULL
+110 TABLE test t2 id1 fetch 1
+1 TABLE test t2 id2 read external NULL
+1 TABLE test t2 id2 read normal NULL
+100 TABLE test t3 id2 fetch 10
+1 TABLE test t3 id3 read external NULL
+1 TABLE test t3 id3 read normal NULL
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+TABLE test t0 NULL 0 0 0
+TABLE test t1 NULL 11 11 0
+TABLE test t1 id1 0 0 0
+TABLE test t2 id1 110 110 0
+TABLE test t2 id2 0 0 0
+TABLE test t3 id2 1000 1000 0
+TABLE test t3 id3 0 0 0
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+TABLE test t0 0 0 0
+TABLE test t1 11 11 0
+TABLE test t2 110 110 0
+TABLE test t3 1000 1000 0
+drop table t0;
+drop table t1;
+drop table t2;
+drop table t3;
+drop procedure before_payload;
+drop procedure after_payload;
+UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
diff --git a/mysql-test/suite/perfschema/r/binlog_edge_mix.result b/mysql-test/suite/perfschema/r/binlog_edge_mix.result
index b9673e74855..e4b95cb69ff 100644
--- a/mysql-test/suite/perfschema/r/binlog_edge_mix.result
+++ b/mysql-test/suite/perfschema/r/binlog_edge_mix.result
@@ -84,19 +84,19 @@ Warnings:
Note 1051 Unknown table 'test.marker_multi_delete'
use my_replicated_db;
insert into performance_schema.setup_actors
-values ('FOO', 'FOO', 'FOO');
+values ('FOO', 'FOO', 'FOO', 'YES', 'YES');
delete my_tx_table.*, performance_schema.setup_actors.*
from my_tx_table, performance_schema.setup_actors
where my_tx_table.a != 1000
or performance_schema.setup_actors.role='FOO';
insert into performance_schema.setup_actors
-values ('BAR', 'BAR', 'BAR');
+values ('BAR', 'BAR', 'BAR', 'YES', 'YES');
delete my_non_tx_table.*, performance_schema.setup_actors.*
from my_non_tx_table, performance_schema.setup_actors
where my_non_tx_table.a != 1000
or performance_schema.setup_actors.role='BAR';
insert into performance_schema.setup_actors
-values ('BAZ', 'BAZ', 'BAZ');
+values ('BAZ', 'BAZ', 'BAZ', 'YES', 'YES');
delete my_bh_table.*, performance_schema.setup_actors.*
from my_bh_table, performance_schema.setup_actors
where my_bh_table.a != 1000
@@ -175,4 +175,4 @@ master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `marker_end` /* generated by server */
master-bin.000001 # Query # # drop database my_replicated_db
truncate table performance_schema.setup_actors;
-insert into performance_schema.setup_actors values ('%', '%', '%');
+insert into performance_schema.setup_actors values ('%', '%', '%', 'YES', 'YES');
diff --git a/mysql-test/suite/perfschema/r/binlog_edge_row.result b/mysql-test/suite/perfschema/r/binlog_edge_row.result
index 40595a804f7..52296de4bb9 100644
--- a/mysql-test/suite/perfschema/r/binlog_edge_row.result
+++ b/mysql-test/suite/perfschema/r/binlog_edge_row.result
@@ -86,19 +86,19 @@ Warnings:
Note 1051 Unknown table 'test.marker_multi_delete'
use my_replicated_db;
insert into performance_schema.setup_actors
-values ('FOO', 'FOO', 'FOO');
+values ('FOO', 'FOO', 'FOO', 'YES', 'YES');
delete my_tx_table.*, performance_schema.setup_actors.*
from my_tx_table, performance_schema.setup_actors
where my_tx_table.a != 1000
or performance_schema.setup_actors.role='FOO';
insert into performance_schema.setup_actors
-values ('BAR', 'BAR', 'BAR');
+values ('BAR', 'BAR', 'BAR', 'YES', 'YES');
delete my_non_tx_table.*, performance_schema.setup_actors.*
from my_non_tx_table, performance_schema.setup_actors
where my_non_tx_table.a != 1000
or performance_schema.setup_actors.role='BAR';
insert into performance_schema.setup_actors
-values ('BAZ', 'BAZ', 'BAZ');
+values ('BAZ', 'BAZ', 'BAZ', 'YES', 'YES');
delete my_bh_table.*, performance_schema.setup_actors.*
from my_bh_table, performance_schema.setup_actors
where my_bh_table.a != 1000
@@ -180,4 +180,4 @@ master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `marker_end` /* generated by server */
master-bin.000001 # Query # # drop database my_replicated_db
truncate table performance_schema.setup_actors;
-insert into performance_schema.setup_actors values ('%', '%', '%');
+insert into performance_schema.setup_actors values ('%', '%', '%', 'YES', 'YES');
diff --git a/mysql-test/suite/perfschema/r/binlog_edge_stmt.result b/mysql-test/suite/perfschema/r/binlog_edge_stmt.result
index fdbf34b07a2..2a09614179f 100644
--- a/mysql-test/suite/perfschema/r/binlog_edge_stmt.result
+++ b/mysql-test/suite/perfschema/r/binlog_edge_stmt.result
@@ -120,19 +120,19 @@ Warnings:
Note 1051 Unknown table 'test.marker_multi_delete'
use my_replicated_db;
insert into performance_schema.setup_actors
-values ('FOO', 'FOO', 'FOO');
+values ('FOO', 'FOO', 'FOO', 'YES', 'YES');
delete my_tx_table.*, performance_schema.setup_actors.*
from my_tx_table, performance_schema.setup_actors
where my_tx_table.a != 1000
or performance_schema.setup_actors.role='FOO';
insert into performance_schema.setup_actors
-values ('BAR', 'BAR', 'BAR');
+values ('BAR', 'BAR', 'BAR', 'YES', 'YES');
delete my_non_tx_table.*, performance_schema.setup_actors.*
from my_non_tx_table, performance_schema.setup_actors
where my_non_tx_table.a != 1000
or performance_schema.setup_actors.role='BAR';
insert into performance_schema.setup_actors
-values ('BAZ', 'BAZ', 'BAZ');
+values ('BAZ', 'BAZ', 'BAZ', 'YES', 'YES');
delete my_bh_table.*, performance_schema.setup_actors.*
from my_bh_table, performance_schema.setup_actors
where my_bh_table.a != 1000
@@ -255,4 +255,4 @@ master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `marker_multi_del
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `marker_end` /* generated by server */
master-bin.000001 # Query # # drop database my_replicated_db
truncate table performance_schema.setup_actors;
-insert into performance_schema.setup_actors values ('%', '%', '%');
+insert into performance_schema.setup_actors values ('%', '%', '%', 'YES', 'YES');
diff --git a/mysql-test/suite/perfschema/r/binlog_ok_mix.result b/mysql-test/suite/perfschema/r/binlog_ok_mix.result
index 3e6237e1256..cc2c08baa8d 100644
--- a/mysql-test/suite/perfschema/r/binlog_ok_mix.result
+++ b/mysql-test/suite/perfschema/r/binlog_ok_mix.result
@@ -43,10 +43,10 @@ values ('XXX', 'XXX', 'XXX'),
('ZZZ', 'ZZZ', 'ZZZ');
select * from performance_schema.setup_actors
where user in ('XXX', 'YYY', 'ZZZ') order by user;
-HOST USER ROLE
-XXX XXX XXX
-YYY YYY YYY
-ZZZ ZZZ ZZZ
+HOST USER ROLE ENABLED HISTORY
+XXX XXX XXX YES YES
+YYY YYY YYY YES YES
+ZZZ ZZZ ZZZ YES YES
insert into performance_schema.setup_objects
(object_type, object_schema, object_name, enabled, timed)
values ('TABLE', 'DB1', 'AAA', 'YES', 'YES'),
diff --git a/mysql-test/suite/perfschema/r/binlog_ok_row.result b/mysql-test/suite/perfschema/r/binlog_ok_row.result
index 5cf9062138c..0beea6ae878 100644
--- a/mysql-test/suite/perfschema/r/binlog_ok_row.result
+++ b/mysql-test/suite/perfschema/r/binlog_ok_row.result
@@ -43,10 +43,10 @@ values ('XXX', 'XXX', 'XXX'),
('ZZZ', 'ZZZ', 'ZZZ');
select * from performance_schema.setup_actors
where user in ('XXX', 'YYY', 'ZZZ') order by user;
-HOST USER ROLE
-XXX XXX XXX
-YYY YYY YYY
-ZZZ ZZZ ZZZ
+HOST USER ROLE ENABLED HISTORY
+XXX XXX XXX YES YES
+YYY YYY YYY YES YES
+ZZZ ZZZ ZZZ YES YES
insert into performance_schema.setup_objects
(object_type, object_schema, object_name, enabled, timed)
values ('TABLE', 'DB1', 'AAA', 'YES', 'YES'),
diff --git a/mysql-test/suite/perfschema/r/binlog_ok_stmt.result b/mysql-test/suite/perfschema/r/binlog_ok_stmt.result
index fe71c3024d1..9fd9af6c383 100644
--- a/mysql-test/suite/perfschema/r/binlog_ok_stmt.result
+++ b/mysql-test/suite/perfschema/r/binlog_ok_stmt.result
@@ -43,10 +43,10 @@ values ('XXX', 'XXX', 'XXX'),
('ZZZ', 'ZZZ', 'ZZZ');
select * from performance_schema.setup_actors
where user in ('XXX', 'YYY', 'ZZZ') order by user;
-HOST USER ROLE
-XXX XXX XXX
-YYY YYY YYY
-ZZZ ZZZ ZZZ
+HOST USER ROLE ENABLED HISTORY
+XXX XXX XXX YES YES
+YYY YYY YYY YES YES
+ZZZ ZZZ ZZZ YES YES
insert into performance_schema.setup_objects
(object_type, object_schema, object_name, enabled, timed)
values ('TABLE', 'DB1', 'AAA', 'YES', 'YES'),
diff --git a/mysql-test/suite/perfschema/r/checksum.result b/mysql-test/suite/perfschema/r/checksum.result
index f2a0f5a7713..1ed6e70e6de 100644
--- a/mysql-test/suite/perfschema/r/checksum.result
+++ b/mysql-test/suite/perfschema/r/checksum.result
@@ -16,6 +16,14 @@ checksum table performance_schema.events_statements_summary_by_host_by_event_nam
checksum table performance_schema.events_statements_summary_by_thread_by_event_name;
checksum table performance_schema.events_statements_summary_by_user_by_event_name;
checksum table performance_schema.events_statements_summary_global_by_event_name;
+checksum table performance_schema.events_transactions_current;
+checksum table performance_schema.events_transactions_history;
+checksum table performance_schema.events_transactions_history_long;
+checksum table performance_schema.events_transactions_summary_by_account_by_event_name;
+checksum table performance_schema.events_transactions_summary_by_host_by_event_name;
+checksum table performance_schema.events_transactions_summary_by_thread_by_event_name;
+checksum table performance_schema.events_transactions_summary_by_user_by_event_name;
+checksum table performance_schema.events_transactions_summary_global_by_event_name;
checksum table performance_schema.events_waits_current;
checksum table performance_schema.events_waits_history;
checksum table performance_schema.events_waits_history_long;
@@ -61,6 +69,14 @@ checksum table performance_schema.events_statements_summary_by_host_by_event_nam
checksum table performance_schema.events_statements_summary_by_thread_by_event_name extended;
checksum table performance_schema.events_statements_summary_by_user_by_event_name extended;
checksum table performance_schema.events_statements_summary_global_by_event_name extended;
+checksum table performance_schema.events_transactions_current extended;
+checksum table performance_schema.events_transactions_history extended;
+checksum table performance_schema.events_transactions_history_long extended;
+checksum table performance_schema.events_transactions_summary_by_account_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_by_host_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_by_thread_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_by_user_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_global_by_event_name extended;
checksum table performance_schema.events_waits_current extended;
checksum table performance_schema.events_waits_history extended;
checksum table performance_schema.events_waits_history_long extended;
diff --git a/mysql-test/suite/perfschema/r/cnf_option.result b/mysql-test/suite/perfschema/r/cnf_option.result
index 85adfb5113d..c991311d136 100644
--- a/mysql-test/suite/perfschema/r/cnf_option.result
+++ b/mysql-test/suite/perfschema/r/cnf_option.result
@@ -1,6 +1,6 @@
-show variables like 'performance_schema_max_thread_classes';
+show global variables like 'performance_schema_max_thread_classes';
Variable_name Value
performance_schema_max_thread_classes 12
-show variables like 'performance_schema_max_thread_instances';
+show global variables like 'performance_schema_max_thread_instances';
Variable_name Value
performance_schema_max_thread_instances 318
diff --git a/mysql-test/suite/perfschema/r/connect_attrs.result b/mysql-test/suite/perfschema/r/connect_attrs.result
index 5e45a4cd900..eb83cb5e886 100644
--- a/mysql-test/suite/perfschema/r/connect_attrs.result
+++ b/mysql-test/suite/perfschema/r/connect_attrs.result
@@ -38,9 +38,11 @@ FROM performance_schema.session_connect_attrs;
COUNT(DISTINCT PROCESSLIST_ID)
2
connection non_privileged_user;
+# must return 1
SELECT COUNT(DISTINCT PROCESSLIST_ID)
FROM performance_schema.session_account_connect_attrs;
-ERROR 42000: SELECT command denied to user 'wl5924'@'localhost' for table 'session_account_connect_attrs'
+COUNT(DISTINCT PROCESSLIST_ID)
+1
SELECT COUNT(DISTINCT PROCESSLIST_ID)
FROM performance_schema.session_connect_attrs;
ERROR 42000: SELECT command denied to user 'wl5924'@'localhost' for table 'session_connect_attrs'
diff --git a/mysql-test/suite/perfschema/r/connection_type_notwin.result b/mysql-test/suite/perfschema/r/connection_type_notwin.result
new file mode 100644
index 00000000000..f8b6bfd0358
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/connection_type_notwin.result
@@ -0,0 +1,82 @@
+"Default connection"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER root
+PROCESSLIST_HOST localhost
+CONNECTION_TYPE Socket
+create user 'root'@'santa.claus.ipv4.example.com';
+grant select on *.* to 'root'@'santa.claus.ipv4.example.com';
+create user 'rootssl'@'santa.claus.ipv4.example.com'
+ require SSL;
+grant select on *.* to 'rootssl'@'santa.claus.ipv4.example.com';
+set @old_dbug=@@global.debug_dbug;
+set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4";
+TRUNCATE TABLE mysql.general_log;
+SET @old_log_output= @@global.log_output;
+SET @old_general_log= @@global.general_log;
+SET @old_general_log_file= @@global.general_log_file;
+SET GLOBAL general_log_file = '.../log/rewrite_general_con.log';
+SET GLOBAL log_output = 'FILE,TABLE';
+SET GLOBAL general_log= 'ON';
+connect con1, localhost, root,,;
+"Connection con1"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER root
+PROCESSLIST_HOST localhost
+CONNECTION_TYPE Socket
+disconnect con1;
+connect con2, "127.0.0.1", root,,test,$MASTER_MYPORT,;
+"Connection con2"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER root
+PROCESSLIST_HOST santa.claus.ipv4.example.com
+CONNECTION_TYPE TCP/IP
+disconnect con2;
+connect con3, "127.0.0.1", rootssl,,test,$MASTER_MYPORT,,SSL;
+"Connection con3"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER rootssl
+PROCESSLIST_HOST santa.claus.ipv4.example.com
+CONNECTION_TYPE SSL/TLS
+disconnect con3;
+connection default;
+SET GLOBAL general_log= 'OFF';
+CREATE TABLE test_log (argument TEXT);
+LOAD DATA LOCAL INFILE '.../log/rewrite_general_con.log'
+ INTO TABLE test_log FIELDS TERMINATED BY '\n' LINES TERMINATED BY '\n';
+select user_host, command_type, argument from mysql.general_log
+where command_type = "Connect";
+user_host [root] @ localhost []
+command_type Connect
+argument root@localhost on test using Socket
+user_host [root] @ santa.claus.ipv4.example.com [192.0.2.4]
+command_type Connect
+argument root@santa.claus.ipv4.example.com on test using TCP/IP
+user_host [rootssl] @ santa.claus.ipv4.example.com [192.0.2.4]
+command_type Connect
+argument rootssl@santa.claus.ipv4.example.com on test using SSL/TLS
+select substring(argument, locate("Connect", argument)) from test_log
+where argument like "%Connect%on test%";
+substring(argument, locate("Connect", argument)) Connect root@localhost on test using Socket
+substring(argument, locate("Connect", argument)) Connect root@santa.claus.ipv4.example.com on test using TCP/IP
+substring(argument, locate("Connect", argument)) Connect rootssl@santa.claus.ipv4.example.com on test using SSL/TLS
+DROP TABLE test_log;
+SET GLOBAL general_log_file= @old_general_log_file;
+SET GLOBAL general_log= @old_general_log;
+SET GLOBAL log_output= @old_log_output;
+set global debug_dbug= @old_dbug;
+revoke select on *.* from 'root'@'santa.claus.ipv4.example.com';
+drop user 'root'@'santa.claus.ipv4.example.com';
+revoke select on *.* from 'rootssl'@'santa.claus.ipv4.example.com';
+drop user 'rootssl'@'santa.claus.ipv4.example.com';
diff --git a/mysql-test/suite/perfschema/r/connection_type_win.result b/mysql-test/suite/perfschema/r/connection_type_win.result
new file mode 100644
index 00000000000..1852cefd483
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/connection_type_win.result
@@ -0,0 +1,81 @@
+"Default connection"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER root
+PROCESSLIST_HOST localhost
+CONNECTION_TYPE TCP/IP
+create user 'root'@'santa.claus.ipv4.example.com';
+grant select on *.* to 'root'@'santa.claus.ipv4.example.com';
+create user 'rootssl'@'santa.claus.ipv4.example.com'
+ require SSL;
+grant select on *.* to 'rootssl'@'santa.claus.ipv4.example.com';
+set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4";
+TRUNCATE TABLE mysql.general_log;
+SET @old_log_output= @@global.log_output;
+SET @old_general_log= @@global.general_log;
+SET @old_general_log_file= @@global.general_log_file;
+SET GLOBAL general_log_file = '.../log/rewrite_general_con.log';
+SET GLOBAL log_output = 'FILE,TABLE';
+SET GLOBAL general_log= 'ON';
+connect con1, localhost, root,,;
+"Connection con1"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER root
+PROCESSLIST_HOST santa.claus.ipv4.example.com
+CONNECTION_TYPE TCP/IP
+disconnect con1;
+connect con2, "127.0.0.1", root,,test,$MASTER_MYPORT,;
+"Connection con2"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER root
+PROCESSLIST_HOST santa.claus.ipv4.example.com
+CONNECTION_TYPE TCP/IP
+disconnect con2;
+connect con3, "127.0.0.1", rootssl,,test,$MASTER_MYPORT,,SSL;
+"Connection con3"
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME thread/sql/one_connection
+PROCESSLIST_USER rootssl
+PROCESSLIST_HOST santa.claus.ipv4.example.com
+CONNECTION_TYPE SSL/TLS
+disconnect con3;
+connection default;
+SET GLOBAL general_log= 'OFF';
+CREATE TABLE test_log (argument TEXT);
+LOAD DATA LOCAL INFILE '.../log/rewrite_general_con.log'
+ INTO TABLE test_log FIELDS TERMINATED BY '\n' LINES TERMINATED BY '\n';
+select user_host, command_type, argument from mysql.general_log
+where command_type = "Connect";
+user_host [root] @ santa.claus.ipv4.example.com [192.0.2.4]
+command_type Connect
+argument root@santa.claus.ipv4.example.com on test using TCP/IP
+user_host [root] @ santa.claus.ipv4.example.com [192.0.2.4]
+command_type Connect
+argument root@santa.claus.ipv4.example.com on test using TCP/IP
+user_host [rootssl] @ santa.claus.ipv4.example.com [192.0.2.4]
+command_type Connect
+argument rootssl@santa.claus.ipv4.example.com on test using SSL/TLS
+select substring(argument, locate("Connect", argument)) from test_log
+where argument like "%Connect%on test%";
+substring(argument, locate("Connect", argument)) Connect root@santa.claus.ipv4.example.com on test using TCP/IP
+substring(argument, locate("Connect", argument)) Connect root@santa.claus.ipv4.example.com on test using TCP/IP
+substring(argument, locate("Connect", argument)) Connect rootssl@santa.claus.ipv4.example.com on test using SSL/TLS
+DROP TABLE test_log;
+SET GLOBAL general_log_file= @old_general_log_file;
+SET GLOBAL general_log= @old_general_log;
+SET GLOBAL log_output= @old_log_output;
+set global debug_dbug= default;
+revoke select on *.* from 'root'@'santa.claus.ipv4.example.com';
+drop user 'root'@'santa.claus.ipv4.example.com';
+revoke select on *.* from 'rootssl'@'santa.claus.ipv4.example.com';
+drop user 'rootssl'@'santa.claus.ipv4.example.com';
diff --git a/mysql-test/suite/perfschema/r/csv_table_io.result b/mysql-test/suite/perfschema/r/csv_table_io.result
index 84b39119dd8..0e50dc24927 100644
--- a/mysql-test/suite/perfschema/r/csv_table_io.result
+++ b/mysql-test/suite/perfschema/r/csv_table_io.result
@@ -70,63 +70,69 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/ddl_esms_by_program.result b/mysql-test/suite/perfschema/r/ddl_esms_by_program.result
new file mode 100644
index 00000000000..66e49f8aeea
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_esms_by_program.result
@@ -0,0 +1,9 @@
+alter table performance_schema.events_statements_summary_by_program
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_statements_summary_by_program;
+ALTER TABLE performance_schema.events_statements_summary_by_program 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.events_statements_summary_by_program(OBJECT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ets_by_account_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ets_by_account_by_event_name.result
new file mode 100644
index 00000000000..23bd048d8a6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ets_by_account_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.events_transactions_summary_by_account_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_summary_by_account_by_event_name;
+ALTER TABLE performance_schema.events_transactions_summary_by_account_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.events_transactions_summary_by_account_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ets_by_host_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ets_by_host_by_event_name.result
new file mode 100644
index 00000000000..7e3b5ccd70c
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ets_by_host_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.events_transactions_summary_by_host_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_summary_by_host_by_event_name;
+ALTER TABLE performance_schema.events_transactions_summary_by_host_by_event_name
+ADD INDEX test_index(HOSTNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.events_transactions_summary_by_host_by_event_name(HOSTNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ets_by_thread_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ets_by_thread_by_event_name.result
new file mode 100644
index 00000000000..bd3c57f9257
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ets_by_thread_by_event_name.result
@@ -0,0 +1,9 @@
+alter table performance_schema.events_transactions_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_transactions_summary_by_thread_by_event_name;
+ALTER TABLE performance_schema.events_transactions_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_transactions_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_ets_by_user_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ets_by_user_by_event_name.result
new file mode 100644
index 00000000000..981de1a7b19
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ets_by_user_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.events_transactions_summary_by_user_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_summary_by_user_by_event_name;
+ALTER TABLE performance_schema.events_transactions_summary_by_user_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.events_transactions_summary_by_user_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ets_global_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ets_global_by_event_name.result
new file mode 100644
index 00000000000..13606ace640
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ets_global_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.events_transactions_summary_global_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_summary_global_by_event_name;
+ALTER TABLE performance_schema.events_transactions_summary_global_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_transactions_summary_global_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_events_stages_current.result b/mysql-test/suite/perfschema/r/ddl_events_stages_current.result
index d9094ffb366..bc5921d900a 100644
--- a/mysql-test/suite/perfschema/r/ddl_events_stages_current.result
+++ b/mysql-test/suite/perfschema/r/ddl_events_stages_current.result
@@ -5,3 +5,6 @@ ALTER TABLE performance_schema.events_stages_current ADD INDEX test_index(EVENT_
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.events_stages_current(EVENT_ID);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT IS_GENERATED GENERATION_EXPRESSION
+def performance_schema events_stages_current WORK_COMPLETED 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_current WORK_ESTIMATED 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
diff --git a/mysql-test/suite/perfschema/r/ddl_events_stages_history.result b/mysql-test/suite/perfschema/r/ddl_events_stages_history.result
index 0b6d6df06d2..f099964b4df 100644
--- a/mysql-test/suite/perfschema/r/ddl_events_stages_history.result
+++ b/mysql-test/suite/perfschema/r/ddl_events_stages_history.result
@@ -5,3 +5,6 @@ ALTER TABLE performance_schema.events_stages_history ADD INDEX test_index(EVENT_
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.events_stages_history(EVENT_ID);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT IS_GENERATED GENERATION_EXPRESSION
+def performance_schema events_stages_history WORK_COMPLETED 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history WORK_ESTIMATED 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
diff --git a/mysql-test/suite/perfschema/r/ddl_events_stages_history_long.result b/mysql-test/suite/perfschema/r/ddl_events_stages_history_long.result
index 7843f61aa0d..f7f6d319564 100644
--- a/mysql-test/suite/perfschema/r/ddl_events_stages_history_long.result
+++ b/mysql-test/suite/perfschema/r/ddl_events_stages_history_long.result
@@ -5,3 +5,6 @@ ALTER TABLE performance_schema.events_stages_history_long ADD INDEX test_index(E
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.events_stages_history_long(EVENT_ID);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT IS_GENERATED GENERATION_EXPRESSION
+def performance_schema events_stages_history_long WORK_COMPLETED 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history_long WORK_ESTIMATED 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
diff --git a/mysql-test/suite/perfschema/r/ddl_events_transactions_current.result b/mysql-test/suite/perfschema/r/ddl_events_transactions_current.result
new file mode 100644
index 00000000000..6d4d280118f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_events_transactions_current.result
@@ -0,0 +1,7 @@
+alter table performance_schema.events_transactions_current add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_current;
+ALTER TABLE performance_schema.events_transactions_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_transactions_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_transactions_history.result b/mysql-test/suite/perfschema/r/ddl_events_transactions_history.result
new file mode 100644
index 00000000000..dbbac3ea9df
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_events_transactions_history.result
@@ -0,0 +1,7 @@
+alter table performance_schema.events_transactions_history add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_history;
+ALTER TABLE performance_schema.events_transactions_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_transactions_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_transactions_history_long.result b/mysql-test/suite/perfschema/r/ddl_events_transactions_history_long.result
new file mode 100644
index 00000000000..7a4a5f0542e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_events_transactions_history_long.result
@@ -0,0 +1,7 @@
+alter table performance_schema.events_transactions_history_long add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.events_transactions_history_long;
+ALTER TABLE performance_schema.events_transactions_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_transactions_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_global_status.result b/mysql-test/suite/perfschema/r/ddl_global_status.result
new file mode 100644
index 00000000000..10af700eadd
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_global_status.result
@@ -0,0 +1,10 @@
+alter table performance_schema.global_status
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.global_status;
+ALTER TABLE performance_schema.global_status
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.global_status(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_global_variables.result b/mysql-test/suite/perfschema/r/ddl_global_variables.result
new file mode 100644
index 00000000000..e15b8166b2b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_global_variables.result
@@ -0,0 +1,11 @@
+alter table performance_schema.global_variables
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.global_variables;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.global_variables
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.global_variables(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_mems_by_account_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_mems_by_account_by_event_name.result
new file mode 100644
index 00000000000..4d7581a7c2e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_mems_by_account_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.memory_summary_by_account_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.memory_summary_by_account_by_event_name;
+ALTER TABLE performance_schema.memory_summary_by_account_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.memory_summary_by_account_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_mems_by_host_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_mems_by_host_by_event_name.result
new file mode 100644
index 00000000000..dae5dd2445c
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_mems_by_host_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.memory_summary_by_host_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.memory_summary_by_host_by_event_name;
+ALTER TABLE performance_schema.memory_summary_by_host_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.memory_summary_by_host_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_mems_by_thread_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_mems_by_thread_by_event_name.result
new file mode 100644
index 00000000000..eae9e7020e3
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_mems_by_thread_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.memory_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.memory_summary_by_thread_by_event_name;
+ALTER TABLE performance_schema.memory_summary_by_thread_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.memory_summary_by_thread_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_mems_by_user_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_mems_by_user_by_event_name.result
new file mode 100644
index 00000000000..de6d52b69e6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_mems_by_user_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.memory_summary_by_user_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.memory_summary_by_user_by_event_name;
+ALTER TABLE performance_schema.memory_summary_by_user_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.memory_summary_by_user_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_mems_global_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_mems_global_by_event_name.result
new file mode 100644
index 00000000000..9ed8b2b6dab
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_mems_global_by_event_name.result
@@ -0,0 +1,10 @@
+alter table performance_schema.memory_summary_global_by_event_name
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.memory_summary_global_by_event_name;
+ALTER TABLE performance_schema.memory_summary_global_by_event_name
+ADD INDEX test_index(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.memory_summary_global_by_event_name(USERNAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_metadata_locks.result b/mysql-test/suite/perfschema/r/ddl_metadata_locks.result
new file mode 100644
index 00000000000..426ec66943e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_metadata_locks.result
@@ -0,0 +1,8 @@
+alter table performance_schema.metadata_locks add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.metadata_locks;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.metadata_locks 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.metadata_locks(TIMER_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_prepared_statements_instances.result b/mysql-test/suite/perfschema/r/ddl_prepared_statements_instances.result
new file mode 100644
index 00000000000..d71e6c1ebf4
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_prepared_statements_instances.result
@@ -0,0 +1,9 @@
+alter table performance_schema.prepared_statements_instances
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.prepared_statements_instances;
+ALTER TABLE performance_schema.prepared_statements_instances ADD INDEX test_index(OWNER_OBJECT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.prepared_statements_instances(OWNER_OBJECT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_applier_configuration.result b/mysql-test/suite/perfschema/r/ddl_replication_applier_configuration.result
new file mode 100644
index 00000000000..db79022cbb4
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_applier_configuration.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_applier_configuration
+ADD COLUMN foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_applier_configuration;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.replication_applier_configuration
+ADD INDEX test_index(desired_delay);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON
+performance_schema.replication_applier_configuration(desired_delay);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_applier_status.result b/mysql-test/suite/perfschema/r/ddl_replication_applier_status.result
new file mode 100644
index 00000000000..a6306e976ba
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_applier_status.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_applier_status
+ADD COLUMN foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_applier_status;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.replication_applier_status
+ADD INDEX test_index(remaining_delay);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON
+performance_schema.replication_applier_status(remaining_delay);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_coordinator.result b/mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_coordinator.result
new file mode 100644
index 00000000000..414e8291ba8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_coordinator.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_applier_status_by_coordinator
+ADD COLUMN foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_applier_status_by_coordinator;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.replication_applier_status_by_coordinator
+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.replication_applier_status_by_coordinator(thread_id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_worker.result b/mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_worker.result
new file mode 100644
index 00000000000..e13b4f978e1
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_applier_status_by_worker.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_applier_status_by_worker
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_applier_status_by_worker;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.replication_applier_status_by_worker
+ADD INDEX test_index(worker_id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON
+performance_schema.replication_applier_status_by_worker(worker_id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_connection_configuration.result b/mysql-test/suite/perfschema/r/ddl_replication_connection_configuration.result
new file mode 100644
index 00000000000..19de9281a13
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_connection_configuration.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_connection_configuration
+ADD COLUMN foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_connection_configuration;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.replication_connection_configuration
+ADD INDEX test_index(HOST);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.replication_connection_configuration(HOST);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_connection_status.result b/mysql-test/suite/perfschema/r/ddl_replication_connection_status.result
new file mode 100644
index 00000000000..4c650b030ed
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_connection_status.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_connection_status
+ADD COLUMN foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_connection_status;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.replication_connection_status
+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.replication_connection_status(Thread_Id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_group_member_stats.result b/mysql-test/suite/perfschema/r/ddl_replication_group_member_stats.result
new file mode 100644
index 00000000000..cab3b0874fa
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_group_member_stats.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_group_member_stats
+ADD COLUMN foo INTEGER;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_group_member_stats;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.replication_group_member_stats
+ADD INDEX test_index(Member_Id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.replication_group_member_stats(Member_Id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_replication_group_members.result b/mysql-test/suite/perfschema/r/ddl_replication_group_members.result
new file mode 100644
index 00000000000..25ed912a11a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_replication_group_members.result
@@ -0,0 +1,11 @@
+ALTER TABLE performance_schema.replication_group_members
+ADD COLUMN foo INTEGER;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+TRUNCATE TABLE performance_schema.replication_group_members;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.replication_group_members
+ADD INDEX test_index(Member_Id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.replication_group_members(Member_Id);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_session_status.result b/mysql-test/suite/perfschema/r/ddl_session_status.result
new file mode 100644
index 00000000000..de5669a3a64
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_session_status.result
@@ -0,0 +1,11 @@
+alter table performance_schema.session_status
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.session_status;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.session_status
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.session_status(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_session_variables.result b/mysql-test/suite/perfschema/r/ddl_session_variables.result
new file mode 100644
index 00000000000..add637059b7
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_session_variables.result
@@ -0,0 +1,11 @@
+alter table performance_schema.session_variables
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.session_variables;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.session_variables
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.session_variables(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_setup_actors.result b/mysql-test/suite/perfschema/r/ddl_setup_actors.result
index 753632eb62d..c17314e4362 100644
--- a/mysql-test/suite/perfschema/r/ddl_setup_actors.result
+++ b/mysql-test/suite/perfschema/r/ddl_setup_actors.result
@@ -14,3 +14,5 @@ ALTER TABLE performance_schema.setup_actors ADD INDEX test_index(HOST);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.setup_actors(HOST);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+ALTER TABLE performance_schema.setup_actors ADD KEY ENA(ENABLED);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_status_by_account.result b/mysql-test/suite/perfschema/r/ddl_status_by_account.result
new file mode 100644
index 00000000000..d21b7ed1e0b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_status_by_account.result
@@ -0,0 +1,10 @@
+alter table performance_schema.status_by_account
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.status_by_account;
+ALTER TABLE performance_schema.status_by_account
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.status_by_account(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_status_by_host.result b/mysql-test/suite/perfschema/r/ddl_status_by_host.result
new file mode 100644
index 00000000000..5e4ba3573e6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_status_by_host.result
@@ -0,0 +1,10 @@
+alter table performance_schema.status_by_host
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.status_by_host;
+ALTER TABLE performance_schema.status_by_host
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.status_by_host(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_status_by_thread.result b/mysql-test/suite/perfschema/r/ddl_status_by_thread.result
new file mode 100644
index 00000000000..2333af91c10
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_status_by_thread.result
@@ -0,0 +1,10 @@
+alter table performance_schema.status_by_thread
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.status_by_thread;
+ALTER TABLE performance_schema.status_by_thread
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.status_by_thread(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_status_by_user.result b/mysql-test/suite/perfschema/r/ddl_status_by_user.result
new file mode 100644
index 00000000000..c7d396db225
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_status_by_user.result
@@ -0,0 +1,10 @@
+alter table performance_schema.status_by_user
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.status_by_user;
+ALTER TABLE performance_schema.status_by_user
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.status_by_user(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_table_handles.result b/mysql-test/suite/perfschema/r/ddl_table_handles.result
new file mode 100644
index 00000000000..79b7c96e2a3
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_table_handles.result
@@ -0,0 +1,8 @@
+alter table performance_schema.table_handles add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.table_handles;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.table_handles 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.table_handles(TIMER_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_uvar_by_thread.result b/mysql-test/suite/perfschema/r/ddl_uvar_by_thread.result
new file mode 100644
index 00000000000..b9961faa221
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_uvar_by_thread.result
@@ -0,0 +1,11 @@
+alter table performance_schema.user_variables_by_thread
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.user_variables_by_thread;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.user_variables_by_thread
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.user_variables_by_thread(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_variables_by_thread.result b/mysql-test/suite/perfschema/r/ddl_variables_by_thread.result
new file mode 100644
index 00000000000..43e2f24f7fc
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_variables_by_thread.result
@@ -0,0 +1,11 @@
+alter table performance_schema.variables_by_thread
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.variables_by_thread;
+ERROR HY000: Invalid performance_schema usage
+ALTER TABLE performance_schema.variables_by_thread
+ADD INDEX test_index(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.variables_by_thread(VARIABLE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/digest_table_full.result b/mysql-test/suite/perfschema/r/digest_table_full.result
index 5c8d2eb23d1..84a7b5c3c7c 100644
--- a/mysql-test/suite/perfschema/r/digest_table_full.result
+++ b/mysql-test/suite/perfschema/r/digest_table_full.result
@@ -114,7 +114,7 @@ SUM_ERRORS FROM performance_schema.events_statements_summary_by_digest;
SCHEMA_NAME DIGEST_TEXT COUNT_STAR SUM_ROWS_AFFECTED SUM_WARNINGS SUM_ERRORS
NULL NULL 55 32 1 2
statements_digest TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 0 0 0
-SHOW VARIABLES LIKE "performance_schema_digests_size";
+SHOW GLOBAL VARIABLES LIKE "performance_schema_digests_size";
Variable_name Value
performance_schema_digests_size 2
SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_digest;
diff --git a/mysql-test/suite/perfschema/r/dml_esms_by_program.result b/mysql-test/suite/perfschema/r/dml_esms_by_program.result
new file mode 100644
index 00000000000..b8c86fe3e45
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_esms_by_program.result
@@ -0,0 +1,27 @@
+select * from performance_schema.events_statements_summary_by_program
+where object_name like 'XXYYZZ%' limit 1;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_STATEMENTS SUM_STATEMENTS_WAIT MIN_STATEMENTS_WAIT AVG_STATEMENTS_WAIT MAX_STATEMENTS_WAIT SUM_LOCK_TIME SUM_ERRORS SUM_WARNINGS SUM_ROWS_AFFECTED SUM_ROWS_SENT SUM_ROWS_EXAMINED SUM_CREATED_TMP_DISK_TABLES SUM_CREATED_TMP_TABLES SUM_SELECT_FULL_JOIN SUM_SELECT_FULL_RANGE_JOIN SUM_SELECT_RANGE SUM_SELECT_RANGE_CHECK SUM_SELECT_SCAN SUM_SORT_MERGE_PASSES SUM_SORT_RANGE SUM_SORT_ROWS SUM_SORT_SCAN SUM_NO_INDEX_USED SUM_NO_GOOD_INDEX_USED
+select * from performance_schema.events_statements_summary_by_program
+where object_name='XXYYZZ';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_STATEMENTS SUM_STATEMENTS_WAIT MIN_STATEMENTS_WAIT AVG_STATEMENTS_WAIT MAX_STATEMENTS_WAIT SUM_LOCK_TIME SUM_ERRORS SUM_WARNINGS SUM_ROWS_AFFECTED SUM_ROWS_SENT SUM_ROWS_EXAMINED SUM_CREATED_TMP_DISK_TABLES SUM_CREATED_TMP_TABLES SUM_SELECT_FULL_JOIN SUM_SELECT_FULL_RANGE_JOIN SUM_SELECT_RANGE SUM_SELECT_RANGE_CHECK SUM_SELECT_SCAN SUM_SORT_MERGE_PASSES SUM_SORT_RANGE SUM_SORT_ROWS SUM_SORT_SCAN SUM_NO_INDEX_USED SUM_NO_GOOD_INDEX_USED
+insert into performance_schema.events_statements_summary_by_program
+set object_name='XXYYZZ', 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_statements_summary_by_program'
+update performance_schema.events_statements_summary_by_program
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_statements_summary_by_program'
+update performance_schema.events_statements_summary_by_program
+set count_star=12 where object_name like "XXYYZZ";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_statements_summary_by_program'
+delete from performance_schema.events_statements_summary_by_program
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_statements_summary_by_program'
+delete from performance_schema.events_statements_summary_by_program;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_statements_summary_by_program'
+LOCK TABLES performance_schema.events_statements_summary_by_program READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_statements_summary_by_program'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_statements_summary_by_program WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_statements_summary_by_program'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ets_by_account_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ets_by_account_by_event_name.result
new file mode 100644
index 00000000000..66a0f733d19
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ets_by_account_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.events_transactions_summary_by_account_by_event_name
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name
+where event_name='FOO';
+insert into performance_schema.events_transactions_summary_by_account_by_event_name
+set event_name='FOO', user='BAR', host='BAZ',
+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_transactions_summary_by_account_by_event_name'
+update performance_schema.events_transactions_summary_by_account_by_event_name
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_account_by_event_name'
+update performance_schema.events_transactions_summary_by_account_by_event_name
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_account_by_event_name'
+delete from performance_schema.events_transactions_summary_by_account_by_event_name
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_account_by_event_name'
+delete from performance_schema.events_transactions_summary_by_account_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_account_by_event_name'
+LOCK TABLES performance_schema.events_transactions_summary_by_account_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_account_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_summary_by_account_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_account_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ets_by_host_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ets_by_host_by_event_name.result
new file mode 100644
index 00000000000..194d8ff0b4b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ets_by_host_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.events_transactions_summary_by_host_by_event_name
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name
+where event_name='FOO';
+insert into performance_schema.events_transactions_summary_by_host_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_transactions_summary_by_host_by_event_name'
+update performance_schema.events_transactions_summary_by_host_by_event_name
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_host_by_event_name'
+update performance_schema.events_transactions_summary_by_host_by_event_name
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_host_by_event_name'
+delete from performance_schema.events_transactions_summary_by_host_by_event_name
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_host_by_event_name'
+delete from performance_schema.events_transactions_summary_by_host_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_host_by_event_name'
+LOCK TABLES performance_schema.events_transactions_summary_by_host_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_host_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_summary_by_host_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_host_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ets_by_thread_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ets_by_thread_by_event_name.result
new file mode 100644
index 00000000000..f096d265457
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ets_by_thread_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name
+where event_name='FOO';
+insert into performance_schema.events_transactions_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_transactions_summary_by_thread_by_event_name'
+update performance_schema.events_transactions_summary_by_thread_by_event_name
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_thread_by_event_name'
+update performance_schema.events_transactions_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_transactions_summary_by_thread_by_event_name'
+delete from performance_schema.events_transactions_summary_by_thread_by_event_name
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_thread_by_event_name'
+delete from performance_schema.events_transactions_summary_by_thread_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_thread_by_event_name'
+LOCK TABLES performance_schema.events_transactions_summary_by_thread_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_thread_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_summary_by_thread_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_thread_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ets_by_user_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ets_by_user_by_event_name.result
new file mode 100644
index 00000000000..11d455a35a7
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ets_by_user_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.events_transactions_summary_by_user_by_event_name
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name
+where event_name='FOO';
+insert into performance_schema.events_transactions_summary_by_user_by_event_name
+set event_name='FOO', user='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 'events_transactions_summary_by_user_by_event_name'
+update performance_schema.events_transactions_summary_by_user_by_event_name
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_user_by_event_name'
+update performance_schema.events_transactions_summary_by_user_by_event_name
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_user_by_event_name'
+delete from performance_schema.events_transactions_summary_by_user_by_event_name
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_user_by_event_name'
+delete from performance_schema.events_transactions_summary_by_user_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_user_by_event_name'
+LOCK TABLES performance_schema.events_transactions_summary_by_user_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_user_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_summary_by_user_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_by_user_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ets_global_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ets_global_by_event_name.result
new file mode 100644
index 00000000000..0f2bd599af8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ets_global_by_event_name.result
@@ -0,0 +1,25 @@
+select * from performance_schema.events_transactions_summary_global_by_event_name
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_summary_global_by_event_name
+where event_name='FOO';
+insert into performance_schema.events_transactions_summary_global_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_transactions_summary_global_by_event_name'
+update performance_schema.events_transactions_summary_global_by_event_name
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_global_by_event_name'
+update performance_schema.events_transactions_summary_global_by_event_name
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_summary_global_by_event_name'
+delete from performance_schema.events_transactions_summary_global_by_event_name
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_global_by_event_name'
+delete from performance_schema.events_transactions_summary_global_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_summary_global_by_event_name'
+LOCK TABLES performance_schema.events_transactions_summary_global_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_global_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_summary_global_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_summary_global_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_events_transactions_current.result b/mysql-test/suite/perfschema/r/dml_events_transactions_current.result
new file mode 100644
index 00000000000..9a6c4f3bd58
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_events_transactions_current.result
@@ -0,0 +1,25 @@
+select * from performance_schema.events_transactions_current
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_current
+where event_name='FOO';
+insert into performance_schema.events_transactions_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_transactions_current'
+update performance_schema.events_transactions_current
+set timer_start=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_current'
+update performance_schema.events_transactions_current
+set timer_start=12 where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_current'
+delete from performance_schema.events_transactions_current
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_current'
+delete from performance_schema.events_transactions_current;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_current'
+LOCK TABLES performance_schema.events_transactions_current READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_current'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_current WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_current'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_events_transactions_history.result b/mysql-test/suite/perfschema/r/dml_events_transactions_history.result
new file mode 100644
index 00000000000..000e6a26753
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_events_transactions_history.result
@@ -0,0 +1,29 @@
+select * from performance_schema.events_transactions_history
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_history
+where event_name='FOO';
+select * from performance_schema.events_transactions_history
+where event_name in ('transaction') order by timer_wait limit 1;
+select * from performance_schema.events_transactions_history
+where event_name in ('transaction') order by timer_wait desc limit 1;
+insert into performance_schema.events_transactions_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_transactions_history'
+update performance_schema.events_transactions_history
+set timer_start=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_history'
+update performance_schema.events_transactions_history
+set timer_start=12 where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_history'
+delete from performance_schema.events_transactions_history
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_history'
+delete from performance_schema.events_transactions_history;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_history'
+LOCK TABLES performance_schema.events_transactions_history READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_history'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_history WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_history'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_events_transactions_history_long.result b/mysql-test/suite/perfschema/r/dml_events_transactions_history_long.result
new file mode 100644
index 00000000000..e954bcd1be1
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_events_transactions_history_long.result
@@ -0,0 +1,29 @@
+select * from performance_schema.events_transactions_history_long
+where event_name in ('transaction') limit 1;
+select * from performance_schema.events_transactions_history_long
+where event_name='FOO';
+select * from performance_schema.events_transactions_history_long
+where event_name in ('transaction') order by timer_wait limit 1;
+select * from performance_schema.events_transactions_history_long
+where event_name in ('transaction') order by timer_wait desc limit 1;
+insert into performance_schema.events_transactions_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_transactions_history_long'
+update performance_schema.events_transactions_history_long
+set timer_start=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_history_long'
+update performance_schema.events_transactions_history_long
+set timer_start=12 where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'events_transactions_history_long'
+delete from performance_schema.events_transactions_history_long
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_history_long'
+delete from performance_schema.events_transactions_history_long;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'events_transactions_history_long'
+LOCK TABLES performance_schema.events_transactions_history_long READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_history_long'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.events_transactions_history_long WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'events_transactions_history_long'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_file_instances.result b/mysql-test/suite/perfschema/r/dml_file_instances.result
index d2564cb58dd..a13c570a5ad 100644
--- a/mysql-test/suite/perfschema/r/dml_file_instances.result
+++ b/mysql-test/suite/perfschema/r/dml_file_instances.result
@@ -18,3 +18,62 @@ UNLOCK TABLES;
LOCK TABLES performance_schema.file_instances WRITE;
ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'file_instances'
UNLOCK TABLES;
+###
+### Bug#26152751: INNODB LEAKS MEMORY, PERFORMANCE_SCHEMA FILE_INSTANCES
+### #SQL-IB3129987-252773.IBD
+###
+CREATE DATABASE db_26152751;
+USE db_26152751;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+CREATE TABLE t_db_26152751 (a INT) ENGINE=MYISAM;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751.frm
+t_db_26152751.MYI
+t_db_26152751.MYD
+RENAME TABLE t_db_26152751 to t_db_26152751_new;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751_new.frm
+t_db_26152751_new.MYI
+t_db_26152751_new.MYD
+RENAME TABLE t_db_26152751_new to t_db_26152751;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751.frm
+t_db_26152751.MYI
+t_db_26152751.MYD
+ALTER TABLE t_db_26152751 ADD COLUMN b INT;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751.frm
+t_db_26152751.MYI
+t_db_26152751.MYD
+DROP TABLE t_db_26152751;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+CREATE TABLE t_db_26152751 (a INT) ENGINE=INNODB;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751.frm
+t_db_26152751.ibd
+RENAME TABLE t_db_26152751 to t_db_26152751_new;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751_new.frm
+t_db_26152751_new.ibd
+RENAME TABLE t_db_26152751_new to t_db_26152751;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751.frm
+t_db_26152751.ibd
+ALTER TABLE t_db_26152751 ADD COLUMN b INT;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+t_db_26152751.frm
+t_db_26152751.ibd
+DROP TABLE t_db_26152751;
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+FILE_NAME
+DROP DATABASE db_26152751;
diff --git a/mysql-test/suite/perfschema/r/dml_global_status.result b/mysql-test/suite/perfschema/r/dml_global_status.result
new file mode 100644
index 00000000000..90b7ac8147f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_global_status.result
@@ -0,0 +1,21 @@
+select * from performance_schema.global_status
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.global_status
+where variable_name='FOO';
+insert into performance_schema.global_status
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'global_status'
+update performance_schema.global_status
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'global_status'
+delete from performance_schema.global_status
+where variable_name <> 'FOO';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'global_status'
+delete from performance_schema.global_status;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'global_status'
+LOCK TABLES performance_schema.global_status READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'global_status'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.global_status WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'global_status'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_global_variables.result b/mysql-test/suite/perfschema/r/dml_global_variables.result
new file mode 100644
index 00000000000..08d15af34d3
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_global_variables.result
@@ -0,0 +1,21 @@
+select * from performance_schema.global_variables
+where variable_name like 'autocommit%' limit 1;
+select * from performance_schema.global_variables
+where variable_name='FOO';
+insert into performance_schema.global_variables
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'global_variables'
+update performance_schema.global_variables
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'global_variables'
+delete from performance_schema.global_variables
+where variable_name <> 'FOO';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'global_variables'
+delete from performance_schema.global_variables;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'global_variables'
+LOCK TABLES performance_schema.global_variables READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'global_variables'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.global_variables WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'global_variables'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_handler.result b/mysql-test/suite/perfschema/r/dml_handler.result
index ce0f87e7733..57d0f05cd8d 100644
--- a/mysql-test/suite/perfschema/r/dml_handler.result
+++ b/mysql-test/suite/perfschema/r/dml_handler.result
@@ -12,114 +12,198 @@ Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be
# For each table in the performance schema, attempt HANDLER...OPEN,
# which should fail with an error 1031, ER_ILLEGAL_HA.
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=52;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=80;
+HANDLER performance_schema.user_variables_by_thread OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`user_variables_by_thread` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=79;
HANDLER performance_schema.users OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`users` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=51;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=78;
HANDLER performance_schema.threads OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`threads` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=50;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=77;
HANDLER performance_schema.table_lock_waits_summary_by_table OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`table_lock_waits_summary_by_table` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=49;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=76;
HANDLER performance_schema.table_io_waits_summary_by_table OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`table_io_waits_summary_by_table` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=48;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=75;
HANDLER performance_schema.table_io_waits_summary_by_index_usage OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`table_io_waits_summary_by_index_usage` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=47;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=74;
+HANDLER performance_schema.table_handles OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`table_handles` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=73;
+HANDLER performance_schema.status_by_user OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`status_by_user` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=72;
+HANDLER performance_schema.status_by_thread OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`status_by_thread` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=71;
+HANDLER performance_schema.status_by_host OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`status_by_host` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=70;
+HANDLER performance_schema.status_by_account OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`status_by_account` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=69;
HANDLER performance_schema.socket_summary_by_instance OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`socket_summary_by_instance` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=46;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=68;
HANDLER performance_schema.socket_summary_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`socket_summary_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=45;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=67;
HANDLER performance_schema.socket_instances OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`socket_instances` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=44;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=66;
HANDLER performance_schema.setup_timers OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`setup_timers` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=43;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=65;
HANDLER performance_schema.setup_objects OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`setup_objects` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=42;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=64;
HANDLER performance_schema.setup_instruments OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`setup_instruments` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=41;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=63;
HANDLER performance_schema.setup_consumers OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`setup_consumers` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=40;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=62;
HANDLER performance_schema.setup_actors OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`setup_actors` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=39;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=61;
+HANDLER performance_schema.session_status OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`session_status` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=60;
HANDLER performance_schema.session_connect_attrs OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`session_connect_attrs` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=38;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=59;
HANDLER performance_schema.session_account_connect_attrs OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`session_account_connect_attrs` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=37;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=58;
HANDLER performance_schema.rwlock_instances OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`rwlock_instances` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=36;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=57;
+HANDLER performance_schema.replication_connection_configuration OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`replication_connection_configuration` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=56;
+HANDLER performance_schema.replication_applier_status_by_coordinator OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`replication_applier_status_by_coordinator` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=55;
+HANDLER performance_schema.replication_applier_status OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`replication_applier_status` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=54;
+HANDLER performance_schema.replication_applier_configuration OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`replication_applier_configuration` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=53;
+HANDLER performance_schema.prepared_statements_instances OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`prepared_statements_instances` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=52;
HANDLER performance_schema.performance_timers OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`performance_timers` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=35;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=51;
HANDLER performance_schema.objects_summary_global_by_type OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`objects_summary_global_by_type` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=34;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=50;
HANDLER performance_schema.mutex_instances OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`mutex_instances` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=33;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=49;
+HANDLER performance_schema.metadata_locks OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`metadata_locks` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=48;
+HANDLER performance_schema.memory_summary_global_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`memory_summary_global_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=47;
+HANDLER performance_schema.memory_summary_by_user_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`memory_summary_by_user_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=46;
+HANDLER performance_schema.memory_summary_by_thread_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`memory_summary_by_thread_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=45;
+HANDLER performance_schema.memory_summary_by_host_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`memory_summary_by_host_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=44;
+HANDLER performance_schema.memory_summary_by_account_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`memory_summary_by_account_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=43;
HANDLER performance_schema.host_cache OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`host_cache` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=32;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=42;
HANDLER performance_schema.hosts OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`hosts` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=31;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=41;
+HANDLER performance_schema.global_status OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`global_status` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=40;
HANDLER performance_schema.file_summary_by_instance OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`file_summary_by_instance` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=30;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=39;
HANDLER performance_schema.file_summary_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`file_summary_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=29;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=38;
HANDLER performance_schema.file_instances OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`file_instances` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=28;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=37;
HANDLER performance_schema.events_waits_summary_global_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_summary_global_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=27;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=36;
HANDLER performance_schema.events_waits_summary_by_user_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_summary_by_user_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=26;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=35;
HANDLER performance_schema.events_waits_summary_by_thread_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_summary_by_thread_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=25;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=34;
HANDLER performance_schema.events_waits_summary_by_instance OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_summary_by_instance` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=24;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=33;
HANDLER performance_schema.events_waits_summary_by_host_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_summary_by_host_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=23;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=32;
HANDLER performance_schema.events_waits_summary_by_account_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_summary_by_account_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=22;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=31;
HANDLER performance_schema.events_waits_history_long OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_history_long` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=21;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=30;
HANDLER performance_schema.events_waits_history OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_history` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=20;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=29;
HANDLER performance_schema.events_waits_current OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_waits_current` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=19;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=28;
+HANDLER performance_schema.events_transactions_summary_global_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_summary_global_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=27;
+HANDLER performance_schema.events_transactions_summary_by_user_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_summary_by_user_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=26;
+HANDLER performance_schema.events_transactions_summary_by_thread_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_summary_by_thread_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=25;
+HANDLER performance_schema.events_transactions_summary_by_host_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_summary_by_host_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=24;
+HANDLER performance_schema.events_transactions_summary_by_account_by_event_name OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_summary_by_account_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=23;
+HANDLER performance_schema.events_transactions_history_long OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_history_long` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=22;
+HANDLER performance_schema.events_transactions_history OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_history` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=21;
+HANDLER performance_schema.events_transactions_current OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_transactions_current` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=20;
HANDLER performance_schema.events_statements_summary_global_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_statements_summary_global_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=18;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=19;
HANDLER performance_schema.events_statements_summary_by_user_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_statements_summary_by_user_by_event_name` doesn't have this option
-SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=17;
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=18;
HANDLER performance_schema.events_statements_summary_by_thread_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_statements_summary_by_thread_by_event_name` doesn't have this option
+SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=17;
+HANDLER performance_schema.events_statements_summary_by_program OPEN;
+ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_statements_summary_by_program` doesn't have this option
SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=16;
HANDLER performance_schema.events_statements_summary_by_host_by_event_name OPEN;
ERROR HY000: Storage engine PERFORMANCE_SCHEMA of the table `performance_schema`.`events_statements_summary_by_host_by_event_name` doesn't have this option
diff --git a/mysql-test/suite/perfschema/r/dml_mems_by_account_by_event_name.result b/mysql-test/suite/perfschema/r/dml_mems_by_account_by_event_name.result
new file mode 100644
index 00000000000..6333ae9c3c3
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_mems_by_account_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.memory_summary_by_account_by_event_name
+where event_name like 'memory/%' limit 1;
+select * from performance_schema.memory_summary_by_account_by_event_name
+where event_name='FOO';
+insert into performance_schema.memory_summary_by_account_by_event_name
+set event_name='FOO', user='BAR', host='BAZ',
+count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+sum_number_of_bytes_free=4, low_count_used=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+update performance_schema.memory_summary_by_account_by_event_name
+set count_alloc=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+update performance_schema.memory_summary_by_account_by_event_name
+set count_alloc=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+delete from performance_schema.memory_summary_by_account_by_event_name
+where count_alloc=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+delete from performance_schema.memory_summary_by_account_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+LOCK TABLES performance_schema.memory_summary_by_account_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.memory_summary_by_account_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_account_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_mems_by_host_by_event_name.result b/mysql-test/suite/perfschema/r/dml_mems_by_host_by_event_name.result
new file mode 100644
index 00000000000..6e2c855c581
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_mems_by_host_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.memory_summary_by_host_by_event_name
+where event_name like 'memory/%' limit 1;
+select * from performance_schema.memory_summary_by_host_by_event_name
+where event_name='FOO';
+insert into performance_schema.memory_summary_by_host_by_event_name
+set event_name='FOO', host='BAZ',
+count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+sum_number_of_bytes_free=4, low_count_used=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+update performance_schema.memory_summary_by_host_by_event_name
+set count_alloc=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+update performance_schema.memory_summary_by_host_by_event_name
+set count_alloc=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+delete from performance_schema.memory_summary_by_host_by_event_name
+where count_alloc=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+delete from performance_schema.memory_summary_by_host_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+LOCK TABLES performance_schema.memory_summary_by_host_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.memory_summary_by_host_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_host_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_mems_by_thread_by_event_name.result b/mysql-test/suite/perfschema/r/dml_mems_by_thread_by_event_name.result
new file mode 100644
index 00000000000..f1576b22896
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_mems_by_thread_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.memory_summary_by_thread_by_event_name
+where event_name like 'memory/%' limit 1;
+select * from performance_schema.memory_summary_by_thread_by_event_name
+where event_name='FOO';
+insert into performance_schema.memory_summary_by_thread_by_event_name
+set event_name='FOO', thread_id=12,
+count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+sum_number_of_bytes_free=4, low_count_used=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+update performance_schema.memory_summary_by_thread_by_event_name
+set count_alloc=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+update performance_schema.memory_summary_by_thread_by_event_name
+set count_alloc=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+delete from performance_schema.memory_summary_by_thread_by_event_name
+where count_alloc=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+delete from performance_schema.memory_summary_by_thread_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+LOCK TABLES performance_schema.memory_summary_by_thread_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.memory_summary_by_thread_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_thread_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_mems_by_user_by_event_name.result b/mysql-test/suite/perfschema/r/dml_mems_by_user_by_event_name.result
new file mode 100644
index 00000000000..3beab7f9ba4
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_mems_by_user_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.memory_summary_by_user_by_event_name
+where event_name like 'memory/%' limit 1;
+select * from performance_schema.memory_summary_by_user_by_event_name
+where event_name='FOO';
+insert into performance_schema.memory_summary_by_user_by_event_name
+set event_name='FOO', user='BAR',
+count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+sum_number_of_bytes_free=4, low_count_used=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+update performance_schema.memory_summary_by_user_by_event_name
+set count_alloc=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+update performance_schema.memory_summary_by_user_by_event_name
+set count_alloc=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+delete from performance_schema.memory_summary_by_user_by_event_name
+where count_alloc=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+delete from performance_schema.memory_summary_by_user_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+LOCK TABLES performance_schema.memory_summary_by_user_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.memory_summary_by_user_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_by_user_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_mems_global_by_event_name.result b/mysql-test/suite/perfschema/r/dml_mems_global_by_event_name.result
new file mode 100644
index 00000000000..06ac00d1d8f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_mems_global_by_event_name.result
@@ -0,0 +1,26 @@
+select * from performance_schema.memory_summary_global_by_event_name
+where event_name like 'memory/%' limit 1;
+select * from performance_schema.memory_summary_global_by_event_name
+where event_name='FOO';
+insert into performance_schema.memory_summary_global_by_event_name
+set event_name='FOO',
+count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+sum_number_of_bytes_free=4, low_count_used=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+update performance_schema.memory_summary_global_by_event_name
+set count_alloc=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+update performance_schema.memory_summary_global_by_event_name
+set count_alloc=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+delete from performance_schema.memory_summary_global_by_event_name
+where count_alloc=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+delete from performance_schema.memory_summary_global_by_event_name;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+LOCK TABLES performance_schema.memory_summary_global_by_event_name READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.memory_summary_global_by_event_name WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'memory_summary_global_by_event_name'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_metadata_locks.result b/mysql-test/suite/perfschema/r/dml_metadata_locks.result
new file mode 100644
index 00000000000..03f62bc95c5
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_metadata_locks.result
@@ -0,0 +1,21 @@
+select * from performance_schema.metadata_locks;
+select * from performance_schema.metadata_locks
+where object_name='foo';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN LOCK_TYPE LOCK_DURATION LOCK_STATUS SOURCE OWNER_THREAD_ID OWNER_EVENT_ID
+insert into performance_schema.metadata_locks
+set object_name='FOO', owner_thread_id=1;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'metadata_locks'
+update performance_schema.metadata_locks
+set owner_thread_id=12 where object_name='foo';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'metadata_locks'
+delete from performance_schema.metadata_locks;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'metadata_locks'
+delete from performance_schema.metadata_locks
+where timer_name='CYCLE';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'metadata_locks'
+LOCK TABLES performance_schema.metadata_locks READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'metadata_locks'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.metadata_locks WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'metadata_locks'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_prepared_statements_instances.result b/mysql-test/suite/perfschema/r/dml_prepared_statements_instances.result
new file mode 100644
index 00000000000..dbccb963a61
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_prepared_statements_instances.result
@@ -0,0 +1,26 @@
+select * from performance_schema.prepared_statements_instances
+where owner_object_name like 'XXYYZZ%' limit 1;
+OBJECT_INSTANCE_BEGIN STATEMENT_ID STATEMENT_NAME SQL_TEXT OWNER_THREAD_ID OWNER_EVENT_ID OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME TIMER_PREPARE COUNT_REPREPARE COUNT_EXECUTE SUM_TIMER_EXECUTE MIN_TIMER_EXECUTE AVG_TIMER_EXECUTE MAX_TIMER_EXECUTE SUM_LOCK_TIME SUM_ERRORS SUM_WARNINGS SUM_ROWS_AFFECTED SUM_ROWS_SENT SUM_ROWS_EXAMINED SUM_CREATED_TMP_DISK_TABLES SUM_CREATED_TMP_TABLES SUM_SELECT_FULL_JOIN SUM_SELECT_FULL_RANGE_JOIN SUM_SELECT_RANGE SUM_SELECT_RANGE_CHECK SUM_SELECT_SCAN SUM_SORT_MERGE_PASSES SUM_SORT_RANGE SUM_SORT_ROWS SUM_SORT_SCAN SUM_NO_INDEX_USED SUM_NO_GOOD_INDEX_USED
+select * from performance_schema.prepared_statements_instances
+where owner_object_name='XXYYZZ';
+OBJECT_INSTANCE_BEGIN STATEMENT_ID STATEMENT_NAME SQL_TEXT OWNER_THREAD_ID OWNER_EVENT_ID OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME TIMER_PREPARE COUNT_REPREPARE COUNT_EXECUTE SUM_TIMER_EXECUTE MIN_TIMER_EXECUTE AVG_TIMER_EXECUTE MAX_TIMER_EXECUTE SUM_LOCK_TIME SUM_ERRORS SUM_WARNINGS SUM_ROWS_AFFECTED SUM_ROWS_SENT SUM_ROWS_EXAMINED SUM_CREATED_TMP_DISK_TABLES SUM_CREATED_TMP_TABLES SUM_SELECT_FULL_JOIN SUM_SELECT_FULL_RANGE_JOIN SUM_SELECT_RANGE SUM_SELECT_RANGE_CHECK SUM_SELECT_SCAN SUM_SORT_MERGE_PASSES SUM_SORT_RANGE SUM_SORT_ROWS SUM_SORT_SCAN SUM_NO_INDEX_USED SUM_NO_GOOD_INDEX_USED
+insert into performance_schema.prepared_statements_instances
+set owner_object_name='XXYYZZ', count_execute=1, sum_timer_execute=2,
+min_timer_execute=3, avg_timer_execute=4, max_timer_execute=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+update performance_schema.prepared_statements_instances set count_execute=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+update performance_schema.prepared_statements_instances
+set count_execute=12 where owner_object_name like "XXYYZZ";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+delete from performance_schema.prepared_statements_instances
+where count_execute=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+delete from performance_schema.prepared_statements_instances;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+LOCK TABLES performance_schema.prepared_statements_instances READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.prepared_statements_instances WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'prepared_statements_instances'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_applier_configuration.result b/mysql-test/suite/perfschema/r/dml_replication_applier_configuration.result
new file mode 100644
index 00000000000..0e5711b5732
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_applier_configuration.result
@@ -0,0 +1,21 @@
+SELECT * FROM performance_schema.replication_applier_configuration
+LIMIT 1;
+sELECT * FROM performance_schema.replication_applier_configuration
+WHERE desired_delay=12;
+INSERT INTO performance_schema.replication_applier_configuration
+SET desired_delay=2;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_applier_configuration'
+UPDATE performance_schema.replication_applier_configuration
+SET desired_delay=12 WHERE desired_delay=2;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_configuration'
+DELETE FROM performance_schema.replication_applier_configuration
+WHERE desired_delay=12;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_configuration'
+DELETE FROM performance_schema.replication_applier_configuration;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_configuration'
+LOCK TABLES performance_schema.replication_applier_configuration READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_configuration'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_applier_configuration WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_configuration'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_applier_status.result b/mysql-test/suite/perfschema/r/dml_replication_applier_status.result
new file mode 100644
index 00000000000..e6464c58e85
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_applier_status.result
@@ -0,0 +1,24 @@
+SELECT * FROM performance_schema.replication_applier_status
+LIMIT 1;
+SELECT * FROM performance_schema.replication_applier_status
+WHERE service_state='YES' OR remaining_delay=12;
+INSERT INTO performance_schema.replication_applier_status
+SET service_state='YES', remaining_delay=12;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_applier_status'
+UPDATE performance_schema.replication_applier_status
+SET remaining_delay=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_status'
+UPDATE performance_schema.replication_applier_status
+SET remaining_delay=12 WHERE service_state='YES';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_status'
+DELETE FROM performance_schema.replication_applier_status
+WHERE service_state='YES';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_status'
+DELETE FROM performance_schema.replication_applier_status;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_status'
+LOCK TABLES performance_schema.replication_applier_status READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_status'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_applier_status WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_status'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_applier_status_by_coordinator.result b/mysql-test/suite/perfschema/r/dml_replication_applier_status_by_coordinator.result
new file mode 100644
index 00000000000..d6818fd1280
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_applier_status_by_coordinator.result
@@ -0,0 +1,25 @@
+SELECT * FROM performance_schema.replication_applier_status_by_coordinator
+LIMIT 1;
+SELECT * FROM performance_schema.replication_applier_status_by_coordinator
+WHERE service_state='YES' or last_error_message='ERROR';
+INSERT INTO performance_schema.replication_applier_status_by_coordinator
+SET service_state='YES', last_error_message='ERROR', thread_id=2,
+last_error_number=1234;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+UPDATE performance_schema.replication_applier_status_by_coordinator
+SET last_error_number=1234;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+UPDATE performance_schema.replication_applier_status_by_coordinator
+SET last_error_number=1234 where service_state like "YES";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+DELETE FROM performance_schema.replication_applier_status_by_coordinator
+WHERE thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+DELETE FROM performance_schema.replication_applier_status_by_coordinator;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+LOCK TABLES performance_schema.replication_applier_status_by_coordinator READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_applier_status_by_coordinator WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_status_by_coordinator'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_applier_status_by_worker.result b/mysql-test/suite/perfschema/r/dml_replication_applier_status_by_worker.result
new file mode 100644
index 00000000000..8033da46a1d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_applier_status_by_worker.result
@@ -0,0 +1,25 @@
+SELECT * FROM performance_schema.replication_applier_status_by_worker
+LIMIT 1;
+SELECT * FROM performance_schema.replication_applier_status_by_worker
+WHERE service_state='YES' OR last_error_message='ERROR';
+INSERT INTO performance_schema.replication_applier_status_by_worker
+SET service_state='YES', last_error_message='ERROR',
+worker_id=1, thread_id=2, last_error_number=1234;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+UPDATE performance_schema.replication_applier_status_by_worker
+SET worker_id=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+UPDATE performance_schema.replication_applier_status_by_worker
+SET worker_d=12 where service_state like "YES";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+DELETE FROM performance_schema.replication_applier_status_by_worker
+WHERE worker_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+DELETE FROM performance_schema.replication_applier_status_by_worker;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+LOCK TABLES performance_schema.replication_applier_status_by_worker READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_applier_status_by_worker WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_applier_status_by_worker'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_connection_configuration.result b/mysql-test/suite/perfschema/r/dml_replication_connection_configuration.result
new file mode 100644
index 00000000000..d338d4ab38a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_connection_configuration.result
@@ -0,0 +1,25 @@
+SELECT * FROM performance_schema.replication_connection_configuration
+LIMIT 1;
+SELECT * FROM performance_schema.replication_connection_configuration
+WHERE user='FOO' or host='BAR';
+INSERT INTO performance_schema.replication_connection_configuration
+SET user='FOO', host='BAR',
+port=1, connection_retry_count=2;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+UPDATE performance_schema.replication_connection_configuration
+SET connection_retry_interval=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+UPDATE performance_schema.replication_connection_configuration
+SET connection_retry_interval=12 WHERE host LIKE "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+DELETE FROM performance_schema.replication_connection_configuration
+WHERE connection_retry_count=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+DELETE FROM performance_schema.replication_connection_configuration;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+LOCK TABLES performance_schema.replication_connection_configuration READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_connection_configuration WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_connection_configuration'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_connection_status.result b/mysql-test/suite/perfschema/r/dml_replication_connection_status.result
new file mode 100644
index 00000000000..981a064f534
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_connection_status.result
@@ -0,0 +1,25 @@
+SELECT * FROM performance_schema.replication_connection_status
+LIMIT 1;
+SELECT * FROM performance_schema.replication_connection_status
+WHERE received_transaction_set='FOO' OR last_error_message='BAR';
+INSERT INTO performance_schema.replication_connection_status
+SET received_transaction_set='FOO', last_error_message='BAR',
+thread_id=1, last_error_number=2;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_connection_status'
+UPDATE performance_schema.replication_connection_status
+SET last_error_number=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_connection_status'
+UPDATE performance_schema.replication_connection_status
+SET thread_id=12 WHERE received_transaction_set like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_connection_status'
+DELETE FROM performance_schema.replication_connection_status
+WHERE last_error_number=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_connection_status'
+DELETE FROM performance_schema.replication_connection_status;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_connection_status'
+LOCK TABLES performance_schema.replication_connection_status READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_connection_status'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_connection_status WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_connection_status'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_group_member_stats.result b/mysql-test/suite/perfschema/r/dml_replication_group_member_stats.result
new file mode 100644
index 00000000000..f2d67f16734
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_group_member_stats.result
@@ -0,0 +1,26 @@
+SELECT * FROM performance_schema.replication_group_member_stats
+LIMIT 1;
+CHANNEL_NAME VIEW_ID MEMBER_ID COUNT_TRANSACTIONS_IN_QUEUE COUNT_TRANSACTIONS_CHECKED COUNT_CONFLICTS_DETECTED COUNT_TRANSACTIONS_ROWS_VALIDATING TRANSACTIONS_COMMITTED_ALL_MEMBERS LAST_CONFLICT_FREE_TRANSACTION
+SELECT * FROM performance_schema.replication_group_member_stats
+WHERE channel_name='FOO';
+CHANNEL_NAME VIEW_ID MEMBER_ID COUNT_TRANSACTIONS_IN_QUEUE COUNT_TRANSACTIONS_CHECKED COUNT_CONFLICTS_DETECTED COUNT_TRANSACTIONS_ROWS_VALIDATING TRANSACTIONS_COMMITTED_ALL_MEMBERS LAST_CONFLICT_FREE_TRANSACTION
+INSERT INTO performance_schema.replication_group_member_stats
+SET channel_name='FOO', node_id=1;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+UPDATE performance_schema.replication_group_member_stats
+SET member_id=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+UPDATE performance_schema.replication_group_member_stats
+SET member_id=12 WHERE group_name LIKE "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+DELETE FROM performance_schema.replication_group_member_stats
+WHERE member_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+DELETE FROM performance_schema.replication_group_member_stats;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+LOCK TABLES performance_schema.replication_group_member_stats READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_group_member_stats WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_group_member_stats'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_replication_group_members.result b/mysql-test/suite/perfschema/r/dml_replication_group_members.result
new file mode 100644
index 00000000000..cdc211b9978
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_replication_group_members.result
@@ -0,0 +1,24 @@
+SELECT * FROM performance_schema.replication_group_members
+LIMIT 1;
+SELECT * FROM performance_schema.replication_group_members
+WHERE channel_name='FOO';
+INSERT INTO performance_schema.replication_group_members
+SET channel_name='FOO', member_id=1;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'replication_group_members'
+UPDATE performance_schema.replication_group_members
+SET member_id=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_group_members'
+UPDATE performance_schema.replication_group_members
+SET member_id=12 WHERE channel_name LIKE "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'replication_group_members'
+DELETE FROM performance_schema.replication_group_members
+WHERE member_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_group_members'
+DELETE FROM performance_schema.replication_group_members;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'replication_group_members'
+LOCK TABLES performance_schema.replication_group_members READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_group_members'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.replication_group_members WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'replication_group_members'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_session_status.result b/mysql-test/suite/perfschema/r/dml_session_status.result
new file mode 100644
index 00000000000..979d97daa83
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_session_status.result
@@ -0,0 +1,21 @@
+select * from performance_schema.session_status
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.session_status
+where variable_name='FOO';
+insert into performance_schema.session_status
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'session_status'
+update performance_schema.session_status
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'session_status'
+delete from performance_schema.session_status
+where variable_name <> 'FOO';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'session_status'
+delete from performance_schema.session_status;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'session_status'
+LOCK TABLES performance_schema.session_status READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'session_status'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.session_status WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'session_status'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_session_variables.result b/mysql-test/suite/perfschema/r/dml_session_variables.result
new file mode 100644
index 00000000000..c8933a383ce
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_session_variables.result
@@ -0,0 +1,21 @@
+select * from performance_schema.session_variables
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.session_variables
+where variable_name='FOO';
+insert into performance_schema.session_variables
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'session_variables'
+update performance_schema.session_variables
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'session_variables'
+delete from performance_schema.session_variables
+where variable_name <> 'FOO';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'session_variables'
+delete from performance_schema.session_variables;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'session_variables'
+LOCK TABLES performance_schema.session_variables READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'session_variables'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.session_variables WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'session_variables'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_actors.result b/mysql-test/suite/perfschema/r/dml_setup_actors.result
index 2d12300b7be..36be88fe850 100644
--- a/mysql-test/suite/perfschema/r/dml_setup_actors.result
+++ b/mysql-test/suite/perfschema/r/dml_setup_actors.result
@@ -1,12 +1,18 @@
drop table if exists test.setup_actors;
create table test.setup_actors as
select * from performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+values ('%','%','%','YES', 'YES');
+ERROR 23000: Can't write; duplicate key in table 'setup_actors'
+insert into performance_schema.setup_actors
+values ('%','%','%','NO', 'NO');
+ERROR 23000: Can't write; duplicate key in table 'setup_actors'
truncate table performance_schema.setup_actors;
select * from performance_schema.setup_actors;
-HOST USER ROLE
+HOST USER ROLE ENABLED HISTORY
select * from performance_schema.setup_actors
where user = '%';
-HOST USER ROLE
+HOST USER ROLE ENABLED HISTORY
insert into performance_schema.setup_actors
set user='Joe', host='localhost';
insert into performance_schema.setup_actors
@@ -15,13 +21,19 @@ insert into performance_schema.setup_actors
set user='%', host='server1';
insert into performance_schema.setup_actors
set user='%', host='%';
+insert into performance_schema.setup_actors
+values ('localhost', 'user1', '%', 'NO%', 'NO');
+ERROR 01000: Data truncated for column 'ENABLED' at row 1
+insert into performance_schema.setup_actors
+values ('localhost', 'user1', '%', 'NO', 'KO');
+ERROR 01000: Data truncated for column 'HISTORY' at row 1
select * from performance_schema.setup_actors
order by USER, HOST;
-HOST USER ROLE
-% % %
-server1 % %
-% Joe %
-localhost Joe %
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
+server1 % % YES YES
+% Joe % YES YES
+localhost Joe % YES YES
update performance_schema.setup_actors
set user='ILLEGAL';
ERROR HY000: Invalid performance_schema usage
@@ -31,29 +43,61 @@ ERROR HY000: Invalid performance_schema usage
update performance_schema.setup_actors
set role='ILLEGAL';
ERROR HY000: Invalid performance_schema usage
+update performance_schema.setup_actors
+set ENABLED='YES';
+update performance_schema.setup_actors
+set HISTORY='YES';
+update performance_schema.setup_actors
+set ENABLED='';
+ERROR 01000: Data truncated for column 'ENABLED' at row 1
+update performance_schema.setup_actors
+set ENABLED='YESS';
+ERROR 01000: Data truncated for column 'ENABLED' at row 1
+update performance_schema.setup_actors
+set ENABLED='NO%';
+ERROR 01000: Data truncated for column 'ENABLED' at row 1
+update performance_schema.setup_actors
+set ENABLED=NULL;
+ERROR 23000: Column 'ENABLED' cannot be null
+update performance_schema.setup_actors
+set HISTORY='YESS';
+ERROR 01000: Data truncated for column 'HISTORY' at row 1
+update performance_schema.setup_actors
+set HISTORY='NO%';
+ERROR 01000: Data truncated for column 'HISTORY' at row 1
+update performance_schema.setup_actors
+set HISTORY=NULL;
+ERROR 23000: Column 'HISTORY' cannot be null
select * from performance_schema.setup_actors
order by USER, HOST;
-HOST USER ROLE
-% % %
-server1 % %
-% Joe %
-localhost Joe %
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
+server1 % % YES YES
+% Joe % YES YES
+localhost Joe % YES YES
delete from performance_schema.setup_actors
where user = 'Joe' and host = 'localhost';
select * from performance_schema.setup_actors
order by USER, HOST;
-HOST USER ROLE
-% % %
-server1 % %
-% Joe %
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
+server1 % % YES YES
+% Joe % YES YES
delete from performance_schema.setup_actors;
select * from performance_schema.setup_actors
order by USER, HOST;
-HOST USER ROLE
+HOST USER ROLE ENABLED HISTORY
LOCK TABLES performance_schema.setup_actors READ;
UNLOCK TABLES;
LOCK TABLES performance_schema.setup_actors WRITE;
UNLOCK TABLES;
+#
+# WL#2284: Increase the length of a user name
+#
+insert into performance_schema.setup_actors
+set user='user_name_len_22_01234', host='localhost';
+delete from performance_schema.setup_actors
+where user = 'user_name_len_22_01234' and host = 'localhost';
truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors
select * from test.setup_actors;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_consumers.result b/mysql-test/suite/perfschema/r/dml_setup_consumers.result
index 8a1efeb455e..57cd744d85c 100644
--- a/mysql-test/suite/perfschema/r/dml_setup_consumers.result
+++ b/mysql-test/suite/perfschema/r/dml_setup_consumers.result
@@ -6,6 +6,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -25,6 +28,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
diff --git a/mysql-test/suite/perfschema/r/dml_setup_instruments.result b/mysql-test/suite/perfschema/r/dml_setup_instruments.result
index a972cf02285..27b744977dd 100644
--- a/mysql-test/suite/perfschema/r/dml_setup_instruments.result
+++ b/mysql-test/suite/perfschema/r/dml_setup_instruments.result
@@ -34,8 +34,11 @@ wait/synch/rwlock/sql/MDL_context::LOCK_waiting_for YES YES
select * from performance_schema.setup_instruments
where name like 'Wait/Synch/Cond/sql/%'
and name not in (
+'wait/synch/cond/sql/COND_open',
'wait/synch/cond/sql/COND_handler_count',
-'wait/synch/cond/sql/DEBUG_SYNC::cond')
+'wait/synch/cond/sql/DEBUG_SYNC::cond',
+'wait/synch/cond/sql/COND_socket_listener_active',
+'wait/synch/cond/sql/COND_start_signal_handler')
order by name limit 10;
NAME ENABLED TIMED
wait/synch/cond/sql/Ack_receiver::cond YES YES
@@ -80,3 +83,5 @@ UNLOCK TABLES;
UPDATE performance_schema.setup_instruments SET timed='NO'
ORDER BY RAND();
+update performance_schema.setup_instruments
+set enabled='YES', TIMED='YES';
diff --git a/mysql-test/suite/perfschema/r/dml_setup_objects.result b/mysql-test/suite/perfschema/r/dml_setup_objects.result
index a505501c8b6..f1ad2ff68a0 100644
--- a/mysql-test/suite/perfschema/r/dml_setup_objects.result
+++ b/mysql-test/suite/perfschema/r/dml_setup_objects.result
@@ -1,4 +1,5 @@
drop table if exists test.setup_objects;
+SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
create table test.setup_objects as
select * from performance_schema.setup_objects;
truncate table performance_schema.setup_objects;
@@ -68,3 +69,4 @@ truncate table performance_schema.setup_objects;
insert into performance_schema.setup_objects
select * from test.setup_objects;
drop table test.setup_objects;
+SET sql_mode = default;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_timers.result b/mysql-test/suite/perfschema/r/dml_setup_timers.result
index 60792998359..ed6d30bab10 100644
--- a/mysql-test/suite/perfschema/r/dml_setup_timers.result
+++ b/mysql-test/suite/perfschema/r/dml_setup_timers.result
@@ -1,25 +1,44 @@
update performance_schema.setup_timers
set timer_name='CYCLE' where name="wait";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='NANOSECOND' where name="stage";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='NANOSECOND' where name="statement";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+update performance_schema.setup_timers
+set timer_name='MICROSECOND' where name="transaction";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='MICROSECOND' where name="idle";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
select * from performance_schema.setup_timers;
NAME TIMER_NAME
idle MICROSECOND
wait CYCLE
stage NANOSECOND
statement NANOSECOND
+transaction MICROSECOND
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
select * from performance_schema.setup_timers
where name='Wait';
NAME TIMER_NAME
wait CYCLE
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
select * from performance_schema.setup_timers
where timer_name='CYCLE';
NAME TIMER_NAME
wait CYCLE
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
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'
@@ -28,14 +47,21 @@ set name='FOO';
ERROR HY000: Invalid performance_schema usage
update performance_schema.setup_timers
set timer_name='MILLISECOND';
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
select * from performance_schema.setup_timers;
NAME TIMER_NAME
idle MILLISECOND
wait MILLISECOND
stage MILLISECOND
statement MILLISECOND
+transaction MILLISECOND
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='CYCLE';
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
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
@@ -47,15 +73,30 @@ LOCK TABLES performance_schema.setup_timers WRITE;
UNLOCK TABLES;
update performance_schema.setup_timers
set timer_name='CYCLE' where name="wait";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='NANOSECOND' where name="stage";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='NANOSECOND' where name="statement";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+update performance_schema.setup_timers
+set timer_name='MICROSECOND' where name="transaction";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
update performance_schema.setup_timers
set timer_name='MICROSECOND' where name="idle";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
select * from performance_schema.setup_timers;
NAME TIMER_NAME
idle MICROSECOND
wait CYCLE
stage NANOSECOND
statement NANOSECOND
+transaction MICROSECOND
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
diff --git a/mysql-test/suite/perfschema/r/dml_status_by_account.result b/mysql-test/suite/perfschema/r/dml_status_by_account.result
new file mode 100644
index 00000000000..1b45920c70b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_status_by_account.result
@@ -0,0 +1,24 @@
+select * from performance_schema.status_by_account
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.status_by_account
+where variable_name='FOO';
+insert into performance_schema.status_by_account
+set user='USER', host='HOST', variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'status_by_account'
+update performance_schema.status_by_account
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_account'
+update performance_schema.status_by_account
+set variable_name='FOO' where user <> 'USER';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_account'
+delete from performance_schema.status_by_account
+where user <> 'USER';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_account'
+delete from performance_schema.status_by_account;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_account'
+LOCK TABLES performance_schema.status_by_account READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_account'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.status_by_account WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_account'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_status_by_host.result b/mysql-test/suite/perfschema/r/dml_status_by_host.result
new file mode 100644
index 00000000000..cfe74eaabbf
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_status_by_host.result
@@ -0,0 +1,24 @@
+select * from performance_schema.status_by_host
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.status_by_host
+where variable_name='FOO';
+insert into performance_schema.status_by_host
+set host='HOST', variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'status_by_host'
+update performance_schema.status_by_host
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_host'
+update performance_schema.status_by_host
+set variable_name='FOO' where host <> 'HOST';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_host'
+delete from performance_schema.status_by_host
+where host <> 'HOST';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_host'
+delete from performance_schema.status_by_host;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_host'
+LOCK TABLES performance_schema.status_by_host READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_host'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.status_by_host WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_host'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_status_by_thread.result b/mysql-test/suite/perfschema/r/dml_status_by_thread.result
new file mode 100644
index 00000000000..afe2cf407ed
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_status_by_thread.result
@@ -0,0 +1,24 @@
+select * from performance_schema.status_by_thread
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.status_by_thread
+where variable_name='FOO';
+insert into performance_schema.status_by_thread
+set thread_id=1, variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'status_by_thread'
+update performance_schema.status_by_thread
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_thread'
+update performance_schema.status_by_thread
+set variable_name='FOO' where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_thread'
+delete from performance_schema.status_by_thread
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_thread'
+delete from performance_schema.status_by_thread;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_thread'
+LOCK TABLES performance_schema.status_by_thread READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_thread'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.status_by_thread WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_thread'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_status_by_user.result b/mysql-test/suite/perfschema/r/dml_status_by_user.result
new file mode 100644
index 00000000000..430bb622d3b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_status_by_user.result
@@ -0,0 +1,24 @@
+select * from performance_schema.status_by_user
+where variable_name like 'bytes_%' limit 1;
+select * from performance_schema.status_by_user
+where variable_name='FOO';
+insert into performance_schema.status_by_user
+set user='USER', variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'status_by_user'
+update performance_schema.status_by_user
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_user'
+update performance_schema.status_by_user
+set variable_name='FOO' where user <> 'USER';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'status_by_user'
+delete from performance_schema.status_by_user
+where user <> 'USER';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_user'
+delete from performance_schema.status_by_user;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'status_by_user'
+LOCK TABLES performance_schema.status_by_user READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_user'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.status_by_user WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'status_by_user'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_table_handles.result b/mysql-test/suite/perfschema/r/dml_table_handles.result
new file mode 100644
index 00000000000..5f6f0a43ad8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_table_handles.result
@@ -0,0 +1,21 @@
+select * from performance_schema.table_handles;
+select * from performance_schema.table_handles
+where object_name='foo';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN OWNER_THREAD_ID OWNER_EVENT_ID INTERNAL_LOCK EXTERNAL_LOCK
+insert into performance_schema.table_handles
+set object_name='FOO', owner_event_id=1;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'table_handles'
+update performance_schema.table_handles
+set owner_event_id=12 where object_name='foo';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'table_handles'
+delete from performance_schema.table_handles;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'table_handles'
+delete from performance_schema.table_handles
+where timer_name='CYCLE';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'table_handles'
+LOCK TABLES performance_schema.table_handles READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'table_handles'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.table_handles WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'table_handles'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_uvar_by_thread.result b/mysql-test/suite/perfschema/r/dml_uvar_by_thread.result
new file mode 100644
index 00000000000..ae6dc4ec3d9
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_uvar_by_thread.result
@@ -0,0 +1,30 @@
+select * from performance_schema.user_variables_by_thread
+where variable_name like 'foo%' limit 1;
+select * from performance_schema.user_variables_by_thread
+where variable_name='FOO';
+insert into performance_schema.user_variables_by_thread
+set thread_id=12, variable_name='foo', variable_value='bar';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+update performance_schema.user_variables_by_thread
+set thread_id=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+update performance_schema.user_variables_by_thread
+set thread_id=12 where variable_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+delete from performance_schema.user_variables_by_thread
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+delete from performance_schema.user_variables_by_thread;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+LOCK TABLES performance_schema.user_variables_by_thread READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.user_variables_by_thread WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'user_variables_by_thread'
+UNLOCK TABLES;
+CREATE TRIGGER test_uvar_trigger
+AFTER INSERT ON performance_schema.user_variables_by_thread
+FOR EACH ROW BEGIN
+set @a='OK';
+END|
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/dml_variables_by_thread.result b/mysql-test/suite/perfschema/r/dml_variables_by_thread.result
new file mode 100644
index 00000000000..b98907b3ba8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_variables_by_thread.result
@@ -0,0 +1,24 @@
+select * from performance_schema.variables_by_thread
+where variable_name like 'autocommit%' limit 1;
+select * from performance_schema.variables_by_thread
+where variable_name='FOO';
+insert into performance_schema.variables_by_thread
+set thread_id=1, variable_name='FOO', variable_value='BAR';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'variables_by_thread'
+update performance_schema.variables_by_thread
+set variable_name='FOO', variable_value='BAR';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'variables_by_thread'
+update performance_schema.variables_by_thread
+set variable_name='FOO' where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'variables_by_thread'
+delete from performance_schema.variables_by_thread
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'variables_by_thread'
+delete from performance_schema.variables_by_thread;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'variables_by_thread'
+LOCK TABLES performance_schema.variables_by_thread READ;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'variables_by_thread'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.variables_by_thread WRITE;
+ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'variables_by_thread'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/event_aggregate.result b/mysql-test/suite/perfschema/r/event_aggregate.result
index 23f88479a94..2582262c8c4 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate.result
@@ -15,12 +15,10 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -30,18 +28,18 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -52,16 +50,30 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -77,7 +89,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -88,82 +99,96 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 1
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 1
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
wait/io/file/sql/query_log 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -176,19 +201,23 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 2 2
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -198,91 +227,107 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 4
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 7
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -299,12 +344,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -312,115 +355,133 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
user2 localhost wait/io/file/sql/query_log 1
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 5
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 8
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -435,23 +496,26 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 3 3
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -459,115 +523,133 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 8
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 14
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -586,154 +668,171 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
user3 localhost wait/io/file/sql/query_log 1
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 9
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 15
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -750,165 +849,187 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 4 4
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 12
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 21
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -929,180 +1050,198 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
user4 localhost wait/io/file/sql/query_log 1
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 13
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 22
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1121,191 +1260,214 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 5 5
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 16
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 28
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 20
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 24
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1330,177 +1492,196 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 17
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 29
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 21
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 25
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 1
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1527,173 +1708,193 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 18
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 30
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 22
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 26
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 2
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1722,169 +1923,190 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 19
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 31
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 23
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 27
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 3
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1916,164 +2138,186 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2106,164 +2350,186 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2296,163 +2562,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2485,163 +2773,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2674,163 +2984,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2863,163 +3195,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3052,163 +3406,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3241,163 +3617,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3430,163 +3828,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3619,163 +4039,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3808,163 +4250,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3997,163 +4461,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4186,163 +4672,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4375,163 +4883,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4564,163 +5094,185 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4753,163 +5305,1240 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4929,7 +6558,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -4944,113 +6573,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -5066,7 +6713,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -5083,16 +6730,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -5100,25 +6745,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -5127,19 +6772,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -5151,7 +6812,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -5168,16 +6829,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -5185,25 +6844,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -5212,19 +6871,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_a.result b/mysql-test/suite/perfschema/r/event_aggregate_no_a.result
index 32bf988e63a..b67cd3ee31c 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_a.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_a.result
@@ -15,12 +15,10 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -30,18 +28,18 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -52,16 +50,30 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -76,7 +88,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -89,17 +100,14 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 1
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -108,25 +116,25 @@ execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -135,22 +143,38 @@ execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -161,19 +185,23 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 2 2
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -185,77 +213,92 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 4
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 7
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -270,12 +313,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -285,89 +326,105 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 5
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 8
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -379,23 +436,26 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 3 3
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -405,89 +465,105 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 8
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 14
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -503,16 +579,13 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
@@ -520,101 +593,118 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 9
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 15
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -627,27 +717,29 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 4 4
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
@@ -655,101 +747,118 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 12
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 21
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -766,132 +875,146 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 13
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 22
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -905,143 +1028,162 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 5 5
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 16
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 28
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 20
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 24
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1061,129 +1203,144 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 17
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 29
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 21
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 25
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 1
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1205,125 +1362,141 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 18
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 30
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 22
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 26
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 2
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1347,121 +1520,138 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 19
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 31
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 23
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 27
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 3
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1490,114 +1680,132 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1627,114 +1835,132 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1763,114 +1989,132 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1900,113 +2144,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2036,113 +2298,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2172,113 +2452,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2308,113 +2606,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2444,113 +2760,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2580,113 +2914,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2716,113 +3068,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2852,113 +3222,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2988,113 +3376,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3124,113 +3530,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3260,113 +3684,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3396,113 +3838,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3532,113 +3992,901 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3653,7 +4901,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -3668,113 +4916,131 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3789,7 +5055,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -3806,16 +5072,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3823,25 +5087,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3850,19 +5114,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3873,7 +5153,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -3890,16 +5170,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3907,25 +5185,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3934,19 +5212,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_h.result b/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_h.result
index b172ab33969..76f183fa43d 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_h.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_h.result
@@ -17,7 +17,6 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -29,11 +28,11 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -46,10 +45,22 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -63,7 +74,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -76,14 +86,12 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -92,20 +100,20 @@ execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -114,6 +122,7 @@ execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
execute dump_statements_host;
@@ -122,10 +131,23 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -135,19 +157,23 @@ user1 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -159,65 +185,79 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -231,12 +271,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -246,63 +284,62 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
execute dump_statements_host;
@@ -311,12 +348,28 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -327,23 +380,26 @@ user2 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -353,77 +409,92 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -438,16 +509,13 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
@@ -455,75 +523,74 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
execute dump_statements_host;
@@ -532,12 +599,29 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -549,27 +633,29 @@ user3 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
@@ -577,89 +663,105 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -675,106 +777,101 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -783,12 +880,30 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -801,131 +916,149 @@ user4 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -944,117 +1077,131 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1075,113 +1222,128 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1204,109 +1366,125 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1334,102 +1512,119 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1458,102 +1653,119 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1581,102 +1793,119 @@ execute dump_waits_account;
user host event_name count_star
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1705,101 +1934,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1828,101 +2074,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1951,101 +2214,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2074,101 +2354,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2197,101 +2494,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2320,101 +2634,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2443,101 +2774,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2566,101 +2914,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2689,101 +3054,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2812,101 +3194,118 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2935,86 +3334,85 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -3023,13 +3421,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3058,86 +3474,85 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -3146,13 +3561,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3181,86 +3614,225 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -3269,13 +3841,591 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3289,7 +4439,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -3304,86 +4454,85 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -3392,13 +4541,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3412,7 +4579,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -3431,11 +4598,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3445,18 +4611,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3467,13 +4633,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -3483,7 +4663,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -3502,11 +4682,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3516,18 +4695,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3538,13 +4717,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u.result b/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u.result
index 1ac9fc38274..d5d8e96dd64 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u.result
@@ -15,12 +15,10 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -30,18 +28,18 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -52,16 +50,30 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -75,7 +87,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -90,12 +101,10 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 1
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -106,18 +115,18 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -128,16 +137,30 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -146,19 +169,23 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 2 2
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -172,17 +199,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 4
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 7
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
@@ -190,25 +215,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -217,18 +242,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -241,12 +282,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -258,17 +297,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 5
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 8
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
@@ -276,25 +313,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -303,18 +340,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -323,23 +376,26 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 3 3
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -351,17 +407,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 8
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 14
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
@@ -369,25 +423,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -396,18 +450,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -420,16 +490,13 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
@@ -439,17 +506,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 9
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 15
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
@@ -457,25 +522,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -484,18 +549,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -504,27 +585,29 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 4 4
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
@@ -534,17 +617,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 12
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 21
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
@@ -552,25 +633,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -579,18 +660,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -603,20 +700,16 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
@@ -624,17 +717,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 13
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 22
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
@@ -642,25 +733,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -669,18 +760,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -689,31 +796,32 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 5 5
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -721,17 +829,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 16
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 28
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -739,25 +845,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 20
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 24
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -766,18 +872,34 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -792,16 +914,13 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -809,17 +928,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 17
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 29
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -827,25 +944,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 21
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 25
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -854,19 +971,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 1
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -883,12 +1016,10 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -896,17 +1027,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 18
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 30
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -914,25 +1043,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 22
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 26
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -941,19 +1070,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 2
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -972,8 +1117,7 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -981,17 +1125,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 19
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 31
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -999,25 +1141,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 23
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 27
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1026,19 +1168,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 3
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1064,17 +1222,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1082,25 +1238,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1109,19 +1265,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1148,17 +1320,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1166,25 +1336,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1193,19 +1363,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1231,17 +1417,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1249,25 +1433,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1276,19 +1460,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1314,17 +1514,15 @@ execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1332,25 +1530,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1359,19 +1557,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1398,16 +1612,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1415,25 +1627,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1442,19 +1654,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1481,16 +1709,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1498,25 +1724,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1525,19 +1751,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1564,16 +1806,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1581,25 +1821,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1608,19 +1848,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1647,16 +1903,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1664,25 +1918,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1691,19 +1945,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1730,16 +2000,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1747,25 +2015,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1774,19 +2042,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1813,16 +2097,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1830,25 +2112,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1857,19 +2139,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1896,16 +2194,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1913,25 +2209,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1940,19 +2236,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1979,16 +2291,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1996,25 +2306,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2023,19 +2333,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2062,16 +2388,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2079,25 +2403,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2106,19 +2430,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2145,16 +2485,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2162,25 +2500,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2189,19 +2527,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2228,16 +2582,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2245,25 +2597,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2272,19 +2624,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2311,16 +2679,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2328,25 +2694,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2355,19 +2721,520 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2377,7 +3244,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -2394,16 +3261,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2411,25 +3276,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2438,19 +3303,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2460,7 +3341,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -2477,16 +3358,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2494,25 +3373,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2521,19 +3400,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2543,7 +3438,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -2560,16 +3455,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2577,25 +3470,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2604,19 +3497,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u_no_h.result b/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u_no_h.result
index 4b522c1a5dd..ce23077d4bd 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u_no_h.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_a_no_u_no_h.result
@@ -17,7 +17,6 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -29,11 +28,11 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -46,10 +45,22 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -62,7 +73,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -79,7 +89,6 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -92,11 +101,11 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -109,10 +118,22 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -120,19 +141,23 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -148,12 +173,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
@@ -163,18 +187,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -185,12 +209,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -202,12 +240,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -221,12 +257,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
@@ -236,18 +271,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -258,12 +293,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -271,23 +320,26 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -301,12 +353,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
@@ -316,18 +367,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -338,12 +389,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -355,16 +420,13 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
@@ -376,12 +438,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
@@ -391,18 +452,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -413,12 +474,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -426,27 +501,29 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
@@ -458,12 +535,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
@@ -473,18 +549,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -495,12 +571,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -512,20 +602,16 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
@@ -535,12 +621,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
@@ -550,18 +635,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -572,12 +657,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -585,31 +684,32 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -619,12 +719,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -634,18 +733,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -656,12 +755,26 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -675,16 +788,13 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -694,12 +804,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -709,18 +818,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -731,13 +840,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -753,12 +876,10 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -768,12 +889,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -783,18 +903,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -805,13 +925,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -829,8 +963,7 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
@@ -840,12 +973,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -855,18 +987,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -877,13 +1009,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -910,12 +1056,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -925,18 +1070,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -947,13 +1092,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -981,12 +1140,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -996,18 +1154,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1018,13 +1176,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1051,12 +1223,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1066,18 +1237,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1088,13 +1259,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1121,12 +1306,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1136,18 +1320,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1158,13 +1342,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1191,12 +1389,11 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1206,18 +1403,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1228,13 +1425,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1262,11 +1473,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1276,18 +1486,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1298,13 +1508,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1332,11 +1556,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1346,18 +1569,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1368,13 +1591,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1402,11 +1639,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1416,18 +1652,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1438,13 +1674,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1472,11 +1722,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1486,18 +1735,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1508,13 +1757,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1542,11 +1805,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1556,18 +1818,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1578,13 +1840,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1612,11 +1888,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1626,18 +1901,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1648,13 +1923,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1682,11 +1971,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1696,18 +1984,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1718,13 +2006,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1752,11 +2054,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1766,18 +2067,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1788,13 +2089,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1822,11 +2137,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1836,18 +2150,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1858,13 +2172,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1892,11 +2220,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1906,18 +2233,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1928,13 +2255,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -1962,11 +2303,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -1976,18 +2316,184 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -1998,13 +2504,276 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2013,7 +2782,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -2032,11 +2801,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2046,18 +2814,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2068,13 +2836,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2083,7 +2865,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -2102,11 +2884,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2116,18 +2897,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2138,13 +2919,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
@@ -2153,7 +2948,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -2172,11 +2967,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -2186,18 +2980,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -2208,13 +3002,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_users;
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_h.result b/mysql-test/suite/perfschema/r/event_aggregate_no_h.result
index 3ca29d4d235..a74b0288cd7 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_h.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_h.result
@@ -17,7 +17,6 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -29,11 +28,11 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -46,10 +45,22 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -64,7 +75,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -75,58 +85,57 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 1
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
wait/io/file/sql/query_log 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
execute dump_statements_host;
@@ -135,10 +144,24 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -150,19 +173,23 @@ user1 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -172,79 +199,94 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -260,12 +302,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -273,89 +313,88 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
user2 localhost wait/io/file/sql/query_log 1
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
execute dump_statements_host;
@@ -364,12 +403,30 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -383,23 +440,26 @@ user2 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -407,103 +467,120 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -521,128 +598,124 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
user3 localhost wait/io/file/sql/query_log 1
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
execute dump_statements_host;
@@ -651,12 +724,32 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -672,153 +765,174 @@ user3 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -838,154 +952,149 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
user4 localhost wait/io/file/sql/query_log 1
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -994,12 +1103,34 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1017,179 +1148,201 @@ user4 1 1
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 5
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 6
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1213,165 +1366,183 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 5
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 6
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1397,161 +1568,180 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 5
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 6
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1579,157 +1769,177 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 5
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 6
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1760,152 +1970,173 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1937,152 +2168,173 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2114,151 +2366,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/file/sql/query_log 5
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 8
user1 wait/synch/rwlock/sql/LOCK_grant 1
-user2 wait/io/file/sql/query_log 5
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 8
user2 wait/synch/rwlock/sql/LOCK_grant 1
-user3 wait/io/file/sql/query_log 5
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 8
user3 wait/synch/rwlock/sql/LOCK_grant 1
-user4 wait/io/file/sql/query_log 5
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 8
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2290,151 +2563,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2466,151 +2760,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2642,151 +2957,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2818,151 +3154,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2994,151 +3351,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 3
-user1 stage/sql/Closing tables 6
-user1 stage/sql/Init 6
-user1 stage/sql/Init for update 1
-user1 stage/sql/Opening tables 4
-user2 stage/sql/Checking permissions 3
-user2 stage/sql/Closing tables 4
-user2 stage/sql/Init 6
-user2 stage/sql/Init for update 1
-user2 stage/sql/Opening tables 3
-user3 stage/sql/Checking permissions 3
-user3 stage/sql/Closing tables 4
-user3 stage/sql/Init 6
-user3 stage/sql/Init for update 1
-user3 stage/sql/Opening tables 3
-user4 stage/sql/Checking permissions 3
-user4 stage/sql/Closing tables 4
-user4 stage/sql/Init 6
-user4 stage/sql/Init for update 1
-user4 stage/sql/Opening tables 3
+user1 stage/sql/checking permissions 4
+user1 stage/sql/closing tables 13
+user1 stage/sql/init 3
+user1 stage/sql/Opening tables 7
+user1 stage/sql/starting 7
+user2 stage/sql/checking permissions 4
+user2 stage/sql/closing tables 11
+user2 stage/sql/init 3
+user2 stage/sql/Opening tables 6
+user2 stage/sql/starting 7
+user3 stage/sql/checking permissions 4
+user3 stage/sql/closing tables 11
+user3 stage/sql/init 3
+user3 stage/sql/Opening tables 6
+user3 stage/sql/starting 7
+user4 stage/sql/checking permissions 4
+user4 stage/sql/closing tables 11
+user4 stage/sql/init 3
+user4 stage/sql/Opening tables 6
+user4 stage/sql/starting 7
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3170,151 +3548,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3346,151 +3745,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3522,151 +3942,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3698,151 +4139,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3874,151 +4336,172 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 1
+user1 statement/sp/freturn 1
user1 statement/sql/insert 1
-user1 statement/sql/select 2
+user1 statement/sql/select 3
user2 statement/com/Error 0
user2 statement/com/Quit 1
+user2 statement/sp/freturn 1
user2 statement/sql/insert 1
-user2 statement/sql/select 2
+user2 statement/sql/select 3
user3 statement/com/Error 0
user3 statement/com/Quit 1
+user3 statement/sp/freturn 1
user3 statement/sql/insert 1
-user3 statement/sql/select 2
+user3 statement/sql/select 3
user4 statement/com/Error 0
user4 statement/com/Quit 1
+user4 statement/sp/freturn 1
user4 statement/sql/insert 1
-user4 statement/sql/select 2
+user4 statement/sql/select 3
execute dump_statements_host;
host event_name count_star
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4050,136 +4533,135 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -4188,13 +4670,35 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4226,136 +4730,135 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -4364,13 +4867,35 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4402,136 +4927,923 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 1
+user2 transaction 1
+user3 transaction 1
+user4 transaction 1
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -4540,13 +5852,232 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/file/sql/query_log 0
+user1 wait/synch/rwlock/sql/LOCK_grant 0
+user2 wait/io/file/sql/query_log 0
+user2 wait/synch/rwlock/sql/LOCK_grant 0
+user3 wait/io/file/sql/query_log 0
+user3 wait/synch/rwlock/sql/LOCK_grant 0
+user4 wait/io/file/sql/query_log 0
+user4 wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
+user1 stage/sql/Opening tables 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
+user2 stage/sql/Opening tables 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
+user3 stage/sql/Opening tables 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
+user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+user1 statement/com/Error 0
+user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
+user1 statement/sql/insert 0
+user1 statement/sql/select 0
+user2 statement/com/Error 0
+user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
+user2 statement/sql/insert 0
+user2 statement/sql/select 0
+user3 statement/com/Error 0
+user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
+user3 statement/sql/insert 0
+user3 statement/sql/select 0
+user4 statement/com/Error 0
+user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
+user4 statement/sql/insert 0
+user4 statement/sql/select 0
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4565,7 +6096,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -4580,86 +6111,85 @@ user host event_name count_star
execute dump_waits_user;
user event_name count_star
user1 wait/io/file/sql/query_log 0
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
user2 wait/io/file/sql/query_log 0
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
user3 wait/io/file/sql/query_log 0
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
user4 wait/io/file/sql/query_log 0
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
execute dump_stages_user;
user event_name count_star
-user1 stage/sql/Checking permissions 0
-user1 stage/sql/Closing tables 0
-user1 stage/sql/Init 0
-user1 stage/sql/Init for update 0
+user1 stage/sql/checking permissions 0
+user1 stage/sql/closing tables 0
+user1 stage/sql/init 0
user1 stage/sql/Opening tables 0
-user2 stage/sql/Checking permissions 0
-user2 stage/sql/Closing tables 0
-user2 stage/sql/Init 0
-user2 stage/sql/Init for update 0
+user1 stage/sql/starting 0
+user2 stage/sql/checking permissions 0
+user2 stage/sql/closing tables 0
+user2 stage/sql/init 0
user2 stage/sql/Opening tables 0
-user3 stage/sql/Checking permissions 0
-user3 stage/sql/Closing tables 0
-user3 stage/sql/Init 0
-user3 stage/sql/Init for update 0
+user2 stage/sql/starting 0
+user3 stage/sql/checking permissions 0
+user3 stage/sql/closing tables 0
+user3 stage/sql/init 0
user3 stage/sql/Opening tables 0
-user4 stage/sql/Checking permissions 0
-user4 stage/sql/Closing tables 0
-user4 stage/sql/Init 0
-user4 stage/sql/Init for update 0
+user3 stage/sql/starting 0
+user4 stage/sql/checking permissions 0
+user4 stage/sql/closing tables 0
+user4 stage/sql/init 0
user4 stage/sql/Opening tables 0
+user4 stage/sql/starting 0
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
user event_name count_star
user1 statement/com/Error 0
user1 statement/com/Quit 0
+user1 statement/sp/freturn 0
user1 statement/sql/insert 0
user1 statement/sql/select 0
user2 statement/com/Error 0
user2 statement/com/Quit 0
+user2 statement/sp/freturn 0
user2 statement/sql/insert 0
user2 statement/sql/select 0
user3 statement/com/Error 0
user3 statement/com/Quit 0
+user3 statement/sp/freturn 0
user3 statement/sql/insert 0
user3 statement/sql/select 0
user4 statement/com/Error 0
user4 statement/com/Quit 0
+user4 statement/sp/freturn 0
user4 statement/sql/insert 0
user4 statement/sql/select 0
execute dump_statements_host;
@@ -4668,13 +6198,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+user1 transaction 0
+user2 transaction 0
+user3 transaction 0
+user4 transaction 0
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4689,7 +6237,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -4708,11 +6256,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -4722,18 +6269,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -4744,13 +6291,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -4761,7 +6322,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -4780,11 +6341,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -4794,18 +6354,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -4816,13 +6376,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_u.result b/mysql-test/suite/perfschema/r/event_aggregate_no_u.result
index be6f3e272d9..c9c5ed2aebd 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_u.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_u.result
@@ -15,12 +15,10 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -30,18 +28,18 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -52,16 +50,30 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -76,7 +88,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -87,52 +98,50 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 1
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 1
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
wait/io/file/sql/query_log 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
execute dump_statements_user;
@@ -141,16 +150,31 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -161,19 +185,23 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 2 2
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -183,79 +211,94 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 4
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 7
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -270,12 +313,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -283,71 +324,69 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
user2 localhost wait/io/file/sql/query_log 1
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 5
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 8
localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 3
-localhost stage/sql/Closing tables 6
-localhost stage/sql/Init 5
-localhost stage/sql/Init for update 1
-localhost stage/sql/Opening tables 4
+localhost stage/sql/checking permissions 4
+localhost stage/sql/closing tables 13
+localhost stage/sql/init 3
+localhost stage/sql/Opening tables 7
+localhost stage/sql/starting 6
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
execute dump_statements_user;
@@ -356,18 +395,36 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 1
localhost statement/sql/insert 1
-localhost statement/sql/select 2
+localhost statement/sql/select 3
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 1
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -379,23 +436,26 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 3 3
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -403,91 +463,107 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 8
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 14
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -503,98 +579,93 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
user3 localhost wait/io/file/sql/query_log 1
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 9
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 15
localhost wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 6
-localhost stage/sql/Closing tables 10
-localhost stage/sql/Init 10
-localhost stage/sql/Init for update 2
-localhost stage/sql/Opening tables 7
+localhost stage/sql/checking permissions 8
+localhost stage/sql/closing tables 24
+localhost stage/sql/init 6
+localhost stage/sql/Opening tables 13
+localhost stage/sql/starting 12
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
execute dump_statements_user;
@@ -603,18 +674,37 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 2
localhost statement/sql/insert 2
-localhost statement/sql/select 4
+localhost statement/sql/select 6
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 2
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -627,129 +717,148 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 4 4
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 12
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 21
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -766,112 +875,106 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
user4 localhost wait/io/file/sql/query_log 1
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 13
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 22
localhost wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 9
-localhost stage/sql/Closing tables 14
-localhost stage/sql/Init 15
-localhost stage/sql/Init for update 3
-localhost stage/sql/Opening tables 10
+localhost stage/sql/checking permissions 12
+localhost stage/sql/closing tables 35
+localhost stage/sql/init 9
+localhost stage/sql/Opening tables 19
+localhost stage/sql/starting 18
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -880,18 +983,38 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 3
localhost statement/sql/insert 3
-localhost statement/sql/select 6
+localhost statement/sql/select 9
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 3
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -905,143 +1028,162 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 5 5
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 16
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 28
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 20
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 24
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1061,129 +1203,144 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 17
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 29
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 21
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 25
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 1
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1205,125 +1362,141 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 18
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 30
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 22
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 26
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 2
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1347,121 +1520,138 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 19
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 31
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 23
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 27
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 3
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1488,116 +1678,134 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1625,116 +1833,134 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1762,115 +1988,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1898,115 +2142,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
-localhost wait/io/file/sql/query_log 20
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
+localhost wait/io/file/sql/query_log 32
localhost wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2034,115 +2296,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2170,115 +2450,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2306,115 +2604,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2442,115 +2758,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2578,115 +2912,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 12
-localhost stage/sql/Closing tables 18
-localhost stage/sql/Init 24
-localhost stage/sql/Init for update 4
-localhost stage/sql/Opening tables 13
+localhost stage/sql/checking permissions 16
+localhost stage/sql/closing tables 46
+localhost stage/sql/init 12
+localhost stage/sql/Opening tables 25
+localhost stage/sql/starting 28
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2714,115 +3066,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2850,115 +3220,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2986,115 +3374,133 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3122,94 +3528,92 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3218,19 +3622,39 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3258,94 +3682,92 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3354,19 +3776,39 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 4
+localhost statement/sp/freturn 4
localhost statement/sql/insert 4
-localhost statement/sql/select 8
+localhost statement/sql/select 12
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3394,94 +3836,92 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3490,19 +3930,39 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3530,94 +3990,862 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 4
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+localhost statement/com/Error 0
+localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
+localhost statement/sql/insert 0
+localhost statement/sql/select 0
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 5
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/file/sql/query_log 0
+localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
+localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3626,19 +4854,39 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3653,7 +4901,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -3670,16 +4918,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3687,25 +4933,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3714,19 +4960,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3737,7 +4999,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -3754,16 +5016,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3771,25 +5031,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3798,19 +5058,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3821,7 +5097,7 @@ HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
localhost 1 5
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -3838,16 +5114,14 @@ user event_name count_star
execute dump_waits_host;
host event_name count_star
localhost wait/io/file/sql/query_log 0
-localhost wait/synch/mutex/sql/LOCK_user_locks 0
localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3855,25 +5129,25 @@ execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
-localhost stage/sql/Checking permissions 0
-localhost stage/sql/Closing tables 0
-localhost stage/sql/Init 0
-localhost stage/sql/Init for update 0
+localhost stage/sql/checking permissions 0
+localhost stage/sql/closing tables 0
+localhost stage/sql/init 0
localhost stage/sql/Opening tables 0
+localhost stage/sql/starting 0
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3882,19 +5156,35 @@ execute dump_statements_host;
host event_name count_star
localhost statement/com/Error 0
localhost statement/com/Quit 0
+localhost statement/sp/freturn 0
localhost statement/sql/insert 0
localhost statement/sql/select 0
execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+localhost transaction 0
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/event_aggregate_no_u_no_h.result b/mysql-test/suite/perfschema/r/event_aggregate_no_u_no_h.result
index 6ca450ab864..671125191f8 100644
--- a/mysql-test/suite/perfschema/r/event_aggregate_no_u_no_h.result
+++ b/mysql-test/suite/perfschema/r/event_aggregate_no_u_no_h.result
@@ -17,7 +17,6 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
@@ -29,11 +28,11 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
@@ -46,10 +45,22 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -63,7 +74,6 @@ connection default;
call dump_thread();
username event_name count_star
user1 wait/io/file/sql/query_log 1
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
user1 wait/synch/rwlock/sql/LOCK_grant 0
username status
user2 not found
@@ -74,7 +84,6 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 1
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -83,35 +92,35 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 1
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
wait/io/file/sql/query_log 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
execute dump_statements_user;
@@ -122,10 +131,23 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -135,19 +157,23 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con1;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 3 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username status
user2 not found
@@ -157,8 +183,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -166,44 +191,44 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 4
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 4
+wait/io/file/sql/query_log 7
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -212,12 +237,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -231,12 +271,10 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user2 wait/io/file/sql/query_log 1
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
user2 wait/synch/rwlock/sql/LOCK_grant 0
username status
user3 not found
@@ -244,11 +282,9 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
user2 localhost wait/io/file/sql/query_log 1
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -256,51 +292,52 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 5
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 5
+wait/io/file/sql/query_log 8
wait/synch/rwlock/sql/LOCK_grant 1
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 3
-stage/sql/Closing tables 6
-stage/sql/Init 5
-stage/sql/Init for update 1
-stage/sql/Opening tables 4
+stage/sql/checking permissions 4
+stage/sql/closing tables 13
+stage/sql/init 3
+stage/sql/Opening tables 7
+stage/sql/starting 6
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
execute dump_statements_user;
@@ -311,12 +348,28 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 1
statement/sql/insert 1
-statement/sql/select 2
+statement/sql/select 3
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 1
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 1
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -327,23 +380,26 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con2;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username status
user3 not found
@@ -351,11 +407,9 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -363,53 +417,54 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 8
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 8
+wait/io/file/sql/query_log 14
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -418,12 +473,28 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -438,29 +509,23 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user3 wait/io/file/sql/query_log 1
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
user3 wait/synch/rwlock/sql/LOCK_grant 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
user3 localhost wait/io/file/sql/query_log 1
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -468,60 +533,62 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 9
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 9
+wait/io/file/sql/query_log 15
wait/synch/rwlock/sql/LOCK_grant 2
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 6
-stage/sql/Closing tables 10
-stage/sql/Init 10
-stage/sql/Init for update 2
-stage/sql/Opening tables 7
+stage/sql/checking permissions 8
+stage/sql/closing tables 24
+stage/sql/init 6
+stage/sql/Opening tables 13
+stage/sql/starting 12
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
execute dump_statements_user;
@@ -532,12 +599,29 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 2
statement/sql/insert 2
-statement/sql/select 4
+statement/sql/select 6
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 2
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 2
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -549,40 +633,39 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con3;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -590,62 +673,64 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 12
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 12
+wait/io/file/sql/query_log 21
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -654,12 +739,29 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -675,34 +777,26 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
user4 wait/io/file/sql/query_log 1
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
user4 wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
user4 localhost wait/io/file/sql/query_log 1
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -710,69 +804,72 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 13
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 13
+wait/io/file/sql/query_log 22
wait/synch/rwlock/sql/LOCK_grant 3
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 9
-stage/sql/Closing tables 14
-stage/sql/Init 15
-stage/sql/Init for update 3
-stage/sql/Opening tables 10
+stage/sql/checking permissions 12
+stage/sql/closing tables 35
+stage/sql/init 9
+stage/sql/Opening tables 19
+stage/sql/starting 18
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -783,12 +880,30 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 3
statement/sql/insert 3
-statement/sql/select 6
+statement/sql/select 9
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 3
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 3
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -801,45 +916,42 @@ USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
connection con4;
-select get_lock("marker", 10);
-get_lock("marker", 10)
+select uuid_short() <> 1;
+uuid_short() <> 1
1
-select release_lock("marker");
-release_lock("marker")
+select uuid_short() <> 1;
+uuid_short() <> 1
1
+start transaction;
insert into test.t1 values ("marker");
+commit;
+select test.f(10,20);
+test.f(10,20)
+30
connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/file/sql/query_log 4
-user1 wait/synch/mutex/sql/LOCK_user_locks 0
+user1 wait/io/file/sql/query_log 7
user1 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 4
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 7
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -847,71 +959,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 16
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 16
+wait/io/file/sql/query_log 28
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 5
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 6
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 20
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 24
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -920,12 +1035,30 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -944,30 +1077,23 @@ call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/file/sql/query_log 4
-user2 wait/synch/mutex/sql/LOCK_user_locks 0
+user2 wait/io/file/sql/query_log 7
user2 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 4
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 7
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -975,71 +1101,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 17
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 17
+wait/io/file/sql/query_log 29
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 5
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 6
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 21
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 25
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1048,13 +1177,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 1
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1075,26 +1222,20 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/file/sql/query_log 4
-user3 wait/synch/mutex/sql/LOCK_user_locks 0
+user3 wait/io/file/sql/query_log 7
user3 wait/synch/rwlock/sql/LOCK_grant 1
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 4
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 7
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -1102,71 +1243,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 18
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 18
+wait/io/file/sql/query_log 30
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 5
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 6
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 22
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 26
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1175,13 +1319,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 2
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1204,22 +1366,17 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/file/sql/query_log 4
-user4 wait/synch/mutex/sql/LOCK_user_locks 0
+user4 wait/io/file/sql/query_log 7
user4 wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 4
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 7
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -1227,71 +1384,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 19
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 19
+wait/io/file/sql/query_log 31
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 5
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 6
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 23
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 27
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1300,13 +1460,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 3
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1332,17 +1510,13 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -1350,71 +1524,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1423,13 +1600,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1456,17 +1651,13 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/file/sql/query_log 5
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user1 localhost wait/io/file/sql/query_log 8
user1 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user2 localhost wait/io/file/sql/query_log 5
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user2 localhost wait/io/file/sql/query_log 8
user2 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user3 localhost wait/io/file/sql/query_log 5
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user3 localhost wait/io/file/sql/query_log 8
user3 localhost wait/synch/rwlock/sql/LOCK_grant 1
-user4 localhost wait/io/file/sql/query_log 5
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
+user4 localhost wait/io/file/sql/query_log 8
user4 localhost wait/synch/rwlock/sql/LOCK_grant 1
execute dump_waits_user;
user event_name count_star
@@ -1474,71 +1665,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1547,13 +1741,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1580,16 +1792,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -1597,71 +1805,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1670,13 +1881,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1703,16 +1932,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -1720,71 +1945,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1793,13 +2021,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1826,16 +2072,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -1843,71 +2085,74 @@ execute dump_waits_host;
host event_name count_star
execute dump_waits_global;
event_name count_star
-wait/io/file/sql/query_log 20
-wait/synch/mutex/sql/LOCK_user_locks 0
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -1916,13 +2161,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -1949,16 +2212,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -1967,70 +2226,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2039,13 +2301,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2072,16 +2352,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2090,70 +2366,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 3
-user1 localhost stage/sql/Closing tables 6
-user1 localhost stage/sql/Init 6
-user1 localhost stage/sql/Init for update 1
-user1 localhost stage/sql/Opening tables 4
-user2 localhost stage/sql/Checking permissions 3
-user2 localhost stage/sql/Closing tables 4
-user2 localhost stage/sql/Init 6
-user2 localhost stage/sql/Init for update 1
-user2 localhost stage/sql/Opening tables 3
-user3 localhost stage/sql/Checking permissions 3
-user3 localhost stage/sql/Closing tables 4
-user3 localhost stage/sql/Init 6
-user3 localhost stage/sql/Init for update 1
-user3 localhost stage/sql/Opening tables 3
-user4 localhost stage/sql/Checking permissions 3
-user4 localhost stage/sql/Closing tables 4
-user4 localhost stage/sql/Init 6
-user4 localhost stage/sql/Init for update 1
-user4 localhost stage/sql/Opening tables 3
+user1 localhost stage/sql/checking permissions 4
+user1 localhost stage/sql/closing tables 13
+user1 localhost stage/sql/init 3
+user1 localhost stage/sql/Opening tables 7
+user1 localhost stage/sql/starting 7
+user2 localhost stage/sql/checking permissions 4
+user2 localhost stage/sql/closing tables 11
+user2 localhost stage/sql/init 3
+user2 localhost stage/sql/Opening tables 6
+user2 localhost stage/sql/starting 7
+user3 localhost stage/sql/checking permissions 4
+user3 localhost stage/sql/closing tables 11
+user3 localhost stage/sql/init 3
+user3 localhost stage/sql/Opening tables 6
+user3 localhost stage/sql/starting 7
+user4 localhost stage/sql/checking permissions 4
+user4 localhost stage/sql/closing tables 11
+user4 localhost stage/sql/init 3
+user4 localhost stage/sql/Opening tables 6
+user4 localhost stage/sql/starting 7
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2162,13 +2441,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2195,16 +2492,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2213,70 +2506,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2285,13 +2581,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2318,16 +2632,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2336,70 +2646,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2408,13 +2721,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2441,16 +2772,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2459,70 +2786,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2531,13 +2861,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2564,16 +2912,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2582,70 +2926,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2654,13 +3001,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2687,16 +3052,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2705,70 +3066,73 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 1
+user1 localhost statement/sp/freturn 1
user1 localhost statement/sql/insert 1
-user1 localhost statement/sql/select 2
+user1 localhost statement/sql/select 3
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 1
+user2 localhost statement/sp/freturn 1
user2 localhost statement/sql/insert 1
-user2 localhost statement/sql/select 2
+user2 localhost statement/sql/select 3
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 1
+user3 localhost statement/sp/freturn 1
user3 localhost statement/sql/insert 1
-user3 localhost statement/sql/select 2
+user3 localhost statement/sql/select 3
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 1
+user4 localhost statement/sp/freturn 1
user4 localhost statement/sql/insert 1
-user4 localhost statement/sql/select 2
+user4 localhost statement/sql/select 3
execute dump_statements_user;
user event_name count_star
execute dump_statements_host;
@@ -2777,13 +3141,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2810,16 +3192,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2828,68 +3206,71 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -2900,13 +3281,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -2933,16 +3332,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -2951,68 +3346,71 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3023,13 +3421,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3056,16 +3472,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -3074,68 +3486,71 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3146,13 +3561,31 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3179,16 +3612,12 @@ user4 not found
execute dump_waits_account;
user host event_name count_star
user1 localhost wait/io/file/sql/query_log 0
-user1 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
user2 localhost wait/io/file/sql/query_log 0
-user2 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
user3 localhost wait/io/file/sql/query_log 0
-user3 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
user4 localhost wait/io/file/sql/query_log 0
-user4 localhost wait/synch/mutex/sql/LOCK_user_locks 0
user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_user;
user event_name count_star
@@ -3197,68 +3626,211 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
-user1 localhost stage/sql/Checking permissions 0
-user1 localhost stage/sql/Closing tables 0
-user1 localhost stage/sql/Init 0
-user1 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
user1 localhost stage/sql/Opening tables 0
-user2 localhost stage/sql/Checking permissions 0
-user2 localhost stage/sql/Closing tables 0
-user2 localhost stage/sql/Init 0
-user2 localhost stage/sql/Init for update 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
user2 localhost stage/sql/Opening tables 0
-user3 localhost stage/sql/Checking permissions 0
-user3 localhost stage/sql/Closing tables 0
-user3 localhost stage/sql/Init 0
-user3 localhost stage/sql/Init for update 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
user3 localhost stage/sql/Opening tables 0
-user4 localhost stage/sql/Checking permissions 0
-user4 localhost stage/sql/Closing tables 0
-user4 localhost stage/sql/Init 0
-user4 localhost stage/sql/Init for update 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
execute dump_stages_user;
user event_name count_star
execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_thread_by_event_name;
+"================== TRANSACTIONS_BY_THREAD truncated =================="
+"================== Step 29 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
user1 localhost statement/com/Error 0
user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
user1 localhost statement/sql/insert 0
user1 localhost statement/sql/select 0
user2 localhost statement/com/Error 0
user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
user2 localhost statement/sql/insert 0
user2 localhost statement/sql/select 0
user3 localhost statement/com/Error 0
user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
user3 localhost statement/sql/insert 0
user3 localhost statement/sql/select 0
user4 localhost statement/com/Error 0
user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
user4 localhost statement/sql/insert 0
user4 localhost statement/sql/select 0
execute dump_statements_user;
@@ -3269,13 +3841,591 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 1
+user2 localhost transaction 1
+user3 localhost transaction 1
+user4 localhost transaction 1
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_account_by_event_name;
+"================== TRANSACTIONS_BY_ACCOUNT truncated =================="
+"================== Step 30 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_user_by_event_name;
+"================== TRANSACTIONS_BY_USER truncated =================="
+"================== Step 31 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_by_host_by_event_name;
+"================== TRANSACTIONS_BY_HOST truncated =================="
+"================== Step 32 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 4
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.events_transactions_summary_global_by_event_name;
+"================== TRANSACTIONS_GLOBAL truncated =================="
+"================== Step 33 =================="
+call dump_thread();
+username status
+user1 not found
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/file/sql/query_log 0
+user1 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user2 localhost wait/io/file/sql/query_log 0
+user2 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user3 localhost wait/io/file/sql/query_log 0
+user3 localhost wait/synch/rwlock/sql/LOCK_grant 0
+user4 localhost wait/io/file/sql/query_log 0
+user4 localhost wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_user;
+user event_name count_star
+execute dump_waits_host;
+host event_name count_star
+execute dump_waits_global;
+event_name count_star
+wait/io/file/sql/query_log 0
+wait/synch/rwlock/sql/LOCK_grant 0
+execute dump_waits_history;
+event_name count(event_name)
+wait/io/file/sql/query_log 32
+wait/synch/rwlock/sql/LOCK_grant 4
+execute dump_stages_account;
+user host event_name count_star
+user1 localhost stage/sql/checking permissions 0
+user1 localhost stage/sql/closing tables 0
+user1 localhost stage/sql/init 0
+user1 localhost stage/sql/Opening tables 0
+user1 localhost stage/sql/starting 0
+user2 localhost stage/sql/checking permissions 0
+user2 localhost stage/sql/closing tables 0
+user2 localhost stage/sql/init 0
+user2 localhost stage/sql/Opening tables 0
+user2 localhost stage/sql/starting 0
+user3 localhost stage/sql/checking permissions 0
+user3 localhost stage/sql/closing tables 0
+user3 localhost stage/sql/init 0
+user3 localhost stage/sql/Opening tables 0
+user3 localhost stage/sql/starting 0
+user4 localhost stage/sql/checking permissions 0
+user4 localhost stage/sql/closing tables 0
+user4 localhost stage/sql/init 0
+user4 localhost stage/sql/Opening tables 0
+user4 localhost stage/sql/starting 0
+execute dump_stages_user;
+user event_name count_star
+execute dump_stages_host;
+host event_name count_star
+execute dump_stages_global;
+event_name count_star
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
+stage/sql/Opening tables 0
+stage/sql/starting 0
+execute dump_stages_history;
+event_name count(event_name)
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
+execute dump_statements_account;
+user host event_name count_star
+user1 localhost statement/com/Error 0
+user1 localhost statement/com/Quit 0
+user1 localhost statement/sp/freturn 0
+user1 localhost statement/sql/insert 0
+user1 localhost statement/sql/select 0
+user2 localhost statement/com/Error 0
+user2 localhost statement/com/Quit 0
+user2 localhost statement/sp/freturn 0
+user2 localhost statement/sql/insert 0
+user2 localhost statement/sql/select 0
+user3 localhost statement/com/Error 0
+user3 localhost statement/com/Quit 0
+user3 localhost statement/sp/freturn 0
+user3 localhost statement/sql/insert 0
+user3 localhost statement/sql/select 0
+user4 localhost statement/com/Error 0
+user4 localhost statement/com/Quit 0
+user4 localhost statement/sp/freturn 0
+user4 localhost statement/sql/insert 0
+user4 localhost statement/sql/select 0
+execute dump_statements_user;
+user event_name count_star
+execute dump_statements_host;
+host event_name count_star
+execute dump_statements_global;
+event_name count_star
+statement/com/Error 0
+statement/com/Quit 0
+statement/sp/freturn 0
+statement/sql/insert 0
+statement/sql/select 0
+execute dump_statements_history;
+event_name count(event_name)
+statement/com/Quit 4
+statement/sp/freturn 4
+statement/sql/insert 4
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+user1 localhost transaction 0
+user2 localhost transaction 0
+user3 localhost transaction 0
+user4 localhost transaction 0
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3289,7 +4439,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.accounts;
"================== ACCOUNTS truncated =================="
-"================== Step 29 =================="
+"================== Step 34 =================="
call dump_thread();
username status
user1 not found
@@ -3308,11 +4458,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3322,18 +4471,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3344,13 +4493,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3360,7 +4523,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.users;
"================== USERS truncated =================="
-"================== Step 30 =================="
+"================== Step 35 =================="
call dump_thread();
username status
user1 not found
@@ -3379,11 +4542,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3393,18 +4555,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3415,13 +4577,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
@@ -3431,7 +4607,7 @@ execute dump_hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
truncate performance_schema.hosts;
"================== HOSTS truncated =================="
-"================== Step 31 =================="
+"================== Step 36 =================="
call dump_thread();
username status
user1 not found
@@ -3450,11 +4626,10 @@ host event_name count_star
execute dump_waits_global;
event_name count_star
wait/io/file/sql/query_log 0
-wait/synch/mutex/sql/LOCK_user_locks 0
wait/synch/rwlock/sql/LOCK_grant 0
execute dump_waits_history;
event_name count(event_name)
-wait/io/file/sql/query_log 20
+wait/io/file/sql/query_log 32
wait/synch/rwlock/sql/LOCK_grant 4
execute dump_stages_account;
user host event_name count_star
@@ -3464,18 +4639,18 @@ execute dump_stages_host;
host event_name count_star
execute dump_stages_global;
event_name count_star
-stage/sql/Checking permissions 0
-stage/sql/Closing tables 0
-stage/sql/Init 0
-stage/sql/Init for update 0
+stage/sql/checking permissions 0
+stage/sql/closing tables 0
+stage/sql/init 0
stage/sql/Opening tables 0
+stage/sql/starting 0
execute dump_stages_history;
event_name count(event_name)
-stage/sql/Checking permissions 12
-stage/sql/Closing tables 18
-stage/sql/Init 24
-stage/sql/Init for update 4
-stage/sql/Opening tables 13
+stage/sql/checking permissions 16
+stage/sql/closing tables 46
+stage/sql/init 12
+stage/sql/Opening tables 25
+stage/sql/starting 28
execute dump_statements_account;
user host event_name count_star
execute dump_statements_user;
@@ -3486,13 +4661,27 @@ execute dump_statements_global;
event_name count_star
statement/com/Error 0
statement/com/Quit 0
+statement/sp/freturn 0
statement/sql/insert 0
statement/sql/select 0
execute dump_statements_history;
event_name count(event_name)
statement/com/Quit 4
+statement/sp/freturn 4
statement/sql/insert 4
-statement/sql/select 8
+statement/sql/select 12
+execute dump_transactions_account;
+user host event_name count_star
+execute dump_transactions_user;
+user event_name count_star
+execute dump_transactions_host;
+host event_name count_star
+execute dump_transactions_global;
+event_name count_star
+transaction 0
+execute dump_transactions_history;
+event_name count(event_name)
+transaction 4
execute dump_accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
root localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/file_misc.result b/mysql-test/suite/perfschema/r/file_misc.result
new file mode 100644
index 00000000000..31094e64b59
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/file_misc.result
@@ -0,0 +1 @@
+select * from information_schema.columns ORDER BY table_name;
diff --git a/mysql-test/suite/perfschema/r/func_file_io.result b/mysql-test/suite/perfschema/r/func_file_io.result
index d710774a1f4..880e00367d0 100644
--- a/mysql-test/suite/perfschema/r/func_file_io.result
+++ b/mysql-test/suite/perfschema/r/func_file_io.result
@@ -130,7 +130,7 @@ GROUP BY p.processlist_user, h.operation
HAVING BYTES > 0
ORDER BY p.processlist_user, h.operation;
UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -140,9 +140,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -152,6 +158,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/func_mutex.result b/mysql-test/suite/perfschema/r/func_mutex.result
index 1bd70b16811..b5c5e33f2c6 100644
--- a/mysql-test/suite/perfschema/r/func_mutex.result
+++ b/mysql-test/suite/perfschema/r/func_mutex.result
@@ -9,7 +9,7 @@ where NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex' GROUP BY NAME;
NAME
wait/synch/mutex/mysys/THR_LOCK::mutex
select NAME from performance_schema.rwlock_instances
-where NAME = 'wait/synch/rwlock/sql/LOCK_grant';
+where NAME = 'wait/synch/rwlock/sql/LOCK_grant' limit 1;
NAME
wait/synch/rwlock/sql/LOCK_grant
DROP TABLE IF EXISTS t1;
@@ -105,7 +105,7 @@ Success
UPDATE performance_schema.setup_instruments SET enabled = 'YES';
DROP TABLE t1;
UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -115,9 +115,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -127,6 +133,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/global_objects.result b/mysql-test/suite/perfschema/r/global_objects.result
new file mode 100644
index 00000000000..dd53a11ddac
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/global_objects.result
@@ -0,0 +1,33 @@
+select count(*) from performance_schema.setup_instruments
+where enabled='YES'
+ and name like "wait/%";
+count(*)
+0
+select count(*) > 0 from performance_schema.mutex_instances;
+count(*) > 0
+1
+select count(*) > 0 from performance_schema.rwlock_instances;
+count(*) > 0
+1
+select count(*) > 0 from performance_schema.cond_instances;
+count(*) > 0
+1
+select count(*) > 0 from performance_schema.socket_instances;
+count(*) > 0
+1
+select NAME from performance_schema.mutex_instances
+where NAME = "wait/synch/mutex/sql/LOCK_gdl";
+NAME
+wait/synch/mutex/sql/LOCK_gdl
+select NAME from performance_schema.rwlock_instances
+where NAME = "wait/synch/rwlock/sql/LOCK_system_variables_hash";
+NAME
+wait/synch/rwlock/sql/LOCK_system_variables_hash
+select NAME from performance_schema.cond_instances
+where NAME = "wait/synch/cond/sql/COND_server_started";
+NAME
+wait/synch/cond/sql/COND_server_started
+select EVENT_NAME from performance_schema.socket_instances
+where EVENT_NAME = "wait/io/socket/sql/client_connection";
+EVENT_NAME
+wait/io/socket/sql/client_connection
diff --git a/mysql-test/suite/perfschema/r/global_read_lock.result b/mysql-test/suite/perfschema/r/global_read_lock.result
index 6eed64f12d5..df98b9bd1bb 100644
--- a/mysql-test/suite/perfschema/r/global_read_lock.result
+++ b/mysql-test/suite/perfschema/r/global_read_lock.result
@@ -27,7 +27,7 @@ operation
from performance_schema.events_waits_current
where event_name like "wait/synch/cond/sql/MDL_context::COND_wait_status";
event_name short_source timer_end timer_wait operation
-wait/synch/cond/sql/MDL_context::COND_wait_status mdl.cc: SET SET timed_wait
+wait/synch/cond/sql/MDL_context::COND_wait_status SET SET timed_wait
unlock tables;
connection con1;
update performance_schema.setup_instruments set enabled='NO';
diff --git a/mysql-test/suite/perfschema/r/indexed_table_io.result b/mysql-test/suite/perfschema/r/indexed_table_io.result
index 57518673491..75bc57dcbcf 100644
--- a/mysql-test/suite/perfschema/r/indexed_table_io.result
+++ b/mysql-test/suite/perfschema/r/indexed_table_io.result
@@ -30,19 +30,19 @@ truncate table performance_schema.events_waits_history_long;
update performance_schema.setup_consumers set enabled='YES';
# Printing of 100 inserts per table is suppressed
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'no_index_tab';
-COUNT(*)
+SUM(NUMBER_OF_BYTES)
100
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'index_tab';
-COUNT(*)
+SUM(NUMBER_OF_BYTES)
100
select count(*) from test.no_index_tab;
count(*)
@@ -56,75 +56,75 @@ select avg(a) from test.no_index_tab;
avg(a)
50.5000
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'no_index_tab';
-COUNT(*)
-101
+SUM(NUMBER_OF_BYTES)
+100
truncate table performance_schema.events_waits_history_long;
update performance_schema.setup_consumers set enabled='YES';
select avg(a) from test.index_tab;
avg(a)
50.5000
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'index_tab';
-COUNT(*)
-101
+SUM(NUMBER_OF_BYTES)
+100
truncate table performance_schema.events_waits_history_long;
update performance_schema.setup_consumers set enabled='YES';
select 1 as my_column from test.no_index_tab where a = 50;
my_column
1
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'no_index_tab';
-COUNT(*)
-101
+SUM(NUMBER_OF_BYTES)
+100
truncate table performance_schema.events_waits_history_long;
update performance_schema.setup_consumers set enabled='YES';
select 1 as my_column from test.index_tab where a = 50;
my_column
1
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'index_tab';
-COUNT(*)
+SUM(NUMBER_OF_BYTES)
1
truncate table performance_schema.events_waits_history_long;
update performance_schema.setup_consumers set enabled='YES';
delete from test.no_index_tab where a = 51;
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'no_index_tab';
-COUNT(*)
+SUM(NUMBER_OF_BYTES)
102
truncate table performance_schema.events_waits_history_long;
update performance_schema.setup_consumers set enabled='YES';
delete from test.index_tab where a = 51;
update performance_schema.setup_consumers set enabled='NO';
-select COUNT(*)
+select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
and object_name = 'index_tab';
-COUNT(*)
+SUM(NUMBER_OF_BYTES)
2
-show status like 'performance_schema_%';
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -134,9 +134,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -146,6 +152,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/information_schema.result b/mysql-test/suite/perfschema/r/information_schema.result
index a684fd7b84e..3f4a8cf6336 100644
--- a/mysql-test/suite/perfschema/r/information_schema.result
+++ b/mysql-test/suite/perfschema/r/information_schema.result
@@ -19,9 +19,18 @@ performance_schema events_statements_history_long def
performance_schema events_statements_summary_by_account_by_event_name def
performance_schema events_statements_summary_by_digest def
performance_schema events_statements_summary_by_host_by_event_name def
+performance_schema events_statements_summary_by_program def
performance_schema events_statements_summary_by_thread_by_event_name def
performance_schema events_statements_summary_by_user_by_event_name def
performance_schema events_statements_summary_global_by_event_name def
+performance_schema events_transactions_current def
+performance_schema events_transactions_history def
+performance_schema events_transactions_history_long def
+performance_schema events_transactions_summary_by_account_by_event_name def
+performance_schema events_transactions_summary_by_host_by_event_name def
+performance_schema events_transactions_summary_by_thread_by_event_name def
+performance_schema events_transactions_summary_by_user_by_event_name def
+performance_schema events_transactions_summary_global_by_event_name def
performance_schema events_waits_current def
performance_schema events_waits_history def
performance_schema events_waits_history_long def
@@ -34,14 +43,27 @@ performance_schema events_waits_summary_global_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 global_status def
performance_schema hosts def
performance_schema host_cache def
+performance_schema memory_summary_by_account_by_event_name def
+performance_schema memory_summary_by_host_by_event_name def
+performance_schema memory_summary_by_thread_by_event_name def
+performance_schema memory_summary_by_user_by_event_name def
+performance_schema memory_summary_global_by_event_name def
+performance_schema metadata_locks def
performance_schema mutex_instances def
performance_schema objects_summary_global_by_type def
performance_schema performance_timers def
+performance_schema prepared_statements_instances def
+performance_schema replication_applier_configuration def
+performance_schema replication_applier_status def
+performance_schema replication_applier_status_by_coordinator def
+performance_schema replication_connection_configuration def
performance_schema rwlock_instances def
performance_schema session_account_connect_attrs def
performance_schema session_connect_attrs def
+performance_schema session_status def
performance_schema setup_actors def
performance_schema setup_consumers def
performance_schema setup_instruments def
@@ -50,11 +72,17 @@ performance_schema setup_timers def
performance_schema socket_instances def
performance_schema socket_summary_by_event_name def
performance_schema socket_summary_by_instance def
+performance_schema status_by_account def
+performance_schema status_by_host def
+performance_schema status_by_thread def
+performance_schema status_by_user def
+performance_schema table_handles def
performance_schema table_io_waits_summary_by_index_usage def
performance_schema table_io_waits_summary_by_table def
performance_schema table_lock_waits_summary_by_table def
performance_schema threads def
performance_schema users def
+performance_schema user_variables_by_thread def
select lower(TABLE_NAME), TABLE_TYPE, ENGINE
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -76,9 +104,18 @@ events_statements_history_long BASE TABLE PERFORMANCE_SCHEMA
events_statements_summary_by_account_by_event_name BASE TABLE PERFORMANCE_SCHEMA
events_statements_summary_by_digest BASE TABLE PERFORMANCE_SCHEMA
events_statements_summary_by_host_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+events_statements_summary_by_program BASE TABLE PERFORMANCE_SCHEMA
events_statements_summary_by_thread_by_event_name BASE TABLE PERFORMANCE_SCHEMA
events_statements_summary_by_user_by_event_name BASE TABLE PERFORMANCE_SCHEMA
events_statements_summary_global_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_current BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_history BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_history_long BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_summary_by_account_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_summary_by_host_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_summary_by_thread_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_summary_by_user_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+events_transactions_summary_global_by_event_name 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
@@ -91,14 +128,27 @@ events_waits_summary_global_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
+global_status BASE TABLE PERFORMANCE_SCHEMA
hosts BASE TABLE PERFORMANCE_SCHEMA
host_cache BASE TABLE PERFORMANCE_SCHEMA
+memory_summary_by_account_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+memory_summary_by_host_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+memory_summary_by_thread_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+memory_summary_by_user_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+memory_summary_global_by_event_name BASE TABLE PERFORMANCE_SCHEMA
+metadata_locks BASE TABLE PERFORMANCE_SCHEMA
mutex_instances BASE TABLE PERFORMANCE_SCHEMA
objects_summary_global_by_type BASE TABLE PERFORMANCE_SCHEMA
performance_timers BASE TABLE PERFORMANCE_SCHEMA
+prepared_statements_instances BASE TABLE PERFORMANCE_SCHEMA
+replication_applier_configuration BASE TABLE PERFORMANCE_SCHEMA
+replication_applier_status BASE TABLE PERFORMANCE_SCHEMA
+replication_applier_status_by_coordinator BASE TABLE PERFORMANCE_SCHEMA
+replication_connection_configuration BASE TABLE PERFORMANCE_SCHEMA
rwlock_instances BASE TABLE PERFORMANCE_SCHEMA
session_account_connect_attrs BASE TABLE PERFORMANCE_SCHEMA
session_connect_attrs BASE TABLE PERFORMANCE_SCHEMA
+session_status BASE TABLE PERFORMANCE_SCHEMA
setup_actors BASE TABLE PERFORMANCE_SCHEMA
setup_consumers BASE TABLE PERFORMANCE_SCHEMA
setup_instruments BASE TABLE PERFORMANCE_SCHEMA
@@ -107,11 +157,17 @@ setup_timers BASE TABLE PERFORMANCE_SCHEMA
socket_instances BASE TABLE PERFORMANCE_SCHEMA
socket_summary_by_event_name BASE TABLE PERFORMANCE_SCHEMA
socket_summary_by_instance BASE TABLE PERFORMANCE_SCHEMA
+status_by_account BASE TABLE PERFORMANCE_SCHEMA
+status_by_host BASE TABLE PERFORMANCE_SCHEMA
+status_by_thread BASE TABLE PERFORMANCE_SCHEMA
+status_by_user BASE TABLE PERFORMANCE_SCHEMA
+table_handles BASE TABLE PERFORMANCE_SCHEMA
table_io_waits_summary_by_index_usage BASE TABLE PERFORMANCE_SCHEMA
table_io_waits_summary_by_table BASE TABLE PERFORMANCE_SCHEMA
table_lock_waits_summary_by_table BASE TABLE PERFORMANCE_SCHEMA
threads BASE TABLE PERFORMANCE_SCHEMA
users BASE TABLE PERFORMANCE_SCHEMA
+user_variables_by_thread BASE TABLE PERFORMANCE_SCHEMA
select lower(TABLE_NAME), VERSION, ROW_FORMAT
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -133,9 +189,18 @@ events_statements_history_long 10 Dynamic
events_statements_summary_by_account_by_event_name 10 Dynamic
events_statements_summary_by_digest 10 Dynamic
events_statements_summary_by_host_by_event_name 10 Dynamic
+events_statements_summary_by_program 10 Dynamic
events_statements_summary_by_thread_by_event_name 10 Dynamic
events_statements_summary_by_user_by_event_name 10 Dynamic
events_statements_summary_global_by_event_name 10 Dynamic
+events_transactions_current 10 Dynamic
+events_transactions_history 10 Dynamic
+events_transactions_history_long 10 Dynamic
+events_transactions_summary_by_account_by_event_name 10 Dynamic
+events_transactions_summary_by_host_by_event_name 10 Dynamic
+events_transactions_summary_by_thread_by_event_name 10 Dynamic
+events_transactions_summary_by_user_by_event_name 10 Dynamic
+events_transactions_summary_global_by_event_name 10 Dynamic
events_waits_current 10 Dynamic
events_waits_history 10 Dynamic
events_waits_history_long 10 Dynamic
@@ -148,14 +213,27 @@ events_waits_summary_global_by_event_name 10 Dynamic
file_instances 10 Dynamic
file_summary_by_event_name 10 Dynamic
file_summary_by_instance 10 Dynamic
+global_status 10 Dynamic
hosts 10 Fixed
host_cache 10 Dynamic
+memory_summary_by_account_by_event_name 10 Dynamic
+memory_summary_by_host_by_event_name 10 Dynamic
+memory_summary_by_thread_by_event_name 10 Dynamic
+memory_summary_by_user_by_event_name 10 Dynamic
+memory_summary_global_by_event_name 10 Dynamic
+metadata_locks 10 Dynamic
mutex_instances 10 Dynamic
objects_summary_global_by_type 10 Dynamic
performance_timers 10 Fixed
+prepared_statements_instances 10 Dynamic
+replication_applier_configuration 10 Fixed
+replication_applier_status 10 Fixed
+replication_applier_status_by_coordinator 10 Dynamic
+replication_connection_configuration 10 Dynamic
rwlock_instances 10 Dynamic
session_account_connect_attrs 10 Dynamic
session_connect_attrs 10 Dynamic
+session_status 10 Dynamic
setup_actors 10 Fixed
setup_consumers 10 Dynamic
setup_instruments 10 Dynamic
@@ -164,68 +242,109 @@ setup_timers 10 Dynamic
socket_instances 10 Dynamic
socket_summary_by_event_name 10 Dynamic
socket_summary_by_instance 10 Dynamic
+status_by_account 10 Dynamic
+status_by_host 10 Dynamic
+status_by_thread 10 Dynamic
+status_by_user 10 Dynamic
+table_handles 10 Dynamic
table_io_waits_summary_by_index_usage 10 Dynamic
table_io_waits_summary_by_table 10 Dynamic
table_lock_waits_summary_by_table 10 Dynamic
threads 10 Dynamic
users 10 Fixed
+user_variables_by_thread 10 Dynamic
+select lower(TABLE_NAME), AVG_ROW_LENGTH
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema' and
+lower(TABLE_NAME) not regexp '^variables|variables$|^status|session_status|global_status'
+ order by table_name;
+lower(TABLE_NAME) AVG_ROW_LENGTH
+accounts 0
+cond_instances 0
+events_stages_current 0
+events_stages_history 0
+events_stages_history_long 0
+events_stages_summary_by_account_by_event_name 0
+events_stages_summary_by_host_by_event_name 0
+events_stages_summary_by_thread_by_event_name 0
+events_stages_summary_by_user_by_event_name 0
+events_stages_summary_global_by_event_name 0
+events_statements_current 0
+events_statements_history 0
+events_statements_history_long 0
+events_statements_summary_by_account_by_event_name 0
+events_statements_summary_by_digest 0
+events_statements_summary_by_host_by_event_name 0
+events_statements_summary_by_program 0
+events_statements_summary_by_thread_by_event_name 0
+events_statements_summary_by_user_by_event_name 0
+events_statements_summary_global_by_event_name 0
+events_transactions_current 0
+events_transactions_history 0
+events_transactions_history_long 0
+events_transactions_summary_by_account_by_event_name 0
+events_transactions_summary_by_host_by_event_name 0
+events_transactions_summary_by_thread_by_event_name 0
+events_transactions_summary_by_user_by_event_name 0
+events_transactions_summary_global_by_event_name 0
+events_waits_current 0
+events_waits_history 0
+events_waits_history_long 0
+events_waits_summary_by_account_by_event_name 0
+events_waits_summary_by_host_by_event_name 0
+events_waits_summary_by_instance 0
+events_waits_summary_by_thread_by_event_name 0
+events_waits_summary_by_user_by_event_name 0
+events_waits_summary_global_by_event_name 0
+file_instances 0
+file_summary_by_event_name 0
+file_summary_by_instance 0
+hosts 0
+host_cache 0
+memory_summary_by_account_by_event_name 0
+memory_summary_by_host_by_event_name 0
+memory_summary_by_thread_by_event_name 0
+memory_summary_by_user_by_event_name 0
+memory_summary_global_by_event_name 0
+metadata_locks 0
+mutex_instances 0
+objects_summary_global_by_type 0
+performance_timers 0
+prepared_statements_instances 0
+replication_applier_configuration 0
+replication_applier_status 0
+replication_applier_status_by_coordinator 0
+replication_connection_configuration 0
+rwlock_instances 0
+session_account_connect_attrs 0
+session_connect_attrs 0
+setup_actors 0
+setup_consumers 0
+setup_instruments 0
+setup_objects 0
+setup_timers 0
+socket_instances 0
+socket_summary_by_event_name 0
+socket_summary_by_instance 0
+table_handles 0
+table_io_waits_summary_by_index_usage 0
+table_io_waits_summary_by_table 0
+table_lock_waits_summary_by_table 0
+threads 0
+users 0
+user_variables_by_thread 0
select lower(TABLE_NAME), TABLE_ROWS, AVG_ROW_LENGTH
from information_schema.tables
-where TABLE_SCHEMA='performance_schema'
+where TABLE_SCHEMA='performance_schema' and
+lower(TABLE_NAME) regexp '^variables|variables$|^status|session_status|global_status'
order by table_name;
lower(TABLE_NAME) TABLE_ROWS AVG_ROW_LENGTH
-accounts 1000 0
-cond_instances 1000 0
-events_stages_current 1000 0
-events_stages_history 1000 0
-events_stages_history_long 10000 0
-events_stages_summary_by_account_by_event_name 1000 0
-events_stages_summary_by_host_by_event_name 1000 0
-events_stages_summary_by_thread_by_event_name 1000 0
-events_stages_summary_by_user_by_event_name 1000 0
-events_stages_summary_global_by_event_name 1000 0
-events_statements_current 1000 0
-events_statements_history 1000 0
-events_statements_history_long 10000 0
-events_statements_summary_by_account_by_event_name 1000 0
-events_statements_summary_by_digest 1000 0
-events_statements_summary_by_host_by_event_name 1000 0
-events_statements_summary_by_thread_by_event_name 1000 0
-events_statements_summary_by_user_by_event_name 1000 0
-events_statements_summary_global_by_event_name 1000 0
-events_waits_current 1000 0
-events_waits_history 1000 0
-events_waits_history_long 10000 0
-events_waits_summary_by_account_by_event_name 1000 0
-events_waits_summary_by_host_by_event_name 1000 0
-events_waits_summary_by_instance 1000 0
-events_waits_summary_by_thread_by_event_name 1000 0
-events_waits_summary_by_user_by_event_name 1000 0
-events_waits_summary_global_by_event_name 1000 0
-file_instances 1000 0
-file_summary_by_event_name 1000 0
-file_summary_by_instance 1000 0
-hosts 1000 0
-host_cache 1000 0
-mutex_instances 1000 0
-objects_summary_global_by_type 1000 0
-performance_timers 5 0
-rwlock_instances 1000 0
-session_account_connect_attrs 1000 0
-session_connect_attrs 1000 0
-setup_actors 1 0
-setup_consumers 12 0
-setup_instruments 1000 0
-setup_objects 4 0
-setup_timers 4 0
-socket_instances 1000 0
-socket_summary_by_event_name 1000 0
-socket_summary_by_instance 1000 0
-table_io_waits_summary_by_index_usage 1000 0
-table_io_waits_summary_by_table 1000 0
-table_lock_waits_summary_by_table 1000 0
-threads 1000 0
-users 1000 0
+global_status table_rows avg_row_len
+session_status table_rows avg_row_len
+status_by_account table_rows avg_row_len
+status_by_host table_rows avg_row_len
+status_by_thread table_rows avg_row_len
+status_by_user table_rows avg_row_len
select lower(TABLE_NAME), DATA_LENGTH, MAX_DATA_LENGTH
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -247,9 +366,18 @@ events_statements_history_long 0 0
events_statements_summary_by_account_by_event_name 0 0
events_statements_summary_by_digest 0 0
events_statements_summary_by_host_by_event_name 0 0
+events_statements_summary_by_program 0 0
events_statements_summary_by_thread_by_event_name 0 0
events_statements_summary_by_user_by_event_name 0 0
events_statements_summary_global_by_event_name 0 0
+events_transactions_current 0 0
+events_transactions_history 0 0
+events_transactions_history_long 0 0
+events_transactions_summary_by_account_by_event_name 0 0
+events_transactions_summary_by_host_by_event_name 0 0
+events_transactions_summary_by_thread_by_event_name 0 0
+events_transactions_summary_by_user_by_event_name 0 0
+events_transactions_summary_global_by_event_name 0 0
events_waits_current 0 0
events_waits_history 0 0
events_waits_history_long 0 0
@@ -262,14 +390,27 @@ events_waits_summary_global_by_event_name 0 0
file_instances 0 0
file_summary_by_event_name 0 0
file_summary_by_instance 0 0
+global_status 0 0
hosts 0 0
host_cache 0 0
+memory_summary_by_account_by_event_name 0 0
+memory_summary_by_host_by_event_name 0 0
+memory_summary_by_thread_by_event_name 0 0
+memory_summary_by_user_by_event_name 0 0
+memory_summary_global_by_event_name 0 0
+metadata_locks 0 0
mutex_instances 0 0
objects_summary_global_by_type 0 0
performance_timers 0 0
+prepared_statements_instances 0 0
+replication_applier_configuration 0 0
+replication_applier_status 0 0
+replication_applier_status_by_coordinator 0 0
+replication_connection_configuration 0 0
rwlock_instances 0 0
session_account_connect_attrs 0 0
session_connect_attrs 0 0
+session_status 0 0
setup_actors 0 0
setup_consumers 0 0
setup_instruments 0 0
@@ -278,11 +419,17 @@ setup_timers 0 0
socket_instances 0 0
socket_summary_by_event_name 0 0
socket_summary_by_instance 0 0
+status_by_account 0 0
+status_by_host 0 0
+status_by_thread 0 0
+status_by_user 0 0
+table_handles 0 0
table_io_waits_summary_by_index_usage 0 0
table_io_waits_summary_by_table 0 0
table_lock_waits_summary_by_table 0 0
threads 0 0
users 0 0
+user_variables_by_thread 0 0
select lower(TABLE_NAME), INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -304,9 +451,18 @@ events_statements_history_long 0 0 NULL
events_statements_summary_by_account_by_event_name 0 0 NULL
events_statements_summary_by_digest 0 0 NULL
events_statements_summary_by_host_by_event_name 0 0 NULL
+events_statements_summary_by_program 0 0 NULL
events_statements_summary_by_thread_by_event_name 0 0 NULL
events_statements_summary_by_user_by_event_name 0 0 NULL
events_statements_summary_global_by_event_name 0 0 NULL
+events_transactions_current 0 0 NULL
+events_transactions_history 0 0 NULL
+events_transactions_history_long 0 0 NULL
+events_transactions_summary_by_account_by_event_name 0 0 NULL
+events_transactions_summary_by_host_by_event_name 0 0 NULL
+events_transactions_summary_by_thread_by_event_name 0 0 NULL
+events_transactions_summary_by_user_by_event_name 0 0 NULL
+events_transactions_summary_global_by_event_name 0 0 NULL
events_waits_current 0 0 NULL
events_waits_history 0 0 NULL
events_waits_history_long 0 0 NULL
@@ -319,14 +475,27 @@ events_waits_summary_global_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
+global_status 0 0 NULL
hosts 0 0 NULL
host_cache 0 0 NULL
+memory_summary_by_account_by_event_name 0 0 NULL
+memory_summary_by_host_by_event_name 0 0 NULL
+memory_summary_by_thread_by_event_name 0 0 NULL
+memory_summary_by_user_by_event_name 0 0 NULL
+memory_summary_global_by_event_name 0 0 NULL
+metadata_locks 0 0 NULL
mutex_instances 0 0 NULL
objects_summary_global_by_type 0 0 NULL
performance_timers 0 0 NULL
+prepared_statements_instances 0 0 NULL
+replication_applier_configuration 0 0 NULL
+replication_applier_status 0 0 NULL
+replication_applier_status_by_coordinator 0 0 NULL
+replication_connection_configuration 0 0 NULL
rwlock_instances 0 0 NULL
session_account_connect_attrs 0 0 NULL
session_connect_attrs 0 0 NULL
+session_status 0 0 NULL
setup_actors 0 0 NULL
setup_consumers 0 0 NULL
setup_instruments 0 0 NULL
@@ -335,11 +504,17 @@ setup_timers 0 0 NULL
socket_instances 0 0 NULL
socket_summary_by_event_name 0 0 NULL
socket_summary_by_instance 0 0 NULL
+status_by_account 0 0 NULL
+status_by_host 0 0 NULL
+status_by_thread 0 0 NULL
+status_by_user 0 0 NULL
+table_handles 0 0 NULL
table_io_waits_summary_by_index_usage 0 0 NULL
table_io_waits_summary_by_table 0 0 NULL
table_lock_waits_summary_by_table 0 0 NULL
threads 0 0 NULL
users 0 0 NULL
+user_variables_by_thread 0 0 NULL
select lower(TABLE_NAME), CREATE_TIME, UPDATE_TIME, CHECK_TIME
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -361,9 +536,18 @@ events_statements_history_long NULL NULL NULL
events_statements_summary_by_account_by_event_name NULL NULL NULL
events_statements_summary_by_digest NULL NULL NULL
events_statements_summary_by_host_by_event_name NULL NULL NULL
+events_statements_summary_by_program NULL NULL NULL
events_statements_summary_by_thread_by_event_name NULL NULL NULL
events_statements_summary_by_user_by_event_name NULL NULL NULL
events_statements_summary_global_by_event_name NULL NULL NULL
+events_transactions_current NULL NULL NULL
+events_transactions_history NULL NULL NULL
+events_transactions_history_long NULL NULL NULL
+events_transactions_summary_by_account_by_event_name NULL NULL NULL
+events_transactions_summary_by_host_by_event_name NULL NULL NULL
+events_transactions_summary_by_thread_by_event_name NULL NULL NULL
+events_transactions_summary_by_user_by_event_name NULL NULL NULL
+events_transactions_summary_global_by_event_name NULL NULL NULL
events_waits_current NULL NULL NULL
events_waits_history NULL NULL NULL
events_waits_history_long NULL NULL NULL
@@ -376,14 +560,27 @@ events_waits_summary_global_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
+global_status NULL NULL NULL
hosts NULL NULL NULL
host_cache NULL NULL NULL
+memory_summary_by_account_by_event_name NULL NULL NULL
+memory_summary_by_host_by_event_name NULL NULL NULL
+memory_summary_by_thread_by_event_name NULL NULL NULL
+memory_summary_by_user_by_event_name NULL NULL NULL
+memory_summary_global_by_event_name NULL NULL NULL
+metadata_locks NULL NULL NULL
mutex_instances NULL NULL NULL
objects_summary_global_by_type NULL NULL NULL
performance_timers NULL NULL NULL
+prepared_statements_instances NULL NULL NULL
+replication_applier_configuration NULL NULL NULL
+replication_applier_status NULL NULL NULL
+replication_applier_status_by_coordinator NULL NULL NULL
+replication_connection_configuration NULL NULL NULL
rwlock_instances NULL NULL NULL
session_account_connect_attrs NULL NULL NULL
session_connect_attrs NULL NULL NULL
+session_status NULL NULL NULL
setup_actors NULL NULL NULL
setup_consumers NULL NULL NULL
setup_instruments NULL NULL NULL
@@ -392,11 +589,17 @@ setup_timers NULL NULL NULL
socket_instances NULL NULL NULL
socket_summary_by_event_name NULL NULL NULL
socket_summary_by_instance NULL NULL NULL
+status_by_account NULL NULL NULL
+status_by_host NULL NULL NULL
+status_by_thread NULL NULL NULL
+status_by_user NULL NULL NULL
+table_handles NULL NULL NULL
table_io_waits_summary_by_index_usage NULL NULL NULL
table_io_waits_summary_by_table NULL NULL NULL
table_lock_waits_summary_by_table NULL NULL NULL
threads NULL NULL NULL
users NULL NULL NULL
+user_variables_by_thread NULL NULL NULL
select lower(TABLE_NAME), TABLE_COLLATION, CHECKSUM
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -418,9 +621,18 @@ events_statements_history_long utf8_general_ci NULL
events_statements_summary_by_account_by_event_name utf8_general_ci NULL
events_statements_summary_by_digest utf8_general_ci NULL
events_statements_summary_by_host_by_event_name utf8_general_ci NULL
+events_statements_summary_by_program utf8_general_ci NULL
events_statements_summary_by_thread_by_event_name utf8_general_ci NULL
events_statements_summary_by_user_by_event_name utf8_general_ci NULL
events_statements_summary_global_by_event_name utf8_general_ci NULL
+events_transactions_current utf8_general_ci NULL
+events_transactions_history utf8_general_ci NULL
+events_transactions_history_long utf8_general_ci NULL
+events_transactions_summary_by_account_by_event_name utf8_general_ci NULL
+events_transactions_summary_by_host_by_event_name utf8_general_ci NULL
+events_transactions_summary_by_thread_by_event_name utf8_general_ci NULL
+events_transactions_summary_by_user_by_event_name utf8_general_ci NULL
+events_transactions_summary_global_by_event_name 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
@@ -433,14 +645,27 @@ events_waits_summary_global_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
+global_status utf8_general_ci NULL
hosts utf8_general_ci NULL
host_cache utf8_general_ci NULL
+memory_summary_by_account_by_event_name utf8_general_ci NULL
+memory_summary_by_host_by_event_name utf8_general_ci NULL
+memory_summary_by_thread_by_event_name utf8_general_ci NULL
+memory_summary_by_user_by_event_name utf8_general_ci NULL
+memory_summary_global_by_event_name utf8_general_ci NULL
+metadata_locks utf8_general_ci NULL
mutex_instances utf8_general_ci NULL
objects_summary_global_by_type utf8_general_ci NULL
performance_timers utf8_general_ci NULL
+prepared_statements_instances utf8_general_ci NULL
+replication_applier_configuration utf8_general_ci NULL
+replication_applier_status utf8_general_ci NULL
+replication_applier_status_by_coordinator utf8_general_ci NULL
+replication_connection_configuration utf8_general_ci NULL
rwlock_instances utf8_general_ci NULL
session_account_connect_attrs utf8_bin NULL
session_connect_attrs utf8_bin NULL
+session_status utf8_general_ci NULL
setup_actors utf8_general_ci NULL
setup_consumers utf8_general_ci NULL
setup_instruments utf8_general_ci NULL
@@ -449,11 +674,102 @@ setup_timers utf8_general_ci NULL
socket_instances utf8_general_ci NULL
socket_summary_by_event_name utf8_general_ci NULL
socket_summary_by_instance utf8_general_ci NULL
+status_by_account utf8_general_ci NULL
+status_by_host utf8_general_ci NULL
+status_by_thread utf8_general_ci NULL
+status_by_user utf8_general_ci NULL
+table_handles utf8_general_ci NULL
table_io_waits_summary_by_index_usage utf8_general_ci NULL
table_io_waits_summary_by_table utf8_general_ci NULL
table_lock_waits_summary_by_table utf8_general_ci NULL
threads utf8_general_ci NULL
users utf8_general_ci NULL
+user_variables_by_thread utf8_general_ci NULL
+select lower(TABLE_NAME), CREATE_OPTIONS
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema'
+ order by table_name;
+lower(TABLE_NAME) CREATE_OPTIONS
+accounts
+cond_instances
+events_stages_current
+events_stages_history
+events_stages_history_long
+events_stages_summary_by_account_by_event_name
+events_stages_summary_by_host_by_event_name
+events_stages_summary_by_thread_by_event_name
+events_stages_summary_by_user_by_event_name
+events_stages_summary_global_by_event_name
+events_statements_current
+events_statements_history
+events_statements_history_long
+events_statements_summary_by_account_by_event_name
+events_statements_summary_by_digest
+events_statements_summary_by_host_by_event_name
+events_statements_summary_by_program
+events_statements_summary_by_thread_by_event_name
+events_statements_summary_by_user_by_event_name
+events_statements_summary_global_by_event_name
+events_transactions_current
+events_transactions_history
+events_transactions_history_long
+events_transactions_summary_by_account_by_event_name
+events_transactions_summary_by_host_by_event_name
+events_transactions_summary_by_thread_by_event_name
+events_transactions_summary_by_user_by_event_name
+events_transactions_summary_global_by_event_name
+events_waits_current
+events_waits_history
+events_waits_history_long
+events_waits_summary_by_account_by_event_name
+events_waits_summary_by_host_by_event_name
+events_waits_summary_by_instance
+events_waits_summary_by_thread_by_event_name
+events_waits_summary_by_user_by_event_name
+events_waits_summary_global_by_event_name
+file_instances
+file_summary_by_event_name
+file_summary_by_instance
+global_status
+hosts
+host_cache
+memory_summary_by_account_by_event_name
+memory_summary_by_host_by_event_name
+memory_summary_by_thread_by_event_name
+memory_summary_by_user_by_event_name
+memory_summary_global_by_event_name
+metadata_locks
+mutex_instances
+objects_summary_global_by_type
+performance_timers
+prepared_statements_instances
+replication_applier_configuration
+replication_applier_status
+replication_applier_status_by_coordinator
+replication_connection_configuration
+rwlock_instances
+session_account_connect_attrs
+session_connect_attrs
+session_status
+setup_actors
+setup_consumers
+setup_instruments
+setup_objects
+setup_timers
+socket_instances
+socket_summary_by_event_name
+socket_summary_by_instance
+status_by_account
+status_by_host
+status_by_thread
+status_by_user
+table_handles
+table_io_waits_summary_by_index_usage
+table_io_waits_summary_by_table
+table_lock_waits_summary_by_table
+threads
+users
+user_variables_by_thread
select lower(TABLE_NAME), TABLE_COMMENT
from information_schema.tables
where TABLE_SCHEMA='performance_schema'
@@ -475,9 +791,18 @@ events_statements_history_long
events_statements_summary_by_account_by_event_name
events_statements_summary_by_digest
events_statements_summary_by_host_by_event_name
+events_statements_summary_by_program
events_statements_summary_by_thread_by_event_name
events_statements_summary_by_user_by_event_name
events_statements_summary_global_by_event_name
+events_transactions_current
+events_transactions_history
+events_transactions_history_long
+events_transactions_summary_by_account_by_event_name
+events_transactions_summary_by_host_by_event_name
+events_transactions_summary_by_thread_by_event_name
+events_transactions_summary_by_user_by_event_name
+events_transactions_summary_global_by_event_name
events_waits_current
events_waits_history
events_waits_history_long
@@ -490,14 +815,27 @@ events_waits_summary_global_by_event_name
file_instances
file_summary_by_event_name
file_summary_by_instance
+global_status
hosts
host_cache
+memory_summary_by_account_by_event_name
+memory_summary_by_host_by_event_name
+memory_summary_by_thread_by_event_name
+memory_summary_by_user_by_event_name
+memory_summary_global_by_event_name
+metadata_locks
mutex_instances
objects_summary_global_by_type
performance_timers
+prepared_statements_instances
+replication_applier_configuration
+replication_applier_status
+replication_applier_status_by_coordinator
+replication_connection_configuration
rwlock_instances
session_account_connect_attrs
session_connect_attrs
+session_status
setup_actors
setup_consumers
setup_instruments
@@ -506,8 +844,14 @@ setup_timers
socket_instances
socket_summary_by_event_name
socket_summary_by_instance
+status_by_account
+status_by_host
+status_by_thread
+status_by_user
+table_handles
table_io_waits_summary_by_index_usage
table_io_waits_summary_by_table
table_lock_waits_summary_by_table
threads
users
+user_variables_by_thread
diff --git a/mysql-test/suite/perfschema/r/innodb_table_io.result b/mysql-test/suite/perfschema/r/innodb_table_io.result
index c37c1035e5a..286f0516e62 100644
--- a/mysql-test/suite/perfschema/r/innodb_table_io.result
+++ b/mysql-test/suite/perfschema/r/innodb_table_io.result
@@ -71,63 +71,69 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/io_cache.result b/mysql-test/suite/perfschema/r/io_cache.result
new file mode 100644
index 00000000000..4b742610a39
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/io_cache.result
@@ -0,0 +1,96 @@
+
+## Connection default
+
+connection default;
+USE test;
+DROP TABLE IF EXISTS t1;
+SELECT @@global.binlog_cache_size;
+@@global.binlog_cache_size
+4096
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SELECT * FROM performance_schema.setup_instruments WHERE name LIKE "%file/sql/io_cache%";
+NAME ENABLED TIMED
+wait/io/file/sql/io_cache YES YES
+
+## Connection con1
+
+connect con1, localhost, root,,;
+USE test;
+CREATE TABLE t1 (s1 INT, s2 VARCHAR(4096));
+SET SESSION AUTOCOMMIT = 0;
+START TRANSACTION;
+INSERT INTO t1 VALUES (1,'
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+');
+INSERT INTO t1 VALUES (2,'
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+');
+INSERT INTO t1 VALUES (3,'
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+');
+INSERT INTO t1 VALUES (4,'
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+');
+INSERT INTO t1 VALUES (5,'
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+');
+INSERT INTO t1 VALUES (6,'
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+');
+INSERT INTO t1 VALUES (7,'
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+');
+INSERT INTO t1 VALUES (8,'
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+');
+COMMIT;
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+8
+disconnect con1;
+
+## Connection default
+
+connection default;
+SELECT COUNT(*) FROM test.t1;
+COUNT(*)
+8
+SELECT COUNT(*) FROM performance_schema.file_summary_by_event_name WHERE event_name LIKE "%io_cache%";
+COUNT(*)
+1
+connection default;
+DROP TABLE t1;
diff --git a/mysql-test/suite/perfschema/r/max_program_zero.result b/mysql-test/suite/perfschema/r/max_program_zero.result
new file mode 100644
index 00000000000..b75b24ffdb4
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/max_program_zero.result
@@ -0,0 +1,313 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 0
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 1
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_program_instances";
+Variable_name Value
+performance_schema_max_program_instances 0
+show global variables like "performance_schema_max_statement_stack";
+Variable_name Value
+performance_schema_max_statement_stack 1
+#####################
+# Setup
+#####################
+# SET-UP
+CREATE DATABASE nested_sp;
+USE nested_sp;
+CREATE TABLE t1(
+id CHAR(16) NOT NULL DEFAULT '',
+data INT NOT NULL
+);
+CREATE TABLE t2(
+n INT UNSIGNED NOT NULL,
+f BIGINT UNSIGNED
+) engine=innodb;
+############################
+# Creating Stored Programs #
+############################
+CREATE PROCEDURE c1(x INT)
+CALL c2("c", x)|
+CREATE PROCEDURE c2(s CHAR(16), x INT)
+CALL c3(x, s)|
+CREATE PROCEDURE c3(x INT, s CHAR(16))
+CALL c4("level", x, s)|
+CREATE PROCEDURE c4(l CHAR(8), x INT, s CHAR(16))
+INSERT INTO t1 VALUES (concat(l,s), x)|
+CREATE PROCEDURE iotest(x1 CHAR(16), x2 CHAR(16), y INT)
+BEGIN
+CALL inc2(x2, y);
+INSERT INTO t1 VALUES (x1, y);
+END|
+CREATE PROCEDURE inc2(x CHAR(16), y INT)
+BEGIN
+CALL inc(y);
+INSERT INTO t1 VALUES (x, y);
+END|
+CREATE PROCEDURE inc(inout io INT)
+SET io = io + 1|
+CREATE FUNCTION mul(x INT, y INT) RETURNS INT
+RETURN x*y|
+CREATE FUNCTION inc(i INT) RETURNS INT
+RETURN i+1|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+CREATE FUNCTION fun(i INT, u INT UNSIGNED) RETURNS DOUBLE
+RETURN mul(inc(i), fac(u))|
+CREATE PROCEDURE ifac(n INT UNSIGNED)
+BEGIN
+DECLARE i BIGINT UNSIGNED DEFAULT 1;
+IF n > 20 THEN
+SET n = 20; # bigint overflow otherwise
+END IF;
+WHILE i <= n DO
+BEGIN
+INSERT INTO t2 VALUES (i, fac(i));
+SET i = i + 1;
+END;
+END WHILE;
+END|
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+CALL ifac(10)|
+TRUNCATE performance_schema.events_statements_summary_by_program;
+#####################
+# Executing Queries
+#####################
+#####################
+# Executing queries #
+#####################
+CALL c1(42);
+SELECT * FROM t1;
+id data
+levelc 42
+DELETE FROM t1;
+CALL iotest("io1", "io2", 1);
+SELECT * FROM t1 ORDER BY data DESC;
+id data
+io2 2
+io1 1
+DELETE FROM t1;
+SELECT fun(6,10);
+fun(6,10)
+25401600
+INSERT INTO t1 VALUES (20,13);
+SELECT * FROM t2;
+n f
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+###########################################
+# Quering PS statement summary table #
+###########################################
+SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA
+FROM performance_schema.events_statements_summary_by_program;
+OBJECT_TYPE OBJECT_NAME OBJECT_SCHEMA
+SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_program;
+COUNT(*)
+0
+#####################
+# Cleanup
+#####################
+DROP PROCEDURE c4;
+DROP PROCEDURE c3;
+DROP PROCEDURE c2;
+DROP PROCEDURE c1;
+DROP PROCEDURE inc;
+DROP PROCEDURE inc2;
+DROP PROCEDURE iotest;
+DROP FUNCTION mul;
+DROP FUNCTION inc;
+DROP FUNCTION fac;
+DROP FUNCTION fun;
+DROP PROCEDURE ifac;
+DROP TRIGGER trg;
+DROP TABLE t1,t2;
+DROP DATABASE nested_sp;
diff --git a/mysql-test/suite/perfschema/r/mdl_func.result b/mysql-test/suite/perfschema/r/mdl_func.result
new file mode 100644
index 00000000000..4887b15efa5
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/mdl_func.result
@@ -0,0 +1,920 @@
+UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
+UPDATE performance_schema.setup_instruments SET enabled = 'YES'
+WHERE name in ('wait/io/table/sql/handler',
+'wait/lock/table/sql/handler',
+'wait/lock/metadata/sql/mdl');
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+set sql_mode= @orig_sql_mode;
+insert into performance_schema.setup_objects (object_type, object_schema, object_name, enabled, timed)
+values ('TABLE', 'mtr', '%', 'NO', 'NO');
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+# Switch to (con2, localhost, user2, , )
+connect con2, localhost, user2, , ;
+connection default;
+drop function if exists thread_id_name;
+create function thread_id_name(THREAD_ID int)
+returns varchar(16)
+begin
+if (THREAD_ID IS NULL)
+then
+return NULL;
+end if;
+if (THREAD_ID = @user1_tid)
+then
+return "USER1";
+end if;
+if (THREAD_ID = @user2_tid)
+then
+return "USER2";
+end if;
+return "OTHER";
+end;
+//
+select thread_id_name(NULL);
+thread_id_name(NULL)
+NULL
+select thread_id_name(@user1_tid);
+thread_id_name(@user1_tid)
+USER1
+select thread_id_name(@user2_tid);
+thread_id_name(@user2_tid)
+USER2
+prepare dump_metadata_locks from
+"select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ LOCK_TYPE, LOCK_DURATION, LOCK_STATUS,
+ thread_id_name(OWNER_THREAD_ID) as OWNER_THREAD_ID
+ from performance_schema.metadata_locks
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ LOCK_TYPE, LOCK_DURATION, LOCK_STATUS, OWNER_THREAD_ID;";
+prepare dump_table_handles from
+"select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ INTERNAL_LOCK, EXTERNAL_LOCK,
+ thread_id_name(OWNER_THREAD_ID) as OWNER_THREAD_ID
+ from performance_schema.table_handles
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ INTERNAL_LOCK, EXTERNAL_LOCK, OWNER_THREAD_ID;";
+prepare dump_waits_current from
+"select thread_id_name(THREAD_ID) as THREAD_ID,
+ EVENT_NAME,
+ TIMER_START is not NULL as TIMER_START_SET,
+ TIMER_END is not NULL as TIMER_END_SET,
+ OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+ OPERATION
+ from performance_schema.events_waits_current
+ where event_name = \'wait/lock/metadata/sql/mdl\';";
+prepare dump_waits_history_long from
+"select thread_id_name(THREAD_ID) as THREAD_ID,
+ EVENT_NAME,
+ TIMER_START is not NULL as TIMER_START_SET,
+ TIMER_END is not NULL as TIMER_END_SET,
+ OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+ OPERATION
+ from performance_schema.events_waits_history_long
+ where event_name = \'wait/lock/metadata/sql/mdl\';";
+truncate table performance_schema.events_statements_summary_by_digest;
+flush status;
+flush tables;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value');
+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;
+connection con1;
+BEGIN;
+SELECT * from t1 where id=1;
+id b
+1 initial value
+connection default;
+"---- Marker 1 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK READ
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+execute dump_waits_history_long;
+connection con1;
+COMMIT;
+connection default;
+"---- Marker 2 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK READ
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+execute dump_waits_history_long;
+connection con1;
+BEGIN;
+UPDATE t1 set b="new value" where id=2;
+connection default;
+"---- Marker 3 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_WRITE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+execute dump_waits_history_long;
+connection con2;
+BEGIN;
+DROP TABLE t1;;
+connection default;
+"---- Marker 4 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE SCHEMA
+OBJECT_SCHEMA test
+OBJECT_NAME NULL
+LOCK_TYPE INTENTION_EXCLUSIVE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE EXCLUSIVE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS PENDING
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_WRITE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+connection con1;
+COMMIT;
+connection con2;
+connection default;
+"---- Marker 5 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+execute dump_table_handles;
+execute dump_waits_current;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+connection default;
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+create table t1 (a int);
+connection con1;
+LOCK TABLE t1 READ;
+connection default;
+"---- Marker 6 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK READ NO INSERT
+EXTERNAL_LOCK READ EXTERNAL
+OWNER_THREAD_ID USER1
+execute dump_waits_current;
+execute dump_waits_history_long;
+connection con2;
+LOCK TABLE t1 write;;
+connection default;
+"---- Marker 7 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE SCHEMA
+OBJECT_SCHEMA test
+OBJECT_NAME NULL
+LOCK_TYPE INTENTION_EXCLUSIVE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_NO_READ_WRITE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS PENDING
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK READ NO INSERT
+EXTERNAL_LOCK READ EXTERNAL
+OWNER_THREAD_ID USER1
+execute dump_waits_current;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+connection con1;
+UNLOCK TABLES;
+connection con2;
+connection default;
+"---- Marker 8 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE BACKUP
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+LOCK_TYPE BACKUP_DDL
+LOCK_DURATION STATEMENT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE BACKUP
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+LOCK_TYPE BACKUP_DML
+LOCK_DURATION STATEMENT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE SCHEMA
+OBJECT_SCHEMA test
+OBJECT_NAME NULL
+LOCK_TYPE INTENTION_EXCLUSIVE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_NO_READ_WRITE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE
+EXTERNAL_LOCK WRITE EXTERNAL
+OWNER_THREAD_ID USER2
+execute dump_waits_current;
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+connection con1;
+LOCK TABLES t1 read;;
+connection default;
+"---- Marker 9 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE BACKUP
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+LOCK_TYPE BACKUP_DDL
+LOCK_DURATION STATEMENT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE BACKUP
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+LOCK_TYPE BACKUP_DML
+LOCK_DURATION STATEMENT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE SCHEMA
+OBJECT_SCHEMA test
+OBJECT_NAME NULL
+LOCK_TYPE INTENTION_EXCLUSIVE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_NO_READ_WRITE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS PENDING
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE
+EXTERNAL_LOCK WRITE EXTERNAL
+OWNER_THREAD_ID USER2
+execute dump_waits_current;
+THREAD_ID USER1
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+connection con2;
+UNLOCK TABLES;
+connection con1;
+connection default;
+"---- Marker 10 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK READ NO INSERT
+EXTERNAL_LOCK READ EXTERNAL
+OWNER_THREAD_ID USER1
+execute dump_waits_current;
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+THREAD_ID USER1
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+connection con1;
+UNLOCK TABLES;
+connection default;
+"---- Marker 11 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK READ NO INSERT
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+THREAD_ID USER1
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INDEX_NAME NULL
+OPERATION metadata lock
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+connection con1;
+BEGIN;
+UPDATE LOW_PRIORITY t1 SET a=8;
+connection default;
+"---- Marker 12 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+LOCK_TYPE SHARED_WRITE
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE LOW PRIORITY
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+execute dump_waits_history_long;
+connection con1;
+COMMIT;
+connection default;
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+connection con1;
+SELECT GET_LOCK('test', 0);
+GET_LOCK('test', 0)
+1
+connection default;
+"---- Marker 13 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+LOCK_TYPE SHARED_NO_WRITE
+LOCK_DURATION EXPLICIT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE LOW PRIORITY
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+execute dump_waits_history_long;
+connection con2;
+SELECT GET_LOCK('test', 120);;
+connection default;
+"---- Marker 14 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+LOCK_TYPE SHARED_NO_WRITE
+LOCK_DURATION EXPLICIT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER1
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+LOCK_TYPE SHARED_NO_WRITE
+LOCK_DURATION EXPLICIT
+LOCK_STATUS PENDING
+OWNER_THREAD_ID USER2
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE LOW PRIORITY
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+connection con1;
+SELECT RELEASE_LOCK('test');
+RELEASE_LOCK('test')
+1
+connection con2;
+GET_LOCK('test', 120)
+1
+connection default;
+"---- Marker 15 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+LOCK_TYPE SHARED_NO_WRITE
+LOCK_DURATION EXPLICIT
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID USER2
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE LOW PRIORITY
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+INDEX_NAME NULL
+OPERATION metadata lock
+connection con2;
+SELECT RELEASE_LOCK('test');
+RELEASE_LOCK('test')
+1
+connection default;
+"---- Marker 16 ----"
+execute dump_metadata_locks;
+OBJECT_TYPE FUNCTION
+OBJECT_SCHEMA test
+OBJECT_NAME thread_id_name
+LOCK_TYPE SHARED
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA performance_schema
+OBJECT_NAME metadata_locks
+LOCK_TYPE SHARED_READ
+LOCK_DURATION TRANSACTION
+LOCK_STATUS GRANTED
+OWNER_THREAD_ID OTHER
+execute dump_table_handles;
+OBJECT_TYPE TABLE
+OBJECT_SCHEMA test
+OBJECT_NAME t1
+INTERNAL_LOCK WRITE LOW PRIORITY
+EXTERNAL_LOCK NULL
+OWNER_THREAD_ID OTHER
+execute dump_waits_current;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+INDEX_NAME NULL
+OPERATION metadata lock
+execute dump_waits_history_long;
+THREAD_ID USER2
+EVENT_NAME wait/lock/metadata/sql/mdl
+TIMER_START_SET 1
+TIMER_END_SET 1
+OBJECT_TYPE USER LEVEL LOCK
+OBJECT_SCHEMA NULL
+OBJECT_NAME test
+INDEX_NAME NULL
+OPERATION metadata lock
+disconnect con1;
+disconnect con2;
+connection default;
+drop table t1;
+UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+drop function thread_id_name;
+drop prepare dump_metadata_locks;
+drop prepare dump_table_handles;
+drop prepare dump_waits_current;
+drop prepare dump_waits_history_long;
+delete from performance_schema.setup_objects
+where object_schema='mtr';
+show global status like "performance_schema%";
+Variable_name Value
+Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
+Performance_schema_cond_instances_lost 0
+Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
+Performance_schema_file_handles_lost 0
+Performance_schema_file_instances_lost 0
+Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
+Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
+Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
+Performance_schema_rwlock_instances_lost 0
+Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
+Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
+Performance_schema_table_handles_lost 0
+Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
+Performance_schema_thread_instances_lost 0
+Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate.result b/mysql-test/suite/perfschema/r/memory_aggregate.result
new file mode 100644
index 00000000000..69eb033e74b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate.result
@@ -0,0 +1,5602 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 1 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 6
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 6
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 6
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_32bit.result b/mysql-test/suite/perfschema/r/memory_aggregate_32bit.result
new file mode 100644
index 00000000000..2b8ee675650
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_32bit.result
@@ -0,0 +1,5602 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 24576
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 24576
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 49152
+SUM_NUMBER_OF_BYTES_FREE 24576
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 49152
+SUM_NUMBER_OF_BYTES_FREE 24576
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 49152
+SUM_NUMBER_OF_BYTES_FREE 24576
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 600
+SUM_NUMBER_OF_BYTES_FREE 24
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 576
+HIGH_NUMBER_OF_BYTES_USED 600
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 73728
+SUM_NUMBER_OF_BYTES_FREE 49152
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 600
+SUM_NUMBER_OF_BYTES_FREE 24
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 576
+HIGH_NUMBER_OF_BYTES_USED 600
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 600
+SUM_NUMBER_OF_BYTES_FREE 24
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 576
+HIGH_NUMBER_OF_BYTES_USED 600
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 73728
+SUM_NUMBER_OF_BYTES_FREE 49152
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 600
+SUM_NUMBER_OF_BYTES_FREE 24
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 576
+HIGH_NUMBER_OF_BYTES_USED 600
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 40
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 960
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 40
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 960
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 192
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 192
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 192
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 208
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 208
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 424
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 576
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 424
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 576
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 1 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 6
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 208
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 208
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 616
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 616
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 384
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 6
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 8
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 200
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 208
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 208
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 808
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 808
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 192
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 6
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 400
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 400
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 400
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 400
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 200
+SUM_NUMBER_OF_BYTES_FREE 200
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 200
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 400
+SUM_NUMBER_OF_BYTES_FREE 400
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 400
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 73728
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1000
+SUM_NUMBER_OF_BYTES_FREE 1000
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1000
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 24576
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 24576
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 24576
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 24576
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 24576
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 24576
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 24576
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 24576
+CURRENT_NUMBER_OF_BYTES_USED 24576
+HIGH_NUMBER_OF_BYTES_USED 24576
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_a.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_a.result
new file mode 100644
index 00000000000..b5c8e1cd3c7
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_a.result
@@ -0,0 +1,4014 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 1 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 6
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 6
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 6
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_h.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_h.result
new file mode 100644
index 00000000000..cc0e0c03dcf
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_h.result
@@ -0,0 +1,3464 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 1 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u.result
new file mode 100644
index 00000000000..8b24b5b565b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u.result
@@ -0,0 +1,2442 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 6
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 6
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 6
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u_no_h.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u_no_h.result
new file mode 100644
index 00000000000..45cbaf88372
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_a_no_u_no_h.result
@@ -0,0 +1,1892 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 784
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 8
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1328
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_h.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_h.result
new file mode 100644
index 00000000000..35d528bf63c
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_h.result
@@ -0,0 +1,5052 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 1 1
+user2 1 1
+user3 1 1
+user4 2 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 1 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 1 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 1 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+USER user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+user1 0 1
+user2 0 1
+user3 0 1
+user4 0 2
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root 1 1
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_u.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_u.result
new file mode 100644
index 00000000000..1f800ce4ba6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_u.result
@@ -0,0 +1,4030 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 2
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 3
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 4
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 6 6
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 4 6
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 3 6
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 2 6
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 6
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+localhost 1 1
diff --git a/mysql-test/suite/perfschema/r/memory_aggregate_no_u_no_h.result b/mysql-test/suite/perfschema/r/memory_aggregate_no_u_no_h.result
new file mode 100644
index 00000000000..b1ac5f24ec9
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/memory_aggregate_no_u_no_h.result
@@ -0,0 +1,3480 @@
+show global status like "performance_schema_memory_classes_lost";
+Variable_name Value
+Performance_schema_memory_classes_lost 0
+"================== Step 1 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con1, localhost, user1, , ;
+"================== con1 connected =================="
+connection default;
+"================== Step 2 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con1;
+set GLOBAL query_cache_size=1000*1024;
+select get_lock("marker_1", 10);
+get_lock("marker_1", 10)
+1
+select release_lock("marker_1");
+release_lock("marker_1")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con1 marker =================="
+connection default;
+"================== Step 3 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con2, localhost, user2, , ;
+"================== con2 connected =================="
+connection default;
+"================== Step 4 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 4
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7120
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 7120
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con2;
+set GLOBAL query_cache_size=2000*1024;
+select get_lock("marker_2", 10);
+get_lock("marker_2", 10)
+1
+select release_lock("marker_2");
+release_lock("marker_2")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con2 marker =================="
+connection default;
+"================== Step 5 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 5b =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con3, localhost, user3, , ;
+"================== con3 connected =================="
+connection default;
+"================== Step 6 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 65536
+SUM_NUMBER_OF_BYTES_FREE 32768
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 7
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14144
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 7
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 14144
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con3;
+set GLOBAL query_cache_size=500*1024;
+select get_lock("marker_3", 10);
+get_lock("marker_3", 10)
+1
+select release_lock("marker_3");
+release_lock("marker_3")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con3 marker =================="
+connection default;
+"================== Step 7 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connect con4, localhost, user4, , ;
+connect con5, localhost, user4, , ;
+"================== con4/con5 (both user4) connected =================="
+connection default;
+"================== Step 8 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 6
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 98304
+SUM_NUMBER_OF_BYTES_FREE 65536
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 816
+SUM_NUMBER_OF_BYTES_FREE 48
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 816
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 10
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 21168
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 21168
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection con4;
+set GLOBAL query_cache_size=4000*1024;
+select get_lock("marker_4", 10);
+get_lock("marker_4", 10)
+1
+select release_lock("marker_4");
+release_lock("marker_4")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+connection con5;
+select get_lock("marker_5", 10);
+get_lock("marker_5", 10)
+1
+select release_lock("marker_5");
+release_lock("marker_5")
+1
+set @v1 = repeat("a", 1000);
+set @v2 = repeat("b", 2000);
+set @v3 = repeat("c", 4000);
+"================== con4/con5 marker =================="
+connection default;
+"================== Step 9 =================="
+call dump_thread();
+username user1
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user1
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 32
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 6
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 14048
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 5
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 80
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 5
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 1280
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 16
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 35216
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 1 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 2 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con1;
+disconnect con5;
+connection default;
+"================== con1/con5 disconnected =================="
+"================== Step 10 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 256
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 256
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 256
+username user2
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 3
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 7024
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 7
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 592
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 768
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 10
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 21168
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 1 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con2;
+connection default;
+"================== con2 disconnected =================="
+"================== Step 11 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user3
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 8
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 848
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 512
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 21072
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 7
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 14144
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 1 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con3;
+connection default;
+"================== con3 disconnected =================="
+"================== Step 12 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 1
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 16
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 272
+username user4
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 7024
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 288
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 3
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 7024
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 9
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1104
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 256
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 12
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 28096
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 4
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 7120
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 1 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+disconnect con4;
+connection default;
+"================== con4 disconnected =================="
+"================== Step 13 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+connection default;
+truncate performance_schema.memory_summary_by_thread_by_event_name;
+"================== MEMORY_BY_THREAD truncated =================="
+"================== Step 14 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 2
+COUNT_FREE 2
+SUM_NUMBER_OF_BYTES_ALLOC 272
+SUM_NUMBER_OF_BYTES_FREE 272
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 272
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 3
+COUNT_FREE 3
+SUM_NUMBER_OF_BYTES_ALLOC 7024
+SUM_NUMBER_OF_BYTES_FREE 7024
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 3
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 7024
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 4
+COUNT_FREE 4
+SUM_NUMBER_OF_BYTES_ALLOC 544
+SUM_NUMBER_OF_BYTES_FREE 544
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 4
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 544
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 6
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 14048
+SUM_NUMBER_OF_BYTES_FREE 14048
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 6
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 14048
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_account_by_event_name;
+"================== MEMORY_BY_ACCOUNT truncated =================="
+"================== Step 15 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_user_by_event_name;
+"================== MEMORY_BY_USER truncated =================="
+"================== Step 16 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_by_host_by_event_name;
+"================== MEMORY_BY_HOST truncated =================="
+"================== Step 17 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 8
+COUNT_FREE 6
+SUM_NUMBER_OF_BYTES_ALLOC 131072
+SUM_NUMBER_OF_BYTES_FREE 98304
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 10
+COUNT_FREE 10
+SUM_NUMBER_OF_BYTES_ALLOC 1360
+SUM_NUMBER_OF_BYTES_FREE 1360
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 10
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 1360
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 16
+COUNT_FREE 15
+SUM_NUMBER_OF_BYTES_ALLOC 35216
+SUM_NUMBER_OF_BYTES_FREE 35120
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 16
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 35216
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.memory_summary_global_by_event_name;
+"================== MEMORY_GLOBAL truncated =================="
+"================== Step 18 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user1
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user2
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user3
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+USER user4
+HOST localhost
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+user1 localhost 0 1
+user2 localhost 0 1
+user3 localhost 0 1
+user4 localhost 0 2
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.accounts;
+"================== ACCOUNTS truncated =================="
+"================== Step 19 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.users;
+"================== USERS truncated =================="
+"================== Step 20 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+truncate performance_schema.hosts;
+"================== HOSTS truncated =================="
+"================== Step 21 =================="
+call dump_thread();
+username user1
+status not found
+username user2
+status not found
+username user3
+status not found
+username user4
+status not found
+execute dump_memory_account;
+execute dump_memory_user;
+execute dump_memory_host;
+execute dump_memory_global;
+EVENT_NAME memory/sql/Query_cache
+COUNT_ALLOC 2
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 32768
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 2
+CURRENT_COUNT_USED 2
+HIGH_COUNT_USED 2
+LOW_NUMBER_OF_BYTES_USED 32768
+CURRENT_NUMBER_OF_BYTES_USED 32768
+HIGH_NUMBER_OF_BYTES_USED 32768
+EVENT_NAME memory/sql/User_level_lock
+COUNT_ALLOC 0
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 0
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 0
+CURRENT_COUNT_USED 0
+HIGH_COUNT_USED 0
+LOW_NUMBER_OF_BYTES_USED 0
+CURRENT_NUMBER_OF_BYTES_USED 0
+HIGH_NUMBER_OF_BYTES_USED 0
+EVENT_NAME memory/sql/user_var_entry::value
+COUNT_ALLOC 1
+COUNT_FREE 0
+SUM_NUMBER_OF_BYTES_ALLOC 96
+SUM_NUMBER_OF_BYTES_FREE 0
+LOW_COUNT_USED 1
+CURRENT_COUNT_USED 1
+HIGH_COUNT_USED 1
+LOW_NUMBER_OF_BYTES_USED 96
+CURRENT_NUMBER_OF_BYTES_USED 96
+HIGH_NUMBER_OF_BYTES_USED 96
+execute dump_accounts;
+USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+root localhost 1 1
+execute dump_users;
+USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+execute dump_hosts;
+HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
diff --git a/mysql-test/suite/perfschema/r/memory_table_io.result b/mysql-test/suite/perfschema/r/memory_table_io.result
index 7942015f618..033c355dfa3 100644
--- a/mysql-test/suite/perfschema/r/memory_table_io.result
+++ b/mysql-test/suite/perfschema/r/memory_table_io.result
@@ -70,65 +70,69 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/merge_table_io.result b/mysql-test/suite/perfschema/r/merge_table_io.result
index d390ba67b5f..e65cc45dc84 100644
--- a/mysql-test/suite/perfschema/r/merge_table_io.result
+++ b/mysql-test/suite/perfschema/r/merge_table_io.result
@@ -96,69 +96,75 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/misc.result b/mysql-test/suite/perfschema/r/misc.result
index 2e4d21d625a..bed8d93af25 100644
--- a/mysql-test/suite/perfschema/r/misc.result
+++ b/mysql-test/suite/perfschema/r/misc.result
@@ -92,6 +92,20 @@ object_schema object_name index_name count_fetch count_insert count_update count
test t_60905 i 2 0 0 1
test t_60905 NULL 5 5 0 1
DROP TABLE t_60905;
+show global variables like "performance_schema_max_thread_instances";
+Variable_name Value
+performance_schema_max_thread_instances 200
+explain select * from performance_schema.threads;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE threads ALL NULL NULL NULL NULL 256
+use performance_schema;
+show events;
+Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
+show events from performance_schema;
+Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
+show events where Db= 'performance_schema';
+Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
+use test;
use test;
truncate performance_schema.events_statements_history;
truncate performance_schema.events_statements_history_long;
diff --git a/mysql-test/suite/perfschema/r/multi_table_io.result b/mysql-test/suite/perfschema/r/multi_table_io.result
index 929e1791c61..54dc0fba3d1 100644
--- a/mysql-test/suite/perfschema/r/multi_table_io.result
+++ b/mysql-test/suite/perfschema/r/multi_table_io.result
@@ -52,42 +52,56 @@ where event_name like 'wait/io/table/%'
and object_schema in ('test','test1')
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test1 t2 delete NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 update 1
+wait/io/table/sql/handler TABLE test1 t2 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 update 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 delete 1
+wait/io/table/sql/handler TABLE test1 t2 fetch 1
+wait/io/table/sql/handler TABLE test1 t2 delete 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/myisam_file_io.result b/mysql-test/suite/perfschema/r/myisam_file_io.result
index ea1e0bd52b8..ec03a16e8a1 100644
--- a/mysql-test/suite/perfschema/r/myisam_file_io.result
+++ b/mysql-test/suite/perfschema/r/myisam_file_io.result
@@ -21,29 +21,29 @@ where operation not like "tell"
having short_name <> ""
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_%';
+wait/io/file/myisam/kfile create NULL no_index_tab.MYI
+wait/io/file/myisam/dfile create NULL no_index_tab.MYD
+wait/io/file/myisam/kfile write 176 no_index_tab.MYI
+wait/io/file/myisam/kfile write 100 no_index_tab.MYI
+wait/io/file/myisam/kfile write 7 no_index_tab.MYI
+wait/io/file/myisam/kfile write 7 no_index_tab.MYI
+wait/io/file/myisam/kfile write 7 no_index_tab.MYI
+wait/io/file/myisam/kfile chsize 1024 no_index_tab.MYI
+wait/io/file/myisam/dfile close NULL no_index_tab.MYD
+wait/io/file/myisam/kfile close NULL no_index_tab.MYI
+wait/io/file/myisam/kfile open NULL no_index_tab.MYI
+wait/io/file/myisam/kfile read 24 no_index_tab.MYI
+wait/io/file/myisam/kfile seek NULL no_index_tab.MYI
+wait/io/file/myisam/kfile read 297 no_index_tab.MYI
+wait/io/file/myisam/dfile open NULL no_index_tab.MYD
+wait/io/file/myisam/kfile write 3 no_index_tab.MYI
+wait/io/file/myisam/dfile write 20 no_index_tab.MYD
+wait/io/file/myisam/kfile write 124 no_index_tab.MYI
+wait/io/file/myisam/dfile write 20 no_index_tab.MYD
+wait/io/file/myisam/kfile write 124 no_index_tab.MYI
+wait/io/file/myisam/dfile write 20 no_index_tab.MYD
+wait/io/file/myisam/kfile write 124 no_index_tab.MYI
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -53,9 +53,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -65,6 +71,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/myisam_table_io.result b/mysql-test/suite/perfschema/r/myisam_table_io.result
index 97a099581d4..9e5d95683ed 100644
--- a/mysql-test/suite/perfschema/r/myisam_table_io.result
+++ b/mysql-test/suite/perfschema/r/myisam_table_io.result
@@ -70,63 +70,69 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/nesting.result b/mysql-test/suite/perfschema/r/nesting.result
index 37681757973..e3137d634a6 100644
--- a/mysql-test/suite/perfschema/r/nesting.result
+++ b/mysql-test/suite/perfschema/r/nesting.result
@@ -40,7 +40,7 @@ where sql_text like "%MARKER_END%" and thread_id = @con1_tid);
select (@marker_end is not null) as expected;
expected
1
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -50,9 +50,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -62,6 +68,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
@@ -108,20 +115,20 @@ and (end_event_id <= @marker_end)
order by relative_event_id asc;
relative_event_id relative_end_event_id event_name comment nesting_event_type relative_nesting_event_id
0 20 statement/sql/select select "MARKER_BEGIN" as marker NULL NULL
-1 4 stage/sql/Init (stage) STATEMENT 0
+1 4 stage/sql/starting (stage) STATEMENT 0
2 2 wait/io/socket/sql/client_connection recv STAGE 1
3 3 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 1
4 4 wait/io/file/sql/query_log write STAGE 1
-5 5 stage/sql/Checking permissions (stage) STATEMENT 0
+5 5 stage/sql/checking permissions (stage) STATEMENT 0
6 6 stage/sql/Opening tables (stage) STATEMENT 0
7 7 stage/sql/After opening tables (stage) STATEMENT 0
-8 8 stage/sql/Init (stage) STATEMENT 0
+8 8 stage/sql/init (stage) STATEMENT 0
9 9 stage/sql/Optimizing (stage) STATEMENT 0
10 10 stage/sql/Executing (stage) STATEMENT 0
11 11 stage/sql/End of update loop (stage) STATEMENT 0
12 12 stage/sql/Query end (stage) STATEMENT 0
13 13 stage/sql/Commit (stage) STATEMENT 0
-14 14 stage/sql/Closing tables (stage) STATEMENT 0
+14 14 stage/sql/closing tables (stage) STATEMENT 0
15 15 stage/sql/Starting cleanup (stage) STATEMENT 0
16 16 stage/sql/Freeing items (stage) STATEMENT 0
17 17 wait/io/socket/sql/client_connection send STATEMENT 0
@@ -130,20 +137,20 @@ relative_event_id relative_end_event_id event_name comment nesting_event_type re
20 20 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 19
21 21 idle idle NULL NULL
22 42 statement/sql/select select "This is simple statement one" as payload NULL NULL
-23 26 stage/sql/Init (stage) STATEMENT 22
+23 26 stage/sql/starting (stage) STATEMENT 22
24 24 wait/io/socket/sql/client_connection recv STAGE 23
25 25 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 23
26 26 wait/io/file/sql/query_log write STAGE 23
-27 27 stage/sql/Checking permissions (stage) STATEMENT 22
+27 27 stage/sql/checking permissions (stage) STATEMENT 22
28 28 stage/sql/Opening tables (stage) STATEMENT 22
29 29 stage/sql/After opening tables (stage) STATEMENT 22
-30 30 stage/sql/Init (stage) STATEMENT 22
+30 30 stage/sql/init (stage) STATEMENT 22
31 31 stage/sql/Optimizing (stage) STATEMENT 22
32 32 stage/sql/Executing (stage) STATEMENT 22
33 33 stage/sql/End of update loop (stage) STATEMENT 22
34 34 stage/sql/Query end (stage) STATEMENT 22
35 35 stage/sql/Commit (stage) STATEMENT 22
-36 36 stage/sql/Closing tables (stage) STATEMENT 22
+36 36 stage/sql/closing tables (stage) STATEMENT 22
37 37 stage/sql/Starting cleanup (stage) STATEMENT 22
38 38 stage/sql/Freeing items (stage) STATEMENT 22
39 39 wait/io/socket/sql/client_connection send STATEMENT 22
@@ -152,20 +159,20 @@ relative_event_id relative_end_event_id event_name comment nesting_event_type re
42 42 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 41
43 43 idle idle NULL NULL
44 64 statement/sql/select select "This is simple statement two" as payload NULL NULL
-45 48 stage/sql/Init (stage) STATEMENT 44
+45 48 stage/sql/starting (stage) STATEMENT 44
46 46 wait/io/socket/sql/client_connection recv STAGE 45
47 47 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 45
48 48 wait/io/file/sql/query_log write STAGE 45
-49 49 stage/sql/Checking permissions (stage) STATEMENT 44
+49 49 stage/sql/checking permissions (stage) STATEMENT 44
50 50 stage/sql/Opening tables (stage) STATEMENT 44
51 51 stage/sql/After opening tables (stage) STATEMENT 44
-52 52 stage/sql/Init (stage) STATEMENT 44
+52 52 stage/sql/init (stage) STATEMENT 44
53 53 stage/sql/Optimizing (stage) STATEMENT 44
54 54 stage/sql/Executing (stage) STATEMENT 44
55 55 stage/sql/End of update loop (stage) STATEMENT 44
56 56 stage/sql/Query end (stage) STATEMENT 44
57 57 stage/sql/Commit (stage) STATEMENT 44
-58 58 stage/sql/Closing tables (stage) STATEMENT 44
+58 58 stage/sql/closing tables (stage) STATEMENT 44
59 59 stage/sql/Starting cleanup (stage) STATEMENT 44
60 60 stage/sql/Freeing items (stage) STATEMENT 44
61 61 wait/io/socket/sql/client_connection send STATEMENT 44
@@ -176,57 +183,57 @@ relative_event_id relative_end_event_id event_name comment nesting_event_type re
66 85 statement/sql/select select "This is the first part of a multi query" as payload;
select "And this is the second part of a multi query" as payload;
select "With a third part to make things complete" as payload NULL NULL
-67 71 stage/sql/Init (stage) STATEMENT 66
+67 71 stage/sql/starting (stage) STATEMENT 66
68 68 wait/io/socket/sql/client_connection recv STAGE 67
69 69 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 67
70 70 wait/io/file/sql/query_log write STAGE 67
71 71 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 67
-72 72 stage/sql/Checking permissions (stage) STATEMENT 66
+72 72 stage/sql/checking permissions (stage) STATEMENT 66
73 73 stage/sql/Opening tables (stage) STATEMENT 66
74 74 stage/sql/After opening tables (stage) STATEMENT 66
-75 75 stage/sql/Init (stage) STATEMENT 66
+75 75 stage/sql/init (stage) STATEMENT 66
76 76 stage/sql/Optimizing (stage) STATEMENT 66
77 77 stage/sql/Executing (stage) STATEMENT 66
78 78 stage/sql/End of update loop (stage) STATEMENT 66
79 79 stage/sql/Query end (stage) STATEMENT 66
80 80 stage/sql/Commit (stage) STATEMENT 66
-81 81 stage/sql/Closing tables (stage) STATEMENT 66
+81 81 stage/sql/closing tables (stage) STATEMENT 66
82 82 stage/sql/Starting cleanup (stage) STATEMENT 66
83 85 stage/sql/Freeing items (stage) STATEMENT 66
84 84 wait/io/socket/sql/client_connection send STAGE 83
85 85 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STAGE 83
86 103 statement/sql/select select "And this is the second part of a multi query" as payload;
select "With a third part to make things complete" as payload NULL NULL
-87 89 stage/sql/Init (stage) STATEMENT 86
+87 89 stage/sql/starting (stage) STATEMENT 86
88 88 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 87
89 89 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 87
-90 90 stage/sql/Checking permissions (stage) STATEMENT 86
+90 90 stage/sql/checking permissions (stage) STATEMENT 86
91 91 stage/sql/Opening tables (stage) STATEMENT 86
92 92 stage/sql/After opening tables (stage) STATEMENT 86
-93 93 stage/sql/Init (stage) STATEMENT 86
+93 93 stage/sql/init (stage) STATEMENT 86
94 94 stage/sql/Optimizing (stage) STATEMENT 86
95 95 stage/sql/Executing (stage) STATEMENT 86
96 96 stage/sql/End of update loop (stage) STATEMENT 86
97 97 stage/sql/Query end (stage) STATEMENT 86
98 98 stage/sql/Commit (stage) STATEMENT 86
-99 99 stage/sql/Closing tables (stage) STATEMENT 86
+99 99 stage/sql/closing tables (stage) STATEMENT 86
100 100 stage/sql/Starting cleanup (stage) STATEMENT 86
101 103 stage/sql/Freeing items (stage) STATEMENT 86
102 102 wait/io/socket/sql/client_connection send STAGE 101
103 103 wait/synch/mutex/sql/THD::LOCK_thd_kill lock STAGE 101
104 122 statement/sql/select select "With a third part to make things complete" as payload NULL NULL
-105 106 stage/sql/Init (stage) STATEMENT 104
+105 106 stage/sql/starting (stage) STATEMENT 104
106 106 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 105
-107 107 stage/sql/Checking permissions (stage) STATEMENT 104
+107 107 stage/sql/checking permissions (stage) STATEMENT 104
108 108 stage/sql/Opening tables (stage) STATEMENT 104
109 109 stage/sql/After opening tables (stage) STATEMENT 104
-110 110 stage/sql/Init (stage) STATEMENT 104
+110 110 stage/sql/init (stage) STATEMENT 104
111 111 stage/sql/Optimizing (stage) STATEMENT 104
112 112 stage/sql/Executing (stage) STATEMENT 104
113 113 stage/sql/End of update loop (stage) STATEMENT 104
114 114 stage/sql/Query end (stage) STATEMENT 104
115 115 stage/sql/Commit (stage) STATEMENT 104
-116 116 stage/sql/Closing tables (stage) STATEMENT 104
+116 116 stage/sql/closing tables (stage) STATEMENT 104
117 117 stage/sql/Starting cleanup (stage) STATEMENT 104
118 118 stage/sql/Freeing items (stage) STATEMENT 104
119 119 wait/io/socket/sql/client_connection send STATEMENT 104
@@ -235,20 +242,20 @@ select "With a third part to make things complete" as payload NULL NULL
122 122 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 121
123 123 idle idle NULL NULL
124 144 statement/sql/select select "MARKER_END" as marker NULL NULL
-125 128 stage/sql/Init (stage) STATEMENT 124
+125 128 stage/sql/starting (stage) STATEMENT 124
126 126 wait/io/socket/sql/client_connection recv STAGE 125
127 127 wait/synch/mutex/sql/THD::LOCK_thd_data lock STAGE 125
128 128 wait/io/file/sql/query_log write STAGE 125
-129 129 stage/sql/Checking permissions (stage) STATEMENT 124
+129 129 stage/sql/checking permissions (stage) STATEMENT 124
130 130 stage/sql/Opening tables (stage) STATEMENT 124
131 131 stage/sql/After opening tables (stage) STATEMENT 124
-132 132 stage/sql/Init (stage) STATEMENT 124
+132 132 stage/sql/init (stage) STATEMENT 124
133 133 stage/sql/Optimizing (stage) STATEMENT 124
134 134 stage/sql/Executing (stage) STATEMENT 124
135 135 stage/sql/End of update loop (stage) STATEMENT 124
136 136 stage/sql/Query end (stage) STATEMENT 124
137 137 stage/sql/Commit (stage) STATEMENT 124
-138 138 stage/sql/Closing tables (stage) STATEMENT 124
+138 138 stage/sql/closing tables (stage) STATEMENT 124
139 139 stage/sql/Starting cleanup (stage) STATEMENT 124
140 140 stage/sql/Freeing items (stage) STATEMENT 124
141 141 wait/io/socket/sql/client_connection send STATEMENT 124
diff --git a/mysql-test/suite/perfschema/r/no_threads.result b/mysql-test/suite/perfschema/r/no_threads.result
index f78667f4f01..21991b15931 100644
--- a/mysql-test/suite/perfschema/r/no_threads.result
+++ b/mysql-test/suite/perfschema/r/no_threads.result
@@ -6,17 +6,20 @@ 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";
+show global variables like "thread_handling";
Variable_name Value
thread_handling no-threads
+show status like "Performance_schema_thread_instances_lost";
+Variable_name Value
+Performance_schema_thread_instances_lost 0
create table test.t1(a int) engine=MYISAM;
-show variables like "performance_schema";
+show global variables like "performance_schema";
Variable_name Value
performance_schema ON
-show variables like "performance_schema_max_thread%";
+show global variables like "performance_schema_max_thread%";
Variable_name Value
performance_schema_max_thread_classes 50
-performance_schema_max_thread_instances 10
+performance_schema_max_thread_instances 50
select count(*) from performance_schema.threads
where name like "thread/sql/main";
count(*)
@@ -29,16 +32,16 @@ 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:
+wait/synch/mutex/mysys/THR_LOCK_myisam lock
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:
+wait/synch/mutex/mysys/THR_LOCK_myisam lock
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:
+wait/synch/mutex/mysys/THR_LOCK_myisam lock
update performance_schema.setup_instruments set enabled='YES';
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
index 03966ad8556..649243db831 100644
--- a/mysql-test/suite/perfschema/r/one_thread_per_con.result
+++ b/mysql-test/suite/perfschema/r/one_thread_per_con.result
@@ -8,7 +8,7 @@ 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";
+show global variables like "thread_handling";
Variable_name Value
thread_handling one-thread-per-connection
connection con1;
@@ -20,19 +20,19 @@ 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
+wait/synch/mutex/mysys/THR_LOCK_myisam 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
+wait/synch/mutex/mysys/THR_LOCK_myisam 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
+wait/synch/mutex/mysys/THR_LOCK_myisam lock NULL
execute stmt_dump_thread using @tid;
name
thread/sql/one_connection
diff --git a/mysql-test/suite/perfschema/r/ortho_iter.result b/mysql-test/suite/perfschema/r/ortho_iter.result
index dfd31a80b3f..9489c1049e5 100644
--- a/mysql-test/suite/perfschema/r/ortho_iter.result
+++ b/mysql-test/suite/perfschema/r/ortho_iter.result
@@ -3,14 +3,25 @@ truncate table performance_schema.events_statements_summary_by_digest;
flush status;
create procedure check_instrument(in instr_name varchar(128))
begin
+declare save_count_expected integer;
declare count_expected integer;
-declare count_actual integer;
+declare count_builtin_expected integer;
+declare count_global_expected integer;
declare is_wait integer;
+declare is_wait_file integer;
+declare is_wait_socket integer;
declare is_stage integer;
declare is_statement integer;
+declare is_transaction integer;
+declare is_memory integer;
declare is_wait_table integer;
+declare is_wait_file_table integer;
+declare is_wait_socket_table integer;
declare is_stage_table integer;
declare is_statement_table integer;
+declare is_transaction_table integer;
+declare is_memory_table integer;
+declare is_memory_global_table integer;
declare pfs_table_name varchar(64);
declare msg varchar(512);
declare msg_detail varchar(512);
@@ -21,19 +32,53 @@ declare debug integer default 0;
declare pfs_cursor CURSOR FOR
select table_name from information_schema.tables
where table_schema= 'performance_schema'
- and table_name like "events_%_by_event_name%"
+ and table_name like "%_by_event_name%"
order by table_name;
declare continue handler for sqlstate '02000'
set done = 1;
-select (instr_name like "wait/%") or (instr_name like "idle/%") into is_wait;
+select (instr_name like "wait/%") or (instr_name like "idle") into is_wait;
+select (instr_name like "wait/io/file/%") into is_wait_file;
+select (instr_name like "wait/io/socket/%") into is_wait_socket;
select (instr_name like "stage/%") into is_stage;
select (instr_name like "statement/%") into is_statement;
-select instr_name, is_wait, is_stage, is_statement;
+select (instr_name like "memory/%") into is_memory;
+select (instr_name like "transaction") into is_transaction;
+select instr_name, is_wait, is_wait_file, is_wait_socket, is_stage, is_statement, is_memory, is_transaction;
select count(name)
from performance_schema.setup_instruments
where (name like (concat(instr_name, "%")))
and (not name like "%/abstract/%")
-into count_expected;
+and (not name like "memory/performance_schema/%")
+into save_count_expected;
+select count(name)
+from performance_schema.setup_instruments
+where (name like (concat(instr_name, "%")))
+and (name like "memory/performance_schema/%")
+into count_builtin_expected;
+select count(name)
+from performance_schema.setup_instruments
+where (name like (concat(instr_name, "%")))
+and (name in (
+"memory/sql/buffered_logs",
+"memory/sql/sql_acl_mem",
+"memory/sql/sql_acl_memex",
+"memory/sql/acl_cache",
+"memory/sql/TABLE_SHARE::mem_root",
+"memory/sql/TABLE",
+"memory/sql/Query_cache",
+"memory/sql/native_functions",
+"memory/sql/Event_basic::mem_root",
+"memory/sql/root",
+"memory/sql/load_env_plugins",
+"memory/sql/plugin_ref",
+"memory/sql/plugin_mem_root",
+"memory/sql/plugin_bookmark",
+"memory/csv/TINA_SHARE",
+"memory/sql/tz_storage",
+"memory/sql/servers_cache",
+"memory/sql/udf_mem"
+ ))
+into count_global_expected;
set cmd_1= "select count(*) from (select distinct event_name from performance_schema.";
set cmd_2= concat(" where event_name like \"",
instr_name,
@@ -43,8 +88,22 @@ repeat
fetch pfs_cursor into pfs_table_name;
if not done then
select (pfs_table_name like "%waits%") into is_wait_table;
+select (pfs_table_name like "file_summary%") into is_wait_file_table;
+select (pfs_table_name like "socket_summary%") into is_wait_socket_table;
select (pfs_table_name like "%stages%") into is_stage_table;
select (pfs_table_name like "%statements%") into is_statement_table;
+select (pfs_table_name like "%memory%") into is_memory_table;
+select (pfs_table_name like "memory_summary_global_by_event_name") into is_memory_global_table;
+select (pfs_table_name like "%transaction%") into is_transaction_table;
+set count_expected = save_count_expected;
+if is_memory_global_table
+then
+set count_expected = save_count_expected + count_builtin_expected;
+end if;
+if is_memory_table = 1 and is_memory_global_table = 0
+then
+set count_expected = save_count_expected - count_global_expected;
+end if;
select concat("Checking table ", pfs_table_name, " ...") as status;
select concat(cmd_1, pfs_table_name, cmd_2) into @cmd;
if debug = 1
@@ -57,37 +116,101 @@ drop prepare stmt;
set msg_detail= concat("table ", pfs_table_name,
", instruments ", count_expected,
", found ", @count_actual);
-if is_wait = 1 and is_wait_table = 1 and @count_actual <> count_expected
+if is_wait = 1
+then
+if is_wait_table = 1 and @count_actual <> count_expected
then
set msg= concat("Missing wait events: ", msg_detail);
signal sqlstate '05000' set message_text= msg;
end if;
-if is_wait = 1 and is_wait_table = 0 and @count_actual <> 0
+if is_wait_table = 0
+and is_wait_file_table = 0
+and is_wait_socket_table = 0
+and @count_actual <> 0
then
set msg= concat("Unexpected wait events: ", msg_detail);
signal sqlstate '05000' set message_text= msg;
end if;
-if is_stage = 1 and is_stage_table = 1 and @count_actual <> count_expected
+end if;
+if is_wait_file = 1
+then
+if is_wait_file_table = 1 and @count_actual <> count_expected
+then
+set msg= concat("Missing wait/io/file events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+if is_wait_table = 0 and is_wait_file_table = 0 and @count_actual <> 0
+then
+set msg= concat("Unexpected wait/io/file events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+end if;
+if is_wait_socket = 1
+then
+if is_wait_socket_table = 1 and @count_actual <> count_expected
+then
+set msg= concat("Missing wait/io/socket events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+if is_wait_table = 0 and is_wait_socket_table = 0 and @count_actual <> 0
+then
+set msg= concat("Unexpected wait/io/socket events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+end if;
+if is_stage = 1
+then
+if is_stage_table = 1 and @count_actual <> count_expected
then
set msg= concat("Missing stage events: ", msg_detail);
signal sqlstate '05000' set message_text= msg;
end if;
-if is_stage = 1 and is_stage_table = 0 and @count_actual <> 0
+if is_stage_table = 0 and @count_actual <> 0
then
set msg= concat("Unexpected stage events: ", msg_detail);
signal sqlstate '05000' set message_text= msg;
end if;
-if is_statement = 1 and is_statement_table = 1 and @count_actual <> count_expected
+end if;
+if is_statement = 1
+then
+if is_statement_table = 1 and @count_actual <> count_expected
then
set msg= concat("Missing statement events: ", msg_detail);
signal sqlstate '05000' set message_text= msg;
end if;
-if is_statement = 1 and is_statement_table = 0 and @count_actual <> 0
+if is_statement_table = 0 and @count_actual <> 0
then
set msg= concat("Unexpected statement events: ", msg_detail);
signal sqlstate '05000' set message_text= msg;
end if;
end if;
+if is_memory = 1
+then
+if is_memory_table = 1 and @count_actual <> count_expected
+then
+set msg= concat("Missing memory events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+if is_memory_table = 0 and @count_actual <> 0
+then
+set msg= concat("Unexpected memory events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+end if;
+if is_transaction = 1
+then
+if is_transaction_table = 1 and @count_actual <> count_expected
+then
+set msg= concat("Missing transaction events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+if is_transaction_table = 0 and @count_actual <> 0
+then
+set msg= concat("Unexpected transaction events: ", msg_detail);
+signal sqlstate '05000' set message_text= msg;
+end if;
+end if;
+end if;
until done
end repeat;
close pfs_cursor;
@@ -97,9 +220,9 @@ end
$
Warnings:
Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+show global variables like "performance_schema%";
Variable_name Value
performance_schema ON
performance_schema_accounts_size 100
@@ -108,24 +231,35 @@ performance_schema_events_stages_history_long_size 1000
performance_schema_events_stages_history_size 10
performance_schema_events_statements_history_long_size 1000
performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
performance_schema_events_waits_history_long_size 10000
performance_schema_events_waits_history_size 10
performance_schema_hosts_size 100
performance_schema_max_cond_classes 90
performance_schema_max_cond_instances 1000
performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
+performance_schema_max_file_classes 80
performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000
-performance_schema_max_mutex_classes 200
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
performance_schema_max_mutex_instances 5000
-performance_schema_max_rwlock_classes 40
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
performance_schema_max_rwlock_instances 5000
performance_schema_max_socket_classes 10
performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
performance_schema_max_table_handles 1000
performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 200
performance_schema_session_connect_attrs_size 2048
@@ -133,8 +267,8 @@ performance_schema_setup_actors_size 100
performance_schema_setup_objects_size 100
performance_schema_users_size 100
call check_instrument("wait/synch/mutex/");
-instr_name is_wait is_stage is_statement
-wait/synch/mutex/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/synch/mutex/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -156,6 +290,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -165,11 +309,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/synch/rwlock/");
-instr_name is_wait is_stage is_statement
-wait/synch/rwlock/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/synch/rwlock/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -191,6 +349,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -200,11 +368,84 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
+Warnings:
+Warning 12000 Done
+call check_instrument("wait/synch/sxlock/");
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/synch/sxlock/ 1 0 0 0 0 0 0
+status
+Checking table events_stages_summary_by_account_by_event_name ...
+status
+Checking table events_stages_summary_by_host_by_event_name ...
+status
+Checking table events_stages_summary_by_thread_by_event_name ...
+status
+Checking table events_stages_summary_by_user_by_event_name ...
+status
+Checking table events_stages_summary_global_by_event_name ...
+status
+Checking table events_statements_summary_by_account_by_event_name ...
+status
+Checking table events_statements_summary_by_host_by_event_name ...
+status
+Checking table events_statements_summary_by_thread_by_event_name ...
+status
+Checking table events_statements_summary_by_user_by_event_name ...
+status
+Checking table events_statements_summary_global_by_event_name ...
+status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
+Checking table events_waits_summary_by_account_by_event_name ...
+status
+Checking table events_waits_summary_by_host_by_event_name ...
+status
+Checking table events_waits_summary_by_thread_by_event_name ...
+status
+Checking table events_waits_summary_by_user_by_event_name ...
+status
+Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/synch/cond/");
-instr_name is_wait is_stage is_statement
-wait/synch/cond/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/synch/cond/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -226,6 +467,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -235,11 +486,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/synch/");
-instr_name is_wait is_stage is_statement
-wait/synch/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/synch/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -261,6 +526,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -270,11 +545,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/io/file/");
-instr_name is_wait is_stage is_statement
-wait/io/file/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/io/file/ 1 1 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -296,6 +585,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -305,11 +604,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
-call check_instrument("wait/io/net/");
-instr_name is_wait is_stage is_statement
-wait/io/net/ 1 0 0
+call check_instrument("wait/io/socket/");
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/io/socket/ 1 0 1 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -331,6 +644,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -340,11 +663,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/io/table/");
-instr_name is_wait is_stage is_statement
-wait/io/table/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/io/table/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -366,6 +703,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -375,11 +722,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/io/");
-instr_name is_wait is_stage is_statement
-wait/io/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/io/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -401,6 +762,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -410,11 +781,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/lock/table/");
-instr_name is_wait is_stage is_statement
-wait/lock/table/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/lock/table/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -436,6 +821,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -445,11 +840,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/lock/");
-instr_name is_wait is_stage is_statement
-wait/lock/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/lock/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -471,6 +880,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -480,11 +899,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("wait/");
-instr_name is_wait is_stage is_statement
-wait/ 1 0 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+wait/ 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -506,6 +939,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -515,11 +958,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("stage/");
-instr_name is_wait is_stage is_statement
-stage/ 0 1 0
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+stage/ 0 0 0 1 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -541,6 +998,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -550,11 +1017,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("statement/com/");
-instr_name is_wait is_stage is_statement
-statement/com/ 0 0 1
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+statement/com/ 0 0 0 0 1 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -576,6 +1057,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -585,11 +1076,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("statement/sql/");
-instr_name is_wait is_stage is_statement
-statement/sql/ 0 0 1
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+statement/sql/ 0 0 0 0 1 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -611,6 +1116,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -620,11 +1135,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("statement/abstract/");
-instr_name is_wait is_stage is_statement
-statement/abstract/ 0 0 1
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+statement/abstract/ 0 0 0 0 1 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -646,6 +1175,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -655,11 +1194,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
call check_instrument("statement/");
-instr_name is_wait is_stage is_statement
-statement/ 0 0 1
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+statement/ 0 0 0 0 1 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -681,6 +1234,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -690,11 +1253,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
-call check_instrument("idle/io/socket");
-instr_name is_wait is_stage is_statement
-idle/io/socket 1 0 0
+call check_instrument("idle");
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+idle 1 0 0 0 0 0 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -716,6 +1293,16 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -725,11 +1312,25 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
-call check_instrument("idle/");
-instr_name is_wait is_stage is_statement
-idle/ 1 0 0
+call check_instrument("memory/");
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+memory/ 0 0 0 0 0 1 0
status
Checking table events_stages_summary_by_account_by_event_name ...
status
@@ -751,6 +1352,75 @@ Checking table events_statements_summary_by_user_by_event_name ...
status
Checking table events_statements_summary_global_by_event_name ...
status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
+Checking table events_waits_summary_by_account_by_event_name ...
+status
+Checking table events_waits_summary_by_host_by_event_name ...
+status
+Checking table events_waits_summary_by_thread_by_event_name ...
+status
+Checking table events_waits_summary_by_user_by_event_name ...
+status
+Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
+Warnings:
+Warning 12000 Done
+call check_instrument("memory/performance_schema/");
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+memory/performance_schema/ 0 0 0 0 0 1 0
+status
+Checking table events_stages_summary_by_account_by_event_name ...
+status
+Checking table events_stages_summary_by_host_by_event_name ...
+status
+Checking table events_stages_summary_by_thread_by_event_name ...
+status
+Checking table events_stages_summary_by_user_by_event_name ...
+status
+Checking table events_stages_summary_global_by_event_name ...
+status
+Checking table events_statements_summary_by_account_by_event_name ...
+status
+Checking table events_statements_summary_by_host_by_event_name ...
+status
+Checking table events_statements_summary_by_thread_by_event_name ...
+status
+Checking table events_statements_summary_by_user_by_event_name ...
+status
+Checking table events_statements_summary_global_by_event_name ...
+status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
Checking table events_waits_summary_by_account_by_event_name ...
status
Checking table events_waits_summary_by_host_by_event_name ...
@@ -760,6 +1430,79 @@ status
Checking table events_waits_summary_by_user_by_event_name ...
status
Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
+Warnings:
+Warning 12000 Done
+call check_instrument("transaction");
+instr_name is_wait is_wait_file is_wait_socket is_stage is_statement is_memory is_transaction
+transaction 0 0 0 0 0 0 1
+status
+Checking table events_stages_summary_by_account_by_event_name ...
+status
+Checking table events_stages_summary_by_host_by_event_name ...
+status
+Checking table events_stages_summary_by_thread_by_event_name ...
+status
+Checking table events_stages_summary_by_user_by_event_name ...
+status
+Checking table events_stages_summary_global_by_event_name ...
+status
+Checking table events_statements_summary_by_account_by_event_name ...
+status
+Checking table events_statements_summary_by_host_by_event_name ...
+status
+Checking table events_statements_summary_by_thread_by_event_name ...
+status
+Checking table events_statements_summary_by_user_by_event_name ...
+status
+Checking table events_statements_summary_global_by_event_name ...
+status
+Checking table events_transactions_summary_by_account_by_event_name ...
+status
+Checking table events_transactions_summary_by_host_by_event_name ...
+status
+Checking table events_transactions_summary_by_thread_by_event_name ...
+status
+Checking table events_transactions_summary_by_user_by_event_name ...
+status
+Checking table events_transactions_summary_global_by_event_name ...
+status
+Checking table events_waits_summary_by_account_by_event_name ...
+status
+Checking table events_waits_summary_by_host_by_event_name ...
+status
+Checking table events_waits_summary_by_thread_by_event_name ...
+status
+Checking table events_waits_summary_by_user_by_event_name ...
+status
+Checking table events_waits_summary_global_by_event_name ...
+status
+Checking table file_summary_by_event_name ...
+status
+Checking table memory_summary_by_account_by_event_name ...
+status
+Checking table memory_summary_by_host_by_event_name ...
+status
+Checking table memory_summary_by_thread_by_event_name ...
+status
+Checking table memory_summary_by_user_by_event_name ...
+status
+Checking table memory_summary_global_by_event_name ...
+status
+Checking table socket_summary_by_event_name ...
Warnings:
Warning 12000 Done
drop procedure check_instrument;
diff --git a/mysql-test/suite/perfschema/r/part_table_io.result b/mysql-test/suite/perfschema/r/part_table_io.result
index 4f2bd7169d7..48b7c891693 100644
--- a/mysql-test/suite/perfschema/r/part_table_io.result
+++ b/mysql-test/suite/perfschema/r/part_table_io.result
@@ -73,62 +73,68 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/prepared_statements.result b/mysql-test/suite/perfschema/r/prepared_statements.result
new file mode 100644
index 00000000000..c11b486094e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/prepared_statements.result
@@ -0,0 +1,672 @@
+CREATE DATABASE db;
+USE db;
+TRUNCATE TABLE performance_schema.prepared_statements_instances ;
+TRUNCATE TABLE performance_schema.events_statements_history_long ;
+CREATE TABLE t1 (a INT NOT NULL);
+INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
+PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
+SET @table = 't1';
+SET @s = CONCAT('SELECT * FROM ', @table);
+PREPARE st2 FROM @s;
+PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?';
+PREPARE st4 FROM
+'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st1
+SQL_TEXT SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st2
+SQL_TEXT SELECT * FROM t1
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st3
+SQL_TEXT INSERT INTO t1 SELECT * FROM t1 WHERE a<=?
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st4
+SQL_TEXT (SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db' ;
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.events_statements_history_long
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/create_table
+SQL_TEXT CREATE TABLE t1 (a INT NOT NULL)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/insert
+SQL_TEXT INSERT INTO t1 VALUES (4), (8), (11), (32), (80)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @table = 't1'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @s = CONCAT('SELECT * FROM ', @table)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st2 FROM @s
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st4 FROM
+'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+SET @a = 3;
+SET @b = 4;
+EXECUTE st1 USING @a, @b;
+hypotenuse
+5
+EXECUTE st2;
+a
+4
+8
+11
+32
+80
+SET @c=3;
+EXECUTE st3 using @c;
+EXECUTE st4;
+a
+4
+8
+11
+14
+18
+21
+32
+42
+80
+90
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st1
+SQL_TEXT SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse
+COUNT_REPREPARE 0
+COUNT_EXECUTE 1
+SUM_ROWS_SENT 1
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st2
+SQL_TEXT SELECT * FROM t1
+COUNT_REPREPARE 0
+COUNT_EXECUTE 1
+SUM_ROWS_SENT 5
+SUM_SELECT_SCAN 1
+SUM_NO_INDEX_USED 1
+STATEMENT_NAME st3
+SQL_TEXT INSERT INTO t1 SELECT * FROM t1 WHERE a<=?
+COUNT_REPREPARE 0
+COUNT_EXECUTE 1
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 1
+SUM_NO_INDEX_USED 1
+STATEMENT_NAME st4
+SQL_TEXT (SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a
+COUNT_REPREPARE 0
+COUNT_EXECUTE 1
+SUM_ROWS_SENT 10
+SUM_SELECT_SCAN 3
+SUM_NO_INDEX_USED 1
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db' ;
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.events_statements_history_long
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/create_table
+SQL_TEXT CREATE TABLE t1 (a INT NOT NULL)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/insert
+SQL_TEXT INSERT INTO t1 VALUES (4), (8), (11), (32), (80)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @table = 't1'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @s = CONCAT('SELECT * FROM ', @table)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st2 FROM @s
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st4 FROM
+'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @a = 3
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @b = 4
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st1 USING @a, @b
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st2
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @c=3
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st3 using @c
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st4
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+TRUNCATE TABLE performance_schema.prepared_statements_instances ;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st1
+SQL_TEXT SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st2
+SQL_TEXT SELECT * FROM t1
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st3
+SQL_TEXT INSERT INTO t1 SELECT * FROM t1 WHERE a<=?
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+STATEMENT_NAME st4
+SQL_TEXT (SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+DEALLOCATE PREPARE st1;
+DEALLOCATE PREPARE st2;
+DEALLOCATE PREPARE st3;
+DEALLOCATE PREPARE st4;
+DROP TABLE t1;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db' ;
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.events_statements_history_long
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/create_table
+SQL_TEXT CREATE TABLE t1 (a INT NOT NULL)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/insert
+SQL_TEXT INSERT INTO t1 VALUES (4), (8), (11), (32), (80)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @table = 't1'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @s = CONCAT('SELECT * FROM ', @table)
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st2 FROM @s
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/prepare_sql
+SQL_TEXT PREPARE st4 FROM
+'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @a = 3
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @b = 4
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st1 USING @a, @b
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st2
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/set_option
+SQL_TEXT SET @c=3
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st3 using @c
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/execute_sql
+SQL_TEXT EXECUTE st4
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db'
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/dealloc_sql
+SQL_TEXT DEALLOCATE PREPARE st1
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/dealloc_sql
+SQL_TEXT DEALLOCATE PREPARE st2
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/dealloc_sql
+SQL_TEXT DEALLOCATE PREPARE st3
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/dealloc_sql
+SQL_TEXT DEALLOCATE PREPARE st4
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/drop_table
+SQL_TEXT DROP TABLE t1
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+EVENT_NAME statement/sql/select
+SQL_TEXT SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+TRUNCATE TABLE performance_schema.events_statements_history_long ;
+UPDATE performance_schema.setup_consumers SET ENABLED = 'NO';
+CREATE TABLE t1 (a INT NOT NULL);
+INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
+PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
+SET @table = 't1';
+SET @s = CONCAT('SELECT * FROM ', @table);
+PREPARE st2 FROM @s;
+PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?';
+PREPARE st4 FROM
+'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db' ;
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.events_statements_history_long
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+SET @a = 3;
+SET @b = 4;
+EXECUTE st1 USING @a, @b;
+hypotenuse
+5
+EXECUTE st2;
+a
+4
+8
+11
+32
+80
+SET @c=3;
+EXECUTE st3 using @c;
+EXECUTE st4;
+a
+4
+8
+11
+14
+18
+21
+32
+42
+80
+90
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db' ;
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.events_statements_history_long
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+DEALLOCATE PREPARE st1;
+DEALLOCATE PREPARE st2;
+DEALLOCATE PREPARE st3;
+DEALLOCATE PREPARE st4;
+DROP TABLE t1;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db' ;
+EVENT_NAME statement/sql/truncate
+SQL_TEXT TRUNCATE TABLE performance_schema.events_statements_history_long
+OBJECT_TYPE NULL
+OBJECT_SCHEMA NULL
+OBJECT_NAME NULL
+TRUNCATE TABLE performance_schema.events_statements_history_long ;
+UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
+PREPARE st FROM 'SELECT SUM(1000 + ?) AS total';
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SET @d=100;
+EXECUTE st USING @d;
+total
+1100
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 1
+SUM_ROWS_SENT 1
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SET @d = @d + 100;
+EXECUTE st USING @d;
+total
+1200
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 2
+SUM_ROWS_SENT 2
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SET @d = @d + 100;
+EXECUTE st USING @d;
+total
+1300
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 3
+SUM_ROWS_SENT 3
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SET @d = @d + 100;
+EXECUTE st USING @d;
+total
+1400
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 4
+SUM_ROWS_SENT 4
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SET @d = @d + 100;
+EXECUTE st USING @d;
+total
+1500
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 5
+SUM_ROWS_SENT 5
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+SET @d = @d + 100;
+EXECUTE st USING @d;
+total
+1600
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 6
+SUM_ROWS_SENT 6
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+TRUNCATE TABLE performance_schema.prepared_statements_instances ;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
+WHERE NAME like "statement/sql/execute%";
+SET @d=3274;
+EXECUTE st USING @d;
+total
+4274
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT SUM(1000 + ?) AS total
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
+ WHERE NAME like "statement/sql/prepare%";
+DEALLOCATE PREPARE st;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
+ WHERE NAME like "statement/sql/prepare%";
+UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
+WHERE NAME like "statement/sql/execute%";
+CREATE TABLE tab(
+Id INT,
+name CHAR(10),
+age INT
+);
+INSERT INTO tab VALUES(1,"Nakshatr",25),(2,"chanda",24),(3,"tejas",78);
+PREPARE st FROM 'SELECT * FROM tab';
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT * FROM tab
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+EXECUTE st;
+Id name age
+1 Nakshatr 25
+2 chanda 24
+3 tejas 78
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT * FROM tab
+COUNT_REPREPARE 0
+COUNT_EXECUTE 1
+SUM_ROWS_SENT 3
+SUM_SELECT_SCAN 1
+SUM_NO_INDEX_USED 1
+ALTER TABLE tab DROP COLUMN age;
+EXECUTE st;
+Id name
+1 Nakshatr
+2 chanda
+3 tejas
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT * FROM tab
+COUNT_REPREPARE 1
+COUNT_EXECUTE 2
+SUM_ROWS_SENT 6
+SUM_SELECT_SCAN 2
+SUM_NO_INDEX_USED 2
+ALTER TABLE tab ADD COLUMN age INT NULL;
+EXECUTE st;
+Id name age
+1 Nakshatr NULL
+2 chanda NULL
+3 tejas NULL
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT * FROM tab
+COUNT_REPREPARE 2
+COUNT_EXECUTE 3
+SUM_ROWS_SENT 9
+SUM_SELECT_SCAN 3
+SUM_NO_INDEX_USED 3
+TRUNCATE TABLE performance_schema.prepared_statements_instances ;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+STATEMENT_NAME st
+SQL_TEXT SELECT * FROM tab
+COUNT_REPREPARE 0
+COUNT_EXECUTE 0
+SUM_ROWS_SENT 0
+SUM_SELECT_SCAN 0
+SUM_NO_INDEX_USED 0
+DEALLOCATE PREPARE st;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ;
+TRUNCATE TABLE performance_schema.prepared_statements_instances ;
+TRUNCATE TABLE performance_schema.events_statements_history_long ;
+DROP TABLE tab;
+DROP DATABASE db;
diff --git a/mysql-test/suite/perfschema/r/prepared_stmts_by_stored_programs.result b/mysql-test/suite/perfschema/r/prepared_stmts_by_stored_programs.result
new file mode 100644
index 00000000000..318c4a1d21b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/prepared_stmts_by_stored_programs.result
@@ -0,0 +1,126 @@
+TRUNCATE TABLE performance_schema.prepared_statements_instances;
+CREATE DATABASE db;
+USE db;
+CREATE TABLE t
+(
+a INT,
+b CHAR(10),
+name CHAR(10)
+);
+SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
+INSERT INTO t VALUES (1,"kuchipudi","Vempati");
+INSERT INTO t VALUES (2,"odissi","Mohapatra");
+INSERT INTO t VALUES (3,"kathak","Maharaj");
+INSERT INTO t VALUES (4,"mohiyattam","Kalyanikutty");
+Warnings:
+Warning 1265 Data truncated for column 'name' at row 1
+INSERT INTO t VALUES (5,"manipuri","Guru");
+INSERT INTO t VALUES (6,"kathakali","Manavedan");
+SET sql_mode= default;
+CREATE PROCEDURE p1()
+BEGIN
+PREPARE st FROM 'SELECT * FROM t WHERE a<=?' ;
+SET @a=3;
+EXECUTE st using @a;
+END|
+CALL p1()|
+a b name
+1 kuchipudi Vempati
+2 odissi Mohapatra
+3 kathak Maharaj
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st SELECT * FROM t WHERE a<=? 1 0 PROCEDURE db p1
+DEALLOCATE PREPARE st|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+CREATE PROCEDURE p2()
+BEGIN
+PREPARE st1 FROM 'INSERT INTO t SELECT * FROM t WHERE a<=?' ;
+END|
+CALL p2()|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st1 INSERT INTO t SELECT * FROM t WHERE a<=? 0 0 PROCEDURE db p2
+SET @a=4|
+EXECUTE st1 using @a|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st1 INSERT INTO t SELECT * FROM t WHERE a<=? 1 0 PROCEDURE db p2
+CREATE PROCEDURE p3()
+BEGIN
+SET @a=2;
+EXECUTE st1 using @a;
+END|
+CALL p3()|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st1 INSERT INTO t SELECT * FROM t WHERE a<=? 2 0 PROCEDURE db p2
+DEALLOCATE PREPARE st1|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+PREPARE st2 FROM 'UPDATE t SET a=a+1 WHERE b=?'|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st2 UPDATE t SET a=a+1 WHERE b=? 0 0 NULL NULL NULL
+CREATE PROCEDURE p4()
+BEGIN
+SET @b='kuchipudi';
+EXECUTE st2 USING @b;
+END|
+CALL p4()|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st2 UPDATE t SET a=a+1 WHERE b=? 1 0 NULL NULL NULL
+ALTER TABLE t DROP COLUMN name;
+# COUNT_REPREPARE must be 1
+CALL p4()|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st2 UPDATE t SET a=a+1 WHERE b=? 2 1 NULL NULL NULL
+DEALLOCATE PREPARE st2|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+CREATE PROCEDURE p5()
+BEGIN
+SET @a=1;
+SELECT @a;
+END|
+PREPARE st3 FROM 'CALL p5()'|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st3 CALL p5() 0 0 NULL NULL NULL
+EXECUTE st3|
+@a
+1
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+st3 CALL p5() 1 0 NULL NULL NULL
+DEALLOCATE PREPARE st3|
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances|
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+CREATE TABLE tab(a INT);
+SET GLOBAL event_scheduler=ON;
+CREATE EVENT e1 ON SCHEDULE EVERY 10 HOUR DO
+BEGIN
+PREPARE st FROM 'INSERT INTO tab VALUES(?)';
+SET @a=1;
+EXECUTE st USING @a;
+END|
+SELECT * FROM tab LIMIT 1;
+a
+1
+SET GLOBAL event_scheduler=OFF;
+SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances;
+STATEMENT_NAME SQL_TEXT COUNT_EXECUTE COUNT_REPREPARE OWNER_OBJECT_TYPE OWNER_OBJECT_SCHEMA OWNER_OBJECT_NAME
+TRUNCATE TABLE performance_schema.prepared_statements_instances;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+DROP TABLE t;
+DROP TABLE tab;
+DROP PROCEDURE p1;
+DROP PROCEDURE p2;
+DROP PROCEDURE p3;
+DROP PROCEDURE p4;
+DROP PROCEDURE p5;
+DROP EVENT IF EXISTS e1;
+DROP DATABASE db;
diff --git a/mysql-test/suite/perfschema/r/privilege.result b/mysql-test/suite/perfschema/r/privilege.result
index 0a038000536..c5e0ebf3c92 100644
--- a/mysql-test/suite/perfschema/r/privilege.result
+++ b/mysql-test/suite/perfschema/r/privilege.result
@@ -581,6 +581,8 @@ 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' WHERE name <> "wait";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
TRUNCATE TABLE performance_schema.events_waits_history_long;
TRUNCATE TABLE performance_schema.events_waits_history;
TRUNCATE TABLE performance_schema.events_waits_current;
@@ -593,5 +595,19 @@ 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 = 'MICROSECOND' where name="idle";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
UPDATE performance_schema.setup_timers SET timer_name = 'NANOSECOND' where name="stage";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
UPDATE performance_schema.setup_timers SET timer_name = 'NANOSECOND' where name="statement";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+#
+# WL#2284: Increase the length of a user name
+#
+CREATE USER 'user_name_len_22_01234'@localhost;
+GRANT ALL ON performance_schema.* TO 'user_name_len_22_01234'@localhost with GRANT OPTION;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_name_len_22_01234'@localhost;
+DROP USER 'user_name_len_22_01234'@localhost;
diff --git a/mysql-test/suite/perfschema/r/privilege_table_io.result b/mysql-test/suite/perfschema/r/privilege_table_io.result
index 00f382de966..77f2b4a6887 100644
--- a/mysql-test/suite/perfschema/r/privilege_table_io.result
+++ b/mysql-test/suite/perfschema/r/privilege_table_io.result
@@ -24,9 +24,7 @@ flush privileges;
insert into test.marker set a = 1;
insert into test.marker set a = 1;
insert into test.marker set a = 1;
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
+show global variables like "performance_schema%";
Variable_name Value
performance_schema ON
performance_schema_accounts_size 100
@@ -35,31 +33,42 @@ performance_schema_events_stages_history_long_size 1000
performance_schema_events_stages_history_size 10
performance_schema_events_statements_history_long_size 1000
performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
performance_schema_events_waits_history_long_size 10000
performance_schema_events_waits_history_size 10
performance_schema_hosts_size 100
performance_schema_max_cond_classes 90
performance_schema_max_cond_instances 1000
performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
+performance_schema_max_file_classes 80
performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000
-performance_schema_max_mutex_classes 200
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
performance_schema_max_mutex_instances 5000
-performance_schema_max_rwlock_classes 40
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
performance_schema_max_rwlock_instances 5000
performance_schema_max_socket_classes 10
performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
performance_schema_max_table_handles 1000
performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 200
performance_schema_session_connect_attrs_size 2048
performance_schema_setup_actors_size 100
performance_schema_setup_objects_size 100
performance_schema_users_size 100
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -69,9 +78,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -81,6 +96,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
@@ -96,42 +112,56 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test", "mysql")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE mysql global_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql global_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql global_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql global_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql global_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql db fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql db fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql db fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql roles_mapping fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql procs_priv fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql servers fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql table_stats fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE mysql column_stats fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE mysql global_priv fetch 1
+wait/io/table/sql/handler TABLE mysql global_priv fetch 1
+wait/io/table/sql/handler TABLE mysql global_priv fetch 1
+wait/io/table/sql/handler TABLE mysql global_priv fetch 1
+wait/io/table/sql/handler TABLE mysql global_priv fetch 1
+wait/io/table/sql/handler TABLE mysql db fetch 1
+wait/io/table/sql/handler TABLE mysql db fetch 1
+wait/io/table/sql/handler TABLE mysql db fetch 1
+wait/io/table/sql/handler TABLE mysql proxies_priv fetch 1
+wait/io/table/sql/handler TABLE mysql proxies_priv fetch 1
+wait/io/table/sql/handler TABLE mysql proxies_priv fetch 1
+wait/io/table/sql/handler TABLE mysql roles_mapping fetch 1
+wait/io/table/sql/handler TABLE mysql tables_priv fetch 1
+wait/io/table/sql/handler TABLE mysql procs_priv fetch 1
+wait/io/table/sql/handler TABLE mysql servers fetch 1
+wait/io/table/sql/handler TABLE mysql table_stats fetch 1
+wait/io/table/sql/handler TABLE mysql column_stats fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/query_cache.result b/mysql-test/suite/perfschema/r/query_cache.result
index ae64c90582c..a84fff60431 100644
--- a/mysql-test/suite/perfschema/r/query_cache.result
+++ b/mysql-test/suite/perfschema/r/query_cache.result
@@ -11,13 +11,13 @@ a
1
2
3
-show status like "Qcache_queries_in_cache";
+show global status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
-show status like "Qcache_inserts";
+show global status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
-show status like "Qcache_hits";
+show global status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
select * from t1;
@@ -25,13 +25,13 @@ a
1
2
3
-show status like "Qcache_queries_in_cache";
+show global status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
-show status like "Qcache_inserts";
+show global status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
-show status like "Qcache_hits";
+show global status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
select spins from performance_schema.events_waits_current order by event_name limit 1;
@@ -40,13 +40,15 @@ NULL
select * from performance_schema.setup_timers where name='wait';
NAME TIMER_NAME
wait {CYCLE_OR_NANOSECOND}
-show status like "Qcache_queries_in_cache";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+show global status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
-show status like "Qcache_inserts";
+show global status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
-show status like "Qcache_hits";
+show global status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
select spins from performance_schema.events_waits_current order by event_name limit 1;
@@ -55,13 +57,15 @@ NULL
select * from performance_schema.setup_timers where name='wait';
NAME TIMER_NAME
wait {CYCLE_OR_NANOSECOND}
-show status like "Qcache_queries_in_cache";
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+show global status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
-show status like "Qcache_inserts";
+show global status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
-show status like "Qcache_hits";
+show global status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
SET GLOBAL query_cache_size=@save_query_cache_size;
diff --git a/mysql-test/suite/perfschema/r/read_only.result b/mysql-test/suite/perfschema/r/read_only.result
index 32e3a724b5e..344526bbd63 100644
--- a/mysql-test/suite/perfschema/r/read_only.result
+++ b/mysql-test/suite/perfschema/r/read_only.result
@@ -14,6 +14,7 @@ show grants;
Grants for pfsuser@localhost
GRANT USAGE ON *.* TO `pfsuser`@`localhost`
GRANT SELECT, UPDATE ON `performance_schema`.* TO `pfsuser`@`localhost`
+# Update on perf_schema is allowed in read_only mode.
select * from performance_schema.setup_instruments;
update performance_schema.setup_instruments set enabled='NO';
update performance_schema.setup_instruments set enabled='YES';
@@ -31,7 +32,7 @@ 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;
+grant READ_ONLY ADMIN on *.* to pfsuser@localhost;
flush privileges;
disconnect con1;
connect con1, localhost, pfsuser, , test;
@@ -40,7 +41,7 @@ select @@global.read_only;
1
show grants;
Grants for pfsuser@localhost
-GRANT SUPER ON *.* TO `pfsuser`@`localhost`
+GRANT READ_ONLY ADMIN 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';
diff --git a/mysql-test/suite/perfschema/r/relaylog.result b/mysql-test/suite/perfschema/r/relaylog.result
index 3fcf7367b53..ce3e9c04a5e 100644
--- a/mysql-test/suite/perfschema/r/relaylog.result
+++ b/mysql-test/suite/perfschema/r/relaylog.result
@@ -50,7 +50,9 @@ from performance_schema.file_summary_by_event_name
where event_name like "%binlog%" order by event_name;
EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
wait/io/file/sql/binlog MANY MANY MANY MANY
+wait/io/file/sql/binlog_cache NONE NONE NONE NONE
wait/io/file/sql/binlog_index MANY MANY MANY MANY
+wait/io/file/sql/binlog_index_cache NONE NONE NONE NONE
wait/io/file/sql/binlog_state NONE NONE NONE NONE
select
EVENT_NAME,
@@ -77,7 +79,9 @@ select * from performance_schema.file_summary_by_event_name
where event_name like "%relaylog%" order by event_name;
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
wait/io/file/sql/relaylog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+wait/io/file/sql/relaylog_cache 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
wait/io/file/sql/relaylog_index 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+wait/io/file/sql/relaylog_index_cache 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
select * from performance_schema.events_waits_summary_global_by_event_name
where event_name like "%MYSQL_RELAY_LOG%"
and event_name not like "%MYSQL_RELAY_LOG::update_cond"
@@ -135,7 +139,9 @@ from performance_schema.file_summary_by_event_name
where event_name like "%binlog%" order by event_name;
EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
wait/io/file/sql/binlog MANY MANY MANY MANY
+wait/io/file/sql/binlog_cache NONE NONE NONE NONE
wait/io/file/sql/binlog_index MANY MANY MANY MANY
+wait/io/file/sql/binlog_index_cache NONE NONE NONE NONE
wait/io/file/sql/binlog_state NONE NONE NONE NONE
select
EVENT_NAME,
@@ -182,7 +188,9 @@ from performance_schema.file_summary_by_event_name
where event_name like "%relaylog%" order by event_name;
EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
wait/io/file/sql/relaylog MANY MANY MANY MANY
+wait/io/file/sql/relaylog_cache NONE NONE NONE NONE
wait/io/file/sql/relaylog_index MANY MANY MANY MANY
+wait/io/file/sql/relaylog_index_cache NONE NONE NONE NONE
select
EVENT_NAME,
if (count_star > 0, "MANY", "NONE") as COUNT_STAR
diff --git a/mysql-test/suite/perfschema/r/rollback_table_io.result b/mysql-test/suite/perfschema/r/rollback_table_io.result
index a9cc5b1da39..a7946da7eab 100644
--- a/mysql-test/suite/perfschema/r/rollback_table_io.result
+++ b/mysql-test/suite/perfschema/r/rollback_table_io.result
@@ -42,34 +42,48 @@ where event_name like 'wait/io/table/%'
and object_schema in ('test')
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 delete 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 update 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/rpl_group_member_stats.result b/mysql-test/suite/perfschema/r/rpl_group_member_stats.result
new file mode 100644
index 00000000000..fd36a774307
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/rpl_group_member_stats.result
@@ -0,0 +1,8 @@
+include/assert.inc [The value of member_id should not be present]
+include/assert.inc [The value of view_id should not be present]
+include/assert.inc [The value of Count_Transactions_in_queue should be 0]
+include/assert.inc [The value of Count_Transactions_checked should be 0]
+include/assert.inc [The value of Count_conflicts_detected should be 0]
+include/assert.inc [The value of Count_Transactions_rows_validating should be 0]
+include/assert.inc [The value of Transactions_Committed_all_members should be 0]
+include/assert.inc [The value of Last_conflict_free_transaction should not be present]
diff --git a/mysql-test/suite/perfschema/r/rpl_group_members.result b/mysql-test/suite/perfschema/r/rpl_group_members.result
new file mode 100644
index 00000000000..2715a0d9f23
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/rpl_group_members.result
@@ -0,0 +1,5 @@
+include/assert.inc [The value of channel name should be empty]
+include/assert.inc [The value of member_id should be empty]
+include/assert.inc [The value of member_host should be empty]
+include/assert.inc [The value of member_port should be empty]
+include/assert.inc [The value of member_state should be empty]
diff --git a/mysql-test/suite/perfschema/r/rpl_gtid_func.result b/mysql-test/suite/perfschema/r/rpl_gtid_func.result
index b07c29a054c..de4b1ea18ca 100644
--- a/mysql-test/suite/perfschema/r/rpl_gtid_func.result
+++ b/mysql-test/suite/perfschema/r/rpl_gtid_func.result
@@ -18,7 +18,7 @@ update performance_schema.setup_instruments
set enabled='YES', timed='NO';
connection master;
select * from performance_schema.setup_instruments
-where timed='NO';
+where timed='NO' and name not like "memory/%";
NAME ENABLED TIMED
select "This better be in the master" as in_master_digest;
in_master_digest
@@ -28,11 +28,27 @@ values ('TABLE', 'master', 'foo', 'YES', 'YES');
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
+EVENT % % YES YES
+EVENT information_schema % NO NO
+EVENT mysql % NO NO
+EVENT performance_schema % NO NO
+FUNCTION % % YES YES
+FUNCTION information_schema % NO NO
+FUNCTION mysql % NO NO
+FUNCTION performance_schema % NO NO
+PROCEDURE % % YES YES
+PROCEDURE information_schema % NO NO
+PROCEDURE mysql % NO NO
+PROCEDURE performance_schema % NO NO
TABLE % % YES YES
TABLE information_schema % NO NO
TABLE master foo YES YES
TABLE mysql % NO NO
TABLE performance_schema % NO NO
+TRIGGER % % YES YES
+TRIGGER information_schema % NO NO
+TRIGGER mysql % NO NO
+TRIGGER performance_schema % NO NO
select digest_text, count_star
from performance_schema.events_statements_summary_by_digest
where digest_text like "%in_%_digest%";
@@ -55,11 +71,27 @@ values ('TABLE', 'slave', 'foo', 'YES', 'YES');
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
+EVENT % % YES YES
+EVENT information_schema % NO NO
+EVENT mysql % NO NO
+EVENT performance_schema % NO NO
+FUNCTION % % YES YES
+FUNCTION information_schema % NO NO
+FUNCTION mysql % NO NO
+FUNCTION performance_schema % NO NO
+PROCEDURE % % YES YES
+PROCEDURE information_schema % NO NO
+PROCEDURE mysql % NO NO
+PROCEDURE performance_schema % NO NO
TABLE % % YES YES
TABLE information_schema % NO NO
TABLE mysql % NO NO
TABLE performance_schema % NO NO
TABLE slave foo YES YES
+TRIGGER % % YES YES
+TRIGGER information_schema % NO NO
+TRIGGER mysql % NO NO
+TRIGGER performance_schema % NO NO
select digest_text, count_star
from performance_schema.events_statements_summary_by_digest
where digest_text like "%in_%_digest%";
@@ -73,8 +105,24 @@ delete from performance_schema.setup_objects
where object_schema='slave';
select * from performance_schema.setup_objects;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
+EVENT mysql % NO NO
+EVENT performance_schema % NO NO
+EVENT information_schema % NO NO
+EVENT % % YES YES
+FUNCTION mysql % NO NO
+FUNCTION performance_schema % NO NO
+FUNCTION information_schema % NO NO
+FUNCTION % % YES YES
+PROCEDURE mysql % NO NO
+PROCEDURE performance_schema % NO NO
+PROCEDURE information_schema % NO NO
+PROCEDURE % % YES YES
TABLE mysql % NO NO
TABLE performance_schema % NO NO
TABLE information_schema % NO NO
TABLE % % YES YES
+TRIGGER mysql % NO NO
+TRIGGER performance_schema % NO NO
+TRIGGER information_schema % NO NO
+TRIGGER % % YES YES
include/rpl_end.inc
diff --git a/mysql-test/suite/perfschema/r/rpl_statements.result b/mysql-test/suite/perfschema/r/rpl_statements.result
index 431b8445309..d72402bf691 100644
--- a/mysql-test/suite/perfschema/r/rpl_statements.result
+++ b/mysql-test/suite/perfschema/r/rpl_statements.result
@@ -8,7 +8,7 @@ connection master;
*** Create test tables
-show variables like 'binlog_format%';
+show global variables like 'binlog_format%';
Variable_name Value
binlog_format MIXED
drop table if exists test.marker;
@@ -44,7 +44,7 @@ Expect 1
#
connection master;
-show variables like 'binlog_format%';
+show global variables like 'binlog_format%';
Variable_name Value
binlog_format MIXED
*** Clear statement events
@@ -214,7 +214,7 @@ s1 s2
select * from performance_schema.events_statements_history_long
where thread_id = @slave_thread_id;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
#
# STEP 9 - CLEAN UP
diff --git a/mysql-test/suite/perfschema/r/rpl_threads.result b/mysql-test/suite/perfschema/r/rpl_threads.result
new file mode 100644
index 00000000000..c756b4d9046
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/rpl_threads.result
@@ -0,0 +1,61 @@
+include/master-slave.inc
+[connection master]
+drop table if exists test.t1;
+connection slave;
+reset master;
+create table test.t1(a int);
+drop table test.t1;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+slave-bin.000001 # Gtid # # GTID #-#-#
+slave-bin.000001 # Query # # use `test`; create table test.t1(a int)
+slave-bin.000001 # Gtid # # GTID #-#-#
+slave-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
+connection master;
+"============ Performance schema on master ============"
+select ID from INFORMATION_SCHEMA.PROCESSLIST
+where COMMAND = "Binlog Dump"
+ into @master_dump_pid;
+Warnings:
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+select COMMAND, STATE
+from INFORMATION_SCHEMA.PROCESSLIST
+where ID = @master_dump_pid;
+COMMAND STATE
+Binlog Dump Master has sent all binlog to slave; waiting for more updates
+select NAME, TYPE, PROCESSLIST_COMMAND, PROCESSLIST_STATE
+from performance_schema.threads
+where PROCESSLIST_ID = @master_dump_pid;
+NAME TYPE PROCESSLIST_COMMAND PROCESSLIST_STATE
+thread/sql/one_connection FOREGROUND Binlog Dump Master has sent all binlog to slave; waiting for more updates
+connection slave;
+"============ Performance schema on slave ============"
+select ID from INFORMATION_SCHEMA.PROCESSLIST
+where STATE like "Waiting for master to send event%"
+ into @slave_io_pid;
+Warnings:
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+select COMMAND, STATE
+from INFORMATION_SCHEMA.PROCESSLIST
+where ID = @slave_io_pid;
+COMMAND STATE
+Slave_IO Waiting for master to send event
+select NAME, TYPE, PROCESSLIST_COMMAND, PROCESSLIST_STATE
+from performance_schema.threads
+where PROCESSLIST_ID = @slave_io_pid;
+NAME TYPE PROCESSLIST_COMMAND PROCESSLIST_STATE
+select ID from INFORMATION_SCHEMA.PROCESSLIST
+where STATE like "Slave has read all relay log%"
+ into @slave_sql_pid;
+Warnings:
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+select COMMAND, STATE
+from INFORMATION_SCHEMA.PROCESSLIST
+where ID = @slave_sql_pid;
+COMMAND STATE
+Slave_SQL Slave has read all relay log; waiting for more updates
+select NAME, TYPE, PROCESSLIST_COMMAND, PROCESSLIST_STATE
+from performance_schema.threads
+where PROCESSLIST_ID = @slave_sql_pid;
+NAME TYPE PROCESSLIST_COMMAND PROCESSLIST_STATE
+include/rpl_end.inc
diff --git a/mysql-test/suite/perfschema/r/schema.result b/mysql-test/suite/perfschema/r/schema.result
index 1f331394df6..f92548d5876 100644
--- a/mysql-test/suite/perfschema/r/schema.result
+++ b/mysql-test/suite/perfschema/r/schema.result
@@ -23,9 +23,18 @@ events_statements_history_long
events_statements_summary_by_account_by_event_name
events_statements_summary_by_digest
events_statements_summary_by_host_by_event_name
+events_statements_summary_by_program
events_statements_summary_by_thread_by_event_name
events_statements_summary_by_user_by_event_name
events_statements_summary_global_by_event_name
+events_transactions_current
+events_transactions_history
+events_transactions_history_long
+events_transactions_summary_by_account_by_event_name
+events_transactions_summary_by_host_by_event_name
+events_transactions_summary_by_thread_by_event_name
+events_transactions_summary_by_user_by_event_name
+events_transactions_summary_global_by_event_name
events_waits_current
events_waits_history
events_waits_history_long
@@ -38,14 +47,27 @@ events_waits_summary_global_by_event_name
file_instances
file_summary_by_event_name
file_summary_by_instance
+global_status
host_cache
hosts
+memory_summary_by_account_by_event_name
+memory_summary_by_host_by_event_name
+memory_summary_by_thread_by_event_name
+memory_summary_by_user_by_event_name
+memory_summary_global_by_event_name
+metadata_locks
mutex_instances
objects_summary_global_by_type
performance_timers
+prepared_statements_instances
+replication_applier_configuration
+replication_applier_status
+replication_applier_status_by_coordinator
+replication_connection_configuration
rwlock_instances
session_account_connect_attrs
session_connect_attrs
+session_status
setup_actors
setup_consumers
setup_instruments
@@ -54,15 +76,21 @@ setup_timers
socket_instances
socket_summary_by_event_name
socket_summary_by_instance
+status_by_account
+status_by_host
+status_by_thread
+status_by_user
+table_handles
table_io_waits_summary_by_index_usage
table_io_waits_summary_by_table
table_lock_waits_summary_by_table
threads
+user_variables_by_thread
users
show create table accounts;
Table Create Table
accounts CREATE TABLE `accounts` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`CURRENT_CONNECTIONS` bigint(20) NOT NULL,
`TOTAL_CONNECTIONS` bigint(20) NOT NULL
@@ -84,8 +112,10 @@ events_stages_current CREATE TABLE `events_stages_current` (
`TIMER_START` bigint(20) unsigned DEFAULT NULL,
`TIMER_END` bigint(20) unsigned DEFAULT NULL,
`TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
+ `WORK_COMPLETED` bigint(20) unsigned DEFAULT NULL,
+ `WORK_ESTIMATED` bigint(20) unsigned DEFAULT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table events_stages_history;
Table Create Table
@@ -98,8 +128,10 @@ events_stages_history CREATE TABLE `events_stages_history` (
`TIMER_START` bigint(20) unsigned DEFAULT NULL,
`TIMER_END` bigint(20) unsigned DEFAULT NULL,
`TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
+ `WORK_COMPLETED` bigint(20) unsigned DEFAULT NULL,
+ `WORK_ESTIMATED` bigint(20) unsigned DEFAULT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table events_stages_history_long;
Table Create Table
@@ -112,8 +144,10 @@ events_stages_history_long CREATE TABLE `events_stages_history_long` (
`TIMER_START` bigint(20) unsigned DEFAULT NULL,
`TIMER_END` bigint(20) unsigned DEFAULT NULL,
`TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
+ `WORK_COMPLETED` bigint(20) unsigned DEFAULT NULL,
+ `WORK_ESTIMATED` bigint(20) unsigned DEFAULT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table events_stages_summary_by_host_by_event_name;
Table Create Table
@@ -140,7 +174,7 @@ events_stages_summary_by_thread_by_event_name CREATE TABLE `events_stages_summar
show create table events_stages_summary_by_user_by_event_name;
Table Create Table
events_stages_summary_by_user_by_event_name CREATE TABLE `events_stages_summary_by_user_by_event_name` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
`SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
@@ -151,7 +185,7 @@ events_stages_summary_by_user_by_event_name CREATE TABLE `events_stages_summary_
show create table events_stages_summary_by_account_by_event_name;
Table Create Table
events_stages_summary_by_account_by_event_name CREATE TABLE `events_stages_summary_by_account_by_event_name` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
@@ -212,7 +246,8 @@ events_statements_current CREATE TABLE `events_statements_current` (
`NO_INDEX_USED` bigint(20) unsigned NOT NULL,
`NO_GOOD_INDEX_USED` bigint(20) unsigned NOT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL,
+ `NESTING_EVENT_LEVEL` int(11) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table events_statements_history;
Table Create Table
@@ -256,7 +291,8 @@ events_statements_history CREATE TABLE `events_statements_history` (
`NO_INDEX_USED` bigint(20) unsigned NOT NULL,
`NO_GOOD_INDEX_USED` bigint(20) unsigned NOT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL,
+ `NESTING_EVENT_LEVEL` int(11) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table events_statements_history_long;
Table Create Table
@@ -300,7 +336,8 @@ events_statements_history_long CREATE TABLE `events_statements_history_long` (
`NO_INDEX_USED` bigint(20) unsigned NOT NULL,
`NO_GOOD_INDEX_USED` bigint(20) unsigned NOT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL,
+ `NESTING_EVENT_LEVEL` int(11) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table events_statements_summary_by_digest;
Table Create Table
@@ -398,7 +435,7 @@ events_statements_summary_by_thread_by_event_name CREATE TABLE `events_statement
show create table events_statements_summary_by_user_by_event_name;
Table Create Table
events_statements_summary_by_user_by_event_name CREATE TABLE `events_statements_summary_by_user_by_event_name` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
`SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
@@ -428,7 +465,7 @@ events_statements_summary_by_user_by_event_name CREATE TABLE `events_statements_
show create table events_statements_summary_by_account_by_event_name;
Table Create Table
events_statements_summary_by_account_by_event_name CREATE TABLE `events_statements_summary_by_account_by_event_name` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
@@ -485,6 +522,195 @@ events_statements_summary_global_by_event_name CREATE TABLE `events_statements_s
`SUM_NO_INDEX_USED` bigint(20) unsigned NOT NULL,
`SUM_NO_GOOD_INDEX_USED` bigint(20) unsigned NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_current;
+Table Create Table
+events_transactions_current CREATE TABLE `events_transactions_current` (
+ `THREAD_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_ID` bigint(20) unsigned NOT NULL,
+ `END_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `STATE` enum('ACTIVE','COMMITTED','ROLLED BACK') DEFAULT NULL,
+ `TRX_ID` bigint(20) unsigned DEFAULT NULL,
+ `GTID` varchar(64) DEFAULT NULL,
+ `XID_FORMAT_ID` int(11) DEFAULT NULL,
+ `XID_GTRID` varchar(130) DEFAULT NULL,
+ `XID_BQUAL` varchar(130) DEFAULT NULL,
+ `XA_STATE` varchar(64) DEFAULT 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,
+ `ACCESS_MODE` enum('READ ONLY','READ WRITE') DEFAULT NULL,
+ `ISOLATION_LEVEL` varchar(64) DEFAULT NULL,
+ `AUTOCOMMIT` enum('YES','NO') NOT NULL,
+ `NUMBER_OF_SAVEPOINTS` bigint(20) unsigned DEFAULT NULL,
+ `NUMBER_OF_ROLLBACK_TO_SAVEPOINT` bigint(20) unsigned DEFAULT NULL,
+ `NUMBER_OF_RELEASE_SAVEPOINT` bigint(20) unsigned DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) unsigned DEFAULT NULL,
+ `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_history;
+Table Create Table
+events_transactions_history CREATE TABLE `events_transactions_history` (
+ `THREAD_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_ID` bigint(20) unsigned NOT NULL,
+ `END_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `STATE` enum('ACTIVE','COMMITTED','ROLLED BACK') DEFAULT NULL,
+ `TRX_ID` bigint(20) unsigned DEFAULT NULL,
+ `GTID` varchar(64) DEFAULT NULL,
+ `XID_FORMAT_ID` int(11) DEFAULT NULL,
+ `XID_GTRID` varchar(130) DEFAULT NULL,
+ `XID_BQUAL` varchar(130) DEFAULT NULL,
+ `XA_STATE` varchar(64) DEFAULT 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,
+ `ACCESS_MODE` enum('READ ONLY','READ WRITE') DEFAULT NULL,
+ `ISOLATION_LEVEL` varchar(64) DEFAULT NULL,
+ `AUTOCOMMIT` enum('YES','NO') NOT NULL,
+ `NUMBER_OF_SAVEPOINTS` bigint(20) unsigned DEFAULT NULL,
+ `NUMBER_OF_ROLLBACK_TO_SAVEPOINT` bigint(20) unsigned DEFAULT NULL,
+ `NUMBER_OF_RELEASE_SAVEPOINT` bigint(20) unsigned DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) unsigned DEFAULT NULL,
+ `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_history_long;
+Table Create Table
+events_transactions_history_long CREATE TABLE `events_transactions_history_long` (
+ `THREAD_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_ID` bigint(20) unsigned NOT NULL,
+ `END_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `STATE` enum('ACTIVE','COMMITTED','ROLLED BACK') DEFAULT NULL,
+ `TRX_ID` bigint(20) unsigned DEFAULT NULL,
+ `GTID` varchar(64) DEFAULT NULL,
+ `XID_FORMAT_ID` int(11) DEFAULT NULL,
+ `XID_GTRID` varchar(130) DEFAULT NULL,
+ `XID_BQUAL` varchar(130) DEFAULT NULL,
+ `XA_STATE` varchar(64) DEFAULT 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,
+ `ACCESS_MODE` enum('READ ONLY','READ WRITE') DEFAULT NULL,
+ `ISOLATION_LEVEL` varchar(64) DEFAULT NULL,
+ `AUTOCOMMIT` enum('YES','NO') NOT NULL,
+ `NUMBER_OF_SAVEPOINTS` bigint(20) unsigned DEFAULT NULL,
+ `NUMBER_OF_ROLLBACK_TO_SAVEPOINT` bigint(20) unsigned DEFAULT NULL,
+ `NUMBER_OF_RELEASE_SAVEPOINT` bigint(20) unsigned DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) unsigned DEFAULT NULL,
+ `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_summary_by_host_by_event_name;
+Table Create Table
+events_transactions_summary_by_host_by_event_name CREATE TABLE `events_transactions_summary_by_host_by_event_name` (
+ `HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT 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,
+ `COUNT_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `COUNT_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_summary_by_thread_by_event_name;
+Table Create Table
+events_transactions_summary_by_thread_by_event_name CREATE TABLE `events_transactions_summary_by_thread_by_event_name` (
+ `THREAD_ID` bigint(20) unsigned 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,
+ `COUNT_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `COUNT_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_summary_by_user_by_event_name;
+Table Create Table
+events_transactions_summary_by_user_by_event_name CREATE TABLE `events_transactions_summary_by_user_by_event_name` (
+ `USER` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT 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,
+ `COUNT_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `COUNT_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_summary_by_account_by_event_name;
+Table Create Table
+events_transactions_summary_by_account_by_event_name CREATE TABLE `events_transactions_summary_by_account_by_event_name` (
+ `USER` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT 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,
+ `COUNT_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `COUNT_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table events_transactions_summary_global_by_event_name;
+Table Create Table
+events_transactions_summary_global_by_event_name CREATE TABLE `events_transactions_summary_global_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,
+ `COUNT_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_WRITE` bigint(20) unsigned NOT NULL,
+ `COUNT_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_READ_ONLY` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_READ_ONLY` bigint(20) unsigned 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` (
@@ -503,7 +729,7 @@ events_waits_current CREATE TABLE `events_waits_current` (
`OBJECT_TYPE` varchar(64) DEFAULT NULL,
`OBJECT_INSTANCE_BEGIN` bigint(20) unsigned NOT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL,
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL,
`OPERATION` varchar(32) NOT NULL,
`NUMBER_OF_BYTES` bigint(20) DEFAULT NULL,
`FLAGS` int(10) unsigned DEFAULT NULL
@@ -526,7 +752,7 @@ events_waits_history CREATE TABLE `events_waits_history` (
`OBJECT_TYPE` varchar(64) DEFAULT NULL,
`OBJECT_INSTANCE_BEGIN` bigint(20) unsigned NOT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL,
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL,
`OPERATION` varchar(32) NOT NULL,
`NUMBER_OF_BYTES` bigint(20) DEFAULT NULL,
`FLAGS` int(10) unsigned DEFAULT NULL
@@ -549,7 +775,7 @@ events_waits_history_long CREATE TABLE `events_waits_history_long` (
`OBJECT_TYPE` varchar(64) DEFAULT NULL,
`OBJECT_INSTANCE_BEGIN` bigint(20) unsigned NOT NULL,
`NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
- `NESTING_EVENT_TYPE` enum('STATEMENT','STAGE','WAIT') DEFAULT NULL,
+ `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL,
`OPERATION` varchar(32) NOT NULL,
`NUMBER_OF_BYTES` bigint(20) DEFAULT NULL,
`FLAGS` int(10) unsigned DEFAULT NULL
@@ -590,7 +816,7 @@ events_waits_summary_by_thread_by_event_name CREATE TABLE `events_waits_summary_
show create table events_waits_summary_by_user_by_event_name;
Table Create Table
events_waits_summary_by_user_by_event_name CREATE TABLE `events_waits_summary_by_user_by_event_name` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
`SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
@@ -601,7 +827,7 @@ events_waits_summary_by_user_by_event_name CREATE TABLE `events_waits_summary_by
show create table events_waits_summary_by_account_by_event_name;
Table Create Table
events_waits_summary_by_account_by_event_name CREATE TABLE `events_waits_summary_by_account_by_event_name` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
@@ -620,6 +846,100 @@ events_waits_summary_global_by_event_name CREATE TABLE `events_waits_summary_glo
`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 memory_summary_by_host_by_event_name;
+Table Create Table
+memory_summary_by_host_by_event_name CREATE TABLE `memory_summary_by_host_by_event_name` (
+ `HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_ALLOC` bigint(20) unsigned NOT NULL,
+ `COUNT_FREE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_ALLOC` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_FREE` bigint(20) unsigned NOT NULL,
+ `LOW_COUNT_USED` bigint(20) NOT NULL,
+ `CURRENT_COUNT_USED` bigint(20) NOT NULL,
+ `HIGH_COUNT_USED` bigint(20) NOT NULL,
+ `LOW_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `CURRENT_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `HIGH_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table memory_summary_by_thread_by_event_name;
+Table Create Table
+memory_summary_by_thread_by_event_name CREATE TABLE `memory_summary_by_thread_by_event_name` (
+ `THREAD_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_ALLOC` bigint(20) unsigned NOT NULL,
+ `COUNT_FREE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_ALLOC` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_FREE` bigint(20) unsigned NOT NULL,
+ `LOW_COUNT_USED` bigint(20) NOT NULL,
+ `CURRENT_COUNT_USED` bigint(20) NOT NULL,
+ `HIGH_COUNT_USED` bigint(20) NOT NULL,
+ `LOW_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `CURRENT_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `HIGH_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table memory_summary_by_user_by_event_name;
+Table Create Table
+memory_summary_by_user_by_event_name CREATE TABLE `memory_summary_by_user_by_event_name` (
+ `USER` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_ALLOC` bigint(20) unsigned NOT NULL,
+ `COUNT_FREE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_ALLOC` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_FREE` bigint(20) unsigned NOT NULL,
+ `LOW_COUNT_USED` bigint(20) NOT NULL,
+ `CURRENT_COUNT_USED` bigint(20) NOT NULL,
+ `HIGH_COUNT_USED` bigint(20) NOT NULL,
+ `LOW_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `CURRENT_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `HIGH_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table memory_summary_by_account_by_event_name;
+Table Create Table
+memory_summary_by_account_by_event_name CREATE TABLE `memory_summary_by_account_by_event_name` (
+ `USER` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_ALLOC` bigint(20) unsigned NOT NULL,
+ `COUNT_FREE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_ALLOC` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_FREE` bigint(20) unsigned NOT NULL,
+ `LOW_COUNT_USED` bigint(20) NOT NULL,
+ `CURRENT_COUNT_USED` bigint(20) NOT NULL,
+ `HIGH_COUNT_USED` bigint(20) NOT NULL,
+ `LOW_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `CURRENT_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `HIGH_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table memory_summary_global_by_event_name;
+Table Create Table
+memory_summary_global_by_event_name CREATE TABLE `memory_summary_global_by_event_name` (
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_ALLOC` bigint(20) unsigned NOT NULL,
+ `COUNT_FREE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_ALLOC` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_FREE` bigint(20) unsigned NOT NULL,
+ `LOW_COUNT_USED` bigint(20) NOT NULL,
+ `CURRENT_COUNT_USED` bigint(20) NOT NULL,
+ `HIGH_COUNT_USED` bigint(20) NOT NULL,
+ `LOW_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `CURRENT_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL,
+ `HIGH_NUMBER_OF_BYTES_USED` bigint(20) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table metadata_locks;
+Table Create Table
+metadata_locks CREATE TABLE `metadata_locks` (
+ `OBJECT_TYPE` varchar(64) NOT NULL,
+ `OBJECT_SCHEMA` varchar(64) DEFAULT NULL,
+ `OBJECT_NAME` varchar(64) DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) unsigned NOT NULL,
+ `LOCK_TYPE` varchar(32) NOT NULL,
+ `LOCK_DURATION` varchar(32) NOT NULL,
+ `LOCK_STATUS` varchar(32) NOT NULL,
+ `SOURCE` varchar(64) DEFAULT NULL,
+ `OWNER_THREAD_ID` bigint(20) unsigned DEFAULT NULL,
+ `OWNER_EVENT_ID` bigint(20) unsigned DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table file_instances;
Table Create Table
file_instances CREATE TABLE `file_instances` (
@@ -762,8 +1082,10 @@ show create table setup_actors;
Table Create Table
setup_actors CREATE TABLE `setup_actors` (
`HOST` char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '%',
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '%',
- `ROLE` char(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '%'
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '%',
+ `ROLE` char(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '%',
+ `ENABLED` enum('YES','NO') NOT NULL DEFAULT 'YES',
+ `HISTORY` enum('YES','NO') NOT NULL DEFAULT 'YES'
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table setup_consumers;
Table Create Table
@@ -781,7 +1103,7 @@ setup_instruments CREATE TABLE `setup_instruments` (
show create table setup_objects;
Table Create Table
setup_objects CREATE TABLE `setup_objects` (
- `OBJECT_TYPE` enum('TABLE') NOT NULL DEFAULT 'TABLE',
+ `OBJECT_TYPE` enum('EVENT','FUNCTION','PROCEDURE','TABLE','TRIGGER') NOT NULL DEFAULT 'TABLE',
`OBJECT_SCHEMA` varchar(64) DEFAULT '%',
`OBJECT_NAME` varchar(64) NOT NULL DEFAULT '%',
`ENABLED` enum('YES','NO') NOT NULL DEFAULT 'YES',
@@ -859,6 +1181,18 @@ socket_summary_by_event_name CREATE TABLE `socket_summary_by_event_name` (
`AVG_TIMER_MISC` bigint(20) unsigned NOT NULL,
`MAX_TIMER_MISC` bigint(20) unsigned NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table table_handles;
+Table Create Table
+table_handles CREATE TABLE `table_handles` (
+ `OBJECT_TYPE` varchar(64) NOT NULL,
+ `OBJECT_SCHEMA` varchar(64) NOT NULL,
+ `OBJECT_NAME` varchar(64) NOT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) unsigned NOT NULL,
+ `OWNER_THREAD_ID` bigint(20) unsigned DEFAULT NULL,
+ `OWNER_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `INTERNAL_LOCK` varchar(64) DEFAULT NULL,
+ `EXTERNAL_LOCK` varchar(64) DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table table_io_waits_summary_by_index_usage;
Table Create Table
table_io_waits_summary_by_index_usage CREATE TABLE `table_io_waits_summary_by_index_usage` (
@@ -1028,7 +1362,7 @@ threads CREATE TABLE `threads` (
`NAME` varchar(128) NOT NULL,
`TYPE` varchar(10) NOT NULL,
`PROCESSLIST_ID` bigint(20) unsigned DEFAULT NULL,
- `PROCESSLIST_USER` varchar(16) DEFAULT NULL,
+ `PROCESSLIST_USER` varchar(128) DEFAULT NULL,
`PROCESSLIST_HOST` varchar(60) DEFAULT NULL,
`PROCESSLIST_DB` varchar(64) DEFAULT NULL,
`PROCESSLIST_COMMAND` varchar(16) DEFAULT NULL,
@@ -1037,12 +1371,15 @@ threads CREATE TABLE `threads` (
`PROCESSLIST_INFO` longtext DEFAULT NULL,
`PARENT_THREAD_ID` bigint(20) unsigned DEFAULT NULL,
`ROLE` varchar(64) DEFAULT NULL,
- `INSTRUMENTED` enum('YES','NO') NOT NULL
+ `INSTRUMENTED` enum('YES','NO') NOT NULL,
+ `HISTORY` enum('YES','NO') NOT NULL,
+ `CONNECTION_TYPE` varchar(16) DEFAULT NULL,
+ `THREAD_OS_ID` bigint(20) unsigned DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table users;
Table Create Table
users CREATE TABLE `users` (
- `USER` char(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
+ `USER` char(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`CURRENT_CONNECTIONS` bigint(20) NOT NULL,
`TOTAL_CONNECTIONS` bigint(20) NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
diff --git a/mysql-test/suite/perfschema/r/server_init.result b/mysql-test/suite/perfschema/r/server_init.result
index d2f370cf00a..82f53ad5b74 100644
--- a/mysql-test/suite/perfschema/r/server_init.result
+++ b/mysql-test/suite/perfschema/r/server_init.result
@@ -1,9 +1,5 @@
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
@@ -27,12 +23,16 @@ select count(name) from mutex_instances
where name like "wait/synch/mutex/mysys/THR_LOCK_charset";
count(name)
1
-select count(name) from cond_instances
-where name like "wait/synch/cond/mysys/THR_COND_threads";
+select count(name) from mutex_instances
+<<<<<<< HEAD
+where name like "wait/synch/mutex/sql/LOCK_thread_count";
+=======
+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_thread_count";
+where name like "wait/synch/mutex/sql/LOCK_thd_list";
+>>>>>>> merge-perfschema-5.7
count(name)
1
select count(name) from mutex_instances
@@ -44,31 +44,19 @@ 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)
0
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
+<<<<<<< HEAD
where name like "wait/synch/mutex/sql/LOCK_active_mi";
+=======
+where name like "wait/synch/mutex/sql/LOCK_slave_list";
+>>>>>>> 258e16fa2de... WIP 5.7 P_S
count(name)
1
select count(name) from mutex_instances
@@ -100,18 +88,21 @@ 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";
+where name like "wait/synch/mutex/sql/LOCK_item_func_sleep";
count(name)
1
select count(name) from mutex_instances
-where name like "wait/synch/mutex/sql/Cversion_lock";
+where name like "wait/synch/mutex/sql/LOCK_audit_mask";
count(name)
1
select count(name) from mutex_instances
-where name like "wait/synch/mutex/sql/LOCK_audit_mask";
+<<<<<<< HEAD
+=======
+where name like "wait/synch/mutex/sql/LOCK_transaction_cache";
count(name)
1
select count(name) from mutex_instances
+>>>>>>> merge-perfschema-5.7
where name like "wait/synch/mutex/sql/LOCK_plugin";
count(name)
1
@@ -120,10 +111,6 @@ 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
@@ -146,7 +133,7 @@ count(name)
select count(name) from cond_instances
where name like "wait/synch/cond/sql/COND_thread_count";
count(name)
-1
+0
select count(name) from cond_instances
where name like "wait/synch/cond/sql/COND_manager";
count(name)
diff --git a/mysql-test/suite/perfschema/r/setup_actors.result b/mysql-test/suite/perfschema/r/setup_actors.result
index 3474b678321..b6d528173bf 100644
--- a/mysql-test/suite/perfschema/r/setup_actors.result
+++ b/mysql-test/suite/perfschema/r/setup_actors.result
@@ -1,22 +1,22 @@
select * from performance_schema.setup_actors;
-HOST USER ROLE
-% % %
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors
-values ('hosta', 'user1', '%');
+values ('hosta', 'user1', '%', 'YES', 'YES');
insert into performance_schema.setup_actors
-values ('%', 'user2', '%');
+values ('%', 'user2', '%', 'YES', 'YES');
insert into performance_schema.setup_actors
-values ('localhost', 'user3', '%');
+values ('localhost', 'user3', '%', 'YES', 'YES');
insert into performance_schema.setup_actors
-values ('hostb', '%', '%');
+values ('hostb', '%', '%', 'YES', 'YES');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-hostb % %
-hosta user1 %
-% user2 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+hostb % % YES YES
+hosta user1 % YES YES
+% user2 % YES YES
+localhost user3 % YES YES
create user user1@localhost;
grant ALL on *.* to user1@localhost;
create user user2@localhost;
@@ -36,7 +36,7 @@ NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
thread/sql/one_connection FOREGROUND NO user1 localhost
connection default;
insert into performance_schema.setup_actors
-values ('%', 'user1', '%');
+values ('%', 'user1', '%', 'YES', 'YES');
connection con1;
select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
from performance_schema.threads
@@ -90,16 +90,16 @@ thread/sql/one_connection FOREGROUND NO user4 localhost
disconnect con4;
connection default;
insert into performance_schema.setup_actors
-values ('localhost', '%', '%');
+values ('localhost', '%', '%', 'YES', 'YES');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-hostb % %
-localhost % %
-% user1 %
-hosta user1 %
-% user2 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+hostb % % YES YES
+localhost % % YES YES
+% user1 % YES YES
+hosta user1 % YES YES
+% user2 % YES YES
+localhost user3 % YES YES
connect con4b, localhost, user4, , ;
select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
from performance_schema.threads
@@ -109,7 +109,7 @@ thread/sql/one_connection FOREGROUND YES user4 localhost
disconnect con4b;
connection default;
insert into performance_schema.setup_actors
-values ('%', 'user5', '%');
+values ('%', 'user5', '%', 'YES', 'YES');
create sql security definer view test.v1 as select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
from performance_schema.threads
where PROCESSLIST_ID = connection_id();
@@ -135,7 +135,7 @@ drop user user5@localhost;
flush privileges;
truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors
-values ('%', '%', '%');
+values ('%', '%', '%', 'YES', 'YES');
select * from performance_schema.setup_actors;
-HOST USER ROLE
-% % %
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
diff --git a/mysql-test/suite/perfschema/r/setup_actors_enabled.result b/mysql-test/suite/perfschema/r/setup_actors_enabled.result
new file mode 100644
index 00000000000..c0dda748f28
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/setup_actors_enabled.result
@@ -0,0 +1,136 @@
+select * from performance_schema.setup_actors;
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+values ('localhost', 'user1', '%', 'YES', 'YES');
+insert into performance_schema.setup_actors
+values ('localhost', 'user2', '%', 'NO', 'NO');
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+set sql_mode= @orig_sql_mode;
+flush privileges;
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES user1 localhost
+# Switch to (con2, localhost, user2, , )
+connect con2, localhost, user2, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO user2 localhost
+# Switch to connection default
+connection default;
+update performance_schema.setup_actors set ENABLED='NO' where USER='user1';
+update performance_schema.setup_actors set ENABLED='YES' where USER='user2';
+# Switch to connection con1
+connection con1;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES user1 localhost
+# Switch to connection con2
+connection con2;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO user2 localhost
+# Disconnect con1 and con2
+disconnect con1;
+disconnect con2;
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO user1 localhost
+# Switch to (con2 localhost, user2, , )
+connect con2, localhost, user2, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES user2 localhost
+# Disconnect con1 and con2
+disconnect con1;
+disconnect con2;
+# Switch to connection default
+connection default;
+revoke update on *.* from 'user2'@'localhost';
+flush privileges;
+# Switch to (con2 localhost, user2, , )
+connect con2, localhost, user2, , ;
+update performance_schema.setup_actors
+set ENABLED='NO';
+ERROR 42000: UPDATE command denied to user 'user2'@'localhost' for table 'setup_actors'
+disconnect con2;
+connection default;
+insert into performance_schema.setup_actors
+values ('%', 'user1', '%', 'YES', 'YES');
+insert into performance_schema.setup_actors
+values ('localhost', '%', '%', 'NO', 'NO');
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO user1 localhost
+disconnect con1;
+connection default;
+delete from performance_schema.setup_actors where
+HOST='localhost' and USER='user1';
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES user1 localhost
+disconnect con1;
+connection default;
+delete from performance_schema.setup_actors where
+HOST='%' and USER='user1';
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO user1 localhost
+disconnect con1;
+connection default;
+delete from performance_schema.setup_actors where
+HOST='localhost' and USER='%';
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES user1 localhost
+disconnect con1;
+connection default;
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+flush privileges;
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+select * from performance_schema.setup_actors;
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
diff --git a/mysql-test/suite/perfschema/r/setup_actors_history.result b/mysql-test/suite/perfschema/r/setup_actors_history.result
new file mode 100644
index 00000000000..cbf531911f8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/setup_actors_history.result
@@ -0,0 +1,138 @@
+select * from performance_schema.setup_actors;
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+values ('localhost', 'user1', '%', 'YES', 'YES');
+insert into performance_schema.setup_actors
+values ('localhost', 'user2', '%', 'YES', 'NO');
+insert into performance_schema.setup_actors
+values ('localhost', 'user3', '%', 'NO', 'YES');
+insert into performance_schema.setup_actors
+values ('localhost', 'user4', '%', 'NO', 'NO');
+create user user1@localhost;
+create user user2@localhost;
+create user user3@localhost;
+create user user4@localhost;
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+grant ALL on *.* to user3@localhost;
+grant ALL on *.* to user4@localhost;
+flush privileges;
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES YES user1 localhost
+# Switch to (con2, localhost, user2, , )
+connect con2, localhost, user2, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES NO user2 localhost
+# Switch to (con3, localhost, user3, , )
+connect con3, localhost, user3, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO YES user3 localhost
+# Switch to (con4, localhost, user4, , )
+connect con4, localhost, user4, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO NO user4 localhost
+# Switch to connection default
+connection default;
+update performance_schema.setup_actors
+set HISTORY='NO' where USER in ('user1', 'user3');
+update performance_schema.setup_actors
+set HISTORY='YES' where USER in ('user2', 'user4');
+# Switch to connection con1
+connection con1;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES YES user1 localhost
+# Switch to connection con2
+connection con2;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES NO user2 localhost
+# Switch to connection con3
+connection con3;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO YES user3 localhost
+# Switch to connection con4
+connection con4;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO NO user4 localhost
+# Disconnect all con
+disconnect con1;
+disconnect con2;
+disconnect con3;
+disconnect con4;
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES NO user1 localhost
+# Switch to (con2 localhost, user2, , )
+connect con2, localhost, user2, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND YES YES user2 localhost
+# Switch to (con3, localhost, user3, , )
+connect con3, localhost, user3, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO NO user3 localhost
+# Switch to (con4 localhost, user4, , )
+connect con4, localhost, user4, , ;
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+NAME TYPE INSTRUMENTED HISTORY PROCESSLIST_USER PROCESSLIST_HOST
+thread/sql/one_connection FOREGROUND NO YES user4 localhost
+# Disconnect all con
+disconnect con1;
+disconnect con2;
+disconnect con3;
+disconnect con4;
+# Switch to connection default
+connection default;
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+revoke all privileges, grant option from user3@localhost;
+revoke all privileges, grant option from user4@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+drop user user3@localhost;
+drop user user4@localhost;
+flush privileges;
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+select * from performance_schema.setup_actors;
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
diff --git a/mysql-test/suite/perfschema/r/setup_consumers_defaults.result b/mysql-test/suite/perfschema/r/setup_consumers_defaults.result
index c6e03513d75..c3ec620a2a6 100644
--- a/mysql-test/suite/perfschema/r/setup_consumers_defaults.result
+++ b/mysql-test/suite/perfschema/r/setup_consumers_defaults.result
@@ -6,6 +6,9 @@ events_stages_history_long NO
events_statements_current YES
events_statements_history NO
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history NO
+events_transactions_history_long YES
events_waits_current NO
events_waits_history YES
events_waits_history_long NO
@@ -16,5 +19,5 @@ SELECT @@performance_schema_consumer_events_stages_current;
ERROR HY000: Unknown system variable 'performance_schema_consumer_events_stages_current'
SET @@performance_schema_consumer_events_stages_current=0;
ERROR HY000: Unknown system variable 'performance_schema_consumer_events_stages_current'
-SHOW VARIABLES LIKE "performance_schema_consumer%";
+SHOW GLOBAL VARIABLES LIKE "performance_schema_consumer%";
Variable_name Value
diff --git a/mysql-test/suite/perfschema/r/setup_instruments_defaults.result b/mysql-test/suite/perfschema/r/setup_instruments_defaults.result
index 7384313917d..4c638197235 100644
--- a/mysql-test/suite/perfschema/r/setup_instruments_defaults.result
+++ b/mysql-test/suite/perfschema/r/setup_instruments_defaults.result
@@ -10,21 +10,20 @@ WHERE name IN (
AND enabled = 'yes' AND timed = 'no'
ORDER BY name;
NAME ENABLED TIMED
-stage/sql/Creating table YES NO
+stage/sql/creating table YES NO
wait/synch/mutex/sql/LOCK_plugin YES NO
wait/synch/mutex/sql/LOCK_user_conn YES NO
SELECT * FROM performance_schema.setup_instruments
-WHERE name = 'wait/synch/mutex/sql/LOCK_thread_count'
+WHERE name = 'wait/synch/mutex/sql/LOCK_thd_list'
AND enabled = 'no' AND timed = 'no';
NAME ENABLED TIMED
SELECT * FROM performance_schema.setup_instruments
WHERE name IN (
'wait/synch/mutex/sql/LOG_INFO::lock',
-'wait/synch/mutex/sql/THD::LOCK_thd_data')
+'wait/synch/mutex/sql/THD::LOCK_thd_list')
AND enabled = 'yes' AND timed = 'yes'
ORDER BY name;
NAME ENABLED TIMED
-wait/synch/mutex/sql/THD::LOCK_thd_data YES YES
SELECT * FROM performance_schema.setup_instruments
WHERE name = 'wait/synch/mutex/sql/hash_filo::lock'
AND enabled = 'no' AND timed = 'no'
@@ -32,6 +31,20 @@ ORDER BY name;
NAME ENABLED TIMED
wait/synch/mutex/sql/hash_filo::lock NO NO
#
+# Verify that the memory instruments are never timed
+#
+SELECT * FROM performance_schema.setup_instruments
+WHERE name like 'memory/%'
+AND timed = 'YES';
+NAME ENABLED TIMED
+#
+# Verify that the memory/performance_schema instruments are never disabled
+#
+SELECT * FROM performance_schema.setup_instruments
+WHERE name like 'memory/performance_schema/%'
+AND enabled = 'NO';
+NAME ENABLED TIMED
+#
# Verify that the instrument startup settings are not not visible.
#
SHOW VARIABLES LIKE "%/wait/synch/mutex%";
diff --git a/mysql-test/suite/perfschema/r/setup_object_table_lock_io.result b/mysql-test/suite/perfschema/r/setup_object_table_lock_io.result
new file mode 100644
index 00000000000..97fda63d7ee
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/setup_object_table_lock_io.result
@@ -0,0 +1,91 @@
+drop table if exists test.setup_objects;
+update performance_schema.setup_instruments set enabled='NO';
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name in ('wait/io/table/sql/handler', 'wait/lock/table/sql/handler');
+truncate table performance_schema.table_io_waits_summary_by_table;
+truncate table performance_schema.table_lock_waits_summary_by_table;
+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 ENABLED TIMED
+insert into performance_schema.setup_objects
+values ('TABLE', 'db1', 't1', 'YES', 'YES');
+insert into performance_schema.setup_objects
+values ('TABLE', 'db1', 't2', 'YES', 'YES');
+select * from performance_schema.setup_objects
+order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
+TABLE db1 t1 YES YES
+TABLE db1 t2 YES YES
+SET sql_mode = default;
+drop database if exists db1;
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default', unique key uidx(a));
+create table db1.t2 (a int, b char(10) default 'default');
+insert into db1.t1 values('11', 'db1.t1');
+insert into db1.t1 values('12', 'db1.t1');
+insert into db1.t1 values('13', 'db1.t1');
+insert into db1.t2 values('21', 'db1.t2');
+insert into db1.t2 values('22', 'db1.t2');
+insert into db1.t2 values('23', 'db1.t2');
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t1 6 0 6
+db1 t2 6 0 6
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t1 3 0 3
+db1 t2 3 0 3
+truncate table db1.t1;
+truncate table db1.t2;
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t1 6 0 6
+db1 t2 6 0 6
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t1 3 0 3
+db1 t2 3 0 3
+update performance_schema.setup_objects
+set ENABLED='NO' where OBJECT_SCHEMA = 'db1' and OBJECT_NAME='t1';
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t2 6 0 6
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t2 3 0 3
+update performance_schema.setup_objects
+set ENABLED='YES' where OBJECT_SCHEMA = 'db1' and OBJECT_NAME='t1';
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t1 0 0 0
+db1 t2 6 0 6
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1';
+OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_READ COUNT_WRITE
+db1 t1 0 0 0
+db1 t2 3 0 3
+truncate table performance_schema.setup_objects;
+select count(*) from performance_schema.setup_objects;
+count(*)
+0
+drop database db1;
+truncate table performance_schema.setup_objects;
+insert into performance_schema.setup_objects select * from test.setup_objects;
+drop table test.setup_objects;
+update performance_schema.setup_instruments set enabled='YES', timed='YES';
diff --git a/mysql-test/suite/perfschema/r/setup_objects.result b/mysql-test/suite/perfschema/r/setup_objects.result
index c29aaa2114f..ec9a0089b8d 100644
--- a/mysql-test/suite/perfschema/r/setup_objects.result
+++ b/mysql-test/suite/perfschema/r/setup_objects.result
@@ -25,7 +25,7 @@ insert into performance_schema.setup_objects
values ('TABLE', 'db4', 't1', 'NO', 'YES');
insert into performance_schema.setup_objects
values ('TABLE', 'db4', '%', 'YES', 'NO');
-set sql_mode= '';
+SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
insert into performance_schema.setup_objects
values ('SOMETHING', 'bad1', 'bad1', 'YES', 'NO');
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails
@@ -82,7 +82,7 @@ TABLE db3 t1 YES YES
TABLE db3 t2 NO NO
TABLE db4 % YES NO
TABLE db4 t1 NO YES
-set sql_mode= DEFAULT;
+SET sql_mode = default;
drop database if exists db1;
drop database if exists db2;
drop database if exists db3;
diff --git a/mysql-test/suite/perfschema/r/short_option_1.result b/mysql-test/suite/perfschema/r/short_option_1.result
index 45f7d989d8e..ab3a13b8eed 100644
--- a/mysql-test/suite/perfschema/r/short_option_1.result
+++ b/mysql-test/suite/perfschema/r/short_option_1.result
@@ -4,20 +4,20 @@ Ok, the server started
select @@SQL_MODE;
@@SQL_MODE
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
-show variables like 'sql_mode';
+show global variables like 'sql_mode';
Variable_name Value
sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
select @@character_set_server;
@@character_set_server
utf8
-show variables like 'character_set_system';
+show global variables like 'character_set_system';
Variable_name Value
character_set_system utf8
-show variables like 'general_log';
+show global variables like 'general_log';
Variable_name Value
general_log ON
-show variables like 'new';
+show global variables like 'new';
Variable_name Value
-show variables like 'log_warnings';
+show global variables like 'log_warnings';
Variable_name Value
-log_warnings 3
+log_warnings 2
diff --git a/mysql-test/suite/perfschema/r/short_option_2.result b/mysql-test/suite/perfschema/r/short_option_2.result
index 0587fdef73b..6b5b06cb4a1 100644
--- a/mysql-test/suite/perfschema/r/short_option_2.result
+++ b/mysql-test/suite/perfschema/r/short_option_2.result
@@ -6,4 +6,4 @@ select @@SQL_MODE;
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
select @@log_warnings;
@@log_warnings
-5
+2
diff --git a/mysql-test/suite/perfschema/r/show_aggregate.result b/mysql-test/suite/perfschema/r/show_aggregate.result
new file mode 100644
index 00000000000..7b9e3889bc6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/show_aggregate.result
@@ -0,0 +1,530 @@
+
+================================================================================
+SETUP
+================================================================================
+SET @@session.sql_log_bin=OFF;
+
+# CREATE 3 CLIENTS, 3 CONNECTIONS, RESULTS TABLE
+connection default;
+USE test;
+
+# Create results table
+CREATE TABLE test.status_results
+(variable_name VARCHAR(64), start INT DEFAULT 0, stop INT DEFAULT 0, delta INT DEFAULT 0,
+t1 INT DEFAULT 0, t2 INT DEFAULT 0, t3 INT DEFAULT 0, thread INT DEFAULT 0,
+u1 INT DEFAULT 0, u2 INT DEFAULT 0, u3 INT DEFAULT 0, user INT DEFAULT 0,
+h1 INT DEFAULT 0, h2 INT DEFAULT 0, h3 INT DEFAULT 0, host INT DEFAULT 0,
+a1 INT DEFAULT 0, a2 INT DEFAULT 0, a3 INT DEFAULT 0, acct INT DEFAULT 0);
+INSERT INTO test.status_results (variable_name, start)
+SELECT sg.variable_name, sg.variable_value+0 FROM performance_schema.global_status sg
+WHERE variable_name IN ('handler_delete', 'handler_rollback');
+
+# Create test tables
+CREATE TABLE t1 (s1 int) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1), (2), (2), (3), (3), (3);
+CREATE TABLE t2 (s1 int) ENGINE=InnoDB;
+CREATE TABLE t3 (s1 int) ENGINE=InnoDB;
+
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+GRANT ALL ON *.* to 'user1'@localhost;
+GRANT ALL ON *.* to 'user2'@localhost;
+GRANT ALL ON *.* to 'user3'@localhost;
+set sql_mode= @orig_sql_mode;
+
+================================================================================
+CONNECTION 1: DELETE 1, ROLLBACK x 1
+================================================================================
+connect con1, localhost, user1,,;
+SET @@session.sql_log_bin=OFF;
+DELETE FROM t1 WHERE s1 = 1;
+START TRANSACTION;
+INSERT INTO t1 VALUES (1);
+ROLLBACK;
+
+================================================================================
+CONNECTION 2: DELETE 2, ROLLBACK x 2
+================================================================================
+connect con2, localhost, user2,,;
+SET @@session.sql_log_bin=OFF;
+DELETE FROM t1 WHERE s1 = 2;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+ROLLBACK;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+ROLLBACK;
+
+================================================================================
+CONNECTION 3: DELETE 3, ROLLBACK x 3
+================================================================================
+connect con3, localhost, user3,,;
+SET @@session.sql_log_bin=OFF;
+DELETE FROM t1 WHERE s1 = 3;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+
+================================================================================
+CONNECTION DEFAULT: Gather results, compare session and global status counts
+================================================================================
+connection default;
+# Get thread ids for each connection.
+USE performance_schema;
+SELECT thread_id INTO @con1_id FROM threads WHERE processlist_user IN ('user1');
+SELECT thread_id INTO @con2_id FROM threads WHERE processlist_user IN ('user2');
+SELECT thread_id INTO @con3_id FROM threads WHERE processlist_user IN ('user3');
+#=================
+# Global results
+#=================
+USE test;
+UPDATE test.status_results sr, performance_schema.global_status sg
+SET sr.stop = sg.variable_value
+WHERE sr.variable_name = sg.variable_name
+AND sg.variable_name IN ('handler_delete', 'handler_rollback');
+
+# Global deltas: END - START.
+UPDATE test.status_results sr
+SET sr.delta = sr.stop - sr.start;
+#=================
+# Status by thread
+#=================
+# Thread results from CON1.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+SET sr.t1 = sbt.variable_value
+WHERE sr.variable_name = sbt.variable_name
+AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbt.thread_id = @con1_id;
+
+# Thread results from CON2.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+SET sr.t2 = sbt.variable_value
+WHERE sr.variable_name = sbt.variable_name
+AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbt.thread_id = @con2_id;
+
+# Thread results from CON3.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+SET sr.t3 = sbt.variable_value
+WHERE sr.variable_name = sbt.variable_name
+AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbt.thread_id = @con3_id;
+
+# Thread totals for 3 connections.
+UPDATE test.status_results sr
+SET sr.thread = sr.t1 + sr.t2 + sr.t3;
+#=================
+# Status by user
+#=================
+# User1
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+SET sr.u1 = sbu.variable_value
+WHERE sr.variable_name = sbu.variable_name
+AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbu.user IN ('user1');
+
+# User2
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+SET sr.u2 = sbu.variable_value
+WHERE sr.variable_name = sbu.variable_name
+AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbu.user IN ('user2');
+
+# User3
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+SET sr.u3 = sbu.variable_value
+WHERE sr.variable_name = sbu.variable_name
+AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbu.user IN ('user3');
+
+# Status totals for 3 users.
+UPDATE test.status_results sr
+SET sr.user = sr.u1 + sr.u2 + sr.u3;
+#===========================
+# Status by host (localhost)
+#===========================
+
+# host1 = localhost
+UPDATE test.status_results sr, performance_schema.status_by_host sbh
+SET sr.h1 = sbh.variable_value
+WHERE sr.variable_name = sbh.variable_name
+AND sbh.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbh.host IN ('localhost');
+
+# Status totals for 'localhost' only.
+UPDATE test.status_results sr
+SET sr.host = sr.h1 + sr.h2 + sr.h3;
+#==================
+# Status by account
+#==================
+# User1@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+SET sr.a1 = sba.variable_value
+WHERE sr.variable_name = sba.variable_name
+AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+AND sba.user IN ('user1');
+
+# User2@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+SET sr.a2 = sba.variable_value
+WHERE sr.variable_name = sba.variable_name
+AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+AND sba.user IN ('user2');
+
+# User3@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+SET sr.a3 = sba.variable_value
+WHERE sr.variable_name = sba.variable_name
+AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+AND sba.user IN ('user3');
+
+
+# Status totals for 3 accounts.
+UPDATE test.status_results sr
+SET sr.acct = sr.a1 + sr.a2 + sr.a3;
+
+================================================================================
+TEST 1: STATUS_BY_THREAD: Verify expected status counts per thread (1,2,3)
+================================================================================
+#
+# Review per-thread status counts
+#
+USE performance_schema;
+SELECT * FROM status_by_thread WHERE thread_id IN (@con1_id, @con2_id, @con3_id) AND variable_name IN ('handler_delete', 'handler_rollback') ORDER BY thread_id;
+THREAD_ID VARIABLE_NAME VARIABLE_VALUE
+thread_id Handler_delete 1
+thread_id Handler_rollback 1
+thread_id Handler_delete 2
+thread_id Handler_rollback 2
+thread_id Handler_delete 3
+thread_id Handler_rollback 3
+#
+# Verify expected counts for 'handler_delete' per thread
+#
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_thread WHERE thread_id = @con1_id AND variable_name IN ('handler_delete');
+THREAD_ID VARIABLE_NAME VARIABLE_VALUE Expected
+connect_1 Handler_delete 1 OK
+
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_thread WHERE thread_id = @con2_id AND variable_name IN ('handler_delete');
+THREAD_ID VARIABLE_NAME VARIABLE_VALUE Expected
+connnect_2 Handler_delete 2 OK
+
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_thread WHERE thread_id = @con3_id AND variable_name IN ('handler_delete');
+THREAD_ID VARIABLE_NAME VARIABLE_VALUE Expected
+connnect_3 Handler_delete 3 OK
+#
+# STATUS_BY_THREAD vs. GLOBAL_STATUS
+#
+SELECT variable_name, t1, t2, t3, delta, thread, IF(thread=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name t1 t2 t3 delta thread Expected
+Handler_delete 1 2 3 6 6 OK
+Handler_rollback 1 2 3 6 6 OK
+
+================================================================================
+TEST 2: STATUS_BY_USER: Verify expected status counts per user (1,2,3)
+================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE Expected
+user1 Handler_delete 1 OK
+
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE Expected
+user2 Handler_delete 2 OK
+
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE Expected
+user3 Handler_delete 3 OK
+#
+# STATUS_BY_USER vs. GLOBAL_STATUS
+#
+SELECT variable_name, u1, u2, u3, delta, user, IF(user=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name u1 u2 u3 delta user Expected
+Handler_delete 1 2 3 6 6 OK
+Handler_rollback 1 2 3 6 6 OK
+
+================================================================================
+TEST 3: STATUS_BY_ACCOUNT: Verify expected status counts per user, host (1,2,3)
+================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE Expected
+user1 localhost Handler_delete 1 OK
+
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE Expected
+user2 localhost Handler_delete 2 OK
+
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE Expected
+user3 localhost Handler_delete 3 OK
+#
+# STATUS_BY_ACCOUNT vs. GLOBAL_STATUS
+#
+SELECT variable_name, a1, a2, a3, delta, acct, IF(acct=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name a1 a2 a3 delta acct Expected
+Handler_delete 1 2 3 6 6 OK
+Handler_rollback 1 2 3 6 6 OK
+================================================================================
+TEST 4: STATUS_BY_HOST: Verify expected status counts per host (6)
+================================================================================
+SELECT *, IF (variable_value = 6,'OK','ERROR') AS Expected FROM status_by_host WHERE host IN ('localhost') AND variable_name IN ('handler_delete');
+HOST VARIABLE_NAME VARIABLE_VALUE Expected
+localhost Handler_delete 6 OK
+#
+# STATUS_BY_HOST vs. GLOBAL_STATUS
+#
+# Special case: No way to isolate pre-existing 'localhost' activity, so
+# just check global totals = sum(status_by_host).
+#
+SELECT variable_name, h1, h2, h3, delta, host, IF(host=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name h1 h2 h3 delta host Expected
+Handler_delete 6 0 0 6 6 OK
+Handler_rollback 6 0 0 6 6 OK
+
+================================================================================
+DISCONNECT ALL USERS AND RUN THE TESTS AGAIN. RESULTS SHOULD NOT CHANGE.
+================================================================================
+connection default;
+disconnect con1;
+disconnect con2;
+disconnect con3;
+
+USE test;
+
+# Clear results table, leave initial global_status counts
+UPDATE test.status_results
+SET stop=0, delta=0,
+t1=0, t2=0, t3=0, thread=0,
+u1=0, u2=0, u3=0, user=0,
+h1=0, h2=0, h3=0, host=0,
+a1=0, a2=0, a3=0, acct=0;
+
+#=================
+# Global results
+#=================
+USE test;
+UPDATE test.status_results sr, performance_schema.global_status sg
+SET sr.stop = sg.variable_value
+WHERE sr.variable_name = sg.variable_name
+AND sg.variable_name IN ('handler_delete', 'handler_rollback');
+
+# Global deltas: END - START.
+UPDATE test.status_results sr
+SET sr.delta = sr.stop - sr.start;
+#=================
+# Status by thread
+#=================
+# Thread results from CON1.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+SET sr.t1 = sbt.variable_value
+WHERE sr.variable_name = sbt.variable_name
+AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbt.thread_id = @con1_id;
+
+# Thread results from CON2.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+SET sr.t2 = sbt.variable_value
+WHERE sr.variable_name = sbt.variable_name
+AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbt.thread_id = @con2_id;
+
+# Thread results from CON3.
+UPDATE test.status_results sr, performance_schema.status_by_thread sbt
+SET sr.t3 = sbt.variable_value
+WHERE sr.variable_name = sbt.variable_name
+AND sbt.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbt.thread_id = @con3_id;
+
+# Thread totals for 3 connections.
+UPDATE test.status_results sr
+SET sr.thread = sr.t1 + sr.t2 + sr.t3;
+#=================
+# Status by user
+#=================
+# User1
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+SET sr.u1 = sbu.variable_value
+WHERE sr.variable_name = sbu.variable_name
+AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbu.user IN ('user1');
+
+# User2
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+SET sr.u2 = sbu.variable_value
+WHERE sr.variable_name = sbu.variable_name
+AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbu.user IN ('user2');
+
+# User3
+UPDATE test.status_results sr, performance_schema.status_by_user sbu
+SET sr.u3 = sbu.variable_value
+WHERE sr.variable_name = sbu.variable_name
+AND sbu.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbu.user IN ('user3');
+
+# Status totals for 3 users.
+UPDATE test.status_results sr
+SET sr.user = sr.u1 + sr.u2 + sr.u3;
+#===========================
+# Status by host (localhost)
+#===========================
+
+# host1 = localhost
+UPDATE test.status_results sr, performance_schema.status_by_host sbh
+SET sr.h1 = sbh.variable_value
+WHERE sr.variable_name = sbh.variable_name
+AND sbh.variable_name IN ('handler_delete', 'handler_rollback')
+AND sbh.host IN ('localhost');
+
+# Status totals for 'localhost' only.
+UPDATE test.status_results sr
+SET sr.host = sr.h1 + sr.h2 + sr.h3;
+#==================
+# Status by account
+#==================
+# User1@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+SET sr.a1 = sba.variable_value
+WHERE sr.variable_name = sba.variable_name
+AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+AND sba.user IN ('user1');
+
+# User2@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+SET sr.a2 = sba.variable_value
+WHERE sr.variable_name = sba.variable_name
+AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+AND sba.user IN ('user2');
+
+# User3@localhost
+UPDATE test.status_results sr, performance_schema.status_by_account sba
+SET sr.a3 = sba.variable_value
+WHERE sr.variable_name = sba.variable_name
+AND sba.variable_name IN ('handler_delete', 'handler_rollback')
+AND sba.user IN ('user3');
+
+
+# Status totals for 3 accounts.
+UPDATE test.status_results sr
+SET sr.acct = sr.a1 + sr.a2 + sr.a3;
+USE performance_schema;
+
+================================================================================
+TEST X: STATUS_BY_THREAD: Connections are gone--nothing to verify.
+================================================================================
+
+================================================================================
+TEST 5: STATUS_BY_USER: Verify expected status counts per user (1,2,3)
+================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE Expected
+user1 Handler_delete 1 OK
+
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE Expected
+user2 Handler_delete 2 OK
+
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE Expected
+user3 Handler_delete 3 OK
+#
+# STATUS_BY_USER vs. GLOBAL_STATUS
+#
+SELECT variable_name, u1, u2, u3, delta, user, IF(user=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name u1 u2 u3 delta user Expected
+Handler_delete 1 2 3 6 6 OK
+Handler_rollback 1 2 3 6 6 OK
+
+================================================================================
+TEST 6: STATUS_BY_ACCOUNT: Verify expected status counts per user:host (1,2,3)
+================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE Expected
+user1 localhost Handler_delete 1 OK
+
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE Expected
+user2 localhost Handler_delete 2 OK
+
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE Expected
+user3 localhost Handler_delete 3 OK
+#
+# STATUS_BY_ACCOUNT vs. GLOBAL_STATUS
+#
+SELECT variable_name, a1, a2, a3, delta, acct, IF(acct=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name a1 a2 a3 delta acct Expected
+Handler_delete 1 2 3 6 6 OK
+Handler_rollback 1 2 3 6 6 OK
+================================================================================
+TEST 7: STATUS_BY_HOST: Verify expected status counts per host (6)
+================================================================================
+SELECT *, IF (variable_value = 6,'OK','ERROR') AS Expected FROM status_by_host WHERE host IN ('localhost') AND variable_name IN ('handler_delete');
+HOST VARIABLE_NAME VARIABLE_VALUE Expected
+localhost Handler_delete 6 OK
+#
+# STATUS_BY_HOST vs. GLOBAL_STATUS
+#
+# Special case: No way to isolate pre-existing 'localhost' activity, so
+# just check global totals = sum(status_by_host).
+#
+SELECT variable_name, h1, h2, h3, delta, host, IF(host=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+variable_name h1 h2 h3 delta host Expected
+Handler_delete 6 0 0 6 6 OK
+Handler_rollback 6 0 0 6 6 OK
+================================================================================
+TEST 8: FLUSH STATUS should clear account, host and user status
+================================================================================
+
+FLUSH STATUS;
+
+SELECT * FROM status_by_account WHERE user IN ('user1', 'user2', 'user3') AND variable_name IN ('handler_delete');
+USER HOST VARIABLE_NAME VARIABLE_VALUE
+user1 localhost Handler_delete 0
+user2 localhost Handler_delete 0
+user3 localhost Handler_delete 0
+
+SELECT * FROM status_by_host WHERE host IN ('localhost') AND variable_name IN ('handler_delete');
+HOST VARIABLE_NAME VARIABLE_VALUE
+localhost Handler_delete 0
+
+SELECT * FROM status_by_user WHERE user IN ('user1', 'user2', 'user3') AND variable_name IN ('handler_delete');
+USER VARIABLE_NAME VARIABLE_VALUE
+user1 Handler_delete 0
+user2 Handler_delete 0
+user3 Handler_delete 0
+================================================================================
+CLEANUP
+================================================================================
+DROP TABLE test.t1;
+DROP TABLE test.t2;
+DROP TABLE test.t3;
+DROP TABLE test.status_results;
+DROP USER 'user1'@localhost;
+DROP USER 'user2'@localhost;
+DROP USER 'user3'@localhost;
+
diff --git a/mysql-test/suite/perfschema/r/show_coverage.result b/mysql-test/suite/perfschema/r/show_coverage.result
new file mode 100644
index 00000000000..933554d81a3
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/show_coverage.result
@@ -0,0 +1,142 @@
+
+# TEST 1
+# Handling of SHOW STATUS/VARIABLES ... WHERE
+#
+SHOW STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+# TEST 2
+# CREATE..SELECT -- Expect correct ER_WARN_DEPRECATED_SYNTAX
+#
+USE test;
+CREATE TABLE t0 SELECT * FROM information_schema.global_status WHERE variable_name = 'COM_SELECT';
+DROP TABLE t0;
+
+# TEST 3
+# Select status and system variable tables using ORDER BY to exercise the
+# rnd_pos() method
+#
+use performance_schema;
+select * from global_variables order by variable_name;
+select * from variables_by_thread order by variable_name;
+select * from session_variables order by variable_name;
+select * from global_status order by variable_name;
+select * from session_status order by variable_name;
+select * from status_by_thread order by variable_name;
+select * from status_by_user order by variable_name;
+select * from status_by_host order by variable_name;
+select * from status_by_account order by variable_name;
+
+# TEST 4
+# Handling of SHOW STATUS/VARIABLES ... WHERE
+#
+SHOW STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+# TEST 5
+# Confirm FLUSH STATUS resets counters for all threads.
+#
+
+# Create a new connection
+connect con1, localhost, root,,;
+
+# Record thread id
+
+# Increase bytes_received for new connection
+USE test;
+SHOW TABLES;
+Tables_in_test
+connection default;
+USE performance_schema;
+
+# Record bytes_received for other connection
+SELECT variable_value FROM status_by_thread
+WHERE variable_name = "bytes_received" and thread_id = @thread_id INTO @bytes_before;
+Warnings:
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+Warning 1329 No data - zero rows fetched, selected, or processed
+
+# Reset status counters
+FLUSH STATUS;
+
+# Record bytes_received after reset
+SELECT variable_value FROM status_by_thread
+WHERE variable_name = "bytes_received" and thread_id = @thread_id INTO @bytes_after;
+Warnings:
+Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+Warning 1329 No data - zero rows fetched, selected, or processed
+
+# Expect bytes_before > bytes_after
+SELECT @bytes_before > @bytes_after AS 'Expect 1';
+Expect 1
+NULL
+
+# Expect bytes_after is zero
+SELECT @bytes_after AS 'Expect 0';
+Expect 0
+NULL
+disconnect con1;
+
+# TEST 6
+#
+# Bug#28291258 FLUSH STATUS ADDS TWICE TO GLOBAL VALUES
+#
+
+# Default connection
+
+# First connection
+connect con1, localhost, root,,;
+include/assert.inc [Global value requested from the first session must not change]
+
+# Generate a slow query
+
+SET long_query_time = 2;
+SELECT SLEEP(4);
+SLEEP(4)
+0
+SET long_query_time = @@global.long_query_time;
+
+include/assert.inc [Global value requested from the first session after SLEEP() must increase by 1]
+include/assert.inc [First session value must increase by 1]
+connection default;
+disconnect con1;
+
+# Default connection
+connection default;
+include/assert.inc [Global value requested from the default session after DISCONNECT must remain the same]
+include/assert.inc [Default session value must remain zero]
+
+FLUSH STATUS;
+
+include/assert.inc [Global value requested from the default session after FLUSH must remain the same]
+include/assert.inc [Default session value after FLUSH must remain zero]
diff --git a/mysql-test/suite/perfschema/r/show_misc.result b/mysql-test/suite/perfschema/r/show_misc.result
new file mode 100644
index 00000000000..6b5baaaf498
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/show_misc.result
@@ -0,0 +1,74 @@
+select 1;
+1
+1
+SHOW STATUS LIKE 'Last_query_partial_plans';
+Variable_name Value
+select 2;
+2
+2
+SHOW STATUS LIKE 'Last_query_cost';
+Variable_name Value
+Last_query_cost 0.000000
+flush status;
+SHOW STATUS LIKE 'Created_tmp_tables';
+Variable_name Value
+Created_tmp_tables 0
+
+================================================================================
+Bug#21789221 SHOW STATUS FAILS WITH LOCK TABLES AND SHOW_COMPATIBILITY_56=OFF
+================================================================================
+Verify that SHOW STATUS and SHOW VARIABLES works under LOCK TABLES mode
+
+CREATE TABLE test.t1 (s1 INT);
+LOCK TABLE test.t1 READ;
+
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+UNLOCK TABLES;
+
+LOCK TABLE test.t1 WRITE;
+
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+Variable_name Value
+
+UNLOCK TABLES;
+DROP TABLE test.t1;
+
+================================================================================
+Bug#28515475 BOGUS DATA WHEN ORDERING RESULTS FROM VARIABLES_BY_THREAD
+================================================================================
+Verify the results from "WHERE variable_name IN(...)", particularly for those
+variables that are listed after the deprecated variable gtid_executed.
+The ORDER BY also forces an additional code path through rnd_pos().
+
+SELECT variable_name FROM performance_schema.variables_by_thread
+WHERE variable_name IN ('interactive_timeout','net_read_timeout','net_write_timeout','wait_timeout')
+ORDER BY variable_name;
+variable_name
+interactive_timeout
+net_read_timeout
+net_write_timeout
+wait_timeout
+
+================================================================================
+CLEAN UP
+================================================================================
diff --git a/mysql-test/suite/perfschema/r/show_plugin.result b/mysql-test/suite/perfschema/r/show_plugin.result
new file mode 100644
index 00000000000..172cea22574
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/show_plugin.result
@@ -0,0 +1,626 @@
+
+================================================================================
+SETUP
+================================================================================
+# Save the initial number of concurrent sessions
+
+# Verify EXAMPLE plugin is not loaded
+SELECT COUNT(*) = 0 AS "Expect 1" FROM information_schema.plugins WHERE plugin_name = "EXAMPLE";
+Expect 1
+1
+
+# Create one session to force local and global system variables
+connect con0, localhost, root,,;
+connection default;
+
+================================================================================
+TEST 1- NO PLUGIN VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+================================================================================
+TEST 2 - PLUGIN LOAD, UNLOAD, RELOAD
+================================================================================
+================================================================================
+2.1 - INSTALL PLUGIN
+================================================================================
+INSTALL PLUGIN example SONAME 'ha_example';
+
+================================================================================
+2.1a - FORCE SYNC OF LOCAL AND GLOBAL SYSTEM VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 8, int_var is 0, double_var is 8.500000, really
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 8, int_var is 0, double_var is 8.500000, really
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 8.500000
+example_double_var 8.500000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 8
+example_varopt_default 5
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 8.500000
+example_double_var 8.500000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 8
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+example_double_thdvar 8.500000
+example_double_var 8.500000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 8
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+disconnect con0;
+
+================================================================================
+2.2 - SET PLUGIN VARS
+================================================================================
+# GLOBAL
+SET GLOBAL example_ulong_var = 100;
+SET GLOBAL example_enum_var = e1;
+SET GLOBAL example_double_var = 100.9990;
+SET GLOBAL example_double_thdvar = 101.9991;
+# SESSION
+SET SESSION example_double_thdvar = 102.9992;
+
+================================================================================
+2.3 - VERIFY UPDATED PLUGIN VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 100, int_var is 0, double_var is 100.999000, really
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 100, int_var is 0, double_var is 100.999000, really
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 101.999100
+example_double_var 100.999000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 100
+example_varopt_default 5
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 102.999200
+example_double_var 100.999000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 100
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+example_double_thdvar 101.999100
+example_double_var 100.999000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 100
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+================================================================================
+2.4 - UNINSTALL PLUGIN
+================================================================================
+UNINSTALL PLUGIN example;
+
+================================================================================
+2.5 - VERIFY NO PLUGIN VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+================================================================================
+2.6 - REINSTALL PLUGIN
+================================================================================
+# Reinstall EXAMPLE plugin
+INSTALL PLUGIN example SONAME 'ha_example';
+
+================================================================================
+2.7 - SET PLUGIN VARS AGAIN
+================================================================================
+# GLOBAL
+SET GLOBAL example_ulong_var = 200;
+SET GLOBAL example_enum_var = e2;
+SET GLOBAL example_double_var = 200.8880;
+SET GLOBAL example_double_thdvar = 201.8881;
+# SESSION
+SET SESSION example_double_thdvar = 202.8882;
+
+================================================================================
+2.8 - VERIFY PLUGIN VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 1, ulong_var is 200, int_var is 0, double_var is 200.888000, really
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 1, ulong_var is 200, int_var is 0, double_var is 200.888000, really
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 201.888100
+example_double_var 200.888000
+example_enum_var e2
+example_int_var 0
+example_ulong_var 200
+example_varopt_default 5
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 202.888200
+example_double_var 200.888000
+example_enum_var e2
+example_int_var 0
+example_ulong_var 200
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+example_double_thdvar 201.888100
+example_double_var 200.888000
+example_enum_var e2
+example_int_var 0
+example_ulong_var 200
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+================================================================================
+2.9 - UNINSTALL PLUGIN
+================================================================================
+UNINSTALL PLUGIN example;
+
+================================================================================
+2.10 - VERIFY NO PLUGIN VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+================================================================================
+TEST 3 - SESSION PLUGIN VARS ON MULTIPLE CONNECTIONS
+================================================================================
+
+================================================================================
+3.1 - INSTALL PLUGIN
+================================================================================
+INSTALL PLUGIN example SONAME 'ha_example';
+
+================================================================================
+3.2 - SET GLOBAL AND DEFAULT CONNECTION VARS
+================================================================================
+connection default;
+SET GLOBAL example_ulong_var = 300;
+SET GLOBAL example_enum_var = e1;
+SET GLOBAL example_double_var = 301.0000;
+SET GLOBAL example_double_thdvar = 302.0000;
+SET SESSION example_double_thdvar = 300.0000;
+
+================================================================================
+3.3 - CONNECT 3 CLIENTS, SET LOCAL PLUGIN VARS
+================================================================================
+connect con1, localhost, root,,;
+SET SESSION example_double_thdvar = 300.1111;
+
+connect con2, localhost, root,,;
+SET SESSION example_double_thdvar = 300.2222;
+
+connect con3, localhost, root,,;
+SET SESSION example_double_thdvar = 300.3333;
+
+connection default;
+
+================================================================================
+3.4 - VERIFY GLOBAL AND SESSION PLUGIN VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 300, int_var is 0, double_var is 301.000000, really
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 300, int_var is 0, double_var is 301.000000, really
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 302.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 300.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+example_double_thdvar 302.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+# Variables by thread
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+variable_name variable_value
+
+================================================================================
+3.5 - DISCONNECT CLIENTS
+================================================================================
+connection con1;
+disconnect con1;
+connection con2;
+disconnect con2;
+connection con3;
+disconnect con3;
+connection default;
+
+================================================================================
+3.6 - VERIFY SESSION VARS ARE REMOVED
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 300, int_var is 0, double_var is 301.000000, really
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 300, int_var is 0, double_var is 301.000000, really
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 302.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 300.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+example_double_thdvar 302.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+# Variables by thread
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+variable_name variable_value
+
+================================================================================
+3.7 - RECONNECT 3 CLIENTS, SET SESSION VARS FOR EACH
+================================================================================
+connect con1, localhost, root,,;
+SET SESSION example_double_thdvar = 311.1111;
+
+connect con2, localhost, root,,;
+SET SESSION example_double_thdvar = 322.2222;
+
+connect con3, localhost, root,,;
+SET SESSION example_double_thdvar = 333.3333;
+
+connection default;
+
+================================================================================
+3.8 - VERIFY GLOBAL AND SESSION VARS
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 300, int_var is 0, double_var is 301.000000, really
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+Example_func_example enum_var is 0, ulong_var is 300, int_var is 0, double_var is 301.000000, really
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 302.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+example_double_thdvar 300.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+example_double_thdvar 302.000000
+example_double_var 301.000000
+example_enum_var e1
+example_int_var 0
+example_ulong_var 300
+example_varopt_default 5
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+# Variables by thread
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+variable_name variable_value
+
+================================================================================
+3.9 - UNINSTALL PLUGIN, LEAVE CLIENTS CONNECTED
+================================================================================
+UNINSTALL PLUGIN example;
+
+================================================================================
+3.10 - VERIFY SESSION VARS ARE REMOVED
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+# VARIABLES BY THREAD
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+variable_name variable_value
+
+================================================================================
+3.11 - DISCONNECT CLIENTS
+================================================================================
+connection con1;
+disconnect con1;
+connection con2;
+disconnect con2;
+connection con3;
+disconnect con3;
+connection default;
+
+================================================================================
+3.12 - VERIFY CLIENTS ARE REMOVED
+================================================================================
+
+SHOW GLOBAL STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION STATUS LIKE "example_%";
+Variable_name Value
+
+SHOW GLOBAL VARIABLES LIKE "example_%";
+Variable_name Value
+
+SHOW SESSION VARIABLES LIKE "example_%";
+Variable_name Value
+
+SELECT variable_name, variable_value FROM performance_schema.global_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_status WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.global_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+SELECT variable_name, variable_value FROM performance_schema.session_variables WHERE variable_name LIKE "example_%";
+variable_name variable_value
+
+# VARIABLES BY THREAD
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+variable_name variable_value
+
+================================================================================
+TEST 4 - BUG#18008907: DEADLOCK WITH CHANGE_USER, SHOW VARIABLES, INSTALL PLUGIN
+================================================================================
+
+
+================================================================================
+TEST 5 - BUG#22225549 MYSQL_CHANGE_USER/MYSQL_RESET_CONNECTION + SET INNODB...
+Update to plugin-defined session variable triggers resync with global
+variables and deadlocks on THD::LOCK_thd_sysvar.
+================================================================================
+select @@session.innodb_strict_mode;
+@@session.innodb_strict_mode
+1
+select user(), current_user();
+user() current_user()
+root@localhost root@localhost
+change_user root
+#
+# Trigger a resync of session variables with global variables.
+#
+set @@session.innodb_strict_mode=off;
+
+# Restore
+
+set @@session.innodb_strict_mode=1;
+select @@session.innodb_strict_mode;
+@@session.innodb_strict_mode
+1
+
+================================================================================
+CLEAN UP
+================================================================================
+connection default;
+
+
+
+# Wait till we reached the initial number of concurrent sessions
diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result
new file mode 100644
index 00000000000..71bc92a2c2f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/show_sanity.result
@@ -0,0 +1,853 @@
+create table test.sanity(
+`SHOW_MODE` varchar(48) NOT NULL,
+`SOURCE` varchar(64) NOT NULL,
+`VARIABLE_NAME` varchar(64) NOT NULL);
+select thread_id from performance_schema.threads
+where processlist_id = connection_id()
+into @my_tid;
+select @@global.show_compatibility_56 into @show_compatibility_56_save;
+set @my_user='root';
+set @my_host='localhost';
+
+================================================================================
+SHOW_COMPATIBILITY_56 = ON
+================================================================================
+set global show_compatibility_56 = on;
+
+# STEP 1-1
+insert into test.sanity
+select "5.6", "I_S.GLOBAL_VARIABLES", variable_name
+from information_schema.global_variables;
+Warnings:
+Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead
+
+# STEP 1-2
+insert into test.sanity
+select "5.6", "I_S.SESSION_VARIABLES", variable_name
+from information_schema.session_variables;
+Warnings:
+Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead
+
+# STEP 1-3
+insert into test.sanity
+select "5.6", "P_S.GLOBAL_VARIABLES", variable_name
+from performance_schema.global_variables;
+
+# STEP 1-4
+insert into test.sanity
+select "5.6", "P_S.VARIABLES_BY_THREAD", variable_name
+from performance_schema.variables_by_thread
+where thread_id = @my_tid;
+
+# STEP 1-5
+insert into test.sanity
+select "5.6", "P_S.SESSION_VARIABLES", variable_name
+from performance_schema.session_variables;
+
+# STEP 1-6
+insert into test.sanity
+select "5.6", "I_S.GLOBAL_STATUS", variable_name
+from information_schema.global_status;
+Warnings:
+Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead
+
+# STEP 1-7
+insert into test.sanity
+select "5.6", "I_S.SESSION_STATUS", variable_name
+from information_schema.session_status;
+Warnings:
+Warning 1287 'INFORMATION_SCHEMA.SESSION_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.session_status instead
+
+# STEP 1-8
+insert into test.sanity
+select "5.6", "P_S.GLOBAL_STATUS", variable_name
+from performance_schema.global_status;
+
+# STEP 1-9
+# EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+from performance_schema.status_by_thread;
+THREAD_ID VARIABLE_NAME VARIABLE_VALUE
+
+# STEP 1-10
+insert into test.sanity
+select "5.6", "P_S.SESSION_STATUS", variable_name
+from performance_schema.session_status;
+
+# STEP 1-11
+# EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+from performance_schema.status_by_account;
+USER HOST VARIABLE_NAME VARIABLE_VALUE
+
+# STEP 1-12
+# EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+from performance_schema.status_by_user;
+USER VARIABLE_NAME VARIABLE_VALUE
+
+# STEP 1-13
+# EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+from performance_schema.status_by_host;
+HOST VARIABLE_NAME VARIABLE_VALUE
+
+================================================================================
+SHOW_COMPATIBILITY_56 = OFF
+================================================================================
+set global show_compatibility_56 = off;
+
+# STEP 2-1
+# FAILS WITH ERROR
+select *
+from information_schema.global_variables;
+ERROR HY000: The 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' feature is disabled; see the documentation for 'show_compatibility_56'
+
+# STEP 2-2
+# FAILS WITH ERROR
+select *
+from information_schema.session_variables;
+ERROR HY000: The 'INFORMATION_SCHEMA.SESSION_VARIABLES' feature is disabled; see the documentation for 'show_compatibility_56'
+
+# STEP 2-3
+insert into test.sanity
+select "5.7", "P_S.GLOBAL_VARIABLES", variable_name
+from performance_schema.global_variables;
+
+# STEP 2-4
+insert into test.sanity
+select "5.7", "P_S.VARIABLES_BY_THREAD", variable_name
+from performance_schema.variables_by_thread
+where thread_id = @my_tid;
+
+# STEP 2-5
+insert into test.sanity
+select "5.7", "P_S.SESSION_VARIABLES", variable_name
+from performance_schema.session_variables;
+
+# STEP 2-6
+# FAILS WITH ERROR
+select *
+from information_schema.global_status;
+ERROR HY000: The 'INFORMATION_SCHEMA.GLOBAL_STATUS' feature is disabled; see the documentation for 'show_compatibility_56'
+
+# STEP 2-7
+# FAILS WITH ERROR
+select *
+from information_schema.session_status;
+ERROR HY000: The 'INFORMATION_SCHEMA.SESSION_STATUS' feature is disabled; see the documentation for 'show_compatibility_56'
+
+# STEP 2-8
+insert into test.sanity
+select "5.7", "P_S.GLOBAL_STATUS", variable_name
+from performance_schema.global_status;
+
+# STEP 2-9
+insert into test.sanity
+select "5.7", "P_S.STATUS_BY_THREAD", variable_name
+from performance_schema.status_by_thread
+where thread_id = @my_tid;
+
+# STEP 2-10
+insert into test.sanity
+select "5.7", "P_S.SESSION_STATUS", variable_name
+from performance_schema.session_status;
+
+# STEP 2-11
+insert into test.sanity
+select "5.7", "P_S.STATUS_BY_ACCOUNT", variable_name
+from performance_schema.status_by_account
+where `user` = @my_user and `host` = @my_host;
+
+# STEP 2-12
+insert into test.sanity
+select "5.7", "P_S.STATUS_BY_USER", variable_name
+from performance_schema.status_by_user
+where `user` = @my_user;
+
+# STEP 2-13
+insert into test.sanity
+select "5.7", "P_S.STATUS_BY_HOST", variable_name
+from performance_schema.status_by_host
+where `host` = @my_host;
+
+# STEP 2-14
+# Known global variables in 5.6 that should not display in session queries.
+# These should be global-only system variables.
+
+# STEP 2-15
+# Known global status in 5.6 that should not exist in session queries.
+# These should be global-only status variables.
+
+# STEP 2-15A
+# COM counters appear in I_S.SESSION_STATUS, but not in P_S.SESSION_STATUS
+
+# STEP 2-15B
+# These slave status counters appear in I_S.SESSION_STATUS, but not in P_S.SESSION_STATUS
+insert into test.sanity values
+("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_HEARTBEAT_PERIOD"),
+("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_LAST_HEARTBEAT"),
+("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_RECEIVED_HEARTBEATS"),
+("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_RETRIED_TRANSACTIONS"),
+("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_RUNNING")
+;
+
+# STEP 2-16
+# Known session-only status in 5.6 that should not exist in global queries.
+insert into test.sanity values
+("JUNK: SESSION-ONLY", "I_S.GLOBAL_STATUS", "COMPRESSION"),
+("JUNK: SESSION-ONLY", "I_S.GLOBAL_STATUS", "LAST_QUERY_COST"),
+("JUNK: SESSION-ONLY", "I_S.GLOBAL_STATUS", "LAST_QUERY_PARTIAL_PLANS")
+;
+
+# STEP 2-16A
+# COM counters appear in I_S.GLOBAL_STATUS but not in P_S.GLOBAL_STATUS
+
+# STEP 2-16B
+# These slave status counters appear in I_S.GLOBAL_STATUS, but not in P_S.GLOBAL_STATUS
+insert into test.sanity values
+("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_HEARTBEAT_PERIOD"),
+("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_LAST_HEARTBEAT"),
+("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_RECEIVED_HEARTBEATS"),
+("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_RETRIED_TRANSACTIONS"),
+("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_RUNNING")
+;
+
+# STEP 2-17
+# Status variables that should not exist in queries that aggregate across threads.
+# Criteria: Session-only OR non-aggregatable.
+insert into test.sanity values
+("JUNK", "NO AGGREGATE", "COMPRESSION"),
+("JUNK", "NO AGGREGATE", "LAST_QUERY_COST"),
+("JUNK", "NO AGGREGATE", "LAST_QUERY_PARTIAL_PLANS"),
+("JUNK", "NO AGGREGATE", "OPEN_TABLES"),
+("JUNK", "NO AGGREGATE", "QUERIES"),
+("JUNK", "NO AGGREGATE", "SLOW_LAUNCH_THREADS"),
+("JUNK", "NO AGGREGATE", "SSL_CIPHER"),
+("JUNK", "NO AGGREGATE", "SSL_CIPHER_LIST"),
+("JUNK", "NO AGGREGATE", "SSL_DEFAULT_TIMEOUT"),
+("JUNK", "NO AGGREGATE", "SSL_SERVER_NOT_AFTER"),
+("JUNK", "NO AGGREGATE", "SSL_SERVER_NOT_BEFORE"),
+("JUNK", "NO AGGREGATE", "SSL_SESSIONS_REUSED"),
+("JUNK", "NO AGGREGATE", "SSL_VERIFY_DEPTH"),
+("JUNK", "NO AGGREGATE", "SSL_VERIFY_MODE"),
+("JUNK", "NO AGGREGATE", "SSL_VERSION")
+;
+
+================================================================================
+TEST 1A
+Present in 5.6 P_S.GLOBAL_VARIABLES (1-3)
+Missing in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 1B
+Present in 5.7 P_S.GLOBAL_VARIABLES (2-3)
+Missing in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 2A
+Present in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+Missing in 5.6 P_S.GLOBAL_VARIABLES (1-3)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.GLOBAL_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.GLOBAL_VARIABLES SQL_LOG_BIN
+
+================================================================================
+TEST 2B
+Present in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+Missing in 5.7 P_S.GLOBAL_VARIABLES (2-3)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.GLOBAL_VARIABLES SQL_LOG_BIN
+
+================================================================================
+TEST 3A
+Present in 5.6 P_S.SESSION_VARIABLES (1-5)
+Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 3B
+Present in 5.7 P_S.SESSION_VARIABLES (2-5)
+Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 4A
+Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+Missing in 5.6 P_S.SESSION_VARIABLES (1-5)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.SESSION_VARIABLES GTID_EXECUTED
+
+================================================================================
+TEST 4B
+Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+Missing in 5.7 P_S.SESSION_VARIABLES (2-5)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.SESSION_VARIABLES GTID_EXECUTED
+
+================================================================================
+TEST 5A
+Present in 5.6 P_S.VARIABLES_BY_THREAD (1-4)
+Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.VARIABLES_BY_THREAD"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 5B
+Present in 5.7 P_S.VARIABLES_BY_THREAD (2-4)
+Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.VARIABLES_BY_THREAD"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 5C
+Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+Missing in 5.6 P_S.VARIABLES_BY_THREAD (1-4)
+EXPECT NOTHING BESIDE KNOWN GLOBAL VARIABLES (2-14)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.VARIABLES_BY_THREAD")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE
+5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING
+5.6 I_S.SESSION_VARIABLES GTID_EXECUTED
+5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT
+5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED
+5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS
+5.6 I_S.SESSION_VARIABLES LOG_STATEMENTS_UNSAFE_FOR_BINLOG
+5.6 I_S.SESSION_VARIABLES TLS_VERSION
+
+================================================================================
+TEST 5D
+Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+Missing in 5.7 P_S.VARIABLES_BY_THREAD (2-5)
+EXPECT NOTHING BESIDE KNOWN GLOBAL VARIABLES (2-14)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.VARIABLES_BY_THREAD")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE
+5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING
+5.6 I_S.SESSION_VARIABLES GTID_EXECUTED
+5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT
+5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED
+5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS
+5.6 I_S.SESSION_VARIABLES LOG_STATEMENTS_UNSAFE_FOR_BINLOG
+5.6 I_S.SESSION_VARIABLES TLS_VERSION
+
+================================================================================
+TEST 5E
+KNOWN GLOBAL VARIABLES (2-14)
+Expect missing in 5.6 P_S.VARIABLES_BY_THREAD (1-4)
+================================================================================
+select * from test.sanity
+where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.VARIABLES_BY_THREAD")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 5F
+KNOWN GLOBAL VARIABLES (2-14)
+Expect missing in 5.7 P_S.VARIABLES_BY_THREAD (2-5)
+================================================================================
+select * from test.sanity
+where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.VARIABLES_BY_THREAD")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 6A
+Present in 5.7 P_S.GLOBAL_STATUS (2-8)
+Missing in 5.6 I_S.GLOBAL_STATUS (1-6)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.GLOBAL_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 6B
+Present in 5.7 P_S.GLOBAL_STATUS (2-8)
+Missing in 5.6 P_S.GLOBAL_STATUS (1-8)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.GLOBAL_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 6C
+Present in 5.6 P_S.GLOBAL_STATUS (1-8)
+Missing in 5.7 P_S.GLOBAL_STATUS (2-8)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 7
+Present in 5.6 I_S.GLOBAL_STATUS (1-6)
+Missing in 5.7 P_S.GLOBAL_STATUS (2-8)
+EXPECT NOTHING AFTER REMOVING KNOWN SESSION-ONLY, COM COUNTERS AND SLAVE-ONLY (2-16 & 2-16A & 2-16B)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: SESSION-ONLY" or show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+and source = "I_S.GLOBAL_STATUS")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.GLOBAL_STATUS COM_SHUTDOWN
+
+================================================================================
+TEST 8
+KNOWN SESSION-ONLY (2-16)
+KNOWN COM COUNTERS (2-16A)
+KNOWN SLAVE-ONLY (2-16B)
+Status variables that should NOT be present in 5.7 P_S.GLOBAL_STATUS (2-8)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: SESSION-ONLY" or show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+and source = "I_S.GLOBAL_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 9A
+Present in 5.7 P_S.SESSION_STATUS (2-10)
+Missing in 5.6 I_S.SESSION_STATUS (1-7)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 9B
+Present in 5.7 P_S.SESSION_STATUS (2-10)
+Missing in 5.6 P_S.SESSION_STATUS (1-10)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 9C
+Present in 5.6 P_S.SESSION_STATUS (1-10)
+Missing in 5.7 P_S.SESSION_STATUS (2-10)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 10
+Present in 5.6 I_S.SESSION_STATUS (1-7)
+Missing in 5.7 P_S.SESSION_STATUS (2-10)
+EXPECT NOTHING AFTER REMOVING KNOWN COM COUNTERS AND SLAVE-ONLY (2-15A & 2-15B)
+================================================================================
+select * from test.sanity
+where show_mode = "5.6"
+ and source = "I_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+and source = "I_S.SESSION_STATUS")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+5.6 I_S.SESSION_STATUS COM_SHUTDOWN
+
+================================================================================
+TEST 11
+KNOWN COM COUNTERS (2-15A)
+KNOWN SLAVE-ONLY (2-15B)
+Status variables that should NOT be present in 5.7 P_S.SESSION_STATUS (2-10)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+and source = "I_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 12
+Present in 5.7 P_S.SESSION_STATUS (2-10)
+Missing in 5.7 P_S.STATUS_BY_THREAD
+EXPECT NOTHING AFTER REMOVING KNOWN GLOBAL-ONLY (2-15)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_THREAD")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: GLOBAL-ONLY")
+and source = "I_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 13
+Present in 5.7 P_S.STATUS_BY_THREAD
+Missing in 5.7 P_S.SESSION_STATUS (2-10)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_THREAD"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 14
+Present in 5.7 P_S.SESSION_STATUS (2-10)
+Missing in 5.7 P_S.STATUS_BY_ACCOUNT
+EXPECT NOTHING AFTER REMOVING
+- KNOWN GLOBAL-ONLY (2-15)
+- STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: GLOBAL-ONLY")
+and source = "I_S.SESSION_STATUS")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_ACCOUNT")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 15
+Present in 5.7 P_S.STATUS_BY_ACCOUNT
+Missing in 5.7 P_S.SESSION_STATUS (2-10)
+EXPECT NOTHING
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_ACCOUNT"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 16
+KNOWN STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+Status variables that should NOT be present in 5.7 P_S.STATUS_BY_ACCOUNT
+================================================================================
+select * from performance_schema.status_by_account
+where upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+order by variable_name;
+USER HOST VARIABLE_NAME VARIABLE_VALUE
+
+================================================================================
+TEST 17
+Present in 5.7 P_S.SESSION_STATUS (2-10)
+Missing in 5.7 P_S.STATUS_BY_USER
+EXPECT NOTHING AFTER REMOVING
+- KNOWN GLOBAL-ONLY (2-15)
+- STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: GLOBAL-ONLY")
+and source = "I_S.SESSION_STATUS")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_USER")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 18
+Present in 5.7 P_S.STATUS_BY_USER
+Missing in 5.7 P_S.SESSION_STATUS (2-10)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_USER"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 19
+KNOWN STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+Status variables that should NOT be present in 5.7 P_S.STATUS_BY_USER
+================================================================================
+select * from performance_schema.status_by_user
+where upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+order by variable_name;
+USER VARIABLE_NAME VARIABLE_VALUE
+
+================================================================================
+TEST 20
+Present in 5.7 P_S.SESSION_STATUS (2-10)
+Missing in 5.7 P_S.STATUS_BY_HOST
+EXPECT NOTHING AFTER REMOVING
+- KNOWN GLOBAL-ONLY (2-15)
+- STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where (show_mode = "JUNK: GLOBAL-ONLY")
+and source = "I_S.SESSION_STATUS")
+and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_HOST")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 21
+Present in 5.7 P_S.STATUS_BY_HOST
+Missing in 5.7 P_S.SESSION_STATUS (2-10)
+================================================================================
+select * from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_HOST"
+ and upper(variable_name) not in (
+select upper(variable_name) from test.sanity
+where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+order by show_mode, source, variable_name;
+SHOW_MODE SOURCE VARIABLE_NAME
+
+================================================================================
+TEST 22
+KNOWN STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+Status variables that should NOT be present in 5.7 P_S.STATUS_BY_HOST
+================================================================================
+select * from performance_schema.status_by_host
+where upper(variable_name) in (
+select upper(variable_name) from test.sanity
+where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+order by variable_name;
+HOST VARIABLE_NAME VARIABLE_VALUE
+
+================================================================================
+CLEAN UP
+================================================================================
+set @@global.show_compatibility_56 = @show_compatibility_56_save;
+drop table test.sanity;
diff --git a/mysql-test/suite/perfschema/r/sizing_default.result b/mysql-test/suite/perfschema/r/sizing_default.result
deleted file mode 100644
index 07fbf35619b..00000000000
--- a/mysql-test/suite/perfschema/r/sizing_default.result
+++ /dev/null
@@ -1,69 +0,0 @@
-show variables like "table_definition_cache";
-Variable_name Value
-table_definition_cache 1400
-show variables like "table_open_cache";
-Variable_name Value
-table_open_cache 2000
-show variables like "max_connections";
-Variable_name Value
-max_connections 151
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
-Variable_name Value
-performance_schema ON
-performance_schema_accounts_size 100
-performance_schema_digests_size 10000
-performance_schema_events_stages_history_long_size 10000
-performance_schema_events_stages_history_size 10
-performance_schema_events_statements_history_long_size 10000
-performance_schema_events_statements_history_size 10
-performance_schema_events_waits_history_long_size 10000
-performance_schema_events_waits_history_size 10
-performance_schema_hosts_size 100
-performance_schema_max_cond_classes 80
-performance_schema_max_cond_instances 3504
-performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
-performance_schema_max_file_handles 32768
-performance_schema_max_file_instances 7693
-performance_schema_max_mutex_classes 200
-performance_schema_max_mutex_instances 15906
-performance_schema_max_rwlock_classes 40
-performance_schema_max_rwlock_instances 9102
-performance_schema_max_socket_classes 10
-performance_schema_max_socket_instances 322
-performance_schema_max_stage_classes\t160
-performance_schema_max_table_handles 4000
-performance_schema_max_table_instances 12500
-performance_schema_max_thread_classes 50
-performance_schema_max_thread_instances 402
-performance_schema_session_connect_attrs_size 512
-performance_schema_setup_actors_size 100
-performance_schema_setup_objects_size 100
-performance_schema_users_size 100
-show status like "%performance_schema%";
-Variable_name Value
-Performance_schema_accounts_lost 0
-Performance_schema_cond_classes_lost 0
-Performance_schema_cond_instances_lost 0
-Performance_schema_digest_lost 0
-Performance_schema_file_classes_lost 0
-Performance_schema_file_handles_lost 0
-Performance_schema_file_instances_lost 0
-Performance_schema_hosts_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_session_connect_attrs_lost 0
-Performance_schema_socket_classes_lost 0
-Performance_schema_socket_instances_lost 0
-Performance_schema_stage_classes_lost 0
-Performance_schema_statement_classes_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
-Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/sizing_growth.result b/mysql-test/suite/perfschema/r/sizing_growth.result
deleted file mode 100644
index 2190e904fd4..00000000000
--- a/mysql-test/suite/perfschema/r/sizing_growth.result
+++ /dev/null
@@ -1,255 +0,0 @@
-flush status;
-flush tables;
-select * from performance_schema.mutex_instances;
-select * from performance_schema.rwlock_instances;
-select * from performance_schema.cond_instances;
-select * from performance_schema.file_instances;
-select count(*) from performance_schema.mutex_instances
-into @v0_mutex_instances;
-select count(*) from performance_schema.rwlock_instances
-into @v0_rwlock_instances;
-select count(*) from performance_schema.cond_instances
-into @v0_cond_instances;
-select count(*) from performance_schema.file_instances
-into @v0_file_instances;
-select count(*) from performance_schema.mutex_instances
-into @v1_mutex_instances;
-select count(*) from performance_schema.rwlock_instances
-into @v1_rwlock_instances;
-select count(*) from performance_schema.cond_instances
-into @v1_cond_instances;
-select count(*) from performance_schema.file_instances
-into @v1_file_instances;
-select count(name), name from performance_schema.mutex_instances
-group by name;
-select count(name), name from performance_schema.rwlock_instances
-group by name;
-select count(name), name from performance_schema.cond_instances
-group by name;
-select count(event_name), event_name from performance_schema.file_instances
-group by event_name;
-begin;
-create table test.t1(a int) engine = innodb;
-create table test.t2(a int) engine = innodb;
-create table test.t3(a int) engine = innodb;
-create table test.t4(a int) engine = innodb;
-create table test.t5(a int) engine = innodb;
-create table test.t6(a int) engine = innodb;
-create table test.t7(a int) engine = innodb;
-create table test.t8(a int) engine = innodb;
-create table test.t9(a int) engine = innodb;
-create table test.t10(a int) engine = innodb;
-select * from test.t1;
-select * from test.t2;
-select * from test.t3;
-select * from test.t4;
-select * from test.t5;
-select * from test.t6;
-select * from test.t7;
-select * from test.t8;
-select * from test.t9;
-select * from test.t10;
-commit;
-select count(*) from performance_schema.mutex_instances
-into @v2_mutex_instances;
-select count(*) from performance_schema.rwlock_instances
-into @v2_rwlock_instances;
-select count(*) from performance_schema.cond_instances
-into @v2_cond_instances;
-select count(*) from performance_schema.file_instances
-into @v2_file_instances;
-select count(name), name from performance_schema.mutex_instances
-group by name;
-select count(name), name from performance_schema.rwlock_instances
-group by name;
-select count(name), name from performance_schema.cond_instances
-group by name;
-select count(event_name), event_name from performance_schema.file_instances
-group by event_name;
-select @v2_mutex_instances, @v1_mutex_instances, @v0_mutex_instances;
-select @v2_rwlock_instances, @v1_rwlock_instances, @v0_rwlock_instances;
-select @v2_cond_instances, @v1_cond_instances, @v0_cond_instances;
-select @v2_file_instances, @v1_file_instances, @v0_file_instances;
-select round((@v2_mutex_instances - @v1_mutex_instances) / 10)
-into @mutex_per_share;
-select round((@v2_rwlock_instances - @v1_rwlock_instances) / 10)
-into @rwlock_per_share;
-select round((@v2_cond_instances - @v1_cond_instances) / 10)
-into @cond_per_share;
-select round((@v2_file_instances - @v1_file_instances) / 10)
-into @file_per_share;
-select "con1 connected";
-select "con2 connected";
-select "con3 connected";
-select "con4 connected";
-select "con5 connected";
-select "con6 connected";
-select "con7 connected";
-select "con8 connected";
-select "con9 connected";
-select "con10 connected";
-select count(*) from performance_schema.mutex_instances
-into @v3_mutex_instances;
-select count(*) from performance_schema.rwlock_instances
-into @v3_rwlock_instances;
-select count(*) from performance_schema.cond_instances
-into @v3_cond_instances;
-select count(*) from performance_schema.file_instances
-into @v3_file_instances;
-select count(name), name from performance_schema.mutex_instances
-group by name;
-select count(name), name from performance_schema.rwlock_instances
-group by name;
-select count(name), name from performance_schema.cond_instances
-group by name;
-select count(event_name), event_name from performance_schema.file_instances
-group by event_name;
-select @v3_mutex_instances, @v2_mutex_instances;
-select @v3_rwlock_instances, @v2_rwlock_instances;
-select @v3_cond_instances, @v2_cond_instances;
-select @v3_file_instances, @v2_file_instances;
-select round((@v3_mutex_instances - @v2_mutex_instances) / 10)
-into @mutex_per_con;
-select round((@v3_rwlock_instances - @v2_rwlock_instances) / 10)
-into @rwlock_per_con;
-select round((@v3_cond_instances - @v2_cond_instances) / 10)
-into @cond_per_con;
-select round((@v3_file_instances - @v2_file_instances) / 10)
-into @file_per_con;
-lock table test.t1 write, test.t2 write, test.t3 write, test.t4 write,
-test.t5 write, test.t6 write, test.t7 write, test.t8 write, test.t9 write,
-test.t10 write;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
-from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-select count(*) from performance_schema.mutex_instances
-into @v4_mutex_instances;
-select count(*) from performance_schema.rwlock_instances
-into @v4_rwlock_instances;
-select count(*) from performance_schema.cond_instances
-into @v4_cond_instances;
-select count(*) from performance_schema.file_instances
-into @v4_file_instances;
-select count(name), name from performance_schema.mutex_instances
-group by name;
-select count(name), name from performance_schema.rwlock_instances
-group by name;
-select count(name), name from performance_schema.cond_instances
-group by name;
-select count(event_name), event_name from performance_schema.file_instances
-group by event_name;
-select @v4_mutex_instances, @v3_mutex_instances;
-select @v4_rwlock_instances, @v3_rwlock_instances;
-select @v4_cond_instances, @v3_cond_instances;
-select @v4_file_instances, @v3_file_instances;
-select round((@v4_mutex_instances - @v3_mutex_instances) / 10)
-into @mutex_per_handle;
-select round((@v4_rwlock_instances - @v3_rwlock_instances) / 10)
-into @rwlock_per_handle;
-select round((@v4_cond_instances - @v3_cond_instances) / 10)
-into @cond_per_handle;
-select round((@v4_file_instances - @v3_file_instances) / 10)
-into @file_per_handle;
-unlock tables;
-drop table test.t1;
-drop table test.t2;
-drop table test.t3;
-drop table test.t4;
-drop table test.t5;
-drop table test.t6;
-drop table test.t7;
-drop table test.t8;
-drop table test.t9;
-drop table test.t10;
-show status like "performance_schema%";
-Variable_name Value
-Performance_schema_accounts_lost 0
-Performance_schema_cond_classes_lost 0
-Performance_schema_cond_instances_lost 0
-Performance_schema_digest_lost 0
-Performance_schema_file_classes_lost 0
-Performance_schema_file_handles_lost 0
-Performance_schema_file_instances_lost 0
-Performance_schema_hosts_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_session_connect_attrs_lost 0
-Performance_schema_socket_classes_lost 0
-Performance_schema_socket_instances_lost 0
-Performance_schema_stage_classes_lost 0
-Performance_schema_statement_classes_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
-Performance_schema_users_lost 0
-select @rwlock_per_share <= 3;
-@rwlock_per_share <= 3
-1
-select @cond_per_share;
-@cond_per_share
-0
-select @file_per_share <= 3;
-@file_per_share <= 3
-1
-select @mutex_per_con;
-@mutex_per_con
-3
-select @rwlock_per_con;
-@rwlock_per_con
-1
-select @cond_per_con;
-@cond_per_con
-2
-select @file_per_con;
-@file_per_con
-0
-select @mutex_per_handle;
-@mutex_per_handle
-0
-select @rwlock_per_handle;
-@rwlock_per_handle
-0
-select @cond_per_handle;
-@cond_per_handle
-0
-select @file_per_handle;
-@file_per_handle
-0
-select if(
-(@rwlock_per_share <= 3)
-AND (@cond_per_share = 0)
-AND (@file_per_share <= 3)
-AND (@mutex_per_con = 3)
-AND (@rwlock_per_con = 1)
-AND (@cond_per_con = 2)
-AND (@file_per_con = 0)
-AND (@mutex_per_handle = 0)
-AND (@rwlock_per_handle = 0)
-AND (@cond_per_handle = 0)
-AND (@file_per_handle = 0),
-"OK: heuristics are up to date",
-"FAILED: heuristics need to be updated")
-as status;
-status
-OK: heuristics are up to date
diff --git a/mysql-test/suite/perfschema/r/sizing_high.result b/mysql-test/suite/perfschema/r/sizing_high.result
deleted file mode 100644
index 1cf84a14d22..00000000000
--- a/mysql-test/suite/perfschema/r/sizing_high.result
+++ /dev/null
@@ -1,69 +0,0 @@
-show variables like "table_definition_cache";
-Variable_name Value
-table_definition_cache 5000
-show variables like "table_open_cache";
-Variable_name Value
-table_open_cache 400
-show variables like "max_connections";
-Variable_name Value
-max_connections 200
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
-Variable_name Value
-performance_schema ON
-performance_schema_accounts_size 100
-performance_schema_digests_size 10000
-performance_schema_events_stages_history_long_size 10000
-performance_schema_events_stages_history_size 10
-performance_schema_events_statements_history_long_size 10000
-performance_schema_events_statements_history_size 10
-performance_schema_events_waits_history_long_size 10000
-performance_schema_events_waits_history_size 10
-performance_schema_hosts_size 100
-performance_schema_max_cond_classes 80
-performance_schema_max_cond_instances 10900
-performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
-performance_schema_max_file_handles 32768
-performance_schema_max_file_instances 23385
-performance_schema_max_mutex_classes 200
-performance_schema_max_mutex_instances 52200
-performance_schema_max_rwlock_classes 40
-performance_schema_max_rwlock_instances 30800
-performance_schema_max_socket_classes 10
-performance_schema_max_socket_instances 420
-performance_schema_max_stage_classes\t160
-performance_schema_max_table_handles 800
-performance_schema_max_table_instances 12500
-performance_schema_max_thread_classes 50
-performance_schema_max_thread_instances 500
-performance_schema_session_connect_attrs_size 512
-performance_schema_setup_actors_size 100
-performance_schema_setup_objects_size 100
-performance_schema_users_size 100
-show status like "%performance_schema%";
-Variable_name Value
-Performance_schema_accounts_lost 0
-Performance_schema_cond_classes_lost 0
-Performance_schema_cond_instances_lost 0
-Performance_schema_digest_lost 0
-Performance_schema_file_classes_lost 0
-Performance_schema_file_handles_lost 0
-Performance_schema_file_instances_lost 0
-Performance_schema_hosts_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_session_connect_attrs_lost 0
-Performance_schema_socket_classes_lost 0
-Performance_schema_socket_instances_lost 0
-Performance_schema_stage_classes_lost 0
-Performance_schema_statement_classes_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
-Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/sizing_low.result b/mysql-test/suite/perfschema/r/sizing_low.result
deleted file mode 100644
index 4569ebd7a5e..00000000000
--- a/mysql-test/suite/perfschema/r/sizing_low.result
+++ /dev/null
@@ -1,70 +0,0 @@
-show variables like "table_definition_cache";
-Variable_name Value
-table_definition_cache 400
-show variables like "table_open_cache";
-Variable_name Value
-table_open_cache 100
-show variables like "max_connections";
-Variable_name Value
-max_connections 50
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
-Variable_name Value
-performance_schema ON
-performance_schema_accounts_size 10
-performance_schema_digests_size 1000
-performance_schema_events_stages_history_long_size 100
-performance_schema_events_stages_history_size 5
-performance_schema_events_statements_history_long_size 100
-performance_schema_events_statements_history_size 5
-performance_schema_events_waits_history_long_size 100
-performance_schema_events_waits_history_size 5
-performance_schema_hosts_size 20
-performance_schema_max_cond_classes 80
-performance_schema_max_cond_instances 612
-performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
-performance_schema_max_file_handles 32768
-performance_schema_max_file_instances 1556
-performance_schema_max_mutex_classes 200
-performance_schema_max_mutex_instances 2945
-performance_schema_max_rwlock_classes 40
-performance_schema_max_rwlock_instances 1612
-performance_schema_max_socket_classes 10
-performance_schema_max_socket_instances 67
-performance_schema_max_stage_classes\t160
-performance_schema_max_table_handles 112
-performance_schema_max_table_instances 445
-performance_schema_max_thread_classes 50
-performance_schema_max_thread_instances 112
-performance_schema_session_connect_attrs_size 512
-performance_schema_setup_actors_size 100
-performance_schema_setup_objects_size 100
-performance_schema_users_size 5
-show status like "%performance_schema%";
-Variable_name Value
-Performance_schema_accounts_lost 0
-Performance_schema_cond_classes_lost 0
-Performance_schema_cond_instances_lost 0
-Performance_schema_digest_lost 0
-Performance_schema_file_classes_lost 0
-Performance_schema_file_handles_lost 0
-Performance_schema_file_instances_lost 0
-Performance_schema_hosts_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_session_connect_attrs_lost 0
-Performance_schema_socket_classes_lost 0
-Performance_schema_socket_instances_lost 0
-Performance_schema_stage_classes_lost 0
-Performance_schema_statement_classes_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
-Performance_schema_users_lost 0
-CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit.");
diff --git a/mysql-test/suite/perfschema/r/sizing_med.result b/mysql-test/suite/perfschema/r/sizing_med.result
deleted file mode 100644
index 24fba02d16b..00000000000
--- a/mysql-test/suite/perfschema/r/sizing_med.result
+++ /dev/null
@@ -1,69 +0,0 @@
-show variables like "table_definition_cache";
-Variable_name Value
-table_definition_cache 401
-show variables like "table_open_cache";
-Variable_name Value
-table_open_cache 401
-show variables like "max_connections";
-Variable_name Value
-max_connections 152
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
-Variable_name Value
-performance_schema ON
-performance_schema_accounts_size 100
-performance_schema_digests_size 5000
-performance_schema_events_stages_history_long_size 1000
-performance_schema_events_stages_history_size 10
-performance_schema_events_statements_history_long_size 1000
-performance_schema_events_statements_history_size 10
-performance_schema_events_waits_history_long_size 1000
-performance_schema_events_waits_history_size 10
-performance_schema_hosts_size 100
-performance_schema_max_cond_classes 80
-performance_schema_max_cond_instances 1079
-performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
-performance_schema_max_file_handles 32768
-performance_schema_max_file_instances 1754
-performance_schema_max_mutex_classes 200
-performance_schema_max_mutex_instances 4230
-performance_schema_max_rwlock_classes 40
-performance_schema_max_rwlock_instances 2222
-performance_schema_max_socket_classes 10
-performance_schema_max_socket_instances 232
-performance_schema_max_stage_classes\t160
-performance_schema_max_table_handles 573
-performance_schema_max_table_instances 556
-performance_schema_max_thread_classes 50
-performance_schema_max_thread_instances 289
-performance_schema_session_connect_attrs_size 512
-performance_schema_setup_actors_size 100
-performance_schema_setup_objects_size 100
-performance_schema_users_size 100
-show status like "%performance_schema%";
-Variable_name Value
-Performance_schema_accounts_lost 0
-Performance_schema_cond_classes_lost 0
-Performance_schema_cond_instances_lost 0
-Performance_schema_digest_lost 0
-Performance_schema_file_classes_lost 0
-Performance_schema_file_handles_lost 0
-Performance_schema_file_instances_lost 0
-Performance_schema_hosts_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_session_connect_attrs_lost 0
-Performance_schema_socket_classes_lost 0
-Performance_schema_socket_instances_lost 0
-Performance_schema_stage_classes_lost 0
-Performance_schema_statement_classes_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
-Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/sizing_off.result b/mysql-test/suite/perfschema/r/sizing_off.result
deleted file mode 100644
index e49a9824f42..00000000000
--- a/mysql-test/suite/perfschema/r/sizing_off.result
+++ /dev/null
@@ -1,60 +0,0 @@
-show variables where
-`Variable_name` != "performance_schema_max_statement_classes" and
-`Variable_name` like "performance_schema%";
-Variable_name Value
-performance_schema OFF
-performance_schema_accounts_size -1
-performance_schema_digests_size -1
-performance_schema_events_stages_history_long_size -1
-performance_schema_events_stages_history_size -1
-performance_schema_events_statements_history_long_size -1
-performance_schema_events_statements_history_size -1
-performance_schema_events_waits_history_long_size -1
-performance_schema_events_waits_history_size -1
-performance_schema_hosts_size -1
-performance_schema_max_cond_classes 80
-performance_schema_max_cond_instances -1
-performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
-performance_schema_max_file_handles 32768
-performance_schema_max_file_instances -1
-performance_schema_max_mutex_classes 200
-performance_schema_max_mutex_instances -1
-performance_schema_max_rwlock_classes 40
-performance_schema_max_rwlock_instances -1
-performance_schema_max_socket_classes 10
-performance_schema_max_socket_instances -1
-performance_schema_max_stage_classes\t160
-performance_schema_max_table_handles -1
-performance_schema_max_table_instances -1
-performance_schema_max_thread_classes 50
-performance_schema_max_thread_instances -1
-performance_schema_session_connect_attrs_size -1
-performance_schema_setup_actors_size 100
-performance_schema_setup_objects_size 100
-performance_schema_users_size -1
-show status like "performance_schema%";
-Variable_name Value
-Performance_schema_accounts_lost 0
-Performance_schema_cond_classes_lost 0
-Performance_schema_cond_instances_lost 0
-Performance_schema_digest_lost 0
-Performance_schema_file_classes_lost 0
-Performance_schema_file_handles_lost 0
-Performance_schema_file_instances_lost 0
-Performance_schema_hosts_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_session_connect_attrs_lost 0
-Performance_schema_socket_classes_lost 0
-Performance_schema_socket_instances_lost 0
-Performance_schema_stage_classes_lost 0
-Performance_schema_statement_classes_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
-Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result
index dec4dc431f5..424d24b1a3e 100644
--- a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result
+++ b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result
@@ -1,4 +1,3 @@
-set global session_track_schema=FALSE;
# The logging of commands and result sets is mostly disabled.
# There are some messages which help to observe the progress of the test.
# In case some check fails
@@ -8,6 +7,8 @@ set global session_track_schema=FALSE;
# - the test might abort
#
# 0. Check, build or set prequisites
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
UPDATE performance_schema.threads
SET INSTRUMENTED='NO' WHERE PROCESSLIST_ID = CONNECTION_ID();
# 1. Basic checks
@@ -208,7 +209,9 @@ connection default;
# server_unix_socket are already checked
# - the stability of results is already checked
# So we con go with the results of the first run.
-# 4.6.1 The SUM_OF_BYTES_WRITE value is the same for all Connects.
+# 4.6.1 The SUM_OF_BYTES_WRITE value depends on length of database
+# since the database name is written in OK packet.
+# Hence the value 2.
# 4.6.2 The SUM_OF_BYTES_WRITE value hast to be > 100.
# 4.6.3 COUNT_READ, COUNT_WRITE and COUNT_MISC have to be to be > 0
# 4.6.4 Checks based on comparison of results for connects
@@ -218,5 +221,6 @@ connection default;
# It must reset all counters.
TRUNCATE TABLE performance_schema.socket_summary_by_instance;
# 6. Cleanup
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
connection default;
-set global session_track_schema=DEFAULT;
diff --git a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result
index 2c5a9e9284f..6215976eab0 100644
--- a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result
+++ b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result
@@ -7,6 +7,8 @@
# - the test might abort
#
# 0. Check, build or set prequisites
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release.
UPDATE performance_schema.threads
SET INSTRUMENTED='NO' WHERE PROCESSLIST_ID = CONNECTION_ID();
# 1. Basic checks
@@ -33,12 +35,30 @@ ERROR 28000: Access denied for user 'boot0123456789'@'localhost' (using password
# 2.5 Connect should pass, host = localhost
# length of user name = 10 character
# length of default db = 9 character
+SET @orig_sql_mode= @@sql_mode;
+SET sql_mode= (SELECT replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+Warnings:
+Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
GRANT ALL PRIVILEGES ON *.* TO 'root012345'@'localhost';
+Warnings:
+Warning 1287 Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement.
+SET sql_mode= @orig_sql_mode;
+Warnings:
+Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
DROP USER 'root012345'@'localhost';
# 2.6 Connect should pass, host = localhost
# length of user name = 14 character
# length of default db = 9 character
+SET @orig_sql_mode= @@sql_mode;
+SET sql_mode= (SELECT replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+Warnings:
+Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
GRANT ALL PRIVILEGES ON *.* to 'root0123456789'@'localhost';
+Warnings:
+Warning 1287 Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement.
+SET sql_mode= @orig_sql_mode;
+Warnings:
+Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
DROP USER 'root0123456789'@'localhost';
# 2.7 Connect should pass, host = my_localhost
# length of user name = 4 character
@@ -196,7 +216,9 @@ col2
# server_unix_socket are already checked
# - the stability of results is already checked
# So we con go with the results of the first run.
-# 4.6.1 The SUM_OF_BYTES_WRITE value is the same for all Connects.
+# 4.6.1 The SUM_OF_BYTES_WRITE value depends on length of database
+# since the database name is written in OK packet.
+# Hence the value 2.
# 4.6.2 The SUM_OF_BYTES_WRITE value hast to be > 100.
# 4.6.3 COUNT_READ, COUNT_WRITE and COUNT_MISC have to be to be > 0
# 4.6.4 Checks based on comparison of results for connects
@@ -206,3 +228,5 @@ col2
# It must reset all counters.
TRUNCATE TABLE performance_schema.socket_summary_by_instance;
# 6. Cleanup
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release.
diff --git a/mysql-test/suite/perfschema/r/stage_mdl_function.result b/mysql-test/suite/perfschema/r/stage_mdl_function.result
index 5f55dd6c28e..87068e6330d 100644
--- a/mysql-test/suite/perfschema/r/stage_mdl_function.result
+++ b/mysql-test/suite/perfschema/r/stage_mdl_function.result
@@ -14,23 +14,13 @@ username event_name sql_text
user1 statement/sql/select select test.f1()
username event_name nesting_event_type
username event_name nesting_event_type
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/End of update loop STATEMENT
-user1 stage/sql/Query end STATEMENT
-user1 stage/sql/Commit STATEMENT
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/Unlocking tables STATEMENT
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/Starting cleanup STATEMENT
-user1 stage/sql/Freeing items STATEMENT
-user1 stage/sql/Reset for next command STATEMENT
call dump_one_thread('user2');
username event_name sql_text
user2 statement/sql/drop_function drop function test.f1
username event_name nesting_event_type
user2 stage/sql/Waiting for stored function metadata lock STATEMENT
username event_name nesting_event_type
-user2 stage/sql/Init STATEMENT
+user2 stage/sql/starting STATEMENT
connection con1;
select f1();
f1()
diff --git a/mysql-test/suite/perfschema/r/stage_mdl_global.result b/mysql-test/suite/perfschema/r/stage_mdl_global.result
index aab68fa7cc7..b9eda506700 100644
--- a/mysql-test/suite/perfschema/r/stage_mdl_global.result
+++ b/mysql-test/suite/perfschema/r/stage_mdl_global.result
@@ -8,12 +8,12 @@ username event_name sql_text
user1 statement/sql/flush flush tables with read lock
username event_name nesting_event_type
username event_name nesting_event_type
-user1 stage/sql/Init STATEMENT
-user1 stage/sql/Init STATEMENT
+user1 stage/sql/starting STATEMENT
+user1 stage/sql/starting STATEMENT
user1 stage/sql/Query end STATEMENT
user1 stage/sql/Commit STATEMENT
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/Commit_implicit STATEMENT
+user1 stage/sql/closing tables STATEMENT
+user1 stage/sql/Commit implicit STATEMENT
user1 stage/sql/Starting cleanup STATEMENT
user1 stage/sql/Freeing items STATEMENT
user1 stage/sql/Reset for next command STATEMENT
@@ -23,8 +23,8 @@ user2 statement/sql/insert insert into test.t1 values (1), (2), (3)
username event_name nesting_event_type
user2 stage/sql/Waiting for backup lock STATEMENT
username event_name nesting_event_type
-user2 stage/sql/Init STATEMENT
-user2 stage/sql/Checking permissions STATEMENT
+user2 stage/sql/starting STATEMENT
+user2 stage/sql/checking permissions STATEMENT
user2 stage/sql/Opening tables STATEMENT
connection con1;
unlock tables;
diff --git a/mysql-test/suite/perfschema/r/stage_mdl_procedure.result b/mysql-test/suite/perfschema/r/stage_mdl_procedure.result
index 6362f725b88..613a20fdd4f 100644
--- a/mysql-test/suite/perfschema/r/stage_mdl_procedure.result
+++ b/mysql-test/suite/perfschema/r/stage_mdl_procedure.result
@@ -21,23 +21,13 @@ username event_name sql_text
user1 statement/sql/select select test.f1()
username event_name nesting_event_type
username event_name nesting_event_type
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/End of update loop STATEMENT
-user1 stage/sql/Query end STATEMENT
-user1 stage/sql/Commit STATEMENT
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/Unlocking tables STATEMENT
-user1 stage/sql/Closing tables STATEMENT
-user1 stage/sql/Starting cleanup STATEMENT
-user1 stage/sql/Freeing items STATEMENT
-user1 stage/sql/Reset for next command STATEMENT
call dump_one_thread('user2');
username event_name sql_text
user2 statement/sql/drop_procedure drop procedure test.p1
username event_name nesting_event_type
user2 stage/sql/Waiting for stored procedure metadata lock STATEMENT
username event_name nesting_event_type
-user2 stage/sql/Init STATEMENT
+user2 stage/sql/starting STATEMENT
connection con1;
select test.f1();
test.f1()
diff --git a/mysql-test/suite/perfschema/r/stage_mdl_table.result b/mysql-test/suite/perfschema/r/stage_mdl_table.result
index c703e910891..5ba0ba04fca 100644
--- a/mysql-test/suite/perfschema/r/stage_mdl_table.result
+++ b/mysql-test/suite/perfschema/r/stage_mdl_table.result
@@ -20,9 +20,9 @@ user1 stage/sql/Sending data STATEMENT
user1 stage/sql/End of update loop STATEMENT
user1 stage/sql/Query end STATEMENT
user1 stage/sql/Commit STATEMENT
-user1 stage/sql/Closing tables STATEMENT
+user1 stage/sql/closing tables STATEMENT
user1 stage/sql/Unlocking tables STATEMENT
-user1 stage/sql/Closing tables STATEMENT
+user1 stage/sql/closing tables STATEMENT
user1 stage/sql/Starting cleanup STATEMENT
user1 stage/sql/Freeing items STATEMENT
user1 stage/sql/Reset for next command STATEMENT
@@ -32,13 +32,13 @@ user2 statement/sql/alter_table alter table test.t1 add column (b int)
username event_name nesting_event_type
user2 stage/sql/Waiting for table metadata lock STATEMENT
username event_name nesting_event_type
-user2 stage/sql/Init STATEMENT
-user2 stage/sql/Checking permissions STATEMENT
-user2 stage/sql/Init for update STATEMENT
+user2 stage/sql/starting STATEMENT
+user2 stage/sql/checking permissions STATEMENT
+user2 stage/sql/init for update STATEMENT
user2 stage/sql/Opening tables STATEMENT
user2 stage/sql/After opening tables STATEMENT
-user2 stage/sql/Setup STATEMENT
-user2 stage/sql/Creating table STATEMENT
+user2 stage/sql/setup STATEMENT
+user2 stage/sql/creating table STATEMENT
user2 stage/sql/After create STATEMENT
connection con1;
commit;
diff --git a/mysql-test/suite/perfschema/r/start_server_disable_idle.result b/mysql-test/suite/perfschema/r/start_server_disable_idle.result
index 294c3a72f58..00baba09fb6 100644
--- a/mysql-test/suite/perfschema/r/start_server_disable_idle.result
+++ b/mysql-test/suite/perfschema/r/start_server_disable_idle.result
@@ -10,15 +10,143 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
select * from performance_schema.setup_instruments
where name like "idle" and enabled='YES';
NAME ENABLED TIMED
diff --git a/mysql-test/suite/perfschema/r/start_server_disable_stages.result b/mysql-test/suite/perfschema/r/start_server_disable_stages.result
index 6ed2234babe..6fe051b3c42 100644
--- a/mysql-test/suite/perfschema/r/start_server_disable_stages.result
+++ b/mysql-test/suite/perfschema/r/start_server_disable_stages.result
@@ -10,15 +10,143 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
select * from performance_schema.setup_instruments
where name like "stage/%" and enabled='YES';
NAME ENABLED TIMED
diff --git a/mysql-test/suite/perfschema/r/start_server_disable_statements.result b/mysql-test/suite/perfschema/r/start_server_disable_statements.result
index f942f2ee570..b582ca072c8 100644
--- a/mysql-test/suite/perfschema/r/start_server_disable_statements.result
+++ b/mysql-test/suite/perfschema/r/start_server_disable_statements.result
@@ -10,15 +10,143 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
select * from performance_schema.setup_instruments
where name like "statement/%" and enabled='YES';
NAME ENABLED TIMED
diff --git a/mysql-test/suite/perfschema/r/start_server_disable_transactions.result b/mysql-test/suite/perfschema/r/start_server_disable_transactions.result
new file mode 100644
index 00000000000..1431f925ae2
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_disable_transactions.result
@@ -0,0 +1,167 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+select * from performance_schema.setup_instruments
+where name in ('transaction') and enabled='YES';
+NAME ENABLED TIMED
+select * from performance_schema.events_transactions_summary_global_by_event_name
+where count_star > 0;
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name
+where count_star > 0;
+THREAD_ID EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
+select * from performance_schema.events_transactions_summary_by_user_by_event_name
+where count_star > 0;
+USER EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
+select * from performance_schema.events_transactions_summary_by_host_by_event_name
+where count_star > 0;
+HOST EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
+select * from performance_schema.events_transactions_summary_by_account_by_event_name
+where count_star > 0;
+USER HOST EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
diff --git a/mysql-test/suite/perfschema/r/start_server_disable_waits.result b/mysql-test/suite/perfschema/r/start_server_disable_waits.result
index fb02ace2ed4..1b9356b34a2 100644
--- a/mysql-test/suite/perfschema/r/start_server_disable_waits.result
+++ b/mysql-test/suite/perfschema/r/start_server_disable_waits.result
@@ -10,15 +10,143 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
select * from performance_schema.setup_instruments
where name like "wait/%" and enabled='YES';
NAME ENABLED TIMED
diff --git a/mysql-test/suite/perfschema/r/start_server_innodb.result b/mysql-test/suite/perfschema/r/start_server_innodb.result
index cf210c0935c..c64e4f8416d 100644
--- a/mysql-test/suite/perfschema/r/start_server_innodb.result
+++ b/mysql-test/suite/perfschema/r/start_server_innodb.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show status like "performance_schema%";
+show global status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -29,9 +157,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -41,6 +175,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result b/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result
new file mode 100644
index 00000000000..3b2553ab92e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result
@@ -0,0 +1,12 @@
+USE performance_schema;
+truncate table events_statements_history_long;
+SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
+74
+####################################
+# QUERYING PS STATEMENT DIGEST
+####################################
+SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long;
+event_name digest digest_text sql_text
+statement/sql/truncate 7b0d115e24864223fc76daf23b302766 TRUNCATE TABLE truncat...
+statement/sql/select 26ffe5453ab8b87b608f9bcd76dc54a3 SELECT ? + ? + SELECT ...
diff --git a/mysql-test/suite/perfschema/r/start_server_low_index.result b/mysql-test/suite/perfschema/r/start_server_low_index.result
new file mode 100644
index 00000000000..9fd9a8a447c
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_low_index.result
@@ -0,0 +1,280 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 34
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+drop table if exists db1.t1;
+drop database if exists db1;
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default',
+unique key uidx(a));
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+3 TABLE db1 t1
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME
+2 TABLE db1 t1 NULL
+1 TABLE db1 t1 uidx
+flush tables;
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+1 TABLE db1 t1
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME
+1 TABLE db1 t1 uidx
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+variable_value > 0
+1
+FLUSH STATUS;
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+variable_value
+0
+create table db1.t2 (a int, b char(10) default 'default',
+unique key uidx(a));
+insert into db1.t1 values('3', 'abc');
+insert into db1.t1 values('4', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+insert into db1.t2 values('1', 'abc');
+insert into db1.t2 values('2', 'abc');
+select * from db1.t2 where a='1';
+a b
+1 abc
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+4 TABLE db1 t1
+3 TABLE db1 t2
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME
+2 TABLE db1 t1 NULL
+2 TABLE db1 t1 uidx
+2 TABLE db1 t2 NULL
+1 TABLE db1 t2 (index 0)
+flush tables;
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+2 TABLE db1 t1
+0 TABLE db1 t2
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME
+2 TABLE db1 t1 uidx
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+variable_value > 0
+1
+FLUSH STATUS;
+update performance_schema.setup_objects set ENABLED='NO' where OBJECT_TYPE='TABLE';
+insert into db1.t1 values('5', 'abc');
+insert into db1.t1 values('6', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+insert into db1.t2 values('3', 'abc');
+insert into db1.t2 values('4', 'abc');
+select * from db1.t2 where a='1';
+a b
+1 abc
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME
+flush tables;
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+from performance_schema.table_io_waits_summary_by_index_usage
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+variable_value
+0
+drop database db1;
+update performance_schema.setup_objects set ENABLED='YES'
+ where OBJECT_TYPE='TABLE' and OBJECT_SCHEMA="%";
diff --git a/mysql-test/suite/perfschema/r/start_server_low_table_lock.result b/mysql-test/suite/perfschema/r/start_server_low_table_lock.result
new file mode 100644
index 00000000000..981fa297971
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_low_table_lock.result
@@ -0,0 +1,237 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 1
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+drop table if exists db1.t1;
+drop database if exists db1;
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default');
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+6 TABLE db1 t1
+flush tables;
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+6 TABLE db1 t1
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+variable_value
+0
+create table db1.t2 (a int, b char(10) default 'default',
+unique key uidx(a));
+insert into db1.t1 values('3', 'abc');
+insert into db1.t1 values('4', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+insert into db1.t2 values('1', 'abc');
+insert into db1.t2 values('2', 'abc');
+select * from db1.t2 where a='1';
+a b
+1 abc
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+12 TABLE db1 t1
+6 TABLE db1 t2
+flush tables;
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+12 TABLE db1 t1
+0 TABLE db1 t2
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+variable_value > 0
+1
+flush status;
+update performance_schema.setup_objects set ENABLED='NO'
+ where OBJECT_TYPE='TABLE' and OBJECT_SCHEMA="%";
+insert into db1.t1 values('5', 'abc');
+insert into db1.t1 values('6', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+insert into db1.t2 values('3', 'abc');
+insert into db1.t2 values('4', 'abc');
+select * from db1.t2 where a='1';
+a b
+1 abc
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+flush tables;
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+COUNT_STAR OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+variable_value
+0
+drop database db1;
+update performance_schema.setup_objects set ENABLED='YES'
+ where OBJECT_TYPE='TABLE' and OBJECT_SCHEMA="%";
diff --git a/mysql-test/suite/perfschema/r/start_server_no_account.result b/mysql-test/suite/perfschema/r/start_server_no_account.result
index c02b75e5c33..4333c6f74d2 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_account.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_account.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 0
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_accounts_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_accounts_size";
Variable_name Value
performance_schema_accounts_size 0
select count(*) from performance_schema.accounts;
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
index a3e16b4be8d..74c4bed9696 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_cond_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 0
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_cond_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_cond_classes";
Variable_name Value
performance_schema_max_cond_classes 0
select count(*) from performance_schema.setup_instruments
@@ -33,6 +161,6 @@ variable_value > 0
select count(*) from performance_schema.cond_instances;
count(*)
0
-show status like "performance_schema_cond_instances_lost";
+show global 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
index bb3d0a24db9..03a7f935317 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result
@@ -10,26 +10,154 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 0
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_cond_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_cond_classes";
Variable_name Value
performance_schema_max_cond_classes 90
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";
+show global status like "performance_schema_cond_classes_lost";
Variable_name Value
Performance_schema_cond_classes_lost 0
-show variables like "performance_schema_max_cond_instances";
+show global variables like "performance_schema_max_cond_instances";
Variable_name Value
performance_schema_max_cond_instances 0
select count(*) from performance_schema.cond_instances;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_digests.result b/mysql-test/suite/perfschema/r/start_server_no_digests.result
index f8301e62a7f..e3072cb2fe7 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_digests.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_digests.result
@@ -112,7 +112,7 @@ DROP TRIGGER trg;
SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_AFFECTED, SUM_WARNINGS,
SUM_ERRORS FROM performance_schema.events_statements_summary_by_digest;
SCHEMA_NAME DIGEST_TEXT COUNT_STAR SUM_ROWS_AFFECTED SUM_WARNINGS SUM_ERRORS
-SHOW VARIABLES LIKE "performance_schema_digests_size";
+SHOW GLOBAL VARIABLES LIKE "performance_schema_digests_size";
Variable_name Value
performance_schema_digests_size 0
SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_digest;
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
index 5e6da344a70..c962a74e0db 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_file_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_file_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 0
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_file_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_file_classes";
Variable_name Value
performance_schema_max_file_classes 0
select count(*) from performance_schema.setup_instruments
@@ -33,6 +161,6 @@ variable_value > 0
select count(*) from performance_schema.file_instances;
count(*)
0
-show status like "performance_schema_file_instances_lost";
+show global 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
index 33dce305ef3..ef80d6e3a2d 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_file_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result
@@ -10,26 +10,154 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 0
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_file_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_file_classes";
Variable_name Value
-performance_schema_max_file_classes 50
+performance_schema_max_file_classes 80
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";
+show global status like "performance_schema_file_classes_lost";
Variable_name Value
Performance_schema_file_classes_lost 0
-show variables like "performance_schema_max_file_instances";
+show global variables like "performance_schema_max_file_instances";
Variable_name Value
performance_schema_max_file_instances 0
select count(*) from performance_schema.file_instances;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_host.result b/mysql-test/suite/perfschema/r/start_server_no_host.result
index a4f362b256f..b58acf57362 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_host.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_host.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 0
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_hosts_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_hosts_size";
Variable_name Value
performance_schema_hosts_size 0
select count(*) from performance_schema.hosts;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_index.result b/mysql-test/suite/perfschema/r/start_server_no_index.result
new file mode 100644
index 00000000000..9e7a2bf34a7
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_index.result
@@ -0,0 +1,185 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 0
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+drop table if exists db1.t1;
+drop database if exists db1;
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default',
+unique key uidx(a));
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+COUNT_STAR
+3
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_index_usage
+where INDEX_NAME!='NULL';
+COUNT_STAR
+1
+FLUSH TABLES;
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_table
+where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+COUNT_STAR
+0
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_index_usage
+where INDEX_NAME!='NULL';
+COUNT_STAR
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+variable_value > 0
+1
+FLUSH STATUS;
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+variable_value
+0
+drop database db1;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_mdl.result b/mysql-test/suite/perfschema/r/start_server_no_mdl.result
new file mode 100644
index 00000000000..886a1ee1633
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_mdl.result
@@ -0,0 +1,161 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 0
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+select count(*) from performance_schema.metadata_locks;
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_METADATA_LOCK_LOST';
+variable_value > 0
+1
+FLUSH STATUS;
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_METADATA_LOCK_LOST';
+variable_value
+0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_memory_class.result b/mysql-test/suite/perfschema/r/start_server_no_memory_class.result
new file mode 100644
index 00000000000..a6605cc5ffb
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_memory_class.result
@@ -0,0 +1,235 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 0
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_memory_classes";
+Variable_name Value
+performance_schema_max_memory_classes 0
+select name from performance_schema.setup_instruments
+where name like "memory/performance_schema/%"
+ order by name;
+name
+memory/performance_schema/accounts
+memory/performance_schema/cond_class
+memory/performance_schema/cond_instances
+memory/performance_schema/events_stages_history
+memory/performance_schema/events_stages_history_long
+memory/performance_schema/events_stages_summary_by_account_by_event_name
+memory/performance_schema/events_stages_summary_by_host_by_event_name
+memory/performance_schema/events_stages_summary_by_thread_by_event_name
+memory/performance_schema/events_stages_summary_by_user_by_event_name
+memory/performance_schema/events_stages_summary_global_by_event_name
+memory/performance_schema/events_statements_current
+memory/performance_schema/events_statements_current.sqltext
+memory/performance_schema/events_statements_current.tokens
+memory/performance_schema/events_statements_history
+memory/performance_schema/events_statements_history.sqltext
+memory/performance_schema/events_statements_history.tokens
+memory/performance_schema/events_statements_history_long
+memory/performance_schema/events_statements_history_long.sqltext
+memory/performance_schema/events_statements_history_long.tokens
+memory/performance_schema/events_statements_summary_by_account_by_event_name
+memory/performance_schema/events_statements_summary_by_digest
+memory/performance_schema/events_statements_summary_by_digest.tokens
+memory/performance_schema/events_statements_summary_by_host_by_event_name
+memory/performance_schema/events_statements_summary_by_program
+memory/performance_schema/events_statements_summary_by_thread_by_event_name
+memory/performance_schema/events_statements_summary_by_user_by_event_name
+memory/performance_schema/events_statements_summary_global_by_event_name
+memory/performance_schema/events_transactions_history
+memory/performance_schema/events_transactions_history_long
+memory/performance_schema/events_transactions_summary_by_account_by_event_name
+memory/performance_schema/events_transactions_summary_by_host_by_event_name
+memory/performance_schema/events_transactions_summary_by_thread_by_event_name
+memory/performance_schema/events_transactions_summary_by_user_by_event_name
+memory/performance_schema/events_waits_history
+memory/performance_schema/events_waits_history_long
+memory/performance_schema/events_waits_summary_by_account_by_event_name
+memory/performance_schema/events_waits_summary_by_host_by_event_name
+memory/performance_schema/events_waits_summary_by_thread_by_event_name
+memory/performance_schema/events_waits_summary_by_user_by_event_name
+memory/performance_schema/file_class
+memory/performance_schema/file_handle
+memory/performance_schema/file_instances
+memory/performance_schema/hosts
+memory/performance_schema/memory_class
+memory/performance_schema/memory_summary_by_account_by_event_name
+memory/performance_schema/memory_summary_by_host_by_event_name
+memory/performance_schema/memory_summary_by_thread_by_event_name
+memory/performance_schema/memory_summary_by_user_by_event_name
+memory/performance_schema/memory_summary_global_by_event_name
+memory/performance_schema/metadata_locks
+memory/performance_schema/mutex_class
+memory/performance_schema/mutex_instances
+memory/performance_schema/prepared_statements_instances
+memory/performance_schema/rwlock_class
+memory/performance_schema/rwlock_instances
+memory/performance_schema/scalable_buffer
+memory/performance_schema/session_connect_attrs
+memory/performance_schema/setup_actors
+memory/performance_schema/setup_objects
+memory/performance_schema/socket_class
+memory/performance_schema/socket_instances
+memory/performance_schema/stage_class
+memory/performance_schema/statement_class
+memory/performance_schema/table_handles
+memory/performance_schema/table_io_waits_summary_by_index_usage
+memory/performance_schema/table_lock_waits_summary_by_table
+memory/performance_schema/table_shares
+memory/performance_schema/threads
+memory/performance_schema/thread_class
+memory/performance_schema/users
+select count(*) from performance_schema.setup_instruments
+where name like "memory/%"
+ and name not like "memory/performance_schema/%";
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_MEMORY_CLASSES_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
index 9fadcc581c7..ae30ac59bdb 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 0
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_mutex_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_mutex_classes";
Variable_name Value
performance_schema_max_mutex_classes 0
select count(*) from performance_schema.setup_instruments
@@ -33,6 +161,6 @@ variable_value > 0
select count(*) from performance_schema.mutex_instances;
count(*)
0
-show status like "performance_schema_mutex_instances_lost";
+show global 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
index c443a4e58db..1f4086500a0 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result
@@ -10,26 +10,154 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 0
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_mutex_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_mutex_classes";
Variable_name Value
-performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_classes 210
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";
+show global status like "performance_schema_mutex_classes_lost";
Variable_name Value
Performance_schema_mutex_classes_lost 0
-show variables like "performance_schema_max_mutex_instances";
+show global variables like "performance_schema_max_mutex_instances";
Variable_name Value
performance_schema_max_mutex_instances 0
select count(*) from performance_schema.mutex_instances;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result b/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result
new file mode 100644
index 00000000000..32356175e82
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result
@@ -0,0 +1,212 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 0
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+CREATE DATABASE db;
+USE db;
+show global variables like "performance_schema_max_prepared_statements_instances";
+Variable_name Value
+performance_schema_max_prepared_statements_instances 0
+select count(*) from performance_schema.prepared_statements_instances;
+count(*)
+0
+truncate table performance_schema.prepared_statements_instances;
+CREATE TABLE t1 (a INT NOT NULL);
+INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
+PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
+SET @table = 't1';
+SET @s = CONCAT('SELECT * FROM ', @table);
+PREPARE st2 FROM @s;
+PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?';
+PREPARE st4 FROM
+'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
+show global status like "%performance_schema_prepared_statements_lost%";
+Variable_name Value
+Performance_schema_prepared_statements_lost 4
+SET @a = 3;
+SET @b = 4;
+EXECUTE st1 USING @a, @b;
+hypotenuse
+5
+EXECUTE st2;
+a
+4
+8
+11
+32
+80
+SET @c=3;
+EXECUTE st3 using @c;
+EXECUTE st4;
+a
+4
+8
+11
+14
+18
+21
+32
+42
+80
+90
+show global status like "%performance_schema_prepared_statements_lost%";
+Variable_name Value
+Performance_schema_prepared_statements_lost 4
+DEALLOCATE PREPARE st1;
+DEALLOCATE PREPARE st2;
+DEALLOCATE PREPARE st3;
+DEALLOCATE PREPARE st4;
+DROP TABLE t1;
+show global status like "%performance_schema_prepared_statements_lost%";
+Variable_name Value
+Performance_schema_prepared_statements_lost 4
+flush status;
+show global status like "%performance_schema_prepared_statements_lost%";
+Variable_name Value
+Performance_schema_prepared_statements_lost 0
+DROP DATABASE db;
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
index c3939ced060..75ebff83745 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 0
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_rwlock_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_rwlock_classes";
Variable_name Value
performance_schema_max_rwlock_classes 0
select count(*) from performance_schema.setup_instruments
@@ -33,6 +161,6 @@ variable_value > 0
select count(*) from performance_schema.rwlock_instances;
count(*)
0
-show status like "performance_schema_rwlock_instances_lost";
+show global 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
index 7892c6ba753..d7ebfb33d5b 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result
@@ -10,26 +10,154 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 0
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_rwlock_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_rwlock_classes";
Variable_name Value
-performance_schema_max_rwlock_classes 40
+performance_schema_max_rwlock_classes 50
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";
+show global status like "performance_schema_rwlock_classes_lost";
Variable_name Value
Performance_schema_rwlock_classes_lost 0
-show variables like "performance_schema_max_rwlock_instances";
+show global variables like "performance_schema_max_rwlock_instances";
Variable_name Value
performance_schema_max_rwlock_instances 0
select count(*) from performance_schema.rwlock_instances;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result b/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result
index 24b0ee16685..b4b79d02b32 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 0
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_setup_actors_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_setup_actors_size";
Variable_name Value
performance_schema_setup_actors_size 0
select count(*) from performance_schema.setup_actors;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result b/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result
index 630284c69be..aef0eb7c14d 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 0
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_setup_objects_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_setup_objects_size";
Variable_name Value
performance_schema_setup_objects_size 0
select count(*) from performance_schema.setup_objects;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_socket_class.result b/mysql-test/suite/perfschema/r/start_server_no_socket_class.result
index 45e353a1372..4695c03dc34 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_socket_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_socket_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 0
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_socket_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_socket_classes";
Variable_name Value
performance_schema_max_socket_classes 0
select count(*) from performance_schema.setup_instruments
@@ -33,6 +161,6 @@ variable_value > 0
select count(*) from performance_schema.socket_instances;
count(*)
0
-show status like "performance_schema_socket_instances_lost";
+show global status like "performance_schema_socket_instances_lost";
Variable_name Value
Performance_schema_socket_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result b/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result
index 0c78ec66db9..45f668bd668 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result
@@ -10,26 +10,154 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 0
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_socket_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_socket_classes";
Variable_name Value
performance_schema_max_socket_classes 10
select count(*) > 0 from performance_schema.setup_instruments
where name like "wait/io/socket/%";
count(*) > 0
1
-show status like "performance_schema_socket_classes_lost";
+show global status like "performance_schema_socket_classes_lost";
Variable_name Value
Performance_schema_socket_classes_lost 0
-show variables like "performance_schema_max_socket_instances";
+show global variables like "performance_schema_max_socket_instances";
Variable_name Value
performance_schema_max_socket_instances 0
select count(*) from performance_schema.socket_instances;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_stage_class.result b/mysql-test/suite/perfschema/r/start_server_no_stage_class.result
index f3e95c3ac7b..cccc88ea078 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_stage_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_stage_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 0
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_stage_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_stage_classes";
Variable_name Value
performance_schema_max_stage_classes 0
select count(*) from performance_schema.setup_instruments
diff --git a/mysql-test/suite/perfschema/r/start_server_no_stages_history.result b/mysql-test/suite/perfschema/r/start_server_no_stages_history.result
index 2e5005323dd..3631b3e401f 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_stages_history.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_stages_history.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 0
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_events_stages_history_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_stages_history_size";
Variable_name Value
performance_schema_events_stages_history_size 0
select count(*) from performance_schema.events_stages_history;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result
index cb29a5812fc..bb17a80d853 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 0
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_events_stages_history_long_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_stages_history_long_size";
Variable_name Value
performance_schema_events_stages_history_long_size 0
select count(*) from performance_schema.events_stages_history_long;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_statement_class.result b/mysql-test/suite/perfschema/r/start_server_no_statement_class.result
index d62b4ba1daa..61cf11f2238 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_statement_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_statement_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 0
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_statement_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_statement_classes";
Variable_name Value
performance_schema_max_statement_classes 0
select count(*) from performance_schema.setup_instruments
diff --git a/mysql-test/suite/perfschema/r/start_server_no_statements_history.result b/mysql-test/suite/perfschema/r/start_server_no_statements_history.result
index ed4b2870e6d..94811c40c53 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_statements_history.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_statements_history.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 0
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_events_statements_history_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_statements_history_size";
Variable_name Value
performance_schema_events_statements_history_size 0
select count(*) from performance_schema.events_statements_history;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result
index a48d5fa9339..4d61bf58fca 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 0
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_events_statements_history_long_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_statements_history_long_size";
Variable_name Value
performance_schema_events_statements_history_long_size 0
select count(*) from performance_schema.events_statements_history_long;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result b/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result
index 5bc38231122..49b59cbc48c 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result
@@ -10,19 +10,147 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 0
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_table_instances";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_table_instances";
Variable_name Value
performance_schema_max_table_instances 500
-show variables like "performance_schema_max_table_handles";
+show global variables like "performance_schema_max_table_handles";
Variable_name Value
performance_schema_max_table_handles 0
drop table if exists test.instrument_me;
@@ -34,7 +162,7 @@ a
2
3
drop table test.instrument_me;
-show variables like "performance_schema_max_table_instances";
+show global variables like "performance_schema_max_table_instances";
Variable_name Value
performance_schema_max_table_instances 500
select variable_value > 0 from information_schema.global_status
diff --git a/mysql-test/suite/perfschema/r/start_server_no_table_inst.result b/mysql-test/suite/perfschema/r/start_server_no_table_inst.result
index def59b8b54b..17a10cf715e 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_table_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_table_inst.result
@@ -10,19 +10,147 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 0
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 0
+performance_schema_max_table_lock_stat 0
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_table_instances";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_table_instances";
Variable_name Value
performance_schema_max_table_instances 0
-show variables like "performance_schema_max_table_handles";
+show global variables like "performance_schema_max_table_handles";
Variable_name Value
performance_schema_max_table_handles 1000
drop table if exists test.instrument_me;
@@ -38,6 +166,6 @@ select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_TABLE_INSTANCES_LOST';
variable_value > 0
1
-show status like "performance_schema_table_handles_lost";
+show global status like "performance_schema_table_handles_lost";
Variable_name Value
Performance_schema_table_handles_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_table_lock.result b/mysql-test/suite/perfschema/r/start_server_no_table_lock.result
new file mode 100644
index 00000000000..a93f900f650
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_table_lock.result
@@ -0,0 +1,177 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 0
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+drop table if exists db1.t1;
+drop database if exists db1;
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default');
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+a b
+1 abc
+select COUNT_STAR from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+COUNT_STAR
+6
+FLUSH TABLES;
+select COUNT_STAR from performance_schema.table_lock_waits_summary_by_table
+where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+COUNT_STAR
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+variable_value > 0
+1
+FLUSH STATUS;
+select variable_value from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+variable_value
+0
+drop database db1;
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
index 16952409b56..051c81dd12f 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_thread_class.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 0
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_thread_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_thread_classes";
Variable_name Value
performance_schema_max_thread_classes 0
select count(*) from performance_schema.setup_instruments
@@ -33,6 +161,6 @@ variable_value > 0
select count(*) from performance_schema.threads;
count(*)
0
-show status like "performance_schema_thread_instances_lost";
+show global 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
index e3ccd3f91e6..abedd06c0d9 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result
@@ -10,22 +10,150 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 0
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_max_thread_classes";
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_thread_classes";
Variable_name Value
performance_schema_max_thread_classes 50
-show status like "performance_schema_thread_classes_lost";
+show global status like "performance_schema_thread_classes_lost";
Variable_name Value
Performance_schema_thread_classes_lost 0
-show variables like "performance_schema_max_thread_instances";
+show global variables like "performance_schema_max_thread_instances";
Variable_name Value
performance_schema_max_thread_instances 0
select count(*) from performance_schema.threads;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result b/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result
new file mode 100644
index 00000000000..1d5597f554b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result
@@ -0,0 +1,156 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 0
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_transactions_history_size";
+Variable_name Value
+performance_schema_events_transactions_history_size 0
+select count(*) from performance_schema.events_transactions_history;
+count(*)
+0
+truncate table performance_schema.events_transactions_history;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result
new file mode 100644
index 00000000000..99e170c9bb1
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result
@@ -0,0 +1,156 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 0
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_transactions_history_long_size";
+Variable_name Value
+performance_schema_events_transactions_history_long_size 0
+select count(*) from performance_schema.events_transactions_history_long;
+count(*)
+0
+truncate table performance_schema.events_transactions_history_long;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_user.result b/mysql-test/suite/perfschema/r/start_server_no_user.result
index 7f006d6b47a..46aaa06bf65 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_user.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_user.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 0
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_users_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_users_size";
Variable_name Value
performance_schema_users_size 0
select count(*) from performance_schema.users;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_waits_history.result b/mysql-test/suite/perfschema/r/start_server_no_waits_history.result
index 27122723030..1b717b9f768 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_waits_history.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_waits_history.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 0
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_events_waits_history_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_waits_history_size";
Variable_name Value
performance_schema_events_waits_history_size 0
select count(*) from performance_schema.events_waits_history;
diff --git a/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result
index 16ee8a30343..5691b0e7826 100644
--- a/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result
+++ b/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 0
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema_events_waits_history_long_size";
+show global status like "performance_schema%";
+show global variables like "performance_schema_events_waits_history_long_size";
Variable_name Value
performance_schema_events_waits_history_long_size 0
select count(*) from performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/start_server_nothing.result b/mysql-test/suite/perfschema/r/start_server_nothing.result
index 2aa5658f98c..5dcda26313a 100644
--- a/mysql-test/suite/perfschema/r/start_server_nothing.result
+++ b/mysql-test/suite/perfschema/r/start_server_nothing.result
@@ -10,24 +10,154 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
-0
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 0
+performance_schema_digests_size 0
+performance_schema_events_stages_history_long_size 0
+performance_schema_events_stages_history_size 0
+performance_schema_events_statements_history_long_size 0
+performance_schema_events_statements_history_size 0
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 0
+performance_schema_events_waits_history_size 0
+performance_schema_hosts_size 0
+performance_schema_max_cond_classes 0
+performance_schema_max_cond_instances 0
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 0
+performance_schema_max_file_handles 0
+performance_schema_max_file_instances 0
+performance_schema_max_index_stat 0
+performance_schema_max_memory_classes 0
+performance_schema_max_metadata_locks 0
+performance_schema_max_mutex_classes 0
+performance_schema_max_mutex_instances 0
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 0
+performance_schema_max_rwlock_classes 0
+performance_schema_max_rwlock_instances 0
+performance_schema_max_socket_classes 0
+performance_schema_max_socket_instances 0
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 0
+performance_schema_max_statement_classes 0
+performance_schema_max_statement_stack 1
+performance_schema_max_table_handles 0
+performance_schema_max_table_instances 0
+performance_schema_max_table_lock_stat 0
+performance_schema_max_thread_classes 0
+performance_schema_max_thread_instances 0
+performance_schema_session_connect_attrs_size 0
+performance_schema_setup_actors_size 0
+performance_schema_setup_objects_size 0
+performance_schema_users_size 0
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show variables like "performance_schema%";
+show global status like "performance_schema%";
+show global variables like "performance_schema%";
Variable_name Value
performance_schema ON
performance_schema_accounts_size 0
-performance_schema_digests_size 200
+performance_schema_digests_size 0
performance_schema_events_stages_history_long_size 0
performance_schema_events_stages_history_size 0
performance_schema_events_statements_history_long_size 0
performance_schema_events_statements_history_size 0
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
performance_schema_events_waits_history_long_size 0
performance_schema_events_waits_history_size 0
performance_schema_hosts_size 0
@@ -37,27 +167,108 @@ performance_schema_max_digest_length 1024
performance_schema_max_file_classes 0
performance_schema_max_file_handles 0
performance_schema_max_file_instances 0
+performance_schema_max_index_stat 0
+performance_schema_max_memory_classes 0
+performance_schema_max_metadata_locks 0
performance_schema_max_mutex_classes 0
performance_schema_max_mutex_instances 0
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 0
performance_schema_max_rwlock_classes 0
performance_schema_max_rwlock_instances 0
performance_schema_max_socket_classes 0
performance_schema_max_socket_instances 0
+performance_schema_max_sql_text_length 1024
performance_schema_max_stage_classes 0
performance_schema_max_statement_classes 0
+performance_schema_max_statement_stack 1
performance_schema_max_table_handles 0
performance_schema_max_table_instances 0
+performance_schema_max_table_lock_stat 0
performance_schema_max_thread_classes 0
performance_schema_max_thread_instances 0
performance_schema_session_connect_attrs_size 0
performance_schema_setup_actors_size 0
performance_schema_setup_objects_size 0
performance_schema_users_size 0
-select * from performance_schema.setup_instruments;
+select * from performance_schema.setup_instruments
+order by name;
NAME ENABLED TIMED
+idle YES YES
+memory/performance_schema/accounts YES NO
+memory/performance_schema/cond_class YES NO
+memory/performance_schema/cond_instances YES NO
+memory/performance_schema/events_stages_history YES NO
+memory/performance_schema/events_stages_history_long YES NO
+memory/performance_schema/events_stages_summary_by_account_by_event_name YES NO
+memory/performance_schema/events_stages_summary_by_host_by_event_name YES NO
+memory/performance_schema/events_stages_summary_by_thread_by_event_name YES NO
+memory/performance_schema/events_stages_summary_by_user_by_event_name YES NO
+memory/performance_schema/events_stages_summary_global_by_event_name YES NO
+memory/performance_schema/events_statements_current YES NO
+memory/performance_schema/events_statements_current.sqltext YES NO
+memory/performance_schema/events_statements_current.tokens YES NO
+memory/performance_schema/events_statements_history YES NO
+memory/performance_schema/events_statements_history.sqltext YES NO
+memory/performance_schema/events_statements_history.tokens YES NO
+memory/performance_schema/events_statements_history_long YES NO
+memory/performance_schema/events_statements_history_long.sqltext YES NO
+memory/performance_schema/events_statements_history_long.tokens YES NO
+memory/performance_schema/events_statements_summary_by_account_by_event_name YES NO
+memory/performance_schema/events_statements_summary_by_digest YES NO
+memory/performance_schema/events_statements_summary_by_digest.tokens YES NO
+memory/performance_schema/events_statements_summary_by_host_by_event_name YES NO
+memory/performance_schema/events_statements_summary_by_program YES NO
+memory/performance_schema/events_statements_summary_by_thread_by_event_name YES NO
+memory/performance_schema/events_statements_summary_by_user_by_event_name YES NO
+memory/performance_schema/events_statements_summary_global_by_event_name YES NO
+memory/performance_schema/events_transactions_history YES NO
+memory/performance_schema/events_transactions_history_long YES NO
+memory/performance_schema/events_transactions_summary_by_account_by_event_name YES NO
+memory/performance_schema/events_transactions_summary_by_host_by_event_name YES NO
+memory/performance_schema/events_transactions_summary_by_thread_by_event_name YES NO
+memory/performance_schema/events_transactions_summary_by_user_by_event_name YES NO
+memory/performance_schema/events_waits_history YES NO
+memory/performance_schema/events_waits_history_long YES NO
+memory/performance_schema/events_waits_summary_by_account_by_event_name YES NO
+memory/performance_schema/events_waits_summary_by_host_by_event_name YES NO
+memory/performance_schema/events_waits_summary_by_thread_by_event_name YES NO
+memory/performance_schema/events_waits_summary_by_user_by_event_name YES NO
+memory/performance_schema/file_class YES NO
+memory/performance_schema/file_handle YES NO
+memory/performance_schema/file_instances YES NO
+memory/performance_schema/hosts YES NO
+memory/performance_schema/memory_class YES NO
+memory/performance_schema/memory_summary_by_account_by_event_name YES NO
+memory/performance_schema/memory_summary_by_host_by_event_name YES NO
+memory/performance_schema/memory_summary_by_thread_by_event_name YES NO
+memory/performance_schema/memory_summary_by_user_by_event_name YES NO
+memory/performance_schema/memory_summary_global_by_event_name YES NO
+memory/performance_schema/metadata_locks YES NO
+memory/performance_schema/mutex_class YES NO
+memory/performance_schema/mutex_instances YES NO
+memory/performance_schema/prepared_statements_instances YES NO
+memory/performance_schema/rwlock_class YES NO
+memory/performance_schema/rwlock_instances YES NO
+memory/performance_schema/scalable_buffer YES NO
+memory/performance_schema/session_connect_attrs YES NO
+memory/performance_schema/setup_actors YES NO
+memory/performance_schema/setup_objects YES NO
+memory/performance_schema/socket_class YES NO
+memory/performance_schema/socket_instances YES NO
+memory/performance_schema/stage_class YES NO
+memory/performance_schema/statement_class YES NO
+memory/performance_schema/table_handles YES NO
+memory/performance_schema/table_io_waits_summary_by_index_usage YES NO
+memory/performance_schema/table_lock_waits_summary_by_table YES NO
+memory/performance_schema/table_shares YES NO
+memory/performance_schema/threads YES NO
+memory/performance_schema/thread_class YES NO
+memory/performance_schema/users YES NO
+transaction YES YES
wait/io/table/sql/handler YES YES
+wait/lock/metadata/sql/mdl YES YES
wait/lock/table/sql/handler YES YES
-idle YES YES
select TIMER_NAME from performance_schema.performance_timers;
TIMER_NAME
CYCLE
@@ -73,6 +284,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -85,16 +299,19 @@ idle
wait
stage
statement
+transaction
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
select * from performance_schema.accounts;
USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
select * from performance_schema.cond_instances;
NAME OBJECT_INSTANCE_BEGIN
select * from performance_schema.events_stages_current;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT WORK_COMPLETED WORK_ESTIMATED NESTING_EVENT_ID NESTING_EVENT_TYPE
select * from performance_schema.events_stages_history;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT WORK_COMPLETED WORK_ESTIMATED NESTING_EVENT_ID NESTING_EVENT_TYPE
select * from performance_schema.events_stages_history_long;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT WORK_COMPLETED WORK_ESTIMATED NESTING_EVENT_ID NESTING_EVENT_TYPE
select * from performance_schema.events_stages_summary_by_account_by_event_name;
USER HOST EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
select * from performance_schema.events_stages_summary_by_host_by_event_name;
@@ -106,11 +323,11 @@ USER EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIME
select * from performance_schema.events_stages_summary_global_by_event_name;
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
select * from performance_schema.events_statements_current;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
select * from performance_schema.events_statements_history;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
select * from performance_schema.events_statements_history_long;
-THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT LOCK_TIME SQL_TEXT DIGEST DIGEST_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN MYSQL_ERRNO RETURNED_SQLSTATE MESSAGE_TEXT ERRORS WARNINGS ROWS_AFFECTED ROWS_SENT ROWS_EXAMINED CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES SELECT_FULL_JOIN SELECT_FULL_RANGE_JOIN SELECT_RANGE SELECT_RANGE_CHECK SELECT_SCAN SORT_MERGE_PASSES SORT_RANGE SORT_ROWS SORT_SCAN NO_INDEX_USED NO_GOOD_INDEX_USED NESTING_EVENT_ID NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
select * from performance_schema.events_statements_summary_by_account_by_event_name;
USER HOST EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT SUM_LOCK_TIME SUM_ERRORS SUM_WARNINGS SUM_ROWS_AFFECTED SUM_ROWS_SENT SUM_ROWS_EXAMINED SUM_CREATED_TMP_DISK_TABLES SUM_CREATED_TMP_TABLES SUM_SELECT_FULL_JOIN SUM_SELECT_FULL_RANGE_JOIN SUM_SELECT_RANGE SUM_SELECT_RANGE_CHECK SUM_SELECT_SCAN SUM_SORT_MERGE_PASSES SUM_SORT_RANGE SUM_SORT_ROWS SUM_SORT_SCAN SUM_NO_INDEX_USED SUM_NO_GOOD_INDEX_USED
select * from performance_schema.events_statements_summary_by_host_by_event_name;
@@ -142,35 +359,40 @@ EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAI
wait/io/table/sql/handler 0 0 0 0 0
wait/lock/table/sql/handler 0 0 0 0 0
idle 0 0 0 0 0
+wait/lock/metadata/sql/mdl 0 0 0 0 0
select * from performance_schema.file_instances;
FILE_NAME EVENT_NAME OPEN_COUNT
select * from performance_schema.file_summary_by_event_name;
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
select * from performance_schema.file_summary_by_instance;
FILE_NAME EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
-select * from performance_schema.session_account_connect_attrs;
-PROCESSLIST_ID ATTR_NAME ATTR_VALUE ORDINAL_POSITION
-select * from performance_schema.session_connect_attrs;
-PROCESSLIST_ID ATTR_NAME ATTR_VALUE ORDINAL_POSITION
-select * from performance_schema.socket_instances;
-EVENT_NAME OBJECT_INSTANCE_BEGIN THREAD_ID SOCKET_ID IP PORT STATE
-select * from performance_schema.socket_summary_by_instance;
-EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
-select * from performance_schema.socket_summary_by_event_name;
-EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
select * from performance_schema.hosts;
HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS
+select * from performance_schema.metadata_locks;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN LOCK_TYPE LOCK_DURATION LOCK_STATUS SOURCE OWNER_THREAD_ID OWNER_EVENT_ID
select * from performance_schema.mutex_instances;
NAME OBJECT_INSTANCE_BEGIN LOCKED_BY_THREAD_ID
select * from performance_schema.objects_summary_global_by_type;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
select * from performance_schema.rwlock_instances;
NAME OBJECT_INSTANCE_BEGIN WRITE_LOCKED_BY_THREAD_ID READ_LOCKED_BY_COUNT
+select * from performance_schema.session_account_connect_attrs;
+PROCESSLIST_ID ATTR_NAME ATTR_VALUE ORDINAL_POSITION
+select * from performance_schema.session_connect_attrs;
+PROCESSLIST_ID ATTR_NAME ATTR_VALUE ORDINAL_POSITION
select * from performance_schema.setup_actors;
-HOST USER ROLE
+HOST USER ROLE ENABLED HISTORY
select * from performance_schema.setup_objects;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
+select * from performance_schema.socket_instances;
+EVENT_NAME OBJECT_INSTANCE_BEGIN THREAD_ID SOCKET_ID IP PORT STATE
+select * from performance_schema.socket_summary_by_event_name;
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
+select * from performance_schema.socket_summary_by_instance;
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ SUM_TIMER_READ MIN_TIMER_READ AVG_TIMER_READ MAX_TIMER_READ SUM_NUMBER_OF_BYTES_READ COUNT_WRITE SUM_TIMER_WRITE MIN_TIMER_WRITE AVG_TIMER_WRITE MAX_TIMER_WRITE SUM_NUMBER_OF_BYTES_WRITE COUNT_MISC SUM_TIMER_MISC MIN_TIMER_MISC AVG_TIMER_MISC MAX_TIMER_MISC
+select * from performance_schema.table_handles;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_INSTANCE_BEGIN OWNER_THREAD_ID OWNER_EVENT_ID INTERNAL_LOCK EXTERNAL_LOCK
select * from performance_schema.threads;
-THREAD_ID NAME TYPE PROCESSLIST_ID PROCESSLIST_USER PROCESSLIST_HOST PROCESSLIST_DB PROCESSLIST_COMMAND PROCESSLIST_TIME PROCESSLIST_STATE PROCESSLIST_INFO PARENT_THREAD_ID ROLE INSTRUMENTED
+THREAD_ID NAME TYPE PROCESSLIST_ID PROCESSLIST_USER PROCESSLIST_HOST PROCESSLIST_DB PROCESSLIST_COMMAND PROCESSLIST_TIME PROCESSLIST_STATE PROCESSLIST_INFO PARENT_THREAD_ID ROLE INSTRUMENTED HISTORY CONNECTION_TYPE THREAD_OS_ID
select * from performance_schema.users;
USER CURRENT_CONNECTIONS TOTAL_CONNECTIONS
diff --git a/mysql-test/suite/perfschema/r/start_server_off.result b/mysql-test/suite/perfschema/r/start_server_off.result
index 8c8b8a3a7bb..06af389a857 100644
--- a/mysql-test/suite/perfschema/r/start_server_off.result
+++ b/mysql-test/suite/perfschema/r/start_server_off.result
@@ -11,14 +11,146 @@ count(*)
select count(*) from performance_schema.setup_consumers;
count(*)
0
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
0
select count(*) from performance_schema.setup_timers;
count(*)
0
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema OFF
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
+select * from information_schema.engines
+where engine = "PERFORMANCE_SCHEMA";
+ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
+PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
show status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
@@ -29,9 +161,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -41,6 +179,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
@@ -52,21 +191,23 @@ NAME ENABLED
select * from performance_schema.setup_instruments;
NAME ENABLED TIMED
select * from performance_schema.setup_actors;
-HOST USER ROLE
+HOST USER ROLE ENABLED HISTORY
select * from performance_schema.setup_objects;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
select * from performance_schema.setup_timers;
NAME TIMER_NAME
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
insert into performance_schema.setup_objects values ('TABLE', 'myschema', 'myobject', 'YES', 'YES');
ERROR HY000: Invalid performance_schema usage
-insert into performance_schema.setup_actors values ('myhost', 'mysuser', 'myrole');
+insert into performance_schema.setup_actors values ('myhost', 'mysuser', 'myrole', 'YES', 'YES');
ERROR HY000: Invalid performance_schema usage
select * from performance_schema.setup_objects;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
update performance_schema.setup_objects set OBJECT_NAME = 'myobject';
delete from performance_schema.setup_objects;
select * from performance_schema.setup_actors;
-HOST USER ROLE
+HOST USER ROLE ENABLED HISTORY
update performance_schema.setup_actors set HOST = 'myhost';
delete from performance_schema.setup_actors;
truncate performance_schema.events_stages_history_long;
@@ -74,3 +215,67 @@ truncate performance_schema.events_statements_history_long;
truncate performance_schema.events_waits_history_long;
truncate performance_schema.setup_objects;
truncate performance_schema.setup_actors;
+show global status like "performance_schema%";
+Variable_name Value
+Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
+Performance_schema_cond_instances_lost 0
+Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
+Performance_schema_file_handles_lost 0
+Performance_schema_file_instances_lost 0
+Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
+Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
+Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
+Performance_schema_rwlock_instances_lost 0
+Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
+Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
+Performance_schema_table_handles_lost 0
+Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
+Performance_schema_thread_instances_lost 0
+Performance_schema_users_lost 0
+show session status like "performance_schema%";
+Variable_name Value
+Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
+Performance_schema_cond_instances_lost 0
+Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
+Performance_schema_file_handles_lost 0
+Performance_schema_file_instances_lost 0
+Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
+Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
+Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
+Performance_schema_rwlock_instances_lost 0
+Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
+Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
+Performance_schema_table_handles_lost 0
+Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
+Performance_schema_thread_instances_lost 0
+Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_on.result b/mysql-test/suite/perfschema/r/start_server_on.result
index cf210c0935c..c64e4f8416d 100644
--- a/mysql-test/suite/perfschema/r/start_server_on.result
+++ b/mysql-test/suite/perfschema/r/start_server_on.result
@@ -10,16 +10,144 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
-show status like "performance_schema%";
+show global status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -29,9 +157,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -41,6 +175,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_variables.result b/mysql-test/suite/perfschema/r/start_server_variables.result
index 6199fb94f92..6ed93360d9b 100644
--- a/mysql-test/suite/perfschema/r/start_server_variables.result
+++ b/mysql-test/suite/perfschema/r/start_server_variables.result
@@ -10,15 +10,143 @@ count(*)
5
select count(*) from performance_schema.setup_consumers;
count(*)
-12
-select count(*) > 3 from performance_schema.setup_instruments;
-count(*) > 3
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
1
select count(*) from performance_schema.setup_timers;
count(*)
-4
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 10
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
show engine PERFORMANCE_SCHEMA status;
-show status like "performance_schema%";
+show global status like "performance_schema%";
show variables where
`Variable_name` != "performance_schema_max_statement_classes" and
`Variable_name` like "performance_schema%";
@@ -30,24 +158,34 @@ performance_schema_events_stages_history_long_size 1000
performance_schema_events_stages_history_size 10
performance_schema_events_statements_history_long_size 1000
performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
performance_schema_events_waits_history_long_size 10000
performance_schema_events_waits_history_size 10
performance_schema_hosts_size 100
performance_schema_max_cond_classes 90
performance_schema_max_cond_instances 1000
performance_schema_max_digest_length 1024
-performance_schema_max_file_classes 50
+performance_schema_max_file_classes 80
performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000
-performance_schema_max_mutex_classes 200
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
performance_schema_max_mutex_instances 5000
-performance_schema_max_rwlock_classes 40
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 5000
+performance_schema_max_rwlock_classes 50
performance_schema_max_rwlock_instances 5000
performance_schema_max_socket_classes 10
performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
performance_schema_max_stage_classes 160
+performance_schema_max_statement_stack 10
performance_schema_max_table_handles 1000
performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 200
performance_schema_session_connect_attrs_size 2048
diff --git a/mysql-test/suite/perfschema/r/start_server_zero_digest_sql_length.result b/mysql-test/suite/perfschema/r/start_server_zero_digest_sql_length.result
new file mode 100644
index 00000000000..c21d16fca0b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_zero_digest_sql_length.result
@@ -0,0 +1,12 @@
+USE performance_schema;
+truncate table events_statements_history_long;
+SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
+74
+####################################
+# QUERYING PS STATEMENT DIGEST
+####################################
+SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long;
+event_name digest digest_text sql_text
+statement/sql/truncate NULL NULL NULL
+statement/sql/select NULL NULL NULL
diff --git a/mysql-test/suite/perfschema/r/statement_digest.result b/mysql-test/suite/perfschema/r/statement_digest.result
index ba2e5069c9a..1dec89e8120 100644
--- a/mysql-test/suite/perfschema/r/statement_digest.result
+++ b/mysql-test/suite/perfschema/r/statement_digest.result
@@ -1,3 +1,4 @@
+SET sql_mode='NO_ENGINE_SUBSTITUTION';
####################################
# SETUP
####################################
@@ -159,3 +160,4 @@ DROP TABLE IF EXISTS t6;
DROP TABLE IF EXISTS t11;
DROP TABLE IF EXISTS t12;
DROP DATABASE IF EXISTS statements_digest;
+SET sql_mode=default;
diff --git a/mysql-test/suite/perfschema/r/statement_digest_consumers.result b/mysql-test/suite/perfschema/r/statement_digest_consumers.result
index 140c26f4edd..9722c371ecf 100644
--- a/mysql-test/suite/perfschema/r/statement_digest_consumers.result
+++ b/mysql-test/suite/perfschema/r/statement_digest_consumers.result
@@ -19,6 +19,9 @@ events_stages_history_long YES
events_statements_current NO
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
diff --git a/mysql-test/suite/perfschema/r/statement_digest_consumers2.result b/mysql-test/suite/perfschema/r/statement_digest_consumers2.result
index 54eba51c1ed..b59c4f06808 100644
--- a/mysql-test/suite/perfschema/r/statement_digest_consumers2.result
+++ b/mysql-test/suite/perfschema/r/statement_digest_consumers2.result
@@ -19,6 +19,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
diff --git a/mysql-test/suite/perfschema/r/statement_digest_long_query.result b/mysql-test/suite/perfschema/r/statement_digest_long_query.result
index 1c581085eef..0ac1b5eb3b2 100644
--- a/mysql-test/suite/perfschema/r/statement_digest_long_query.result
+++ b/mysql-test/suite/perfschema/r/statement_digest_long_query.result
@@ -1,8 +1,8 @@
USE performance_schema;
truncate table events_statements_summary_by_digest;
-SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
+SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
-511
+594
####################################
# QUERYING PS STATEMENT DIGEST
####################################
diff --git a/mysql-test/suite/perfschema/r/statement_program_concurrency.result b/mysql-test/suite/perfschema/r/statement_program_concurrency.result
new file mode 100644
index 00000000000..5635ae6ceea
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/statement_program_concurrency.result
@@ -0,0 +1,117 @@
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history;
+# concurrency check through multi connections
+CREATE DATABASE db1;
+CREATE DATABASE db2;
+CREATE DATABASE db3;
+connect con1,localhost,root,,db1;
+USE db1;
+CREATE TABLE t1(
+i INT NOT NULL
+);
+LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t1;
+CREATE PROCEDURE proc()
+BEGIN
+INSERT INTO t1 SELECT * FROM t1;
+END|
+CALL proc();;
+connect con2,localhost,root,,db2;
+USE db2;
+CREATE TABLE t2(
+i INT NOT NULL
+);
+LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t2;
+CREATE FUNCTION addition(x INT, y INT) RETURNS INT
+BEGIN
+INSERT INTO t2 SELECT * FROM t2;
+RETURN x+y;
+END|
+SELECT addition(1234,9876);;
+connect con3,localhost,root,,db3;
+USE db3;
+CREATE TABLE t(
+i INT NOT NULL,
+j INT
+);
+CREATE TABLE t3(
+i INT NOT NULL
+);
+LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t3;
+INSERT INTO t VALUES ( 10,1000 );
+CREATE TRIGGER trg AFTER INSERT ON t FOR EACH ROW
+INSERT INTO t3 SELECT * FROM t3;
+INSERT INTO t VALUES ( 20,2000);;
+connection con1;
+connection con2;
+addition(1234,9876)
+11110
+connection con3;
+connection default;
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='db1' OR OBJECT_SCHEMA='db2' OR OBJECT_SCHEMA='db3'
+ ORDER BY OBJECT_SCHEMA, OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+PROCEDURE db1 proc 1 1
+FUNCTION db2 addition 1 2
+TRIGGER db3 trg 1 1
+SELECT EVENT_NAME, SQL_TEXT, CURRENT_SCHEMA, OBJECT_TYPE, OBJECT_SCHEMA,
+OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL FROM
+performance_schema.events_statements_history WHERE CURRENT_SCHEMA='db1'
+ OR CURRENT_SCHEMA='db2' OR CURRENT_SCHEMA='db3'
+ORDER BY CURRENT_SCHEMA, OBJECT_NAME;
+EVENT_NAME SQL_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
+statement/sql/change_db USE db1 db1 NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t1(
+i INT NOT NULL
+) db1 NULL NULL NULL NULL 0
+statement/sql/load LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t1 db1 NULL NULL NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE proc()
+BEGIN
+INSERT INTO t1 SELECT * FROM t1;
+END db1 NULL NULL NULL NULL 0
+statement/sql/call_procedure CALL proc() db1 NULL NULL NULL NULL 0
+statement/sp/stmt INSERT INTO t1 SELECT * FROM t1 db1 PROCEDURE db1 proc STATEMENT 1
+statement/sql/change_db USE db2 db2 NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t2(
+i INT NOT NULL
+) db2 NULL NULL NULL NULL 0
+statement/sql/load LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t2 db2 NULL NULL NULL NULL 0
+statement/sql/create_function CREATE FUNCTION addition(x INT, y INT) RETURNS INT
+BEGIN
+INSERT INTO t2 SELECT * FROM t2;
+RETURN x+y;
+END db2 NULL NULL NULL NULL 0
+statement/sql/select SELECT addition(1234,9876) db2 NULL NULL NULL NULL 0
+statement/sp/stmt INSERT INTO t2 SELECT * FROM t2 db2 FUNCTION db2 addition STATEMENT 1
+statement/sp/freturn NULL db2 FUNCTION db2 addition STATEMENT 1
+statement/sql/change_db USE db3 db3 NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t(
+i INT NOT NULL,
+j INT
+) db3 NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t3(
+i INT NOT NULL
+) db3 NULL NULL NULL NULL 0
+statement/sql/load LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t3 db3 NULL NULL NULL NULL 0
+statement/sql/insert INSERT INTO t VALUES ( 10,1000 ) db3 NULL NULL NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg AFTER INSERT ON t FOR EACH ROW
+INSERT INTO t3 SELECT * FROM t3 db3 NULL NULL NULL NULL 0
+statement/sql/insert INSERT INTO t VALUES ( 20,2000) db3 NULL NULL NULL NULL 0
+statement/sp/stmt INSERT INTO t3 SELECT * FROM t3 db3 TRIGGER db3 trg STATEMENT 1
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history;
+# Clean-up
+DROP PROCEDURE db1.proc;
+DROP FUNCTION db2.addition;
+DROP TRIGGER db3.trg;
+DROP TABLE db1.t1;
+DROP TABLE db2.t2;
+DROP TABLE db3.t3;
+DROP TABLE db3.t;
+DROP DATABASE db1;
+DROP DATABASE db2;
+DROP DATABASE db3;
+disconnect con1;
+disconnect con2;
+disconnect con3;
diff --git a/mysql-test/suite/perfschema/r/statement_program_lost_inst.result b/mysql-test/suite/perfschema/r/statement_program_lost_inst.result
new file mode 100644
index 00000000000..ebacc9a8f7e
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/statement_program_lost_inst.result
@@ -0,0 +1,335 @@
+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(*)
+15
+select count(*) > 4 from performance_schema.setup_instruments;
+count(*) > 4
+1
+select count(*) from performance_schema.setup_timers;
+count(*)
+5
+Warnings:
+Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release
+select * from performance_schema.accounts;
+select * from performance_schema.cond_instances;
+select * from performance_schema.events_stages_current;
+select * from performance_schema.events_stages_history;
+select * from performance_schema.events_stages_history_long;
+select * from performance_schema.events_stages_summary_by_account_by_event_name;
+select * from performance_schema.events_stages_summary_by_host_by_event_name;
+select * from performance_schema.events_stages_summary_by_thread_by_event_name;
+select * from performance_schema.events_stages_summary_by_user_by_event_name;
+select * from performance_schema.events_stages_summary_global_by_event_name;
+select * from performance_schema.events_statements_current;
+select * from performance_schema.events_statements_history;
+select * from performance_schema.events_statements_history_long;
+select * from performance_schema.events_statements_summary_by_account_by_event_name;
+select * from performance_schema.events_statements_summary_by_digest;
+select * from performance_schema.events_statements_summary_by_host_by_event_name;
+select * from performance_schema.events_statements_summary_by_thread_by_event_name;
+select * from performance_schema.events_statements_summary_by_user_by_event_name;
+select * from performance_schema.events_statements_summary_global_by_event_name;
+select * from performance_schema.events_transactions_current;
+select * from performance_schema.events_transactions_history;
+select * from performance_schema.events_transactions_history_long;
+select * from performance_schema.events_transactions_summary_by_account_by_event_name;
+select * from performance_schema.events_transactions_summary_by_host_by_event_name;
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name;
+select * from performance_schema.events_transactions_summary_by_user_by_event_name;
+select * from performance_schema.events_transactions_summary_global_by_event_name;
+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_account_by_event_name;
+select * from performance_schema.events_waits_summary_by_host_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.events_waits_summary_by_user_by_event_name;
+select * from performance_schema.events_waits_summary_global_by_event_name;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_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.host_cache;
+select * from performance_schema.hosts;
+select * from performance_schema.memory_summary_by_account_by_event_name;
+select * from performance_schema.memory_summary_by_host_by_event_name;
+select * from performance_schema.memory_summary_by_thread_by_event_name;
+select * from performance_schema.memory_summary_by_user_by_event_name;
+select * from performance_schema.memory_summary_global_by_event_name;
+select * from performance_schema.metadata_locks;
+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.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
+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.socket_instances;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.table_handles;
+select * from performance_schema.table_io_waits_summary_by_index_usage;
+select * from performance_schema.table_io_waits_summary_by_table;
+select * from performance_schema.table_lock_waits_summary_by_table;
+select * from performance_schema.threads;
+select * from performance_schema.users;
+select * from performance_schema.replication_connection_configuration;
+select * from performance_schema.replication_applier_configuration;
+select * from performance_schema.replication_applier_status;
+select * from performance_schema.replication_applier_status_by_coordinator;
+select * from performance_schema.global_status;
+select * from performance_schema.status_by_thread;
+select * from performance_schema.status_by_user;
+select * from performance_schema.status_by_host;
+select * from performance_schema.status_by_account;
+select * from performance_schema.session_status;
+show global variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_accounts_size 100
+performance_schema_digests_size 200
+performance_schema_events_stages_history_long_size 1000
+performance_schema_events_stages_history_size 10
+performance_schema_events_statements_history_long_size 1000
+performance_schema_events_statements_history_size 10
+performance_schema_events_transactions_history_long_size 1000
+performance_schema_events_transactions_history_size 10
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_hosts_size 100
+performance_schema_max_cond_classes 90
+performance_schema_max_cond_instances 1000
+performance_schema_max_digest_length 1024
+performance_schema_max_file_classes 80
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_index_stat 5000
+performance_schema_max_memory_classes 320
+performance_schema_max_metadata_locks 10000
+performance_schema_max_mutex_classes 210
+performance_schema_max_mutex_instances 5000
+performance_schema_max_prepared_statements_instances 100
+performance_schema_max_program_instances 7
+performance_schema_max_rwlock_classes 50
+performance_schema_max_rwlock_instances 5000
+performance_schema_max_socket_classes 10
+performance_schema_max_socket_instances 1000
+performance_schema_max_sql_text_length 1024
+performance_schema_max_stage_classes 160
+performance_schema_max_statement_classes 222
+performance_schema_max_statement_stack 2
+performance_schema_max_table_handles 1000
+performance_schema_max_table_instances 500
+performance_schema_max_table_lock_stat 500
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 200
+performance_schema_session_connect_attrs_size 2048
+performance_schema_setup_actors_size 100
+performance_schema_setup_objects_size 100
+performance_schema_users_size 100
+show engine PERFORMANCE_SCHEMA status;
+show global status like "performance_schema%";
+show global variables like "performance_schema_max_program_instances";
+Variable_name Value
+performance_schema_max_program_instances 7
+show global variables like "performance_schema_max_statement_stack";
+Variable_name Value
+performance_schema_max_statement_stack 2
+#####################
+# Setup
+#####################
+# SET-UP
+CREATE DATABASE nested_sp;
+USE nested_sp;
+CREATE TABLE t1(
+id CHAR(16) NOT NULL DEFAULT '',
+data INT NOT NULL
+);
+CREATE TABLE t2(
+n INT UNSIGNED NOT NULL,
+f BIGINT UNSIGNED
+) engine=innodb;
+############################
+# Creating Stored Programs #
+############################
+CREATE PROCEDURE c1(x INT)
+CALL c2("c", x)|
+CREATE PROCEDURE c2(s CHAR(16), x INT)
+CALL c3(x, s)|
+CREATE PROCEDURE c3(x INT, s CHAR(16))
+CALL c4("level", x, s)|
+CREATE PROCEDURE c4(l CHAR(8), x INT, s CHAR(16))
+INSERT INTO t1 VALUES (concat(l,s), x)|
+CREATE PROCEDURE iotest(x1 CHAR(16), x2 CHAR(16), y INT)
+BEGIN
+CALL inc2(x2, y);
+INSERT INTO t1 VALUES (x1, y);
+END|
+CREATE PROCEDURE inc2(x CHAR(16), y INT)
+BEGIN
+CALL inc(y);
+INSERT INTO t1 VALUES (x, y);
+END|
+CREATE PROCEDURE inc(inout io INT)
+SET io = io + 1|
+CREATE FUNCTION mul(x INT, y INT) RETURNS INT
+RETURN x*y|
+CREATE FUNCTION inc(i INT) RETURNS INT
+RETURN i+1|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+CREATE FUNCTION fun(i INT, u INT UNSIGNED) RETURNS DOUBLE
+RETURN mul(inc(i), fac(u))|
+CREATE PROCEDURE ifac(n INT UNSIGNED)
+BEGIN
+DECLARE i BIGINT UNSIGNED DEFAULT 1;
+IF n > 20 THEN
+SET n = 20; # bigint overflow otherwise
+END IF;
+WHILE i <= n DO
+BEGIN
+INSERT INTO t2 VALUES (i, fac(i));
+SET i = i + 1;
+END;
+END WHILE;
+END|
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+CALL ifac(10)|
+TRUNCATE performance_schema.events_statements_summary_by_program;
+SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA FROM
+performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_NAME OBJECT_SCHEMA
+Flush status;
+show global status like "%performance_schema_program_lost%";
+Variable_name Value
+Performance_schema_program_lost 0
+show global status like "%performance_schema_nested_statement_lost%";
+Variable_name Value
+Performance_schema_nested_statement_lost 0
+#####################
+# Executing Queries
+#####################
+#####################
+# Executing queries #
+#####################
+CALL c1(42);
+SELECT * FROM t1;
+id data
+levelc 42
+DELETE FROM t1;
+CALL iotest("io1", "io2", 1);
+SELECT * FROM t1 ORDER BY data DESC;
+id data
+io2 2
+io1 1
+DELETE FROM t1;
+SELECT fun(6,10);
+fun(6,10)
+25401600
+INSERT INTO t1 VALUES (20,13);
+SELECT * FROM t2;
+n f
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+###########################################
+# Quering PS statement summary table #
+###########################################
+SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_NAME OBJECT_SCHEMA
+PROCEDURE c1 nested_sp
+PROCEDURE c2 nested_sp
+PROCEDURE c3 nested_sp
+PROCEDURE c4 nested_sp
+FUNCTION fac nested_sp
+PROCEDURE ifac nested_sp
+TRIGGER trg nested_sp
+show global status like "%performance_schema_program_lost%";
+Variable_name Value
+Performance_schema_program_lost 6
+show global status like "%performance_schema_nested_statement_lost%";
+Variable_name Value
+Performance_schema_nested_statement_lost 1062
+#####################
+# Cleanup
+#####################
+DROP PROCEDURE c4;
+DROP PROCEDURE c3;
+DROP PROCEDURE c2;
+DROP PROCEDURE c1;
+DROP PROCEDURE inc;
+DROP PROCEDURE inc2;
+DROP PROCEDURE iotest;
+DROP FUNCTION mul;
+DROP FUNCTION inc;
+DROP FUNCTION fac;
+DROP FUNCTION fun;
+DROP PROCEDURE ifac;
+DROP TRIGGER trg;
+DROP TABLE t1,t2;
+DROP DATABASE nested_sp;
diff --git a/mysql-test/suite/perfschema/r/statement_program_nested.result b/mysql-test/suite/perfschema/r/statement_program_nested.result
new file mode 100644
index 00000000000..95cbdc81a1f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/statement_program_nested.result
@@ -0,0 +1,2333 @@
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+#################################################
+# Quering PS statement summary and history_long #
+#################################################
+# SET-UP
+CREATE DATABASE nested_sp;
+USE nested_sp;
+CREATE TABLE t1(
+id CHAR(16) NOT NULL DEFAULT '',
+data INT NOT NULL
+);
+CREATE TABLE t2(
+n INT UNSIGNED NOT NULL,
+f BIGINT UNSIGNED
+) engine=innodb;
+############################
+# Creating Stored Programs #
+############################
+CREATE PROCEDURE c1(x INT)
+CALL c2("c", x)|
+CREATE PROCEDURE c2(s CHAR(16), x INT)
+CALL c3(x, s)|
+CREATE PROCEDURE c3(x INT, s CHAR(16))
+CALL c4("level", x, s)|
+CREATE PROCEDURE c4(l CHAR(8), x INT, s CHAR(16))
+INSERT INTO t1 VALUES (concat(l,s), x)|
+CREATE PROCEDURE iotest(x1 CHAR(16), x2 CHAR(16), y INT)
+BEGIN
+CALL inc2(x2, y);
+INSERT INTO t1 VALUES (x1, y);
+END|
+CREATE PROCEDURE inc2(x CHAR(16), y INT)
+BEGIN
+CALL inc(y);
+INSERT INTO t1 VALUES (x, y);
+END|
+CREATE PROCEDURE inc(inout io INT)
+SET io = io + 1|
+CREATE FUNCTION mul(x INT, y INT) RETURNS INT
+RETURN x*y|
+CREATE FUNCTION inc(i INT) RETURNS INT
+RETURN i+1|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+CREATE FUNCTION fun(i INT, u INT UNSIGNED) RETURNS DOUBLE
+RETURN mul(inc(i), fac(u))|
+CREATE PROCEDURE ifac(n INT UNSIGNED)
+BEGIN
+DECLARE i BIGINT UNSIGNED DEFAULT 1;
+IF n > 20 THEN
+SET n = 20; # bigint overflow otherwise
+END IF;
+WHILE i <= n DO
+BEGIN
+INSERT INTO t2 VALUES (i, fac(i));
+SET i = i + 1;
+END;
+END WHILE;
+END|
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+CALL ifac(10)|
+#####################
+# Executing queries #
+#####################
+CALL c1(42);
+SELECT * FROM t1;
+id data
+levelc 42
+DELETE FROM t1;
+CALL iotest("io1", "io2", 1);
+SELECT * FROM t1 ORDER BY data DESC;
+id data
+io2 2
+io1 1
+DELETE FROM t1;
+SELECT fun(6,10);
+fun(6,10)
+25401600
+INSERT INTO t1 VALUES (20,13);
+SELECT * FROM t2;
+n f
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+SELECT EVENT_NAME, SQL_TEXT, CURRENT_SCHEMA, OBJECT_TYPE, OBJECT_SCHEMA,
+OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL
+FROM performance_schema.events_statements_history_long WHERE
+CURRENT_SCHEMA='nested_sp' ORDER BY
+OBJECT_NAME,NESTING_EVENT_LEVEL,SQL_TEXT,EVENT_NAME;
+EVENT_NAME SQL_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
+statement/sql/call_procedure CALL c1(42) nested_sp NULL NULL NULL NULL 0
+statement/sql/call_procedure CALL iotest("io1", "io2", 1) nested_sp NULL NULL NULL NULL 0
+statement/sql/delete DELETE FROM t1 nested_sp NULL NULL NULL NULL 0
+statement/sql/delete DELETE FROM t1 nested_sp NULL NULL NULL NULL 0
+statement/sql/insert INSERT INTO t1 VALUES (20,13) nested_sp NULL NULL NULL NULL 0
+statement/sql/select SELECT * FROM t1 nested_sp NULL NULL NULL NULL 0
+statement/sql/select SELECT * FROM t1 ORDER BY data DESC nested_sp NULL NULL NULL NULL 0
+statement/sql/select SELECT * FROM t2 nested_sp NULL NULL NULL NULL 0
+statement/sql/select SELECT fun(6,10) nested_sp NULL NULL NULL NULL 0
+statement/sp/stmt CALL c2("c", x) nested_sp PROCEDURE nested_sp c1 STATEMENT 1
+statement/sp/stmt CALL c3(x, s) nested_sp PROCEDURE nested_sp c2 STATEMENT 2
+statement/sp/stmt CALL c4("level", x, s) nested_sp PROCEDURE nested_sp c3 STATEMENT 3
+statement/sp/stmt INSERT INTO t1 VALUES (concat(l,s), x) nested_sp PROCEDURE nested_sp c4 STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 2
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 3
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 4
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 5
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/jump_if_not NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/set NULL nested_sp FUNCTION nested_sp fac STATEMENT 7
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp fun STATEMENT 1
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 2
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 3
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 4
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/jump_if_not NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/set NULL nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) nested_sp PROCEDURE nested_sp ifac STATEMENT 6
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp inc STATEMENT 2
+statement/sp/set NULL nested_sp PROCEDURE nested_sp inc STATEMENT 3
+statement/sp/stmt CALL inc(y) nested_sp PROCEDURE nested_sp inc2 STATEMENT 2
+statement/sp/stmt INSERT INTO t1 VALUES (x, y) nested_sp PROCEDURE nested_sp inc2 STATEMENT 2
+statement/sp/stmt CALL inc2(x2, y) nested_sp PROCEDURE nested_sp iotest STATEMENT 1
+statement/sp/stmt INSERT INTO t1 VALUES (x1, y) nested_sp PROCEDURE nested_sp iotest STATEMENT 1
+statement/sp/freturn NULL nested_sp FUNCTION nested_sp mul STATEMENT 2
+statement/sp/stmt CALL ifac(10) nested_sp TRIGGER nested_sp trg TRANSACTION 1
+statement/sp/stmt CALL ifac(10) nested_sp TRIGGER nested_sp trg TRANSACTION 2
+statement/sp/stmt CALL ifac(10) nested_sp TRIGGER nested_sp trg TRANSACTION 3
+statement/sp/stmt CALL ifac(10) nested_sp TRIGGER nested_sp trg TRANSACTION 5
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+PROCEDURE nested_sp c1 1 1
+PROCEDURE nested_sp c2 1 1
+PROCEDURE nested_sp c3 1 1
+PROCEDURE nested_sp c4 1 1
+FUNCTION nested_sp fac 41 879
+FUNCTION nested_sp fun 1 1
+PROCEDURE nested_sp ifac 4 172
+PROCEDURE nested_sp inc 1 1
+FUNCTION nested_sp inc 1 1
+PROCEDURE nested_sp inc2 1 2
+PROCEDURE nested_sp iotest 1 2
+FUNCTION nested_sp mul 1 1
+TRIGGER nested_sp trg 4 4
+# clean-up
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+PROCEDURE nested_sp c1 0 0
+PROCEDURE nested_sp c2 0 0
+PROCEDURE nested_sp c3 0 0
+PROCEDURE nested_sp c4 0 0
+FUNCTION nested_sp fac 0 0
+FUNCTION nested_sp fun 0 0
+PROCEDURE nested_sp ifac 0 0
+PROCEDURE nested_sp inc 0 0
+FUNCTION nested_sp inc 0 0
+PROCEDURE nested_sp inc2 0 0
+PROCEDURE nested_sp iotest 0 0
+FUNCTION nested_sp mul 0 0
+TRIGGER nested_sp trg 0 0
+DROP PROCEDURE c4;
+DROP PROCEDURE c3;
+DROP PROCEDURE c2;
+DROP PROCEDURE c1;
+DROP PROCEDURE inc;
+DROP PROCEDURE inc2;
+DROP PROCEDURE iotest;
+DROP FUNCTION mul;
+DROP FUNCTION inc;
+DROP FUNCTION fac;
+DROP FUNCTION fun;
+DROP PROCEDURE ifac;
+DROP TRIGGER trg;
+DROP TABLE t1,t2;
+DROP DATABASE nested_sp;
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+# SET-UP
+CREATE DATABASE nested_sp;
+USE nested_sp;
+CREATE TABLE t1(
+id CHAR(16) NOT NULL DEFAULT '',
+data INT NOT NULL
+);
+CREATE TABLE t2(
+n INT UNSIGNED NOT NULL,
+f BIGINT UNSIGNED
+) engine=innodb;
+############################
+# Creating Stored Programs #
+############################
+CREATE PROCEDURE c1(x INT)
+CALL c2("c", x)|
+CREATE PROCEDURE c2(s CHAR(16), x INT)
+CALL c3(x, s)|
+CREATE PROCEDURE c3(x INT, s CHAR(16))
+CALL c4("level", x, s)|
+CREATE PROCEDURE c4(l CHAR(8), x INT, s CHAR(16))
+INSERT INTO t1 VALUES (concat(l,s), x)|
+CREATE PROCEDURE iotest(x1 CHAR(16), x2 CHAR(16), y INT)
+BEGIN
+CALL inc2(x2, y);
+INSERT INTO t1 VALUES (x1, y);
+END|
+CREATE PROCEDURE inc2(x CHAR(16), y INT)
+BEGIN
+CALL inc(y);
+INSERT INTO t1 VALUES (x, y);
+END|
+CREATE PROCEDURE inc(inout io INT)
+SET io = io + 1|
+CREATE FUNCTION mul(x INT, y INT) RETURNS INT
+RETURN x*y|
+CREATE FUNCTION inc(i INT) RETURNS INT
+RETURN i+1|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+CREATE FUNCTION fun(i INT, u INT UNSIGNED) RETURNS DOUBLE
+RETURN mul(inc(i), fac(u))|
+CREATE PROCEDURE ifac(n INT UNSIGNED)
+BEGIN
+DECLARE i BIGINT UNSIGNED DEFAULT 1;
+IF n > 20 THEN
+SET n = 20; # bigint overflow otherwise
+END IF;
+WHILE i <= n DO
+BEGIN
+INSERT INTO t2 VALUES (i, fac(i));
+SET i = i + 1;
+END;
+END WHILE;
+END|
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+CALL ifac(10)|
+update performance_schema.setup_instruments set enabled='YES', timed='NO'
+ where name like "statement/sp/%" order by name;
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+#####################
+# Executing queries #
+#####################
+CALL c1(42);
+SELECT * FROM t1;
+id data
+levelc 42
+DELETE FROM t1;
+CALL iotest("io1", "io2", 1);
+SELECT * FROM t1 ORDER BY data DESC;
+id data
+io2 2
+io1 1
+DELETE FROM t1;
+SELECT fun(6,10);
+fun(6,10)
+25401600
+INSERT INTO t1 VALUES (20,13);
+SELECT * FROM t2;
+n f
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+SELECT EVENT_NAME, TIMER_START, TIMER_END, TIMER_WAIT FROM
+performance_schema.events_statements_history_long WHERE
+CURRENT_SCHEMA='nested_sp' AND EVENT_NAME like "statement/sp/%";
+EVENT_NAME TIMER_START TIMER_END TIMER_WAIT
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name like "statement/sp/%" order by name;
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+DROP PROCEDURE c4;
+DROP PROCEDURE c3;
+DROP PROCEDURE c2;
+DROP PROCEDURE c1;
+DROP PROCEDURE inc;
+DROP PROCEDURE inc2;
+DROP PROCEDURE iotest;
+DROP FUNCTION mul;
+DROP FUNCTION inc;
+DROP FUNCTION fac;
+DROP FUNCTION fun;
+DROP PROCEDURE ifac;
+DROP TRIGGER trg;
+DROP TABLE t1,t2;
+DROP DATABASE nested_sp;
diff --git a/mysql-test/suite/perfschema/r/statement_program_nesting_event_check.result b/mysql-test/suite/perfschema/r/statement_program_nesting_event_check.result
new file mode 100644
index 00000000000..a17dc30632d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/statement_program_nesting_event_check.result
@@ -0,0 +1,1514 @@
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+#----------------------------
+# Non-nested Stored programs.
+#----------------------------
+# SET-UP
+CREATE DATABASE stored_programs;
+USE stored_programs;
+CREATE TABLE t1(
+i INT NOT NULL,
+j INT
+) engine=innodb;
+CREATE TABLE t2(
+name CHAR(16) NOT NULL DEFAULT '',
+id INT NOT NULL
+) engine=innodb;
+CREATE TABLE t3(
+d DATE,
+n INT,
+f DOUBLE,
+s VARCHAR(32)
+);
+CREATE TABLE t4(
+`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
+`word` varchar(100) NOT NULL,
+`mean` varchar(300) NOT NULL,
+PRIMARY KEY (`k`)
+);
+############################
+# Creating Stored Programs #
+############################
+# Stored Routine ( Procedure & Function )
+CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
+BEGIN
+INSERT INTO t1 VALUES (x1, y);
+INSERT INTO t1 VALUES (x2, y);
+END|
+CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
+BEGIN
+DECLARE z1, z2 INT;
+SET z1 = y;
+SET z2 = z1+2;
+INSERT INTO t2 VALUES (x, z2);
+END|
+CREATE PROCEDURE SampleProc3()
+BEGIN
+DECLARE ld DATE;
+DECLARE li INT;
+DECLARE lf DOUBLE;
+DECLARE ls VARCHAR(32);
+SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
+INSERT INTO t3 VALUES (ld, li, lf, ls);
+INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null");
+END|
+CREATE PROCEDURE SampleProc4()
+BEGIN
+DECLARE x INT;
+SET x = 1;
+WHILE x <= 2 DO
+INSERT INTO t4(word, mean) VALUES('a','a mean');
+SET x = x + 1;
+END WHILE;
+END|
+CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
+RETURN concat(s1, s2)|
+CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
+RETURNS INT
+DETERMINISTIC
+BEGIN
+DECLARE avg INT;
+SET avg = (n1+n2+n3*2+n4*4)/8;
+RETURN avg;
+END|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+# Triggers
+CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+if isnull(new.j) then
+SET new.j:= new.i * 10;
+END if;
+END|
+CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET i=new.id+i ;
+END|
+CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
+SET @change:= @change + new.id - old.id|
+CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 1|
+CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 8 + old.j|
+#####################
+# Executing queries #
+#####################
+INSERT INTO t1 VALUES (10,20);
+CALL SampleProc1(30,40,50);
+SET @a=1;
+SELECT @a;
+@a
+1
+CALL SampleProc2("Jwalamukhi",34);
+SELECT @a;
+@a
+1
+CALL SampleProc3();
+CALL SampleProc4();
+SET @change=1;
+SELECT @change;
+@change
+1
+UPDATE t2 SET id=22 WHERE name="Jwalamukhi";
+SELECT @change;
+@change
+-13
+SET @del=1;
+SELECT @del;
+@del
+1
+DELETE FROM t1 WHERE i=76;
+SELECT @del;
+@del
+60
+SELECT wt_avg(1, 12, 1990, 1121990);
+wt_avg(1, 12, 1990, 1121990)
+561494
+SELECT fac(5);
+fac(5)
+120
+SELECT append("Bolly", "wood");
+append("Bolly", "wood")
+Bollywood
+# Event
+SET GLOBAL event_scheduler=ON;
+CREATE TABLE table_t(a INT);
+CREATE EVENT e1 ON SCHEDULE EVERY 2 SECOND DO
+BEGIN
+INSERT INTO table_t VALUES(1);
+END|
+SELECT * FROM table_t;
+a
+1
+SET GLOBAL event_scheduler=OFF;
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL
+FROM performance_schema.events_statements_history_long
+WHERE CURRENT_SCHEMA='stored_programs' AND
+(SQL_TEXT not like '%count(*) = 1%' OR SQL_TEXT IS NULL)
+ORDER BY OBJECT_NAME,NESTING_EVENT_LEVEL,SQL_TEXT;
+EVENT_NAME SQL_TEXT OBJECT_NAME NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
+statement/scheduler/event NULL NULL NULL 0
+statement/sql/call_procedure CALL SampleProc1(30,40,50) NULL NULL 0
+statement/sql/call_procedure CALL SampleProc2("Jwalamukhi",34) NULL NULL 0
+statement/sql/call_procedure CALL SampleProc3() NULL NULL 0
+statement/sql/call_procedure CALL SampleProc4() NULL NULL 0
+statement/sql/create_event CREATE EVENT e1 ON SCHEDULE EVERY 2 SECOND DO
+BEGIN
+INSERT INTO table_t VALUES(1);
+END NULL NULL 0
+statement/sql/create_function CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
+RETURN concat(s1, s2) NULL NULL 0
+statement/sql/create_function CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END NULL NULL 0
+statement/sql/create_function CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
+RETURNS INT
+DETERMINISTIC
+BEGIN
+DECLARE avg INT;
+SET avg = (n1+n2+n3*2+n4*4)/8;
+RETURN avg;
+END NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
+BEGIN
+INSERT INTO t1 VALUES (x1, y);
+INSERT INTO t1 VALUES (x2, y);
+END NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
+BEGIN
+DECLARE z1, z2 INT;
+SET z1 = y;
+SET z2 = z1+2;
+INSERT INTO t2 VALUES (x, z2);
+END NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc3()
+BEGIN
+DECLARE ld DATE;
+DECLARE li INT;
+DECLARE lf DOUBLE;
+DECLARE ls VARCHAR(32);
+SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
+INSERT INTO t3 VALUES (ld, li, lf, ls);
+INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null");
+END NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc4()
+BEGIN
+DECLARE x INT;
+SET x = 1;
+WHILE x <= 2 DO
+INSERT INTO t4(word, mean) VALUES('a','a mean');
+SET x = x + 1;
+END WHILE;
+END NULL NULL 0
+statement/sql/create_table CREATE TABLE t1(
+i INT NOT NULL,
+j INT
+) engine=innodb NULL NULL 0
+statement/sql/create_table CREATE TABLE t2(
+name CHAR(16) NOT NULL DEFAULT '',
+id INT NOT NULL
+) engine=innodb NULL NULL 0
+statement/sql/create_table CREATE TABLE t3(
+d DATE,
+n INT,
+f DOUBLE,
+s VARCHAR(32)
+) NULL NULL 0
+statement/sql/create_table CREATE TABLE t4(
+`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
+`word` varchar(100) NOT NULL,
+`mean` varchar(300) NOT NULL,
+PRIMARY KEY (`k`)
+) NULL NULL 0
+statement/sql/create_table CREATE TABLE table_t(a INT) NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+if isnull(new.j) then
+SET new.j:= new.i * 10;
+END if;
+END NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET i=new.id+i ;
+END NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
+SET @change:= @change + new.id - old.id NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 1 NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 8 + old.j NULL NULL 0
+statement/sql/delete DELETE FROM t1 WHERE i=76 NULL NULL 0
+statement/sql/insert INSERT INTO t1 VALUES (10,20) NULL NULL 0
+statement/sql/select SELECT * FROM table_t NULL NULL 0
+statement/sql/select SELECT 5 * 10 NULL NULL 0
+statement/sql/select SELECT @a NULL NULL 0
+statement/sql/select SELECT @a NULL NULL 0
+statement/sql/select SELECT @change NULL NULL 0
+statement/sql/select SELECT @change NULL NULL 0
+statement/sql/select SELECT @del NULL NULL 0
+statement/sql/select SELECT @del NULL NULL 0
+statement/sql/select SELECT append("Bolly", "wood") NULL NULL 0
+statement/sql/select SELECT COUNT(*) = 0 FROM information_schema.processlist
+WHERE user = 'event_scheduler' NULL NULL 0
+statement/sql/select SELECT fac(5) NULL NULL 0
+statement/sql/select SELECT wt_avg(1, 12, 1990, 1121990) NULL NULL 0
+statement/sql/set_option SET @a=1 NULL NULL 0
+statement/sql/set_option SET @change=1 NULL NULL 0
+statement/sql/set_option SET @del=1 NULL NULL 0
+statement/sql/set_option SET GLOBAL event_scheduler=OFF NULL NULL 0
+statement/sql/set_option SET GLOBAL event_scheduler=ON NULL NULL 0
+statement/sql/update UPDATE t2 SET id=22 WHERE name="Jwalamukhi" NULL NULL 0
+statement/sp/freturn NULL append STATEMENT 1
+statement/sp/stmt INSERT INTO table_t VALUES(1) e1 STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/jump_if_not NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/jump NULL fac STATEMENT 1
+statement/sp/jump_if_not NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/jump NULL fac STATEMENT 1
+statement/sp/jump_if_not NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/jump NULL fac STATEMENT 1
+statement/sp/jump_if_not NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/set NULL fac STATEMENT 1
+statement/sp/jump NULL fac STATEMENT 1
+statement/sp/jump_if_not NULL fac STATEMENT 1
+statement/sp/freturn NULL fac STATEMENT 1
+statement/sp/stmt INSERT INTO t1 VALUES (x1, y) sampleproc1 STATEMENT 1
+statement/sp/stmt INSERT INTO t1 VALUES (x2, y) sampleproc1 STATEMENT 1
+statement/sp/set NULL sampleproc2 STATEMENT 1
+statement/sp/set NULL sampleproc2 STATEMENT 1
+statement/sp/set NULL sampleproc2 STATEMENT 1
+statement/sp/set NULL sampleproc2 STATEMENT 1
+statement/sp/stmt INSERT INTO t2 VALUES (x, z2) sampleproc2 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc3 STATEMENT 1
+statement/sp/stmt INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null") sampleproc3 STATEMENT 1
+statement/sp/stmt INSERT INTO t3 VALUES (ld, li, lf, ls) sampleproc3 STATEMENT 1
+statement/sp/set NULL sampleproc4 STATEMENT 1
+statement/sp/set NULL sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL sampleproc4 STATEMENT 1
+statement/sp/set NULL sampleproc4 STATEMENT 1
+statement/sp/jump NULL sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL sampleproc4 STATEMENT 1
+statement/sp/set NULL sampleproc4 STATEMENT 1
+statement/sp/jump NULL sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL sampleproc4 STATEMENT 1
+statement/sp/stmt INSERT INTO t4(word, mean) VALUES('a','a mean') sampleproc4 STATEMENT 1
+statement/sp/stmt INSERT INTO t4(word, mean) VALUES('a','a mean') sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL trg1 TRANSACTION 1
+statement/sp/jump_if_not NULL trg1 TRANSACTION 2
+statement/sp/jump_if_not NULL trg1 TRANSACTION 2
+statement/sp/stmt UPDATE t1 SET i=new.id+i trg2 TRANSACTION 2
+statement/sp/stmt SET @change:= @change + new.id - old.id trg3 TRANSACTION 1
+statement/sp/stmt SET @del:= @del + 1 trg4 TRANSACTION 1
+statement/sp/stmt SET @del:= @del + 8 + old.j trg5 TRANSACTION 1
+statement/sp/set NULL wt_avg STATEMENT 1
+statement/sp/set NULL wt_avg STATEMENT 1
+statement/sp/freturn NULL wt_avg STATEMENT 1
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+DROP PROCEDURE SampleProc1;
+DROP PROCEDURE SampleProc2;
+DROP PROCEDURE SampleProc3;
+DROP PROCEDURE SampleProc4;
+DROP FUNCTION wt_avg;
+DROP FUNCTION fac;
+DROP FUNCTION append;
+DROP TRIGGER trg1;
+DROP TRIGGER trg2;
+DROP TRIGGER trg3;
+DROP TRIGGER trg4;
+DROP TRIGGER trg5;
+DROP EVENT IF EXISTS e1;
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+DROP TABLE t4;
+DROP TABLE table_t;
+DROP DATABASE stored_programs;
+#------------------------
+# Nested stored programs.
+#------------------------
+# SET-UP
+CREATE DATABASE nested_sp;
+USE nested_sp;
+CREATE TABLE t1(
+id CHAR(16) NOT NULL DEFAULT '',
+data INT NOT NULL
+);
+CREATE TABLE t2(
+n INT UNSIGNED NOT NULL,
+f BIGINT UNSIGNED
+) engine=innodb;
+############################
+# Creating Stored Programs #
+############################
+CREATE PROCEDURE c1(x INT)
+CALL c2("c", x)|
+CREATE PROCEDURE c2(s CHAR(16), x INT)
+CALL c3(x, s)|
+CREATE PROCEDURE c3(x INT, s CHAR(16))
+CALL c4("level", x, s)|
+CREATE PROCEDURE c4(l CHAR(8), x INT, s CHAR(16))
+INSERT INTO t1 VALUES (concat(l,s), x)|
+CREATE PROCEDURE iotest(x1 CHAR(16), x2 CHAR(16), y INT)
+BEGIN
+CALL inc2(x2, y);
+INSERT INTO t1 VALUES (x1, y);
+END|
+CREATE PROCEDURE inc2(x CHAR(16), y INT)
+BEGIN
+CALL inc(y);
+INSERT INTO t1 VALUES (x, y);
+END|
+CREATE PROCEDURE inc(inout io INT)
+SET io = io + 1|
+CREATE FUNCTION mul(x INT, y INT) RETURNS INT
+RETURN x*y|
+CREATE FUNCTION inc(i INT) RETURNS INT
+RETURN i+1|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+CREATE FUNCTION fun(i INT, u INT UNSIGNED) RETURNS DOUBLE
+RETURN mul(inc(i), fac(u))|
+CREATE PROCEDURE ifac(n INT UNSIGNED)
+BEGIN
+DECLARE i BIGINT UNSIGNED DEFAULT 1;
+IF n > 20 THEN
+SET n = 20; # bigint overflow otherwise
+END IF;
+WHILE i <= n DO
+BEGIN
+INSERT INTO t2 VALUES (i, fac(i));
+SET i = i + 1;
+END;
+END WHILE;
+END|
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+CALL ifac(10)|
+#####################
+# Executing queries #
+#####################
+CALL c1(42);
+SELECT * FROM t1;
+id data
+levelc 42
+DELETE FROM t1;
+CALL iotest("io1", "io2", 1);
+SELECT * FROM t1 ORDER BY data DESC;
+id data
+io2 2
+io1 1
+DELETE FROM t1;
+SELECT fun(6,10);
+fun(6,10)
+25401600
+INSERT INTO t1 VALUES (20,13);
+SELECT * FROM t2;
+n f
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+1 1
+2 2
+3 6
+4 24
+5 120
+6 720
+7 5040
+8 40320
+9 362880
+10 3628800
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL
+FROM performance_schema.events_statements_history_long
+WHERE CURRENT_SCHEMA='nested_sp'
+ORDER BY OBJECT_NAME, NESTING_EVENT_LEVEL, SQL_TEXT, EVENT_NAME;
+EVENT_NAME SQL_TEXT OBJECT_NAME NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
+statement/sql/call_procedure CALL c1(42) NULL NULL 0
+statement/sql/call_procedure CALL iotest("io1", "io2", 1) NULL NULL 0
+statement/sql/delete DELETE FROM t1 NULL NULL 0
+statement/sql/delete DELETE FROM t1 NULL NULL 0
+statement/sql/insert INSERT INTO t1 VALUES (20,13) NULL NULL 0
+statement/sql/select SELECT * FROM t1 NULL NULL 0
+statement/sql/select SELECT * FROM t1 ORDER BY data DESC NULL NULL 0
+statement/sql/select SELECT * FROM t2 NULL NULL 0
+statement/sql/select SELECT fun(6,10) NULL NULL 0
+statement/sp/stmt CALL c2("c", x) c1 STATEMENT 1
+statement/sp/stmt CALL c3(x, s) c2 STATEMENT 2
+statement/sp/stmt CALL c4("level", x, s) c3 STATEMENT 3
+statement/sp/stmt INSERT INTO t1 VALUES (concat(l,s), x) c4 STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/jump_if_not NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/set NULL fac STATEMENT 2
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/jump_if_not NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/set NULL fac STATEMENT 3
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/jump_if_not NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/set NULL fac STATEMENT 4
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/jump_if_not NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/set NULL fac STATEMENT 5
+statement/sp/freturn NULL fac STATEMENT 7
+statement/sp/freturn NULL fac STATEMENT 7
+statement/sp/freturn NULL fac STATEMENT 7
+statement/sp/freturn NULL fac STATEMENT 7
+statement/sp/freturn NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/jump_if_not NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/set NULL fac STATEMENT 7
+statement/sp/freturn NULL fun STATEMENT 1
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/jump_if_not NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/set NULL ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 2
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/jump_if_not NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/set NULL ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 3
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/jump_if_not NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/set NULL ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 4
+statement/sp/jump NULL ifac STATEMENT 6
+statement/sp/jump NULL ifac STATEMENT 6
+statement/sp/jump NULL ifac STATEMENT 6
+statement/sp/jump NULL ifac STATEMENT 6
+statement/sp/jump NULL ifac STATEMENT 6
+statement/sp/jump NULL ifac STATEMENT 6
+statement/sp/jump_if_not NULL ifac STATEMENT 6
+statement/sp/jump_if_not NULL ifac STATEMENT 6
+statement/sp/jump_if_not NULL ifac STATEMENT 6
+statement/sp/jump_if_not NULL ifac STATEMENT 6
+statement/sp/jump_if_not NULL ifac STATEMENT 6
+statement/sp/jump_if_not NULL ifac STATEMENT 6
+statement/sp/set NULL ifac STATEMENT 6
+statement/sp/set NULL ifac STATEMENT 6
+statement/sp/set NULL ifac STATEMENT 6
+statement/sp/set NULL ifac STATEMENT 6
+statement/sp/set NULL ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 6
+statement/sp/stmt INSERT INTO t2 VALUES (i, fac(i)) ifac STATEMENT 6
+statement/sp/freturn NULL inc STATEMENT 2
+statement/sp/set NULL inc STATEMENT 3
+statement/sp/stmt CALL inc(y) inc2 STATEMENT 2
+statement/sp/stmt INSERT INTO t1 VALUES (x, y) inc2 STATEMENT 2
+statement/sp/stmt CALL inc2(x2, y) iotest STATEMENT 1
+statement/sp/stmt INSERT INTO t1 VALUES (x1, y) iotest STATEMENT 1
+statement/sp/freturn NULL mul STATEMENT 2
+statement/sp/stmt CALL ifac(10) trg TRANSACTION 1
+statement/sp/stmt CALL ifac(10) trg TRANSACTION 2
+statement/sp/stmt CALL ifac(10) trg TRANSACTION 3
+statement/sp/stmt CALL ifac(10) trg TRANSACTION 5
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+DROP PROCEDURE c4;
+DROP PROCEDURE c3;
+DROP PROCEDURE c2;
+DROP PROCEDURE c1;
+DROP PROCEDURE inc;
+DROP PROCEDURE inc2;
+DROP PROCEDURE iotest;
+DROP FUNCTION mul;
+DROP FUNCTION inc;
+DROP FUNCTION fac;
+DROP FUNCTION fun;
+DROP PROCEDURE ifac;
+DROP TRIGGER trg;
+DROP TABLE t1,t2;
+DROP DATABASE nested_sp;
diff --git a/mysql-test/suite/perfschema/r/statement_program_non_nested.result b/mysql-test/suite/perfschema/r/statement_program_non_nested.result
new file mode 100644
index 00000000000..b7de4b84132
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/statement_program_non_nested.result
@@ -0,0 +1,706 @@
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+################################################
+# Quering PS statement summary and history_long#
+################################################
+# SET-UP
+CREATE DATABASE stored_programs;
+USE stored_programs;
+CREATE TABLE t1(
+i INT NOT NULL,
+j INT
+) engine=innodb;
+CREATE TABLE t2(
+name CHAR(16) NOT NULL DEFAULT '',
+id INT NOT NULL
+) engine=innodb;
+CREATE TABLE t3(
+d DATE,
+n INT,
+f DOUBLE,
+s VARCHAR(32)
+);
+CREATE TABLE t4(
+`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
+`word` varchar(100) NOT NULL,
+`mean` varchar(300) NOT NULL,
+PRIMARY KEY (`k`)
+);
+############################
+# Creating Stored Programs #
+############################
+# Stored Routine ( Procedure & Function )
+CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
+BEGIN
+INSERT INTO t1 VALUES (x1, y);
+INSERT INTO t1 VALUES (x2, y);
+END|
+CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
+BEGIN
+DECLARE z1, z2 INT;
+SET z1 = y;
+SET z2 = z1+2;
+INSERT INTO t2 VALUES (x, z2);
+END|
+CREATE PROCEDURE SampleProc3()
+BEGIN
+DECLARE ld DATE;
+DECLARE li INT;
+DECLARE lf DOUBLE;
+DECLARE ls VARCHAR(32);
+SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
+INSERT INTO t3 VALUES (ld, li, lf, ls);
+INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null");
+END|
+CREATE PROCEDURE SampleProc4()
+BEGIN
+DECLARE x INT;
+SET x = 1;
+WHILE x <= 2 DO
+INSERT INTO t4(word, mean) VALUES('a','a mean');
+SET x = x + 1;
+END WHILE;
+END|
+CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
+RETURN concat(s1, s2)|
+CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
+RETURNS INT
+DETERMINISTIC
+BEGIN
+DECLARE avg INT;
+SET avg = (n1+n2+n3*2+n4*4)/8;
+RETURN avg;
+END|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+# Triggers
+CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+if isnull(new.j) then
+SET new.j:= new.i * 10;
+END if;
+END|
+CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET i=new.id+i ;
+END|
+CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
+SET @change:= @change + new.id - old.id|
+CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 1|
+CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 8 + old.j|
+#####################
+# Executing queries #
+#####################
+INSERT INTO t1 VALUES (10,20);
+CALL SampleProc1(30,40,50);
+SET @a=1;
+SELECT @a;
+@a
+1
+CALL SampleProc2("Jwalamukhi",34);
+SELECT @a;
+@a
+1
+CALL SampleProc3();
+CALL SampleProc4();
+SET @change=1;
+SELECT @change;
+@change
+1
+UPDATE t2 SET id=22 WHERE name="Jwalamukhi";
+SELECT @change;
+@change
+-13
+SET @del=1;
+SELECT @del;
+@del
+1
+DELETE FROM t1 WHERE i=76;
+SELECT @del;
+@del
+60
+SELECT wt_avg(1, 12, 1990, 1121990);
+wt_avg(1, 12, 1990, 1121990)
+561494
+SELECT fac(5);
+fac(5)
+120
+SELECT append("Bolly", "wood");
+append("Bolly", "wood")
+Bollywood
+# Event
+SET GLOBAL event_scheduler=ON;
+CREATE TABLE table_t(a INT);
+CREATE EVENT e1 ON SCHEDULE EVERY 2 SECOND DO
+BEGIN
+INSERT INTO table_t VALUES(1);
+END|
+SELECT * FROM table_t;
+a
+1
+SET GLOBAL event_scheduler=OFF;
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+FUNCTION stored_programs append 1 1
+EVENT stored_programs e1 1 1
+FUNCTION stored_programs fac 1 19
+PROCEDURE stored_programs sampleproc1 1 2
+PROCEDURE stored_programs sampleproc2 1 5
+PROCEDURE stored_programs sampleproc3 1 10
+PROCEDURE stored_programs sampleproc4 1 11
+TRIGGER stored_programs trg1 3 3
+TRIGGER stored_programs trg2 1 1
+TRIGGER stored_programs trg3 1 1
+TRIGGER stored_programs trg4 1 1
+TRIGGER stored_programs trg5 1 1
+FUNCTION stored_programs wt_avg 1 3
+SELECT EVENT_NAME, SQL_TEXT, CURRENT_SCHEMA, OBJECT_TYPE, OBJECT_SCHEMA,
+OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL FROM
+performance_schema.events_statements_history_long WHERE
+CURRENT_SCHEMA='stored_programs' AND
+(SQL_TEXT not like '%count(*) = 1%' OR SQL_TEXT IS NULL)
+ORDER BY OBJECT_NAME, NESTING_EVENT_LEVEL, SQL_TEXT;
+EVENT_NAME SQL_TEXT CURRENT_SCHEMA OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME NESTING_EVENT_TYPE NESTING_EVENT_LEVEL
+statement/scheduler/event NULL stored_programs NULL NULL NULL NULL 0
+statement/sql/call_procedure CALL SampleProc1(30,40,50) stored_programs NULL NULL NULL NULL 0
+statement/sql/call_procedure CALL SampleProc2("Jwalamukhi",34) stored_programs NULL NULL NULL NULL 0
+statement/sql/call_procedure CALL SampleProc3() stored_programs NULL NULL NULL NULL 0
+statement/sql/call_procedure CALL SampleProc4() stored_programs NULL NULL NULL NULL 0
+statement/sql/create_event CREATE EVENT e1 ON SCHEDULE EVERY 2 SECOND DO
+BEGIN
+INSERT INTO table_t VALUES(1);
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_function CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
+RETURN concat(s1, s2) stored_programs NULL NULL NULL NULL 0
+statement/sql/create_function CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_function CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
+RETURNS INT
+DETERMINISTIC
+BEGIN
+DECLARE avg INT;
+SET avg = (n1+n2+n3*2+n4*4)/8;
+RETURN avg;
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
+BEGIN
+INSERT INTO t1 VALUES (x1, y);
+INSERT INTO t1 VALUES (x2, y);
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
+BEGIN
+DECLARE z1, z2 INT;
+SET z1 = y;
+SET z2 = z1+2;
+INSERT INTO t2 VALUES (x, z2);
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc3()
+BEGIN
+DECLARE ld DATE;
+DECLARE li INT;
+DECLARE lf DOUBLE;
+DECLARE ls VARCHAR(32);
+SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
+INSERT INTO t3 VALUES (ld, li, lf, ls);
+INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null");
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_procedure CREATE PROCEDURE SampleProc4()
+BEGIN
+DECLARE x INT;
+SET x = 1;
+WHILE x <= 2 DO
+INSERT INTO t4(word, mean) VALUES('a','a mean');
+SET x = x + 1;
+END WHILE;
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t1(
+i INT NOT NULL,
+j INT
+) engine=innodb stored_programs NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t2(
+name CHAR(16) NOT NULL DEFAULT '',
+id INT NOT NULL
+) engine=innodb stored_programs NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t3(
+d DATE,
+n INT,
+f DOUBLE,
+s VARCHAR(32)
+) stored_programs NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE t4(
+`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
+`word` varchar(100) NOT NULL,
+`mean` varchar(300) NOT NULL,
+PRIMARY KEY (`k`)
+) stored_programs NULL NULL NULL NULL 0
+statement/sql/create_table CREATE TABLE table_t(a INT) stored_programs NULL NULL NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+if isnull(new.j) then
+SET new.j:= new.i * 10;
+END if;
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET i=new.id+i ;
+END stored_programs NULL NULL NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
+SET @change:= @change + new.id - old.id stored_programs NULL NULL NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 1 stored_programs NULL NULL NULL NULL 0
+statement/sql/create_trigger CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 8 + old.j stored_programs NULL NULL NULL NULL 0
+statement/sql/delete DELETE FROM t1 WHERE i=76 stored_programs NULL NULL NULL NULL 0
+statement/sql/insert INSERT INTO t1 VALUES (10,20) stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT * FROM table_t stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT 5 * 10 stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT @a stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT @a stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT @change stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT @change stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT @del stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT @del stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT append("Bolly", "wood") stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT COUNT(*) = 0 FROM information_schema.processlist
+WHERE user = 'event_scheduler' stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT fac(5) stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME stored_programs NULL NULL NULL NULL 0
+statement/sql/select SELECT wt_avg(1, 12, 1990, 1121990) stored_programs NULL NULL NULL NULL 0
+statement/sql/set_option SET @a=1 stored_programs NULL NULL NULL NULL 0
+statement/sql/set_option SET @change=1 stored_programs NULL NULL NULL NULL 0
+statement/sql/set_option SET @del=1 stored_programs NULL NULL NULL NULL 0
+statement/sql/set_option SET GLOBAL event_scheduler=OFF stored_programs NULL NULL NULL NULL 0
+statement/sql/set_option SET GLOBAL event_scheduler=ON stored_programs NULL NULL NULL NULL 0
+statement/sql/update UPDATE t2 SET id=22 WHERE name="Jwalamukhi" stored_programs NULL NULL NULL NULL 0
+statement/sp/freturn NULL stored_programs FUNCTION stored_programs append STATEMENT 1
+statement/sp/stmt INSERT INTO table_t VALUES(1) stored_programs EVENT stored_programs e1 STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/freturn NULL stored_programs FUNCTION stored_programs fac STATEMENT 1
+statement/sp/stmt INSERT INTO t1 VALUES (x1, y) stored_programs PROCEDURE stored_programs sampleproc1 STATEMENT 1
+statement/sp/stmt INSERT INTO t1 VALUES (x2, y) stored_programs PROCEDURE stored_programs sampleproc1 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc2 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc2 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc2 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc2 STATEMENT 1
+statement/sp/stmt INSERT INTO t2 VALUES (x, z2) stored_programs PROCEDURE stored_programs sampleproc2 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/stmt INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null") stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/stmt INSERT INTO t3 VALUES (ld, li, lf, ls) stored_programs PROCEDURE stored_programs sampleproc3 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/jump NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/set NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/jump NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/stmt INSERT INTO t4(word, mean) VALUES('a','a mean') stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/stmt INSERT INTO t4(word, mean) VALUES('a','a mean') stored_programs PROCEDURE stored_programs sampleproc4 STATEMENT 1
+statement/sp/jump_if_not NULL stored_programs TRIGGER stored_programs trg1 TRANSACTION 1
+statement/sp/jump_if_not NULL stored_programs TRIGGER stored_programs trg1 TRANSACTION 2
+statement/sp/jump_if_not NULL stored_programs TRIGGER stored_programs trg1 TRANSACTION 2
+statement/sp/stmt UPDATE t1 SET i=new.id+i stored_programs TRIGGER stored_programs trg2 TRANSACTION 2
+statement/sp/stmt SET @change:= @change + new.id - old.id stored_programs TRIGGER stored_programs trg3 TRANSACTION 1
+statement/sp/stmt SET @del:= @del + 1 stored_programs TRIGGER stored_programs trg4 TRANSACTION 1
+statement/sp/stmt SET @del:= @del + 8 + old.j stored_programs TRIGGER stored_programs trg5 TRANSACTION 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs wt_avg STATEMENT 1
+statement/sp/set NULL stored_programs FUNCTION stored_programs wt_avg STATEMENT 1
+statement/sp/freturn NULL stored_programs FUNCTION stored_programs wt_avg STATEMENT 1
+# clean -up
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+FUNCTION stored_programs append 0 0
+EVENT stored_programs e1 0 0
+FUNCTION stored_programs fac 0 0
+PROCEDURE stored_programs sampleproc1 0 0
+PROCEDURE stored_programs sampleproc2 0 0
+PROCEDURE stored_programs sampleproc3 0 0
+PROCEDURE stored_programs sampleproc4 0 0
+TRIGGER stored_programs trg1 0 0
+TRIGGER stored_programs trg2 0 0
+TRIGGER stored_programs trg3 0 0
+TRIGGER stored_programs trg4 0 0
+TRIGGER stored_programs trg5 0 0
+FUNCTION stored_programs wt_avg 0 0
+DROP PROCEDURE SampleProc1;
+DROP PROCEDURE SampleProc2;
+DROP PROCEDURE SampleProc3;
+DROP PROCEDURE SampleProc4;
+DROP FUNCTION wt_avg;
+DROP FUNCTION fac;
+DROP FUNCTION append;
+DROP TRIGGER trg1;
+DROP TRIGGER trg2;
+DROP TRIGGER trg3;
+DROP TRIGGER trg4;
+DROP TRIGGER trg5;
+DROP EVENT IF EXISTS e1;
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+DROP TABLE t4;
+DROP TABLE table_t;
+DROP DATABASE stored_programs;
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+# SET-UP
+CREATE DATABASE stored_programs;
+USE stored_programs;
+CREATE TABLE t1(
+i INT NOT NULL,
+j INT
+) engine=innodb;
+CREATE TABLE t2(
+name CHAR(16) NOT NULL DEFAULT '',
+id INT NOT NULL
+) engine=innodb;
+CREATE TABLE t3(
+d DATE,
+n INT,
+f DOUBLE,
+s VARCHAR(32)
+);
+CREATE TABLE t4(
+`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
+`word` varchar(100) NOT NULL,
+`mean` varchar(300) NOT NULL,
+PRIMARY KEY (`k`)
+);
+############################
+# Creating Stored Programs #
+############################
+# Stored Routine ( Procedure & Function )
+CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
+BEGIN
+INSERT INTO t1 VALUES (x1, y);
+INSERT INTO t1 VALUES (x2, y);
+END|
+CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
+BEGIN
+DECLARE z1, z2 INT;
+SET z1 = y;
+SET z2 = z1+2;
+INSERT INTO t2 VALUES (x, z2);
+END|
+CREATE PROCEDURE SampleProc3()
+BEGIN
+DECLARE ld DATE;
+DECLARE li INT;
+DECLARE lf DOUBLE;
+DECLARE ls VARCHAR(32);
+SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
+INSERT INTO t3 VALUES (ld, li, lf, ls);
+INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
+((li IS NULL), 1, "li is null"),
+((li = 0), NULL, "li = 0"),
+((lf IS NULL), 1, "lf is null"),
+((lf = 0), NULL, "lf = 0"),
+((ls IS NULL), 1, "ls is null");
+END|
+CREATE PROCEDURE SampleProc4()
+BEGIN
+DECLARE x INT;
+SET x = 1;
+WHILE x <= 2 DO
+INSERT INTO t4(word, mean) VALUES('a','a mean');
+SET x = x + 1;
+END WHILE;
+END|
+CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
+RETURN concat(s1, s2)|
+CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
+RETURNS INT
+DETERMINISTIC
+BEGIN
+DECLARE avg INT;
+SET avg = (n1+n2+n3*2+n4*4)/8;
+RETURN avg;
+END|
+CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
+BEGIN
+DECLARE f BIGINT UNSIGNED DEFAULT 1;
+WHILE n > 1 DO
+SET f = f * n;
+SET n = n - 1;
+END WHILE;
+RETURN f;
+END|
+# Triggers
+CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+if isnull(new.j) then
+SET new.j:= new.i * 10;
+END if;
+END|
+CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET i=new.id+i ;
+END|
+CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
+SET @change:= @change + new.id - old.id|
+CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 1|
+CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
+SET @del:= @del + 8 + old.j|
+update performance_schema.setup_instruments set enabled='YES', timed='NO'
+ where name like "statement/sp/%" order by name;
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+#####################
+# Executing queries #
+#####################
+INSERT INTO t1 VALUES (10,20);
+CALL SampleProc1(30,40,50);
+SET @a=1;
+SELECT @a;
+@a
+1
+CALL SampleProc2("Jwalamukhi",34);
+SELECT @a;
+@a
+1
+CALL SampleProc3();
+CALL SampleProc4();
+SET @change=1;
+SELECT @change;
+@change
+1
+UPDATE t2 SET id=22 WHERE name="Jwalamukhi";
+SELECT @change;
+@change
+-13
+SET @del=1;
+SELECT @del;
+@del
+1
+DELETE FROM t1 WHERE i=76;
+SELECT @del;
+@del
+60
+SELECT wt_avg(1, 12, 1990, 1121990);
+wt_avg(1, 12, 1990, 1121990)
+561494
+SELECT fac(5);
+fac(5)
+120
+SELECT append("Bolly", "wood");
+append("Bolly", "wood")
+Bollywood
+# Event
+SET GLOBAL event_scheduler=ON;
+CREATE TABLE table_t(a INT);
+CREATE EVENT e1 ON SCHEDULE EVERY 2 SECOND DO
+BEGIN
+INSERT INTO table_t VALUES(1);
+END|
+SELECT * FROM table_t;
+a
+1
+SET GLOBAL event_scheduler=OFF;
+SELECT EVENT_NAME, TIMER_START, TIMER_END, TIMER_WAIT FROM
+performance_schema.events_statements_history_long WHERE
+CURRENT_SCHEMA='stored_programs' AND EVENT_NAME like "statement/sp/%";
+EVENT_NAME TIMER_START TIMER_END TIMER_WAIT
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/set NULL NULL NULL
+statement/sp/jump NULL NULL NULL
+statement/sp/jump_if_not NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/freturn NULL NULL NULL
+statement/sp/stmt NULL NULL NULL
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name like "statement/sp/%" order by name;
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+DROP PROCEDURE SampleProc1;
+DROP PROCEDURE SampleProc2;
+DROP PROCEDURE SampleProc3;
+DROP PROCEDURE SampleProc4;
+DROP FUNCTION wt_avg;
+DROP FUNCTION fac;
+DROP FUNCTION append;
+DROP TRIGGER trg1;
+DROP TRIGGER trg2;
+DROP TRIGGER trg3;
+DROP TRIGGER trg4;
+DROP TRIGGER trg5;
+DROP EVENT IF EXISTS e1;
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+DROP TABLE t4;
+DROP TABLE table_t;
+DROP DATABASE stored_programs;
+# set-up
+CREATE DATABASE sp;
+USE sp;
+CREATE TABLE t1(
+a INT,
+b INT
+);
+# let the creation of the following stored programs fail
+CREATE PROCEDURE fail1(IN a INT OUT x CHAR(16))
+SET a=1;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'OUT x CHAR(16))
+SET a=1' at line 1
+CREATE FUNCTION fail2(a INT , b INT) RETURNS INT
+x=SELECT COUNT(*) FROM t;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=SELECT COUNT(*) FROM t' at line 2
+CREATE EVENT fail3 SCHEDULE EVERY MICROSECOND DO
+DROP TABLE t;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SCHEDULE EVERY MICROSECOND DO
+DROP TABLE t' at line 1
+# the below query on PS table doesn't show any rows
+# as the creation of stored programs failed
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='sp';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+# create few stored programs
+CREATE PROCEDURE p(x1 INT, x2 INT)
+BEGIN
+INSERT INTO t1 VALUES (x1, x2);
+END|
+CREATE FUNCTION f(y1 INT, y2 INT) RETURNS INT
+RETURN y1+y2;
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+SET @neg=-1;
+# execute the created stored programs such that they fail.
+CALL p(7);
+ERROR 42000: Incorrect number of arguments for PROCEDURE sp.p; expected 2, got 1
+SELECT f("add",1,3);
+ERROR 42000: Incorrect number of arguments for FUNCTION sp.f; expected 2, got 3
+INSERT INTO t1;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
+# the below query on PS table doesn't expose any statistics as
+# execution of the created stored porgrams failed.
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+FROM performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='sp';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR COUNT_STATEMENTS
+PROCEDURE sp p 0 0
+FUNCTION sp f 0 0
+#clean-up
+DROP PROCEDURE p;
+DROP FUNCTION f;
+DROP TRIGGER trg;
+DROP TABLE t1;
+DROP DATABASE sp;
diff --git a/mysql-test/suite/perfschema/r/status_reprepare.result b/mysql-test/suite/perfschema/r/status_reprepare.result
new file mode 100644
index 00000000000..4ff713b9200
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/status_reprepare.result
@@ -0,0 +1,42 @@
+
+================================================================================
+SETUP
+================================================================================
+connect con1, localhost, root,,;
+CREATE TABLE test.t1 (c1 INT);
+PREPARE stmt1 FROM "SELECT c1 FROM test.t1";
+EXECUTE stmt1;
+c1
+SHOW SESSION STATUS LIKE "%com_stmt_%prepare%";
+Variable_name Value
+Com_stmt_prepare 1
+Com_stmt_reprepare 0
+SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME LIKE "%com_stmt%";
+VARIABLE_NAME VARIABLE_VALUE
+Com_stmt_reprepare 0
+SELECT VARIABLE_VALUE INTO @count_global_reprepare_before
+FROM performance_schema.global_status
+WHERE VARIABLE_NAME LIKE "Com_stmt_reprepare";
+ALTER TABLE test.t1 ADD COLUMN c2 INTEGER;
+EXECUTE stmt1;
+c1
+SHOW SESSION STATUS LIKE "%com_stmt_%prepare%";
+Variable_name Value
+Com_stmt_prepare 2
+Com_stmt_reprepare 1
+SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME LIKE "%com_stmt%";
+VARIABLE_NAME VARIABLE_VALUE
+Com_stmt_reprepare 1
+SELECT VARIABLE_VALUE INTO @count_global_reprepare_after
+FROM performance_schema.global_status
+WHERE VARIABLE_NAME LIKE "Com_stmt_reprepare";
+SELECT @count_global_reprepare_after - @count_global_reprepare_before;
+@count_global_reprepare_after - @count_global_reprepare_before
+1
+
+================================================================================
+CLEANUP
+================================================================================
+DROP TABLE test.t1;
+disconnect con1;
+connection default;
diff --git a/mysql-test/suite/perfschema/r/sxlock_func.result b/mysql-test/suite/perfschema/r/sxlock_func.result
new file mode 100644
index 00000000000..21ecd5eee0b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/sxlock_func.result
@@ -0,0 +1,65 @@
+UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
+UPDATE performance_schema.setup_instruments SET enabled = 'YES'
+WHERE name like 'wait/synch/sxlock/%';
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+select name from performance_schema.setup_instruments
+where name like "wait/synch/sxlock/%"
+ and name not in
+("wait/synch/sxlock/innodb/buf_block_lock",
+"wait/synch/sxlock/innodb/buf_block_debug_latch")
+order by name;
+name
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/dict_operation_lock
+wait/synch/sxlock/innodb/dict_table_stats
+wait/synch/sxlock/innodb/fil_space_latch
+wait/synch/sxlock/innodb/fts_cache_init_rw_lock
+wait/synch/sxlock/innodb/fts_cache_rw_lock
+wait/synch/sxlock/innodb/hash_table_locks
+wait/synch/sxlock/innodb/index_online_log
+wait/synch/sxlock/innodb/index_tree_rw_lock
+wait/synch/sxlock/innodb/trx_i_s_cache_lock
+wait/synch/sxlock/innodb/trx_purge_latch
+select name from performance_schema.rwlock_instances
+where name in
+(
+'wait/synch/sxlock/innodb/btr_search_latch',
+'wait/synch/sxlock/innodb/checkpoint_lock',
+'wait/synch/sxlock/innodb/dict_operation_lock',
+'wait/synch/sxlock/innodb/trx_i_s_cache_lock',
+'wait/synch/sxlock/innodb/trx_purge_latch'
+ )
+order by name;
+name
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/btr_search_latch
+wait/synch/sxlock/innodb/dict_operation_lock
+wait/synch/sxlock/innodb/trx_i_s_cache_lock
+wait/synch/sxlock/innodb/trx_purge_latch
+drop table if exists t1;
+create table t1(a int) engine=innodb;
+begin;
+insert into t1 values (1), (2), (3);
+insert into t1 values (1), (2), (3);
+insert into t1 values (1), (2), (3);
+commit;
+drop table t1;
+select operation from performance_schema.events_waits_history_long
+where event_name like "wait/synch/sxlock/%"
+ and operation = "shared_lock" limit 1;
+operation
+shared_lock
+select operation from performance_schema.events_waits_history_long
+where event_name like "wait/synch/sxlock/%"
+ and operation = "exclusive_lock" limit 1;
+operation
+exclusive_lock
+UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_global_2u_2t.result b/mysql-test/suite/perfschema/r/table_aggregate_global_2u_2t.result
index dfaa91a3fbc..bc0367b83bf 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_global_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_global_2u_2t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,15 +167,71 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 0
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -213,7 +256,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -223,29 +266,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -281,7 +318,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -291,29 +328,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -345,11 +376,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -384,39 +415,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -457,39 +482,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -527,11 +546,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -572,39 +591,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -650,39 +663,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -726,11 +733,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -777,39 +784,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 96
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
+TABLE test t1 87
TABLE test t2 0
-TABLE test t3 184
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -856,39 +857,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
@@ -932,39 +927,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1008,39 +997,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1081,39 +1064,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1153,39 +1130,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1224,39 +1195,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1294,39 +1259,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1366,39 +1325,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1437,39 +1390,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1508,39 +1455,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1579,39 +1520,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1660,10 +1595,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1671,19 +1602,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1693,9 +1622,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1705,6 +1640,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_global_2u_3t.result b/mysql-test/suite/perfschema/r/table_aggregate_global_2u_3t.result
index 2a6537fd6bd..1be707c48ed 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_global_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_global_2u_3t.result
@@ -4,9 +4,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,15 +176,77 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 22
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -212,7 +271,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -222,29 +281,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -280,7 +339,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -290,29 +349,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -344,11 +403,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -383,39 +442,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -456,39 +515,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -526,11 +585,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -571,39 +630,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -649,39 +708,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -725,11 +784,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -776,39 +835,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 144
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
-TABLE test t2 132
-TABLE test t3 184
+TABLE test t1 87
+TABLE test t2 124
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -855,39 +914,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
@@ -931,39 +990,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1007,39 +1066,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1080,39 +1139,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1152,39 +1211,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1223,39 +1282,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1293,39 +1352,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1365,39 +1424,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1436,39 +1495,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1507,39 +1566,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1578,39 +1637,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1673,16 +1732,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1692,9 +1751,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1704,6 +1769,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_global_4u_2t.result b/mysql-test/suite/perfschema/r/table_aggregate_global_4u_2t.result
index 3eddd735aa2..0ed76c7ef06 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_global_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_global_4u_2t.result
@@ -4,11 +4,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,15 +167,71 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 0
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -213,7 +256,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -223,29 +266,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -281,7 +318,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -291,29 +328,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -345,11 +376,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -384,39 +415,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -457,39 +482,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -527,11 +546,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -572,39 +591,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -650,39 +663,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -726,11 +733,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -777,39 +784,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 96
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
+TABLE test t1 87
TABLE test t2 0
-TABLE test t3 184
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -856,39 +857,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
@@ -932,39 +927,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1008,39 +997,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1081,39 +1064,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1153,39 +1130,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1224,39 +1195,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1294,39 +1259,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1366,39 +1325,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1437,39 +1390,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1508,39 +1455,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1579,39 +1520,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1660,10 +1595,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1671,19 +1602,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1693,9 +1622,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1705,6 +1640,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_global_4u_3t.result b/mysql-test/suite/perfschema/r/table_aggregate_global_4u_3t.result
index fed189a7667..5d816b58777 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_global_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_global_4u_3t.result
@@ -2,11 +2,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name='thread_instrumentation';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,15 +176,77 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 22
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -212,7 +271,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -222,29 +281,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -280,7 +339,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -290,29 +349,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -344,11 +403,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -383,39 +442,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -456,39 +515,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -526,11 +585,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -571,39 +630,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -649,39 +708,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -725,11 +784,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -776,39 +835,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 144
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
-TABLE test t2 132
-TABLE test t3 184
+TABLE test t1 87
+TABLE test t2 124
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -855,39 +914,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
@@ -931,39 +990,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1007,39 +1066,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1080,39 +1139,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1152,39 +1211,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1223,39 +1282,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1293,39 +1352,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1365,39 +1424,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1436,39 +1495,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1507,39 +1566,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1578,39 +1637,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1673,16 +1732,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1692,9 +1751,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1704,6 +1769,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_2t.result b/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_2t.result
index ee95e4c0417..52ece6d289d 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_2t.result
@@ -4,9 +4,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -20,6 +20,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -63,28 +66,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -126,28 +121,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -178,18 +165,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username status
user2 not found
@@ -199,25 +186,25 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -225,29 +212,83 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/io/table/sql/handler 15 TABLE test t3
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 0
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +297,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,29 +308,29 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -297,29 +338,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -351,11 +386,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -363,7 +398,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -374,29 +409,29 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -404,29 +439,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -435,7 +464,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -447,7 +476,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -455,7 +484,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -463,17 +492,17 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -481,29 +510,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -541,11 +564,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -554,75 +577,69 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
+TABLE test t1 41
TABLE test t2 0
-TABLE test t3 82
+TABLE test t3 78
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -631,80 +648,74 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
+TABLE test t1 41
TABLE test t2 0
-TABLE test t3 82
+TABLE test t3 78
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -748,11 +759,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -762,80 +773,74 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
+TABLE test t1 41
TABLE test t2 0
-TABLE test t3 82
+TABLE test t3 78
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -845,240 +850,222 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1088,74 +1075,68 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1164,74 +1145,68 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1246,67 +1221,61 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1320,67 +1289,61 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1396,67 +1359,61 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1481,57 +1438,51 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1566,47 +1517,41 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1645,43 +1590,37 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1724,9 +1663,9 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -1734,10 +1673,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1745,19 +1680,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1767,9 +1700,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1779,6 +1718,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_3t.result b/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_3t.result
index d6e4e674258..b0ea06f4254 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_hist_2u_3t.result
@@ -2,9 +2,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -19,6 +19,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -62,15 +65,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -80,10 +80,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -125,15 +125,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -143,10 +140,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -177,18 +174,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username status
user2 not found
@@ -198,27 +195,27 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 10 TABLE test t2
wait/lock/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -226,29 +223,97 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/io/table/sql/handler 10 TABLE test t2
+wait/lock/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 22
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -257,7 +322,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -268,31 +333,31 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 10 TABLE test t2
wait/lock/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -300,29 +365,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -354,11 +419,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -366,7 +431,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -377,31 +442,31 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 10 TABLE test t2
wait/lock/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -409,29 +474,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -440,7 +505,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -452,7 +517,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -460,7 +525,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -468,19 +533,19 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 10 TABLE test t2
wait/lock/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -488,29 +553,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -548,11 +613,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -561,77 +626,77 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 24 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
-TABLE test t2 60
-TABLE test t3 82
+TABLE test t1 41
+TABLE test t2 56
+TABLE test t3 78
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -640,82 +705,82 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 24 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
-TABLE test t2 60
-TABLE test t3 82
+TABLE test t1 41
+TABLE test t2 56
+TABLE test t3 78
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -759,11 +824,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -773,82 +838,82 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 24 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
-TABLE test t2 60
-TABLE test t3 82
+TABLE test t1 41
+TABLE test t2 56
+TABLE test t3 78
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -858,246 +923,246 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1107,76 +1172,76 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1185,76 +1250,76 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1269,69 +1334,69 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1345,69 +1410,69 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1423,69 +1488,69 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1510,59 +1575,59 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1597,49 +1662,49 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1678,45 +1743,45 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1759,11 +1824,11 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
+wait/io/table/sql/handler 21 TABLE test t1
wait/lock/table/sql/handler 24 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
+wait/io/table/sql/handler 32 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 50 TABLE test t3
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -1785,16 +1850,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1804,9 +1869,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1816,6 +1887,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_2t.result b/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_2t.result
index 2d2a55efa77..0a6dea739e4 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_2t.result
@@ -2,11 +2,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -20,6 +20,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -63,28 +66,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -126,28 +121,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -178,18 +165,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username status
user2 not found
@@ -199,25 +186,25 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -225,29 +212,83 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/io/table/sql/handler 15 TABLE test t3
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 0
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +297,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,29 +308,29 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -297,29 +338,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -351,11 +386,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -363,10 +398,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username status
user3 not found
@@ -374,59 +409,53 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
+wait/io/table/sql/handler 18 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 40 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -435,10 +464,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -447,63 +476,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
+wait/io/table/sql/handler 18 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 40 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -541,11 +564,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -554,75 +577,69 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
+wait/io/table/sql/handler 31 TABLE test t1
wait/lock/table/sql/handler 30 TABLE test t1
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 75 TABLE test t3
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -631,80 +648,74 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
+wait/io/table/sql/handler 31 TABLE test t1
wait/lock/table/sql/handler 30 TABLE test t1
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 75 TABLE test t3
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -748,11 +759,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -762,80 +773,74 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 96
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 96
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 40 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 56 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
+TABLE test t1 87
TABLE test t2 0
-TABLE test t3 184
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -845,317 +850,293 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1164,74 +1145,68 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1242,71 +1217,65 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1320,67 +1289,61 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1396,67 +1359,61 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1481,57 +1438,51 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1566,47 +1517,41 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1645,43 +1590,37 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1724,9 +1663,9 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -1734,10 +1673,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1745,19 +1680,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1767,9 +1700,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1779,6 +1718,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_3t.result b/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_3t.result
index de8fc4702a6..c2eda2b8f23 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_hist_4u_3t.result
@@ -1,10 +1,10 @@
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -19,6 +19,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -62,15 +65,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -80,10 +80,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -125,15 +125,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -143,10 +140,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -177,18 +174,86 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/io/table/sql/handler 10 TABLE test t2
+wait/lock/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 22
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username status
user2 not found
@@ -198,27 +263,27 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 10 TABLE test t2
wait/lock/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -226,29 +291,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -257,7 +322,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -268,31 +333,31 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
wait/lock/table/sql/handler 10 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
+wait/io/table/sql/handler 10 TABLE test t2
wait/lock/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -300,29 +365,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -354,11 +419,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -366,10 +431,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username status
user3 not found
@@ -377,61 +442,61 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
+wait/io/table/sql/handler 18 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 30 TABLE test t2
+wait/io/table/sql/handler 26 TABLE test t2
wait/lock/table/sql/handler 24 TABLE test t2
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 40 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -440,10 +505,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -452,65 +517,65 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
+wait/io/table/sql/handler 18 TABLE test t1
wait/lock/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 30 TABLE test t2
+wait/io/table/sql/handler 26 TABLE test t2
wait/lock/table/sql/handler 24 TABLE test t2
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 40 TABLE test t3
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -548,11 +613,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -561,77 +626,77 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 108
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
+wait/io/table/sql/handler 31 TABLE test t1
wait/lock/table/sql/handler 30 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t2
+wait/io/table/sql/handler 48 TABLE test t2
wait/lock/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 75 TABLE test t3
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -640,82 +705,82 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 108
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
+wait/io/table/sql/handler 31 TABLE test t1
wait/lock/table/sql/handler 30 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t2
+wait/io/table/sql/handler 48 TABLE test t2
wait/lock/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 75 TABLE test t3
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -759,11 +824,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -773,82 +838,82 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 144
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 144
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 40 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 48 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 56 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
-TABLE test t2 132
-TABLE test t3 184
+TABLE test t1 87
+TABLE test t2 124
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -858,325 +923,325 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1185,76 +1250,76 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1265,73 +1330,73 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1345,69 +1410,69 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1423,69 +1488,69 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1510,59 +1575,59 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1597,49 +1662,49 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1678,45 +1743,45 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1759,11 +1824,11 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
+wait/io/table/sql/handler 47 TABLE test t1
wait/lock/table/sql/handler 44 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
+wait/io/table/sql/handler 76 TABLE test t2
wait/lock/table/sql/handler 52 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 120 TABLE test t3
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
@@ -1785,16 +1850,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1804,9 +1869,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1816,6 +1887,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_off.result b/mysql-test/suite/perfschema/r/table_aggregate_off.result
index 77a714563fe..22fd9f9daf5 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_off.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_off.result
@@ -2,11 +2,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name='global_instrumentation';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,15 +176,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -218,15 +215,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -236,10 +230,69 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 0
+TABLE test t2 0
+TABLE test t3 0
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -286,15 +339,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -304,10 +354,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -344,11 +394,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -389,15 +439,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -407,10 +454,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -462,15 +509,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -480,10 +524,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -526,11 +570,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -577,15 +621,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -595,10 +636,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -655,15 +696,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -673,10 +711,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -725,11 +763,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -782,15 +820,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -800,10 +835,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -861,15 +896,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -879,10 +911,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -937,15 +969,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -955,10 +984,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1013,15 +1042,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1031,10 +1057,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1086,15 +1112,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1104,10 +1127,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1158,15 +1181,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1176,10 +1196,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1229,15 +1249,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1247,10 +1264,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1299,15 +1316,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1317,10 +1331,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1371,15 +1385,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1389,10 +1400,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1442,15 +1453,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1460,10 +1468,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1513,15 +1521,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1531,10 +1536,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1584,15 +1589,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1602,10 +1604,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -1655,15 +1657,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1673,16 +1672,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1692,9 +1691,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1704,6 +1709,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_2t.result b/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_2t.result
index c176679a95d..eb4bdc0317e 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_2t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,18 +167,74 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 0
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username status
user2 not found
@@ -201,19 +244,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -223,29 +266,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -254,7 +291,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -265,23 +302,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -291,29 +328,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -345,11 +376,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -357,7 +388,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -368,23 +399,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -394,29 +425,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -425,7 +450,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -437,7 +462,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -445,7 +470,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -453,11 +478,11 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -467,29 +492,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -527,11 +546,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -540,71 +559,65 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
+TABLE test t1 41
TABLE test t2 0
-TABLE test t3 82
+TABLE test t3 78
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -613,76 +626,70 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
+TABLE test t1 41
TABLE test t2 0
-TABLE test t3 82
+TABLE test t3 78
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -726,11 +733,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -740,76 +747,70 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
+TABLE test t1 41
TABLE test t2 0
-TABLE test t3 82
+TABLE test t3 78
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -819,228 +820,210 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1050,70 +1033,64 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1122,70 +1099,64 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1200,63 +1171,57 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1270,63 +1235,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1342,63 +1301,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1423,53 +1376,47 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1504,43 +1451,37 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 56
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1579,39 +1520,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 56
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
+TABLE test t1 45
TABLE test t2 0
-TABLE test t3 86
+TABLE test t3 82
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1660,10 +1595,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1671,19 +1602,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1693,9 +1622,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1705,6 +1640,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_3t.result b/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_3t.result
index 38c8813ea18..3d993ada59f 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_thread_2u_3t.result
@@ -4,9 +4,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,18 +176,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username status
user2 not found
@@ -200,19 +197,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -222,29 +219,91 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 22
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -253,7 +312,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -264,23 +323,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -290,29 +349,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -344,11 +403,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -356,7 +415,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -367,23 +426,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -393,29 +452,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -424,7 +483,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -436,7 +495,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -444,7 +503,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -452,11 +511,11 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -466,29 +525,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -526,11 +585,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -539,71 +598,71 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
-TABLE test t2 60
-TABLE test t3 82
+TABLE test t1 41
+TABLE test t2 56
+TABLE test t3 78
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -612,76 +671,76 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
-TABLE test t2 60
-TABLE test t3 82
+TABLE test t1 41
+TABLE test t2 56
+TABLE test t3 78
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -725,11 +784,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -739,76 +798,76 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 43
-TABLE test t2 60
-TABLE test t3 82
+TABLE test t1 41
+TABLE test t2 56
+TABLE test t3 78
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -818,228 +877,228 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1049,70 +1108,70 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1121,70 +1180,70 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1199,63 +1258,63 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1269,63 +1328,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1341,63 +1400,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1422,53 +1481,53 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1503,43 +1562,43 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 84
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1578,39 +1637,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 84
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 47
-TABLE test t2 64
-TABLE test t3 86
+TABLE test t1 45
+TABLE test t2 60
+TABLE test t3 82
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1673,16 +1732,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1692,9 +1751,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1704,6 +1769,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_2t.result b/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_2t.result
index 9144d81c8a0..0c4f6592245 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_2t.result
@@ -4,11 +4,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,18 +167,74 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 0
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username status
user2 not found
@@ -201,19 +244,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -223,29 +266,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -254,7 +291,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -265,23 +302,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 24
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 24
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -291,29 +328,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
TABLE test t2 0
-TABLE test t3 31
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -345,11 +376,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -357,10 +388,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username status
user3 not found
@@ -368,55 +399,49 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -425,10 +450,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -437,59 +462,53 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 48
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 48
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
+TABLE test t1 38
TABLE test t2 0
-TABLE test t3 72
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -527,11 +546,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -540,71 +559,65 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -613,76 +626,70 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
+TABLE test t1 61
TABLE test t2 0
-TABLE test t3 123
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -726,11 +733,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -740,76 +747,70 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 24
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 24
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 96
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 96
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
+TABLE test t1 87
TABLE test t2 0
-TABLE test t3 184
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -819,301 +820,277 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1122,70 +1099,64 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1196,67 +1167,61 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1270,63 +1235,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1342,63 +1301,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 32
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 24
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 24
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 24
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1423,53 +1376,47 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 32
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 24
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 24
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 24
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1504,43 +1451,37 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 104
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1579,39 +1520,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 104
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
+TABLE test t1 91
TABLE test t2 0
-TABLE test t3 188
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1660,10 +1595,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1671,19 +1602,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1693,9 +1622,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1705,6 +1640,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_3t.result b/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_3t.result
index 10736990dbe..603e5950b12 100644
--- a/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_aggregate_thread_4u_3t.result
@@ -2,11 +2,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name like 'event%';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,18 +176,80 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 18
+TABLE test t2 22
+TABLE test t3 29
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username status
user2 not found
@@ -200,19 +259,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -222,29 +281,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -253,7 +312,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -264,23 +323,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 36
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 36
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -290,29 +349,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 18
-TABLE test t2 24
-TABLE test t3 31
+TABLE test t2 22
+TABLE test t3 29
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -344,11 +403,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -356,10 +415,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username status
user3 not found
@@ -367,55 +426,55 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -424,10 +483,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -436,59 +495,59 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 72
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 72
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 40
-TABLE test t2 54
-TABLE test t3 72
+TABLE test t1 38
+TABLE test t2 50
+TABLE test t3 68
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -526,11 +585,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -539,71 +598,71 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 108
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -612,76 +671,76 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 108
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 108
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 65
-TABLE test t2 90
-TABLE test t3 123
+TABLE test t1 61
+TABLE test t2 84
+TABLE test t3 117
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -725,11 +784,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -739,76 +798,76 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 36
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 36
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 144
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 144
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 93
-TABLE test t2 132
-TABLE test t3 184
+TABLE test t1 87
+TABLE test t2 124
+TABLE test t3 176
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -818,301 +877,301 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1121,70 +1180,70 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1195,67 +1254,67 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1269,63 +1328,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1341,63 +1400,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 48
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 36
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 36
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 36
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1422,53 +1481,53 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 48
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 36
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 36
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 36
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1503,43 +1562,43 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 156
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1578,39 +1637,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 156
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 97
-TABLE test t2 136
-TABLE test t3 188
+TABLE test t1 91
+TABLE test t2 128
+TABLE test t3 180
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1673,16 +1732,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1692,9 +1751,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1704,6 +1769,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_2t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_2t.result
index a8fd0a7eb72..abecba095bb 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_2t.result
@@ -8,9 +8,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,15 +169,71 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 0
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -215,7 +258,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -225,29 +268,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -283,7 +320,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -293,29 +330,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -347,11 +378,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -386,39 +417,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -459,39 +484,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -529,11 +548,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -574,39 +593,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -652,39 +665,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -728,11 +735,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -779,39 +786,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -858,39 +859,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
@@ -934,39 +929,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1010,39 +999,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1083,39 +1066,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1155,39 +1132,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1226,39 +1197,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1296,39 +1261,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1368,39 +1327,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1439,39 +1392,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1510,39 +1457,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1581,39 +1522,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1662,10 +1597,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1673,19 +1604,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1624,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1642,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_3t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_3t.result
index 701a25194f4..6df4cad7899 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_global_2u_3t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,15 +178,77 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 10
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -214,7 +273,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -224,29 +283,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -282,7 +341,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -292,29 +351,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -346,11 +405,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -385,39 +444,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -458,39 +517,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -528,11 +587,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -573,39 +632,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -651,39 +710,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -727,11 +786,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -778,39 +837,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -857,39 +916,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
@@ -933,39 +992,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1009,39 +1068,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1082,39 +1141,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1154,39 +1213,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1225,39 +1284,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1295,39 +1354,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1367,39 +1426,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1438,39 +1497,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1509,39 +1568,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1580,39 +1639,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1675,16 +1734,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1753,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1771,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_2t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_2t.result
index 4d8d625ee00..47397d72d4a 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_2t.result
@@ -6,11 +6,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,15 +169,71 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 0
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -215,7 +258,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -225,29 +268,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -283,7 +320,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -293,29 +330,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -347,11 +378,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -386,39 +417,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -459,39 +484,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -529,11 +548,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -574,39 +593,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -652,39 +665,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -728,11 +735,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -779,39 +786,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -858,39 +859,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
@@ -934,39 +929,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1010,39 +999,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1083,39 +1066,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1155,39 +1132,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1226,39 +1197,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1296,39 +1261,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1368,39 +1327,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1439,39 +1392,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1510,39 +1457,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1581,39 +1522,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1662,10 +1597,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1673,19 +1604,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1624,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1642,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_3t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_3t.result
index 8a8de99fd4f..a697a1ae36d 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_global_4u_3t.result
@@ -4,11 +4,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name='thread_instrumentation';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,15 +178,77 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 10
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -214,7 +273,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -224,29 +283,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -282,7 +341,7 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -292,29 +351,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -346,11 +405,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -385,39 +444,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -458,39 +517,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -528,11 +587,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -573,39 +632,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -651,39 +710,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -727,11 +786,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -778,39 +837,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -857,39 +916,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
@@ -933,39 +992,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
@@ -1009,39 +1068,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1082,39 +1141,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1154,39 +1213,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1225,39 +1284,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1295,39 +1354,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1367,39 +1426,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1438,39 +1497,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1509,39 +1568,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1580,39 +1639,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1675,16 +1734,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1753,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1771,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_2t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_2t.result
index 987732538c4..1b0ba5e2235 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_2t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,18 +167,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -201,53 +188,105 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/io/table/sql/handler 15 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 0
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +295,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,57 +306,51 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -349,11 +382,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -361,7 +394,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -372,57 +405,51 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -431,7 +458,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -443,7 +470,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -451,7 +478,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -459,45 +486,39 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -535,11 +556,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -548,73 +569,67 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -623,78 +638,72 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -738,11 +747,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -752,78 +761,72 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -833,234 +836,216 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1070,72 +1055,66 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1144,72 +1123,66 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1224,65 +1197,59 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1296,65 +1263,59 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1370,65 +1331,59 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1453,55 +1408,49 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1536,45 +1485,39 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1613,41 +1556,35 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1690,18 +1627,14 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1709,19 +1642,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1731,9 +1662,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1743,6 +1680,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_3t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_3t.result
index 324c6534303..b1813a1616e 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_2u_3t.result
@@ -4,9 +4,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,18 +176,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -200,54 +197,119 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 10
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +318,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,58 +329,58 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -350,11 +412,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -362,7 +424,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -373,58 +435,58 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -433,7 +495,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -445,7 +507,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -453,7 +515,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -461,46 +523,46 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -538,11 +600,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -551,74 +613,74 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -627,79 +689,79 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -743,11 +805,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -757,79 +819,79 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -839,237 +901,237 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1079,73 +1141,73 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1154,73 +1216,73 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1235,66 +1297,66 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1308,66 +1370,66 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1383,66 +1445,66 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1467,56 +1529,56 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1551,46 +1613,46 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1629,42 +1691,42 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1707,9 +1769,9 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 23 TABLE test t1
-wait/io/table/sql/handler 36 TABLE test t2
-wait/io/table/sql/handler 54 TABLE test t3
+wait/io/table/sql/handler 21 TABLE test t1
+wait/io/table/sql/handler 32 TABLE test t2
+wait/io/table/sql/handler 50 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 0 0 0 0 0 0 0
@@ -1730,16 +1792,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1749,9 +1811,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1761,6 +1829,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_2t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_2t.result
index 914bcc7084b..a19d3798e8b 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_2t.result
@@ -4,11 +4,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,18 +167,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -201,53 +188,105 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/io/table/sql/handler 15 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 0
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +295,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,57 +306,51 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -349,11 +382,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -361,10 +394,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username status
user3 not found
@@ -372,57 +405,51 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 18 TABLE test t1
+wait/io/table/sql/handler 40 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -431,10 +458,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -443,61 +470,55 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 18 TABLE test t1
+wait/io/table/sql/handler 40 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -535,11 +556,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -548,73 +569,67 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 31 TABLE test t1
+wait/io/table/sql/handler 75 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -623,78 +638,72 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 31 TABLE test t1
+wait/io/table/sql/handler 75 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -738,11 +747,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -752,78 +761,72 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -833,309 +836,285 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1144,72 +1123,66 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1220,69 +1193,63 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1296,65 +1263,59 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1370,65 +1331,59 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1453,55 +1408,49 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1536,45 +1485,39 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1613,41 +1556,35 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1690,18 +1627,14 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1709,19 +1642,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1731,9 +1662,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1743,6 +1680,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_3t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_3t.result
index f92ebe8e467..6266fce73ad 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_hist_4u_3t.result
@@ -2,11 +2,11 @@ update performance_schema.setup_instruments
set enabled='NO' where name='wait/lock/table/sql/handler';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,18 +176,18 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -200,54 +197,119 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/io/table/sql/handler 8 TABLE test t1
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 10
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +318,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,58 +329,58 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
wait/io/table/sql/handler 8 TABLE test t1
-wait/io/table/sql/handler 12 TABLE test t2
-wait/io/table/sql/handler 17 TABLE test t3
+wait/io/table/sql/handler 10 TABLE test t2
+wait/io/table/sql/handler 15 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -350,11 +412,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -362,10 +424,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username status
user3 not found
@@ -373,58 +435,58 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 30 TABLE test t2
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 18 TABLE test t1
+wait/io/table/sql/handler 26 TABLE test t2
+wait/io/table/sql/handler 40 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -433,10 +495,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -445,62 +507,62 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 20 TABLE test t1
-wait/io/table/sql/handler 30 TABLE test t2
-wait/io/table/sql/handler 44 TABLE test t3
+wait/io/table/sql/handler 18 TABLE test t1
+wait/io/table/sql/handler 26 TABLE test t2
+wait/io/table/sql/handler 40 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -538,11 +600,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -551,74 +613,74 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t2
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 31 TABLE test t1
+wait/io/table/sql/handler 48 TABLE test t2
+wait/io/table/sql/handler 75 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -627,79 +689,79 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 35 TABLE test t1
-wait/io/table/sql/handler 54 TABLE test t2
-wait/io/table/sql/handler 81 TABLE test t3
+wait/io/table/sql/handler 31 TABLE test t1
+wait/io/table/sql/handler 48 TABLE test t2
+wait/io/table/sql/handler 75 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -743,11 +805,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -757,79 +819,79 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -839,313 +901,313 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1154,73 +1216,73 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1231,70 +1293,70 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1308,66 +1370,66 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1383,66 +1445,66 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1467,56 +1529,56 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1551,46 +1613,46 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1629,42 +1691,42 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1707,9 +1769,9 @@ wait/io/table/sql/handler 0
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
-wait/io/table/sql/handler 53 TABLE test t1
-wait/io/table/sql/handler 84 TABLE test t2
-wait/io/table/sql/handler 128 TABLE test t3
+wait/io/table/sql/handler 47 TABLE test t1
+wait/io/table/sql/handler 76 TABLE test t2
+wait/io/table/sql/handler 120 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 NULL 0 0 0 0 0 0 0
@@ -1730,16 +1792,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1749,9 +1811,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1761,6 +1829,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_2t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_2t.result
index 8eb52d58efc..563793465c1 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_2t.result
@@ -8,9 +8,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,18 +169,74 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 0
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -203,19 +246,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -225,29 +268,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +293,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,23 +304,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -293,29 +330,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -347,11 +378,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -359,7 +390,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -370,23 +401,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -396,29 +427,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -427,7 +452,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -439,7 +464,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -447,7 +472,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -455,11 +480,11 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -469,29 +494,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -529,11 +548,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -542,71 +561,65 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -615,76 +628,70 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -728,11 +735,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -742,76 +749,70 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -821,228 +822,210 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1052,70 +1035,64 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1124,70 +1101,64 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1202,63 +1173,57 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1272,63 +1237,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1344,63 +1303,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1425,53 +1378,47 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1506,43 +1453,37 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 77
+localhost wait/io/table/sql/handler 71
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1581,39 +1522,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 77
+wait/io/table/sql/handler 71
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
+TABLE test t1 21
TABLE test t2 0
-TABLE test t3 54
+TABLE test t3 50
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1662,10 +1597,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1673,19 +1604,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1624,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1642,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_3t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_3t.result
index fba8a48ad35..8cf139c412c 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_2u_3t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,18 +178,80 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 10
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -202,19 +261,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -224,29 +283,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -255,7 +314,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -266,23 +325,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -292,29 +351,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -346,11 +405,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -358,7 +417,7 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -369,23 +428,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -395,29 +454,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -426,7 +485,7 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -438,7 +497,7 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
@@ -446,7 +505,7 @@ user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
@@ -454,11 +513,11 @@ user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -468,29 +527,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -528,11 +587,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -541,71 +600,71 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -614,76 +673,76 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -727,11 +786,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -741,76 +800,76 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -820,228 +879,228 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con1;
"================== Step 13 =================="
call dump_thread();
@@ -1051,70 +1110,70 @@ username event_name count_star
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1123,70 +1182,70 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1201,63 +1260,63 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1271,63 +1330,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1343,63 +1402,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1424,53 +1483,53 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1505,43 +1564,43 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 113
+localhost wait/io/table/sql/handler 103
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1580,39 +1639,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 113
+wait/io/table/sql/handler 103
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 18 12 6 12 2 4 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 17 11 6 11 2 4 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 32 20 12 20 4 8 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 30 18 12 18 4 8 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 46 28 18 28 6 12 0
-TABLE test t3 index_b 6 6 0 6 0 0 0
+TABLE test t3 NULL 44 26 18 26 6 12 0
+TABLE test t3 index_b 4 4 0 4 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 23 15 8 15 2 6 0
-TABLE test t2 36 24 12 24 4 8 0
-TABLE test t3 54 36 18 36 6 12 0
+TABLE test t1 21 13 8 13 2 6 0
+TABLE test t2 32 20 12 20 4 8 0
+TABLE test t3 50 32 18 32 6 12 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 23
-TABLE test t2 36
-TABLE test t3 54
+TABLE test t1 21
+TABLE test t2 32
+TABLE test t3 50
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1675,16 +1734,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1753,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1771,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_2t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_2t.result
index 2bcabb81def..4f97cd6be4b 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_2t.result
@@ -6,11 +6,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,18 +169,74 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 23
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 23
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 23
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 23
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 0
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -203,19 +246,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -225,29 +268,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -256,7 +293,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -267,23 +304,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 25
+localhost wait/io/table/sql/handler 23
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 25
+wait/io/table/sql/handler 23
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -293,29 +330,23 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
TABLE test t2 0
-TABLE test t3 17
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -347,11 +378,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -359,10 +390,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username status
user3 not found
@@ -370,55 +401,49 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -427,10 +452,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -439,59 +464,53 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 64
+localhost wait/io/table/sql/handler 58
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 64
+wait/io/table/sql/handler 58
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
+TABLE test t1 18
TABLE test t2 0
-TABLE test t3 44
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -529,11 +548,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -542,71 +561,65 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -615,76 +628,70 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 116
+localhost wait/io/table/sql/handler 106
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 116
+wait/io/table/sql/handler 106
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
+TABLE test t1 31
TABLE test t2 0
-TABLE test t3 81
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -728,11 +735,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -742,76 +749,70 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -821,301 +822,277 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1124,70 +1101,64 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1198,67 +1169,61 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1272,63 +1237,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1344,63 +1303,57 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 25
+user1 localhost wait/io/table/sql/handler 23
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 39
+user2 localhost wait/io/table/sql/handler 35
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 52
+user3 localhost wait/io/table/sql/handler 48
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 65
+user4 localhost wait/io/table/sql/handler 61
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1425,53 +1378,47 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 25
+user1 wait/io/table/sql/handler 23
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 39
+user2 wait/io/table/sql/handler 35
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 52
+user3 wait/io/table/sql/handler 48
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 65
+user4 wait/io/table/sql/handler 61
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1506,43 +1453,37 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 181
+localhost wait/io/table/sql/handler 167
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1581,39 +1522,33 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 181
+wait/io/table/sql/handler 167
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 0 0 0 0 0 0 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
+TABLE test t1 47
TABLE test t2 0
-TABLE test t3 128
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1662,10 +1597,6 @@ TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
@@ -1673,19 +1604,17 @@ TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1624,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1642,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_3t.result b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_3t.result
index 323570b7d40..7fed2e31955 100644
--- a/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_io_aggregate_thread_4u_3t.result
@@ -4,11 +4,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name like 'event%';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,18 +178,80 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 33
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 33
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 33
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 33
+wait/lock/table/sql/handler 0
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 NULL 6 4 2 4 1 1 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 2 1 1 1 0 1 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 1 1 0 1 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 1 1 0 1 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 8 5 3 5 1 2 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 8
+TABLE test t2 10
+TABLE test t3 15
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username status
user2 not found
@@ -202,19 +261,19 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -224,29 +283,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connect con2, localhost, user2, , ;
select concat(current_user(), " is connected") as status;
status
@@ -255,7 +314,7 @@ connection default;
"================== Step 4 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
user2 wait/io/table/sql/handler 0
@@ -266,23 +325,23 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
user2 localhost wait/io/table/sql/handler 0
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
user2 wait/io/table/sql/handler 0
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 37
+localhost wait/io/table/sql/handler 33
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 37
+wait/io/table/sql/handler 33
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
@@ -292,29 +351,29 @@ TABLE test t1 NULL 6 4 2 4 1 1 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 2 1 1 1 0 1 0
-TABLE test t2 NULL 10 6 4 6 2 2 0
-TABLE test t2 index_b 1 1 0 1 0 0 0
+TABLE test t2 NULL 9 5 4 5 2 2 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 1 1 0 1 0 0 0
-TABLE test t3 NULL 14 8 6 8 3 3 0
-TABLE test t3 index_b 2 2 0 2 0 0 0
+TABLE test t3 NULL 13 7 6 7 3 3 0
+TABLE test t3 index_b 1 1 0 1 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 1 1 0 1 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 8 5 3 5 1 2 0
-TABLE test t2 12 8 4 8 2 2 0
-TABLE test t3 17 11 6 11 3 3 0
+TABLE test t2 10 6 4 6 2 2 0
+TABLE test t3 15 9 6 9 3 3 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 8
-TABLE test t2 12
-TABLE test t3 17
+TABLE test t2 10
+TABLE test t3 15
connection con2;
insert into test.t1 set a=201, b=1, c=1;
insert into test.t2 set a=202, b=2, c=2;
@@ -346,11 +405,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -358,10 +417,10 @@ connection default;
"================== Step 5 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username status
user3 not found
@@ -369,55 +428,55 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connect con3, localhost, user3, , ;
select concat(current_user(), " is connected") as status;
status
@@ -426,10 +485,10 @@ connection default;
"================== Step 6 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
user3 wait/io/table/sql/handler 0
@@ -438,59 +497,59 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
user3 localhost wait/io/table/sql/handler 0
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
user3 wait/io/table/sql/handler 0
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 94
+localhost wait/io/table/sql/handler 84
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 94
+wait/io/table/sql/handler 84
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 15 10 5 10 2 3 0
-TABLE test t1 index_b 1 1 0 1 0 0 0
+TABLE test t1 NULL 14 9 5 9 2 3 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 4 2 2 2 0 2 0
-TABLE test t2 NULL 26 16 10 16 4 6 0
-TABLE test t2 index_b 2 2 0 2 0 0 0
+TABLE test t2 NULL 24 14 10 14 4 6 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 2 2 0 2 0 0 0
-TABLE test t3 NULL 37 22 15 22 6 9 0
-TABLE test t3 index_b 5 5 0 5 0 0 0
+TABLE test t3 NULL 35 20 15 20 6 9 0
+TABLE test t3 index_b 3 3 0 3 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 2 2 0 2 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 20 13 7 13 2 5 0
-TABLE test t2 30 20 10 20 4 6 0
-TABLE test t3 44 29 15 29 6 9 0
+TABLE test t1 18 11 7 11 2 5 0
+TABLE test t2 26 16 10 16 4 6 0
+TABLE test t3 40 25 15 25 6 9 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 20
-TABLE test t2 30
-TABLE test t3 44
+TABLE test t1 18
+TABLE test t2 26
+TABLE test t3 40
connection con3;
insert into test.t1 set a=301, b=1, c=1;
insert into test.t2 set a=302, b=2, c=2;
@@ -528,11 +587,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -541,71 +600,71 @@ connection default;
"================== Step 7 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connect con4, localhost, user4, , ;
select concat(current_user(), " is connected") as status;
status
@@ -614,76 +673,76 @@ connection default;
"================== Step 8 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 170
+localhost wait/io/table/sql/handler 154
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 170
+wait/io/table/sql/handler 154
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 27 18 9 18 3 6 0
-TABLE test t1 index_b 2 2 0 2 0 0 0
+TABLE test t1 NULL 25 16 9 16 3 6 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 6 3 3 3 0 3 0
-TABLE test t2 NULL 48 30 18 30 6 12 0
-TABLE test t2 index_b 3 3 0 3 0 0 0
+TABLE test t2 NULL 45 27 18 27 6 12 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 3 3 0 3 0 0 0
-TABLE test t3 NULL 69 42 27 42 9 18 0
-TABLE test t3 index_b 9 9 0 9 0 0 0
+TABLE test t3 NULL 66 39 27 39 9 18 0
+TABLE test t3 index_b 6 6 0 6 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 3 3 0 3 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 35 23 12 23 3 9 0
-TABLE test t2 54 36 18 36 6 12 0
-TABLE test t3 81 54 27 54 9 18 0
+TABLE test t1 31 19 12 19 3 9 0
+TABLE test t2 48 30 18 30 6 12 0
+TABLE test t3 75 48 27 48 9 18 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 35
-TABLE test t2 54
-TABLE test t3 81
+TABLE test t1 31
+TABLE test t2 48
+TABLE test t3 75
connection con4;
insert into test.t1 set a=401, b=1, c=1;
insert into test.t2 set a=402, b=2, c=2;
@@ -727,11 +786,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -741,76 +800,76 @@ connection default;
"================== Step 9 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection con1;
lock tables test.t1 read, test.t2 read, test.t3 read;
unlock tables;
@@ -820,301 +879,301 @@ connection default;
"================== Step 10 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
flush tables;
"================== flush marker =================="
"================== Step 11 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
set global read_only=1;
set global read_only=0;
"================== global read_only marker =================="
"================== Step 12 =================="
call dump_thread();
username event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con1;
"================== Step 13 =================="
call dump_thread();
username status
user1 not found
username event_name count_star
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con2;
"================== Step 14 =================="
call dump_thread();
@@ -1123,70 +1182,70 @@ user1 not found
username status
user2 not found
username event_name count_star
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con3;
"================== Step 15 =================="
call dump_thread();
@@ -1197,67 +1256,67 @@ user2 not found
username status
user3 not found
username event_name count_star
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
disconnect con4;
"================== Step 16 =================="
call dump_thread();
@@ -1271,63 +1330,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
connection default;
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
"================== BY_THREAD truncated =================="
@@ -1343,63 +1402,63 @@ username status
user4 not found
execute dump_waits_account;
user host event_name count_star
-user1 localhost wait/io/table/sql/handler 37
+user1 localhost wait/io/table/sql/handler 33
user1 localhost wait/lock/table/sql/handler 0
-user2 localhost wait/io/table/sql/handler 57
+user2 localhost wait/io/table/sql/handler 51
user2 localhost wait/lock/table/sql/handler 0
-user3 localhost wait/io/table/sql/handler 76
+user3 localhost wait/io/table/sql/handler 70
user3 localhost wait/lock/table/sql/handler 0
-user4 localhost wait/io/table/sql/handler 95
+user4 localhost wait/io/table/sql/handler 89
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_account_by_event_name;
"================== BY_ACCOUNT truncated =================="
"================== Step 18 =================="
@@ -1424,53 +1483,53 @@ user4 localhost wait/io/table/sql/handler 0
user4 localhost wait/lock/table/sql/handler 0
execute dump_waits_user;
user event_name count_star
-user1 wait/io/table/sql/handler 37
+user1 wait/io/table/sql/handler 33
user1 wait/lock/table/sql/handler 0
-user2 wait/io/table/sql/handler 57
+user2 wait/io/table/sql/handler 51
user2 wait/lock/table/sql/handler 0
-user3 wait/io/table/sql/handler 76
+user3 wait/io/table/sql/handler 70
user3 wait/lock/table/sql/handler 0
-user4 wait/io/table/sql/handler 95
+user4 wait/io/table/sql/handler 89
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_user_by_event_name;
"================== BY_USER truncated =================="
"================== Step 19 =================="
@@ -1505,43 +1564,43 @@ user4 wait/io/table/sql/handler 0
user4 wait/lock/table/sql/handler 0
execute dump_waits_host;
host event_name count_star
-localhost wait/io/table/sql/handler 265
+localhost wait/io/table/sql/handler 243
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_by_host_by_event_name;
"================== BY_HOST truncated =================="
"================== Step 21 =================="
@@ -1580,39 +1639,39 @@ localhost wait/io/table/sql/handler 0
localhost wait/lock/table/sql/handler 0
execute dump_waits_global;
event_name count_star
-wait/io/table/sql/handler 265
+wait/io/table/sql/handler 243
wait/lock/table/sql/handler 0
execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 42 28 14 28 4 10 0
-TABLE test t1 index_b 3 3 0 3 0 0 0
+TABLE test t1 NULL 39 25 14 25 4 10 0
+TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 8 4 4 4 0 4 0
-TABLE test t2 NULL 76 48 28 48 8 20 0
-TABLE test t2 index_b 4 4 0 4 0 0 0
+TABLE test t2 NULL 72 44 28 44 8 20 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 4 4 0 4 0 0 0
-TABLE test t3 NULL 110 68 42 68 12 30 0
-TABLE test t3 index_b 14 14 0 14 0 0 0
+TABLE test t3 NULL 106 64 42 64 12 30 0
+TABLE test t3 index_b 10 10 0 10 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 4 4 0 4 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 53 35 18 35 4 14 0
-TABLE test t2 84 56 28 56 8 20 0
-TABLE test t3 128 86 42 86 12 30 0
+TABLE test t1 47 29 18 29 4 14 0
+TABLE test t2 76 48 28 48 8 20 0
+TABLE test t3 120 78 42 78 12 30 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
-TABLE test t1 53
-TABLE test t2 84
-TABLE test t3 128
+TABLE test t1 47
+TABLE test t2 76
+TABLE test t3 120
truncate performance_schema.events_waits_summary_global_by_event_name;
"================== GLOBAL truncated =================="
"================== Step 21 =================="
@@ -1675,16 +1734,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1753,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1771,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_2t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_2t.result
index 3a3d093d91e..71fd39d17bd 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_2t.result
@@ -8,9 +8,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,15 +169,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,28 +208,74 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 0
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -289,28 +322,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -347,11 +372,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -392,28 +417,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -465,28 +482,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -529,11 +538,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -580,28 +589,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -658,28 +659,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -728,11 +721,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -785,28 +778,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -864,28 +849,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -940,28 +917,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1016,28 +985,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1089,28 +1050,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1161,28 +1114,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1232,28 +1177,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1302,28 +1239,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1374,28 +1303,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1445,28 +1366,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1516,28 +1429,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1587,28 +1492,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1658,34 +1555,26 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1584,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1602,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_3t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_3t.result
index 04c4fe4d949..0474543c53c 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_2u_3t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,15 +178,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -220,15 +217,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -238,10 +232,69 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 12
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -288,15 +341,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -306,10 +356,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -346,11 +396,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -391,15 +441,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -409,10 +456,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -464,15 +511,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -482,10 +526,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -528,11 +572,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -579,15 +623,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -597,10 +638,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -657,15 +698,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -675,10 +713,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -727,11 +765,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -784,15 +822,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -802,10 +837,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -863,15 +898,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -881,10 +913,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -939,15 +971,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -957,10 +986,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1015,15 +1044,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1033,10 +1059,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1088,15 +1114,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1106,10 +1129,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1160,15 +1183,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1178,10 +1198,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1231,15 +1251,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1249,10 +1266,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1301,15 +1318,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1319,10 +1333,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1373,15 +1387,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1391,10 +1402,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1444,15 +1455,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1462,10 +1470,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1515,15 +1523,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1533,10 +1538,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1586,15 +1591,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1604,10 +1606,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1657,15 +1659,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1675,16 +1674,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1693,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1711,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_2t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_2t.result
index 61783e41b1b..4556c41c98d 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_2t.result
@@ -6,11 +6,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,15 +169,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,28 +208,74 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 0
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -289,28 +322,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -347,11 +372,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -392,28 +417,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -465,28 +482,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -529,11 +538,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -580,28 +589,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -658,28 +659,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -728,11 +721,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -785,28 +778,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -864,28 +849,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -940,28 +917,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1016,28 +985,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1089,28 +1050,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1161,28 +1114,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1232,28 +1177,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1302,28 +1239,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1374,28 +1303,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1445,28 +1366,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1516,28 +1429,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1587,28 +1492,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1658,34 +1555,26 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1584,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1602,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_3t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_3t.result
index 2be8dbdf5b3..9285d43c058 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_global_4u_3t.result
@@ -4,11 +4,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name='thread_instrumentation';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,15 +178,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -220,15 +217,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -238,10 +232,69 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 12
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 0
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 0
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 0
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -288,15 +341,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -306,10 +356,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -346,11 +396,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -391,15 +441,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -409,10 +456,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -464,15 +511,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -482,10 +526,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -528,11 +572,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -579,15 +623,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -597,10 +638,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -657,15 +698,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -675,10 +713,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -727,11 +765,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -784,15 +822,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -802,10 +837,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -863,15 +898,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -881,10 +913,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -939,15 +971,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -957,10 +986,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1015,15 +1044,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1033,10 +1059,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1088,15 +1114,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1106,10 +1129,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1160,15 +1183,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1178,10 +1198,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1231,15 +1251,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1249,10 +1266,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1301,15 +1318,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1319,10 +1333,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1373,15 +1387,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1391,10 +1402,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1444,15 +1455,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1462,10 +1470,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1515,15 +1523,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1533,10 +1538,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1586,15 +1591,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1604,10 +1606,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1657,15 +1659,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1675,16 +1674,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1693,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1711,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_2t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_2t.result
index 0ded9d54590..4feb933aae4 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_2t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,15 +167,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,28 +208,76 @@ wait/lock/table/sql/handler 10 TABLE test t1
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 0
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -291,28 +326,20 @@ wait/lock/table/sql/handler 10 TABLE test t1
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -349,11 +376,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -396,28 +423,20 @@ wait/lock/table/sql/handler 10 TABLE test t1
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -471,28 +490,20 @@ wait/lock/table/sql/handler 10 TABLE test t1
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -535,11 +546,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -588,28 +599,20 @@ wait/lock/table/sql/handler 20 TABLE test t1
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -668,28 +671,20 @@ wait/lock/table/sql/handler 20 TABLE test t1
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -738,11 +733,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -797,28 +792,20 @@ wait/lock/table/sql/handler 20 TABLE test t1
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -878,28 +865,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -956,28 +935,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1034,28 +1005,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1109,28 +1072,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1183,28 +1138,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1256,28 +1203,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1328,28 +1267,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1402,28 +1333,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1475,28 +1398,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1548,28 +1463,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1621,28 +1528,20 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1694,34 +1593,26 @@ wait/lock/table/sql/handler 24 TABLE test t1
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1731,9 +1622,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1743,6 +1640,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_3t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_3t.result
index 13642f45b5a..dee9ca7489c 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_2u_3t.result
@@ -4,9 +4,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,15 +176,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,15 +218,12 @@ wait/lock/table/sql/handler 12 TABLE test t2
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -239,10 +233,72 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 12
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/lock/table/sql/handler 12 TABLE test t2
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -292,15 +348,12 @@ wait/lock/table/sql/handler 12 TABLE test t2
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -310,10 +363,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -350,11 +403,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -398,15 +451,12 @@ wait/lock/table/sql/handler 12 TABLE test t2
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -416,10 +466,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -474,15 +524,12 @@ wait/lock/table/sql/handler 12 TABLE test t2
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -492,10 +539,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -538,11 +585,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -592,15 +639,12 @@ wait/lock/table/sql/handler 24 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -610,10 +654,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -673,15 +717,12 @@ wait/lock/table/sql/handler 24 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -691,10 +732,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -743,11 +784,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -803,15 +844,12 @@ wait/lock/table/sql/handler 24 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -821,10 +859,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -885,15 +923,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -903,10 +938,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -964,15 +999,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -982,10 +1014,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1043,15 +1075,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1061,10 +1090,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1119,15 +1148,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1137,10 +1163,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1194,15 +1220,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1212,10 +1235,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1268,15 +1291,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1286,10 +1306,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1341,15 +1361,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1359,10 +1376,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1416,15 +1433,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1434,10 +1448,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1490,15 +1504,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1508,10 +1519,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1564,15 +1575,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1582,10 +1590,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1638,15 +1646,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1656,10 +1661,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1712,15 +1717,12 @@ wait/lock/table/sql/handler 28 TABLE test t2
wait/lock/table/sql/handler 32 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1730,16 +1732,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1749,9 +1751,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1761,6 +1769,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_2t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_2t.result
index 61c649bd2cf..045a04e7fe0 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_2t.result
@@ -4,11 +4,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -22,6 +22,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -65,28 +68,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -128,28 +123,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -180,15 +167,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,28 +208,76 @@ wait/lock/table/sql/handler 10 TABLE test t1
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 0
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -291,28 +326,20 @@ wait/lock/table/sql/handler 10 TABLE test t1
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -349,11 +376,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -396,28 +423,20 @@ wait/lock/table/sql/handler 20 TABLE test t1
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -471,28 +490,20 @@ wait/lock/table/sql/handler 20 TABLE test t1
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -535,11 +546,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -588,28 +599,20 @@ wait/lock/table/sql/handler 30 TABLE test t1
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -668,28 +671,20 @@ wait/lock/table/sql/handler 30 TABLE test t1
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -738,11 +733,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -797,28 +792,20 @@ wait/lock/table/sql/handler 40 TABLE test t1
wait/lock/table/sql/handler 56 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -878,28 +865,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -956,28 +935,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1034,28 +1005,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1109,28 +1072,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1183,28 +1138,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1256,28 +1203,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1328,28 +1267,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1402,28 +1333,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1475,28 +1398,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1548,28 +1463,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1621,28 +1528,20 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1694,34 +1593,26 @@ wait/lock/table/sql/handler 44 TABLE test t1
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1731,9 +1622,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1743,6 +1640,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_3t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_3t.result
index 5d5282ba899..e912664ec2f 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_hist_4u_3t.result
@@ -2,11 +2,11 @@ update performance_schema.setup_instruments
set enabled='NO' where name='wait/io/table/sql/handler';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -21,6 +21,9 @@ events_stages_history_long YES
events_statements_current YES
events_statements_history YES
events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
events_waits_current YES
events_waits_history YES
events_waits_history_long YES
@@ -64,15 +67,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -82,10 +82,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -127,15 +127,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -145,10 +142,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -179,15 +176,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,15 +218,12 @@ wait/lock/table/sql/handler 12 TABLE test t2
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -239,10 +233,72 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 12
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+wait/lock/table/sql/handler 10 TABLE test t1
+wait/lock/table/sql/handler 12 TABLE test t2
+wait/lock/table/sql/handler 14 TABLE test t3
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -292,15 +348,12 @@ wait/lock/table/sql/handler 12 TABLE test t2
wait/lock/table/sql/handler 14 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -310,10 +363,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -350,11 +403,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -398,15 +451,12 @@ wait/lock/table/sql/handler 24 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -416,10 +466,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -474,15 +524,12 @@ wait/lock/table/sql/handler 24 TABLE test t2
wait/lock/table/sql/handler 28 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -492,10 +539,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -538,11 +585,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -592,15 +639,12 @@ wait/lock/table/sql/handler 36 TABLE test t2
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -610,10 +654,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -673,15 +717,12 @@ wait/lock/table/sql/handler 36 TABLE test t2
wait/lock/table/sql/handler 42 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -691,10 +732,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -743,11 +784,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -803,15 +844,12 @@ wait/lock/table/sql/handler 48 TABLE test t2
wait/lock/table/sql/handler 56 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -821,10 +859,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -885,15 +923,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -903,10 +938,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -964,15 +999,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -982,10 +1014,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1043,15 +1075,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1061,10 +1090,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1119,15 +1148,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1137,10 +1163,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1194,15 +1220,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1212,10 +1235,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1268,15 +1291,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1286,10 +1306,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1341,15 +1361,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1359,10 +1376,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1416,15 +1433,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1434,10 +1448,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1490,15 +1504,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1508,10 +1519,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1564,15 +1575,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1582,10 +1590,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1638,15 +1646,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1656,10 +1661,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1712,15 +1717,12 @@ wait/lock/table/sql/handler 52 TABLE test t2
wait/lock/table/sql/handler 60 TABLE test t3
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1730,16 +1732,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1749,9 +1751,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1761,6 +1769,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_2t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_2t.result
index 8da7fca1d3e..eb1e66533d8 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_2t.result
@@ -8,9 +8,9 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,15 +169,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,28 +208,74 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 0
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -289,28 +322,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -347,11 +372,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -392,28 +417,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -465,28 +482,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -529,11 +538,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -580,28 +589,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -658,28 +659,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -728,11 +721,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -785,28 +778,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -864,28 +849,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -940,28 +917,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1016,28 +985,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1089,28 +1050,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1161,28 +1114,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1232,28 +1177,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1302,28 +1239,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1374,28 +1303,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1445,28 +1366,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1516,28 +1429,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1587,28 +1492,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1658,34 +1555,26 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1584,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1602,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_3t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_3t.result
index 88f658778c4..17e3b901a3a 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_2u_3t.result
@@ -6,9 +6,9 @@ delete from performance_schema.setup_actors
where user in ('user2', 'user4');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user3 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user3 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,15 +178,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -220,15 +217,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -238,10 +232,69 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 12
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -288,15 +341,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -306,10 +356,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -346,11 +396,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -391,15 +441,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -409,10 +456,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -464,15 +511,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -482,10 +526,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -528,11 +572,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -579,15 +623,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -597,10 +638,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -657,15 +698,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -675,10 +713,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -727,11 +765,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -784,15 +822,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -802,10 +837,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -863,15 +898,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -881,10 +913,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -939,15 +971,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -957,10 +986,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1015,15 +1044,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1033,10 +1059,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1088,15 +1114,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1106,10 +1129,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1160,15 +1183,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1178,10 +1198,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1231,15 +1251,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1249,10 +1266,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1301,15 +1318,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1319,10 +1333,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1373,15 +1387,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1391,10 +1402,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1444,15 +1455,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1462,10 +1470,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1515,15 +1523,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1533,10 +1538,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1586,15 +1591,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1604,10 +1606,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 24 10 14 4 0 0 1 5 0 0 7
-TABLE test t2 28 10 18 4 0 0 1 5 0 0 9
-TABLE test t3 32 10 22 4 0 0 1 5 0 0 11
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 24 10 14 4 0 0 1 5 0 7
+TABLE test t2 28 10 18 4 0 0 1 5 0 9
+TABLE test t3 32 10 22 4 0 0 1 5 0 11
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 24
@@ -1657,15 +1659,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1675,16 +1674,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1693,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1711,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_2t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_2t.result
index 72bc52cefa3..295dcadb28e 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_2t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_2t.result
@@ -6,11 +6,11 @@ delete from performance_schema.setup_objects
where object_name='t2';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -24,6 +24,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -67,28 +70,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -130,28 +125,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -182,15 +169,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -221,28 +208,74 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 0
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 24
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 24
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 24
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 24
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -289,28 +322,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -347,11 +372,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -392,28 +417,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -465,28 +482,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -529,11 +538,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -580,28 +589,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -658,28 +659,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -728,11 +721,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -785,28 +778,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -864,28 +849,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -940,28 +917,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1016,28 +985,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1089,28 +1050,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1161,28 +1114,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1232,28 +1177,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1302,28 +1239,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1374,28 +1303,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1445,28 +1366,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1516,28 +1429,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1587,28 +1492,20 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1658,34 +1555,26 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
-TABLE test t2 index_b 0 0 0 0 0 0 0
-TABLE test t2 index_cb 0 0 0 0 0 0 0
-TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
execute dump_waits_table_io;
object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
TABLE test t1 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1695,9 +1584,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1707,6 +1602,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_3t.result b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_3t.result
index d2ee0bd6c5e..9d98d1f84d1 100644
--- a/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_3t.result
+++ b/mysql-test/suite/perfschema/r/table_lock_aggregate_thread_4u_3t.result
@@ -4,11 +4,11 @@ update performance_schema.setup_consumers
set enabled='NO' where name like 'event%';
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
-HOST USER ROLE
-localhost user1 %
-localhost user2 %
-localhost user3 %
-localhost user4 %
+HOST USER ROLE ENABLED HISTORY
+localhost user1 % YES YES
+localhost user2 % YES YES
+localhost user3 % YES YES
+localhost user4 % YES YES
select * from performance_schema.setup_objects
order by object_type, object_schema, object_name;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED
@@ -23,6 +23,9 @@ events_stages_history_long NO
events_statements_current NO
events_statements_history NO
events_statements_history_long NO
+events_transactions_current NO
+events_transactions_history NO
+events_transactions_history_long NO
events_waits_current NO
events_waits_history NO
events_waits_history_long NO
@@ -66,15 +69,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -84,10 +84,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -129,15 +129,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -147,10 +144,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
@@ -181,15 +178,15 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=101;
update test.t2 set d=d+1 where a=101;
update test.t3 set d=d+1 where a=101;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 1
connection default;
-"================== Step 3 =================="
+"================== Step 3-A =================="
call dump_thread();
username event_name count_star
user1 wait/io/table/sql/handler 0
@@ -220,15 +217,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -238,10 +232,69 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
+execute dump_objects_summary;
+object_type object_schema object_name count_star
+TABLE test t1 10
+TABLE test t2 12
+TABLE test t3 14
+connection con1;
+flush tables;
+"================== con1 FLUSH =================="
+connection default;
+"================== Step 3-B =================="
+call dump_thread();
+username event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+username status
+user2 not found
+username status
+user3 not found
+username status
+user4 not found
+execute dump_waits_account;
+user host event_name count_star
+user1 localhost wait/io/table/sql/handler 0
+user1 localhost wait/lock/table/sql/handler 36
+execute dump_waits_user;
+user event_name count_star
+user1 wait/io/table/sql/handler 0
+user1 wait/lock/table/sql/handler 36
+execute dump_waits_host;
+host event_name count_star
+localhost wait/io/table/sql/handler 0
+localhost wait/lock/table/sql/handler 36
+execute dump_waits_global;
+event_name count_star
+wait/io/table/sql/handler 0
+wait/lock/table/sql/handler 36
+execute dump_waits_history;
+event_name count(event_name) object_type object_schema object_name
+execute dump_waits_index_io;
+object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 index_b 0 0 0 0 0 0 0
+TABLE test t1 index_cb 0 0 0 0 0 0 0
+TABLE test t1 PRIMARY 0 0 0 0 0 0 0
+TABLE test t2 index_b 0 0 0 0 0 0 0
+TABLE test t2 index_cb 0 0 0 0 0 0 0
+TABLE test t2 PRIMARY 0 0 0 0 0 0 0
+TABLE test t3 index_b 0 0 0 0 0 0 0
+TABLE test t3 index_cb 0 0 0 0 0 0 0
+TABLE test t3 PRIMARY 0 0 0 0 0 0 0
+execute dump_waits_table_io;
+object_type object_schema object_name count_star count_read count_write count_fetch count_insert count_update count_delete
+TABLE test t1 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0
+execute dump_waits_table_lock;
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -288,15 +341,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -306,10 +356,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 10 4 6 2 0 0 0 2 0 0 3
-TABLE test t2 12 4 8 2 0 0 0 2 0 0 4
-TABLE test t3 14 4 10 2 0 0 0 2 0 0 5
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 10 4 6 2 0 0 0 2 0 3
+TABLE test t2 12 4 8 2 0 0 0 2 0 4
+TABLE test t3 14 4 10 2 0 0 0 2 0 5
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 10
@@ -346,11 +396,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=201;
update test.t2 set d=d+1 where a=201;
update test.t3 set d=d+1 where a=201;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 2
205 5 5 1
@@ -391,15 +441,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -409,10 +456,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -464,15 +511,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -482,10 +526,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 20 8 12 4 0 0 0 4 0 0 6
-TABLE test t2 24 8 16 4 0 0 0 4 0 0 8
-TABLE test t3 28 8 20 4 0 0 0 4 0 0 10
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 20 8 12 4 0 0 0 4 0 6
+TABLE test t2 24 8 16 4 0 0 0 4 0 8
+TABLE test t3 28 8 20 4 0 0 0 4 0 10
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 20
@@ -528,11 +572,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=301;
update test.t2 set d=d+1 where a=301;
update test.t3 set d=d+1 where a=301;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 3
205 5 5 2
@@ -579,15 +623,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -597,10 +638,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -657,15 +698,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -675,10 +713,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 30 12 18 6 0 0 0 6 0 0 9
-TABLE test t2 36 12 24 6 0 0 0 6 0 0 12
-TABLE test t3 42 12 30 6 0 0 0 6 0 0 15
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 30 12 18 6 0 0 0 6 0 9
+TABLE test t2 36 12 24 6 0 0 0 6 0 12
+TABLE test t3 42 12 30 6 0 0 0 6 0 15
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 30
@@ -727,11 +765,11 @@ update test.t3 set d=d+1;
update test.t1 set d=d+1 where a=401;
update test.t2 set d=d+1 where a=401;
update test.t3 set d=d+1 where a=401;
-select * from test.t1 where b=5;
+select * from test.t1 force index(index_b) where b=5;
a b c d
-select * from test.t2 where b=5;
+select * from test.t2 force index(index_b) where b=5;
a b c d
-select * from test.t3 where b=5;
+select * from test.t3 force index(index_b) where b=5;
a b c d
105 5 5 4
205 5 5 3
@@ -784,15 +822,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -802,10 +837,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 40 16 24 8 0 0 0 8 0 0 12
-TABLE test t2 48 16 32 8 0 0 0 8 0 0 16
-TABLE test t3 56 16 40 8 0 0 0 8 0 0 20
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 40 16 24 8 0 0 0 8 0 12
+TABLE test t2 48 16 32 8 0 0 0 8 0 16
+TABLE test t3 56 16 40 8 0 0 0 8 0 20
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 40
@@ -863,15 +898,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -881,10 +913,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -939,15 +971,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -957,10 +986,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1015,15 +1044,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1033,10 +1059,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1088,15 +1114,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1106,10 +1129,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1160,15 +1183,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1178,10 +1198,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1231,15 +1251,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1249,10 +1266,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1301,15 +1318,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1319,10 +1333,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1373,15 +1387,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1391,10 +1402,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1444,15 +1455,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1462,10 +1470,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1515,15 +1523,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1533,10 +1538,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1586,15 +1591,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1604,10 +1606,10 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 44 18 26 8 0 0 1 9 0 0 13
-TABLE test t2 52 18 34 8 0 0 1 9 0 0 17
-TABLE test t3 60 18 42 8 0 0 1 9 0 0 21
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 44 18 26 8 0 0 1 9 0 13
+TABLE test t2 52 18 34 8 0 0 1 9 0 17
+TABLE test t3 60 18 42 8 0 0 1 9 0 21
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 44
@@ -1657,15 +1659,12 @@ execute dump_waits_history;
event_name count(event_name) object_type object_schema object_name
execute dump_waits_index_io;
object_type object_schema object_name index_name count_star count_read count_write count_fetch count_insert count_update count_delete
-TABLE test t1 NULL 0 0 0 0 0 0 0
TABLE test t1 index_b 0 0 0 0 0 0 0
TABLE test t1 index_cb 0 0 0 0 0 0 0
TABLE test t1 PRIMARY 0 0 0 0 0 0 0
-TABLE test t2 NULL 0 0 0 0 0 0 0
TABLE test t2 index_b 0 0 0 0 0 0 0
TABLE test t2 index_cb 0 0 0 0 0 0 0
TABLE test t2 PRIMARY 0 0 0 0 0 0 0
-TABLE test t3 NULL 0 0 0 0 0 0 0
TABLE test t3 index_b 0 0 0 0 0 0 0
TABLE test t3 index_cb 0 0 0 0 0 0 0
TABLE test t3 PRIMARY 0 0 0 0 0 0 0
@@ -1675,16 +1674,16 @@ TABLE test t1 0 0 0 0 0 0 0
TABLE test t2 0 0 0 0 0 0 0
TABLE test t3 0 0 0 0 0 0 0
execute dump_waits_table_lock;
-object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_delayed count_write_low_priority count_write_external
-TABLE test t1 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t2 0 0 0 0 0 0 0 0 0 0 0
-TABLE test t3 0 0 0 0 0 0 0 0 0 0 0
+object_type object_schema object_name count_star count_read count_write count_read_normal count_read_with_shared_locks count_read_high_priority count_read_no_insert count_read_external count_write_low_priority count_write_external
+TABLE test t1 0 0 0 0 0 0 0 0 0 0
+TABLE test t2 0 0 0 0 0 0 0 0 0 0
+TABLE test t3 0 0 0 0 0 0 0 0 0 0
execute dump_objects_summary;
object_type object_schema object_name count_star
TABLE test t1 0
TABLE test t2 0
TABLE test t3 0
-show status like "performance_schema%";
+show global status like "performance_schema%";
Variable_name Value
Performance_schema_accounts_lost 0
Performance_schema_cond_classes_lost 0
@@ -1694,9 +1693,15 @@ Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
@@ -1706,6 +1711,7 @@ Performance_schema_stage_classes_lost 0
Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
diff --git a/mysql-test/suite/perfschema/r/table_name.result b/mysql-test/suite/perfschema/r/table_name.result
index d6369ffc79e..3ee335991d8 100644
--- a/mysql-test/suite/perfschema/r/table_name.result
+++ b/mysql-test/suite/perfschema/r/table_name.result
@@ -13,7 +13,8 @@ INSERT INTO `sql_1` VALUES(1,'one');
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
TABLE test #sql_1
TABLE test sql_1
@@ -25,7 +26,8 @@ DROP TABLE `sql_1`;
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
#
@@ -41,7 +43,8 @@ INSERT INTO sql_temp2_innodb VALUES(1,'one');
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
# Drop the tables, verify that the table objects are not created.
@@ -51,7 +54,8 @@ DROP TABLE sql_temp2_innodb;
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
#
@@ -73,7 +77,8 @@ INSERT INTO `#sql_temp3_innodb` VALUES(1,'one');
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
# Drop the temporary tables.
@@ -85,7 +90,8 @@ DROP TABLE `#sql_temp3_innodb`;
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
#
@@ -102,7 +108,8 @@ INSERT INTO `#sql_temp4_myisam` VALUES(1,'one');
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
# Truncate the MyISAM temporary tables, forcing them to be recreated as non-temporary.
@@ -114,7 +121,8 @@ TRUNCATE TABLE `#sql_temp4_myisam`;
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
# Drop the recreated MyISAM tables;
@@ -126,7 +134,8 @@ DROP TABLE `#sql_temp4_myisam`;
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
#
@@ -141,7 +150,8 @@ ALTER TABLE t1 ADD COLUMN (b int);
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
# Drop the MyISAM table
@@ -152,5 +162,6 @@ DROP TABLE t1;
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
object_type object_schema object_name
diff --git a/mysql-test/suite/perfschema/r/table_schema.result b/mysql-test/suite/perfschema/r/table_schema.result
index 8caf2017fd2..e56ae8b5e0b 100644
--- a/mysql-test/suite/perfschema/r/table_schema.result
+++ b/mysql-test/suite/perfschema/r/table_schema.result
@@ -1,7 +1,7 @@
select * from information_schema.columns where table_schema="performance_schema"
order by table_name, ordinal_position;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT IS_GENERATED GENERATION_EXPRESSION
-def performance_schema accounts USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema accounts USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema accounts HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
def performance_schema accounts CURRENT_CONNECTIONS 3 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema accounts TOTAL_CONNECTIONS 4 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
@@ -15,8 +15,10 @@ def performance_schema events_stages_current SOURCE 5 NULL YES varchar 64 192 NU
def performance_schema events_stages_current TIMER_START 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_current TIMER_END 7 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_current TIMER_WAIT 8 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_current NESTING_EVENT_ID 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_current NESTING_EVENT_TYPE 10 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_stages_current WORK_COMPLETED 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_current WORK_ESTIMATED 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_current NESTING_EVENT_ID 11 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_current NESTING_EVENT_TYPE 12 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
def performance_schema events_stages_history THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -25,8 +27,10 @@ def performance_schema events_stages_history SOURCE 5 NULL YES varchar 64 192 NU
def performance_schema events_stages_history TIMER_START 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history TIMER_END 7 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history TIMER_WAIT 8 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_history NESTING_EVENT_ID 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_history NESTING_EVENT_TYPE 10 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_stages_history WORK_COMPLETED 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history WORK_ESTIMATED 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history NESTING_EVENT_ID 11 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history NESTING_EVENT_TYPE 12 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
def performance_schema events_stages_history_long THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history_long EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history_long END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -35,9 +39,11 @@ def performance_schema events_stages_history_long SOURCE 5 NULL YES varchar 64 1
def performance_schema events_stages_history_long TIMER_START 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history_long TIMER_END 7 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_history_long TIMER_WAIT 8 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_history_long NESTING_EVENT_ID 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_history_long NESTING_EVENT_TYPE 10 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
-def performance_schema events_stages_summary_by_account_by_event_name USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema events_stages_history_long WORK_COMPLETED 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history_long WORK_ESTIMATED 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history_long NESTING_EVENT_ID 11 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_stages_history_long NESTING_EVENT_TYPE 12 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_stages_summary_by_account_by_event_name USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_account_by_event_name HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_account_by_event_name EVENT_NAME 3 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_account_by_event_name COUNT_STAR 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -59,7 +65,7 @@ def performance_schema events_stages_summary_by_thread_by_event_name SUM_TIMER_W
def performance_schema events_stages_summary_by_thread_by_event_name MIN_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_thread_by_event_name AVG_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_thread_by_event_name MAX_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_stages_summary_by_user_by_event_name USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema events_stages_summary_by_user_by_event_name USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_user_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_user_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_stages_summary_by_user_by_event_name SUM_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -111,7 +117,8 @@ def performance_schema events_statements_current SORT_SCAN 36 NULL NO bigint NUL
def performance_schema events_statements_current NO_INDEX_USED 37 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_current NO_GOOD_INDEX_USED 38 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_current NESTING_EVENT_ID 39 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_statements_current NESTING_EVENT_TYPE 40 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_statements_current NESTING_EVENT_TYPE 40 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_statements_current NESTING_EVENT_LEVEL 41 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
def performance_schema events_statements_history THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -151,7 +158,8 @@ def performance_schema events_statements_history SORT_SCAN 36 NULL NO bigint NUL
def performance_schema events_statements_history NO_INDEX_USED 37 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history NO_GOOD_INDEX_USED 38 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history NESTING_EVENT_ID 39 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_statements_history NESTING_EVENT_TYPE 40 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_statements_history NESTING_EVENT_TYPE 40 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_statements_history NESTING_EVENT_LEVEL 41 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
def performance_schema events_statements_history_long THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history_long EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history_long END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -191,8 +199,9 @@ def performance_schema events_statements_history_long SORT_SCAN 36 NULL NO bigin
def performance_schema events_statements_history_long NO_INDEX_USED 37 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history_long NO_GOOD_INDEX_USED 38 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_history_long NESTING_EVENT_ID 39 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_statements_history_long NESTING_EVENT_TYPE 40 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
-def performance_schema events_statements_summary_by_account_by_event_name USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema events_statements_history_long NESTING_EVENT_TYPE 40 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_statements_history_long NESTING_EVENT_LEVEL 41 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_account_by_event_name USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_account_by_event_name HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_account_by_event_name EVENT_NAME 3 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_account_by_event_name COUNT_STAR 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -274,6 +283,38 @@ def performance_schema events_statements_summary_by_host_by_event_name SUM_SORT_
def performance_schema events_statements_summary_by_host_by_event_name SUM_SORT_SCAN 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_host_by_event_name SUM_NO_INDEX_USED 25 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_host_by_event_name SUM_NO_GOOD_INDEX_USED 26 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program OBJECT_TYPE 1 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('EVENT','FUNCTION','PROCEDURE','TABLE','TRIGGER') select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program OBJECT_SCHEMA 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program OBJECT_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program COUNT_STAR 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program MIN_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program AVG_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program MAX_TIMER_WAIT 8 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program COUNT_STATEMENTS 9 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_STATEMENTS_WAIT 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program MIN_STATEMENTS_WAIT 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program AVG_STATEMENTS_WAIT 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program MAX_STATEMENTS_WAIT 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_LOCK_TIME 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_ERRORS 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_WARNINGS 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_ROWS_AFFECTED 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_ROWS_SENT 18 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_ROWS_EXAMINED 19 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_CREATED_TMP_DISK_TABLES 20 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_CREATED_TMP_TABLES 21 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SELECT_FULL_JOIN 22 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SELECT_FULL_RANGE_JOIN 23 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SELECT_RANGE 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SELECT_RANGE_CHECK 25 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SELECT_SCAN 26 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SORT_MERGE_PASSES 27 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SORT_RANGE 28 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SORT_ROWS 29 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_SORT_SCAN 30 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_NO_INDEX_USED 31 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_program SUM_NO_GOOD_INDEX_USED 32 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_thread_by_event_name THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_thread_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_thread_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -300,7 +341,7 @@ def performance_schema events_statements_summary_by_thread_by_event_name SUM_SOR
def performance_schema events_statements_summary_by_thread_by_event_name SUM_SORT_SCAN 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_thread_by_event_name SUM_NO_INDEX_USED 25 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_thread_by_event_name SUM_NO_GOOD_INDEX_USED 26 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_statements_summary_by_user_by_event_name USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema events_statements_summary_by_user_by_event_name USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_user_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_user_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_by_user_by_event_name SUM_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -351,6 +392,163 @@ def performance_schema events_statements_summary_global_by_event_name SUM_SORT_R
def performance_schema events_statements_summary_global_by_event_name SUM_SORT_SCAN 23 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_global_by_event_name SUM_NO_INDEX_USED 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_statements_summary_global_by_event_name SUM_NO_GOOD_INDEX_USED 25 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current EVENT_NAME 4 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current STATE 5 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('ACTIVE','COMMITTED','ROLLED BACK') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current TRX_ID 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current GTID 7 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current XID_FORMAT_ID 8 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current XID_GTRID 9 NULL YES varchar 130 390 NULL NULL NULL utf8 utf8_general_ci varchar(130) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current XID_BQUAL 10 NULL YES varchar 130 390 NULL NULL NULL utf8 utf8_general_ci varchar(130) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current XA_STATE 11 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current SOURCE 12 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current TIMER_START 13 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current TIMER_END 14 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current TIMER_WAIT 15 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current ACCESS_MODE 16 NULL YES enum 10 30 NULL NULL NULL utf8 utf8_general_ci enum('READ ONLY','READ WRITE') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current ISOLATION_LEVEL 17 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current AUTOCOMMIT 18 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current NUMBER_OF_SAVEPOINTS 19 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current NUMBER_OF_ROLLBACK_TO_SAVEPOINT 20 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current NUMBER_OF_RELEASE_SAVEPOINT 21 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current OBJECT_INSTANCE_BEGIN 22 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current NESTING_EVENT_ID 23 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_current NESTING_EVENT_TYPE 24 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history EVENT_NAME 4 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history STATE 5 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('ACTIVE','COMMITTED','ROLLED BACK') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history TRX_ID 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history GTID 7 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history XID_FORMAT_ID 8 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history XID_GTRID 9 NULL YES varchar 130 390 NULL NULL NULL utf8 utf8_general_ci varchar(130) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history XID_BQUAL 10 NULL YES varchar 130 390 NULL NULL NULL utf8 utf8_general_ci varchar(130) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history XA_STATE 11 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history SOURCE 12 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history TIMER_START 13 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history TIMER_END 14 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history TIMER_WAIT 15 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history ACCESS_MODE 16 NULL YES enum 10 30 NULL NULL NULL utf8 utf8_general_ci enum('READ ONLY','READ WRITE') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history ISOLATION_LEVEL 17 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history AUTOCOMMIT 18 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history NUMBER_OF_SAVEPOINTS 19 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history NUMBER_OF_ROLLBACK_TO_SAVEPOINT 20 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history NUMBER_OF_RELEASE_SAVEPOINT 21 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history OBJECT_INSTANCE_BEGIN 22 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history NESTING_EVENT_ID 23 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history NESTING_EVENT_TYPE 24 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long EVENT_NAME 4 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long STATE 5 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('ACTIVE','COMMITTED','ROLLED BACK') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long TRX_ID 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long GTID 7 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long XID_FORMAT_ID 8 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long XID_GTRID 9 NULL YES varchar 130 390 NULL NULL NULL utf8 utf8_general_ci varchar(130) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long XID_BQUAL 10 NULL YES varchar 130 390 NULL NULL NULL utf8 utf8_general_ci varchar(130) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long XA_STATE 11 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long SOURCE 12 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long TIMER_START 13 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long TIMER_END 14 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long TIMER_WAIT 15 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long ACCESS_MODE 16 NULL YES enum 10 30 NULL NULL NULL utf8 utf8_general_ci enum('READ ONLY','READ WRITE') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long ISOLATION_LEVEL 17 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long AUTOCOMMIT 18 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long NUMBER_OF_SAVEPOINTS 19 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long NUMBER_OF_ROLLBACK_TO_SAVEPOINT 20 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long NUMBER_OF_RELEASE_SAVEPOINT 21 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long OBJECT_INSTANCE_BEGIN 22 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long NESTING_EVENT_ID 23 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_history_long NESTING_EVENT_TYPE 24 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name USER 1 NULL YES char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name EVENT_NAME 3 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name COUNT_STAR 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name SUM_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name MIN_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name AVG_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name MAX_TIMER_WAIT 8 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name COUNT_READ_WRITE 9 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name SUM_TIMER_READ_WRITE 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name MIN_TIMER_READ_WRITE 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name AVG_TIMER_READ_WRITE 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name MAX_TIMER_READ_WRITE 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name COUNT_READ_ONLY 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name SUM_TIMER_READ_ONLY 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name MIN_TIMER_READ_ONLY 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name AVG_TIMER_READ_ONLY 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_account_by_event_name MAX_TIMER_READ_ONLY 18 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name HOST 1 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name SUM_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name MIN_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name AVG_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name MAX_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name COUNT_READ_WRITE 8 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name SUM_TIMER_READ_WRITE 9 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name MIN_TIMER_READ_WRITE 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name AVG_TIMER_READ_WRITE 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name MAX_TIMER_READ_WRITE 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name COUNT_READ_ONLY 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name SUM_TIMER_READ_ONLY 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name MIN_TIMER_READ_ONLY 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name AVG_TIMER_READ_ONLY 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_host_by_event_name MAX_TIMER_READ_ONLY 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name SUM_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name MIN_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name AVG_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name MAX_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name COUNT_READ_WRITE 8 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name SUM_TIMER_READ_WRITE 9 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name MIN_TIMER_READ_WRITE 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name AVG_TIMER_READ_WRITE 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name MAX_TIMER_READ_WRITE 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name COUNT_READ_ONLY 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name SUM_TIMER_READ_ONLY 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name MIN_TIMER_READ_ONLY 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name AVG_TIMER_READ_ONLY 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_thread_by_event_name MAX_TIMER_READ_ONLY 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name USER 1 NULL YES char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name SUM_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name MIN_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name AVG_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name MAX_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name COUNT_READ_WRITE 8 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name SUM_TIMER_READ_WRITE 9 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name MIN_TIMER_READ_WRITE 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name AVG_TIMER_READ_WRITE 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name MAX_TIMER_READ_WRITE 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name COUNT_READ_ONLY 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name SUM_TIMER_READ_ONLY 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name MIN_TIMER_READ_ONLY 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name AVG_TIMER_READ_ONLY 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_by_user_by_event_name MAX_TIMER_READ_ONLY 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name EVENT_NAME 1 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name COUNT_STAR 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name SUM_TIMER_WAIT 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name MIN_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name AVG_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name MAX_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name COUNT_READ_WRITE 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name SUM_TIMER_READ_WRITE 8 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name MIN_TIMER_READ_WRITE 9 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name AVG_TIMER_READ_WRITE 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name MAX_TIMER_READ_WRITE 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name COUNT_READ_ONLY 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name SUM_TIMER_READ_ONLY 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name MIN_TIMER_READ_ONLY 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name AVG_TIMER_READ_ONLY 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema events_transactions_summary_global_by_event_name MAX_TIMER_READ_ONLY 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_current THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_current EVENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_current END_EVENT_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -366,7 +564,7 @@ def performance_schema events_waits_current INDEX_NAME 12 NULL YES varchar 64 19
def performance_schema events_waits_current OBJECT_TYPE 13 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema events_waits_current OBJECT_INSTANCE_BEGIN 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_current NESTING_EVENT_ID 15 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_waits_current NESTING_EVENT_TYPE 16 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_waits_current NESTING_EVENT_TYPE 16 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
def performance_schema events_waits_current OPERATION 17 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select,insert,update,references NEVER NULL
def performance_schema events_waits_current NUMBER_OF_BYTES 18 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema events_waits_current FLAGS 19 NULL YES int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references NEVER NULL
@@ -385,7 +583,7 @@ def performance_schema events_waits_history INDEX_NAME 12 NULL YES varchar 64 19
def performance_schema events_waits_history OBJECT_TYPE 13 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema events_waits_history OBJECT_INSTANCE_BEGIN 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_history NESTING_EVENT_ID 15 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_waits_history NESTING_EVENT_TYPE 16 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_waits_history NESTING_EVENT_TYPE 16 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
def performance_schema events_waits_history OPERATION 17 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select,insert,update,references NEVER NULL
def performance_schema events_waits_history NUMBER_OF_BYTES 18 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema events_waits_history FLAGS 19 NULL YES int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references NEVER NULL
@@ -404,11 +602,11 @@ def performance_schema events_waits_history_long INDEX_NAME 12 NULL YES varchar
def performance_schema events_waits_history_long OBJECT_TYPE 13 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema events_waits_history_long OBJECT_INSTANCE_BEGIN 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_history_long NESTING_EVENT_ID 15 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_waits_history_long NESTING_EVENT_TYPE 16 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
+def performance_schema events_waits_history_long NESTING_EVENT_TYPE 16 NULL YES enum 11 33 NULL NULL NULL utf8 utf8_general_ci enum('TRANSACTION','STATEMENT','STAGE','WAIT') select,insert,update,references NEVER NULL
def performance_schema events_waits_history_long OPERATION 17 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select,insert,update,references NEVER NULL
def performance_schema events_waits_history_long NUMBER_OF_BYTES 18 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema events_waits_history_long FLAGS 19 NULL YES int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_waits_summary_by_account_by_event_name USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema events_waits_summary_by_account_by_event_name USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_account_by_event_name HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_account_by_event_name EVENT_NAME 3 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_account_by_event_name COUNT_STAR 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -437,7 +635,7 @@ def performance_schema events_waits_summary_by_thread_by_event_name SUM_TIMER_WA
def performance_schema events_waits_summary_by_thread_by_event_name MIN_TIMER_WAIT 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_thread_by_event_name AVG_TIMER_WAIT 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_thread_by_event_name MAX_TIMER_WAIT 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema events_waits_summary_by_user_by_event_name USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema events_waits_summary_by_user_by_event_name USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_user_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_user_by_event_name COUNT_STAR 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema events_waits_summary_by_user_by_event_name SUM_TIMER_WAIT 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -501,6 +699,8 @@ def performance_schema file_summary_by_instance SUM_TIMER_MISC 22 NULL NO bigint
def performance_schema file_summary_by_instance MIN_TIMER_MISC 23 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema file_summary_by_instance AVG_TIMER_MISC 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema file_summary_by_instance MAX_TIMER_MISC 25 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema global_status VARIABLE_NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema global_status VARIABLE_VALUE 2 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
def performance_schema hosts HOST 1 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
def performance_schema hosts CURRENT_CONNECTIONS 2 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema hosts TOTAL_CONNECTIONS 3 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
@@ -533,6 +733,76 @@ def performance_schema host_cache FIRST_SEEN 26 '0000-00-00 00:00:00' NO timesta
def performance_schema host_cache LAST_SEEN 27 '0000-00-00 00:00:00' NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp select,insert,update,references NEVER NULL
def performance_schema host_cache FIRST_ERROR_SEEN 28 '0000-00-00 00:00:00' YES timestamp NULL NULL NULL NULL 0 NULL NULL timestamp select,insert,update,references NEVER NULL
def performance_schema host_cache LAST_ERROR_SEEN 29 '0000-00-00 00:00:00' YES timestamp NULL NULL NULL NULL 0 NULL NULL timestamp select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name USER 1 NULL YES char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name EVENT_NAME 3 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name COUNT_ALLOC 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name COUNT_FREE 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name SUM_NUMBER_OF_BYTES_ALLOC 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name SUM_NUMBER_OF_BYTES_FREE 7 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name LOW_COUNT_USED 8 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name CURRENT_COUNT_USED 9 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name HIGH_COUNT_USED 10 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name LOW_NUMBER_OF_BYTES_USED 11 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name CURRENT_NUMBER_OF_BYTES_USED 12 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_account_by_event_name HIGH_NUMBER_OF_BYTES_USED 13 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name HOST 1 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name COUNT_ALLOC 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name COUNT_FREE 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name SUM_NUMBER_OF_BYTES_ALLOC 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name SUM_NUMBER_OF_BYTES_FREE 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name LOW_COUNT_USED 7 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name CURRENT_COUNT_USED 8 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name HIGH_COUNT_USED 9 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name LOW_NUMBER_OF_BYTES_USED 10 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name CURRENT_NUMBER_OF_BYTES_USED 11 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_host_by_event_name HIGH_NUMBER_OF_BYTES_USED 12 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name COUNT_ALLOC 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name COUNT_FREE 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name SUM_NUMBER_OF_BYTES_ALLOC 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name SUM_NUMBER_OF_BYTES_FREE 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name LOW_COUNT_USED 7 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name CURRENT_COUNT_USED 8 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name HIGH_COUNT_USED 9 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name LOW_NUMBER_OF_BYTES_USED 10 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name CURRENT_NUMBER_OF_BYTES_USED 11 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_thread_by_event_name HIGH_NUMBER_OF_BYTES_USED 12 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name USER 1 NULL YES char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name EVENT_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name COUNT_ALLOC 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name COUNT_FREE 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name SUM_NUMBER_OF_BYTES_ALLOC 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name SUM_NUMBER_OF_BYTES_FREE 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name LOW_COUNT_USED 7 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name CURRENT_COUNT_USED 8 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name HIGH_COUNT_USED 9 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name LOW_NUMBER_OF_BYTES_USED 10 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name CURRENT_NUMBER_OF_BYTES_USED 11 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_by_user_by_event_name HIGH_NUMBER_OF_BYTES_USED 12 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name EVENT_NAME 1 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name COUNT_ALLOC 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name COUNT_FREE 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name SUM_NUMBER_OF_BYTES_ALLOC 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name SUM_NUMBER_OF_BYTES_FREE 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name LOW_COUNT_USED 6 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name CURRENT_COUNT_USED 7 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name HIGH_COUNT_USED 8 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name LOW_NUMBER_OF_BYTES_USED 9 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name CURRENT_NUMBER_OF_BYTES_USED 10 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema memory_summary_global_by_event_name HIGH_NUMBER_OF_BYTES_USED 11 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks OBJECT_TYPE 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks OBJECT_SCHEMA 2 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks OBJECT_NAME 3 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks OBJECT_INSTANCE_BEGIN 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema metadata_locks LOCK_TYPE 5 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks LOCK_DURATION 6 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks LOCK_STATUS 7 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks SOURCE 8 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema metadata_locks OWNER_THREAD_ID 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema metadata_locks OWNER_EVENT_ID 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema mutex_instances NAME 1 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema mutex_instances OBJECT_INSTANCE_BEGIN 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema mutex_instances LOCKED_BY_THREAD_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -548,6 +818,72 @@ def performance_schema performance_timers TIMER_NAME 1 NULL NO enum 11 33 NULL N
def performance_schema performance_timers TIMER_FREQUENCY 2 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema performance_timers TIMER_RESOLUTION 3 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema performance_timers TIMER_OVERHEAD 4 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances OBJECT_INSTANCE_BEGIN 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances STATEMENT_ID 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances STATEMENT_NAME 3 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SQL_TEXT 4 NULL NO longtext 4294967295 4294967295 NULL NULL NULL utf8 utf8_general_ci longtext select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances OWNER_THREAD_ID 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances OWNER_EVENT_ID 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances OWNER_OBJECT_TYPE 7 NULL YES enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('EVENT','FUNCTION','PROCEDURE','TABLE','TRIGGER') select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances OWNER_OBJECT_SCHEMA 8 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances OWNER_OBJECT_NAME 9 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances TIMER_PREPARE 10 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances COUNT_REPREPARE 11 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances COUNT_EXECUTE 12 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_TIMER_EXECUTE 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances MIN_TIMER_EXECUTE 14 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances AVG_TIMER_EXECUTE 15 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances MAX_TIMER_EXECUTE 16 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_LOCK_TIME 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_ERRORS 18 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_WARNINGS 19 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_ROWS_AFFECTED 20 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_ROWS_SENT 21 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_ROWS_EXAMINED 22 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_CREATED_TMP_DISK_TABLES 23 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_CREATED_TMP_TABLES 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SELECT_FULL_JOIN 25 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SELECT_FULL_RANGE_JOIN 26 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SELECT_RANGE 27 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SELECT_RANGE_CHECK 28 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SELECT_SCAN 29 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SORT_MERGE_PASSES 30 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SORT_RANGE 31 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SORT_ROWS 32 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_SORT_SCAN 33 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_NO_INDEX_USED 34 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema prepared_statements_instances SUM_NO_GOOD_INDEX_USED 35 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema replication_applier_configuration CHANNEL_NAME 1 NULL NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references NEVER NULL
+def performance_schema replication_applier_configuration DESIRED_DELAY 2 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status CHANNEL_NAME 1 NULL NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status SERVICE_STATE 2 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('ON','OFF') select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status REMAINING_DELAY 3 NULL YES int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status COUNT_TRANSACTIONS_RETRIES 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status_by_coordinator CHANNEL_NAME 1 NULL NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status_by_coordinator THREAD_ID 2 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status_by_coordinator SERVICE_STATE 3 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('ON','OFF') select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status_by_coordinator LAST_ERROR_NUMBER 4 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status_by_coordinator LAST_ERROR_MESSAGE 5 NULL NO varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
+def performance_schema replication_applier_status_by_coordinator LAST_ERROR_TIMESTAMP 6 current_timestamp() NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update current_timestamp() select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration CHANNEL_NAME 1 NULL NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration HOST 2 NULL NO char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration PORT 3 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration USER 4 NULL NO char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration NETWORK_INTERFACE 5 NULL NO char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration AUTO_POSITION 6 NULL NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('1','0') select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_ALLOWED 7 NULL NO enum 7 21 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO','IGNORED') select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_CA_FILE 8 NULL NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_CA_PATH 9 NULL NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_CERTIFICATE 10 NULL NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_CIPHER 11 NULL NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_KEY 12 NULL NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_VERIFY_SERVER_CERTIFICATE 13 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_CRL_FILE 14 NULL NO varchar 255 765 NULL NULL NULL utf8 utf8_general_ci varchar(255) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration SSL_CRL_PATH 15 NULL NO varchar 255 765 NULL NULL NULL utf8 utf8_general_ci varchar(255) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration CONNECTION_RETRY_INTERVAL 16 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration CONNECTION_RETRY_COUNT 17 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema replication_connection_configuration HEARTBEAT_INTERVAL 18 NULL NO double NULL NULL 10 3 NULL NULL NULL double(10,3) unsigned select,insert,update,references Number of seconds after which a heartbeat will be sent . NEVER NULL
+def performance_schema replication_connection_configuration TLS_VERSION 19 NULL NO varchar 255 765 NULL NULL NULL utf8 utf8_general_ci varchar(255) select,insert,update,references NEVER NULL
def performance_schema rwlock_instances NAME 1 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema rwlock_instances OBJECT_INSTANCE_BEGIN 2 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema rwlock_instances WRITE_LOCKED_BY_THREAD_ID 3 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
@@ -560,15 +896,19 @@ def performance_schema session_connect_attrs PROCESSLIST_ID 1 NULL NO int NULL N
def performance_schema session_connect_attrs ATTR_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8 utf8_bin varchar(32) select,insert,update,references NEVER NULL
def performance_schema session_connect_attrs ATTR_VALUE 3 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_bin varchar(1024) select,insert,update,references NEVER NULL
def performance_schema session_connect_attrs ORDINAL_POSITION 4 NULL YES int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL
+def performance_schema session_status VARIABLE_NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema session_status VARIABLE_VALUE 2 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
def performance_schema setup_actors HOST 1 '%' NO char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
-def performance_schema setup_actors USER 2 '%' NO char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema setup_actors USER 2 '%' NO char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema setup_actors ROLE 3 '%' NO char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema setup_actors ENABLED 4 'YES' NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
+def performance_schema setup_actors HISTORY 5 'YES' NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
def performance_schema setup_consumers NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema setup_consumers ENABLED 2 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
def performance_schema setup_instruments NAME 1 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema setup_instruments ENABLED 2 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
def performance_schema setup_instruments TIMED 3 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
-def performance_schema setup_objects OBJECT_TYPE 1 'TABLE' NO enum 5 15 NULL NULL NULL utf8 utf8_general_ci enum('TABLE') select,insert,update,references NEVER NULL
+def performance_schema setup_objects OBJECT_TYPE 1 'TABLE' NO enum 9 27 NULL NULL NULL utf8 utf8_general_ci enum('EVENT','FUNCTION','PROCEDURE','TABLE','TRIGGER') select,insert,update,references NEVER NULL
def performance_schema setup_objects OBJECT_SCHEMA 2 '%' YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema setup_objects OBJECT_NAME 3 '%' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema setup_objects ENABLED 4 'YES' NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
@@ -629,6 +969,27 @@ def performance_schema socket_summary_by_instance SUM_TIMER_MISC 21 NULL NO bigi
def performance_schema socket_summary_by_instance MIN_TIMER_MISC 22 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema socket_summary_by_instance AVG_TIMER_MISC 23 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema socket_summary_by_instance MAX_TIMER_MISC 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema status_by_account USER 1 NULL YES char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema status_by_account HOST 2 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema status_by_account VARIABLE_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema status_by_account VARIABLE_VALUE 4 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
+def performance_schema status_by_host HOST 1 NULL YES char 60 180 NULL NULL NULL utf8 utf8_bin char(60) select,insert,update,references NEVER NULL
+def performance_schema status_by_host VARIABLE_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema status_by_host VARIABLE_VALUE 3 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
+def performance_schema status_by_thread THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema status_by_thread VARIABLE_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema status_by_thread VARIABLE_VALUE 3 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
+def performance_schema status_by_user USER 1 NULL YES char 32 96 NULL NULL NULL utf8 utf8_bin char(32) select,insert,update,references NEVER NULL
+def performance_schema status_by_user VARIABLE_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema status_by_user VARIABLE_VALUE 3 NULL YES varchar 1024 3072 NULL NULL NULL utf8 utf8_general_ci varchar(1024) select,insert,update,references NEVER NULL
+def performance_schema table_handles OBJECT_TYPE 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema table_handles OBJECT_SCHEMA 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema table_handles OBJECT_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema table_handles OBJECT_INSTANCE_BEGIN 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema table_handles OWNER_THREAD_ID 5 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema table_handles OWNER_EVENT_ID 6 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema table_handles INTERNAL_LOCK 7 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema table_handles EXTERNAL_LOCK 8 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema table_io_waits_summary_by_index_usage OBJECT_TYPE 1 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema table_io_waits_summary_by_index_usage OBJECT_SCHEMA 2 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema table_io_waits_summary_by_index_usage OBJECT_NAME 3 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
@@ -783,7 +1144,7 @@ def performance_schema threads THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NU
def performance_schema threads NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema threads TYPE 3 NULL NO varchar 10 30 NULL NULL NULL utf8 utf8_general_ci varchar(10) select,insert,update,references NEVER NULL
def performance_schema threads PROCESSLIST_ID 4 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
-def performance_schema threads PROCESSLIST_USER 5 NULL YES varchar 16 48 NULL NULL NULL utf8 utf8_general_ci varchar(16) select,insert,update,references NEVER NULL
+def performance_schema threads PROCESSLIST_USER 5 NULL YES varchar 128 384 NULL NULL NULL utf8 utf8_general_ci varchar(128) select,insert,update,references NEVER NULL
def performance_schema threads PROCESSLIST_HOST 6 NULL YES varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) select,insert,update,references NEVER NULL
def performance_schema threads PROCESSLIST_DB 7 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema threads PROCESSLIST_COMMAND 8 NULL YES varchar 16 48 NULL NULL NULL utf8 utf8_general_ci varchar(16) select,insert,update,references NEVER NULL
@@ -793,40 +1154,38 @@ def performance_schema threads PROCESSLIST_INFO 11 NULL YES longtext 4294967295
def performance_schema threads PARENT_THREAD_ID 12 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
def performance_schema threads ROLE 13 NULL YES varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
def performance_schema threads INSTRUMENTED 14 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
-def performance_schema users USER 1 NULL YES char 16 48 NULL NULL NULL utf8 utf8_bin char(16) select,insert,update,references NEVER NULL
+def performance_schema threads HISTORY 15 NULL NO enum 3 9 NULL NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
+def performance_schema threads CONNECTION_TYPE 16 NULL YES varchar 16 48 NULL NULL NULL utf8 utf8_general_ci varchar(16) select,insert,update,references NEVER NULL
+def performance_schema threads THREAD_OS_ID 17 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema users USER 1 NULL YES char 128 384 NULL NULL NULL utf8 utf8_bin char(128) select,insert,update,references NEVER NULL
def performance_schema users CURRENT_CONNECTIONS 2 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
def performance_schema users TOTAL_CONNECTIONS 3 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(20) select,insert,update,references NEVER NULL
-select count(*) from information_schema.columns
+def performance_schema user_variables_by_thread THREAD_ID 1 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL
+def performance_schema user_variables_by_thread VARIABLE_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references NEVER NULL
+def performance_schema user_variables_by_thread VARIABLE_VALUE 3 NULL YES longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob select,insert,update,references NEVER NULL
+select count(*) into @count_byte_columns from information_schema.columns
where table_schema="performance_schema" and data_type = "bigint"
- and column_name like "%number_of_bytes" into @count_byte_columns;
-Warnings:
-Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+ and column_name like "%number_of_bytes";
select @count_byte_columns > 0;
@count_byte_columns > 0
1
-select count(*) from information_schema.columns
+select count(*) into @count_byte_signed from information_schema.columns
where table_schema="performance_schema" and data_type="bigint"
and column_name like "%number_of_bytes"
- and column_type not like "%unsigned" into @count_byte_signed;
-Warnings:
-Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+ and column_type not like "%unsigned";
select (@count_byte_columns - @count_byte_signed) = 0;
(@count_byte_columns - @count_byte_signed) = 0
1
-select count(*) from information_schema.columns
+select count(*) into @count_object_columns from information_schema.columns
where table_schema="performance_schema" and data_type = "bigint"
- and column_name like "%object_instance_begin" into @count_object_columns;
-Warnings:
-Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+ and column_name like "%object_instance_begin";
select @count_object_columns > 0;
@count_object_columns > 0
1
-select count(*) from information_schema.columns
+select count(*) into @count_object_unsigned from information_schema.columns
where table_schema="performance_schema" and data_type="bigint"
and column_name like "%object_instance_begin"
- and column_type like "%unsigned" into @count_object_unsigned;
-Warnings:
-Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
+ and column_type like "%unsigned";
select (@count_object_columns - @count_object_unsigned) = 0;
(@count_object_columns - @count_object_unsigned) = 0
1
diff --git a/mysql-test/suite/perfschema/r/temp_table_io.result b/mysql-test/suite/perfschema/r/temp_table_io.result
index 0e1bf01ef9a..a1b16c42108 100644
--- a/mysql-test/suite/perfschema/r/temp_table_io.result
+++ b/mysql-test/suite/perfschema/r/temp_table_io.result
@@ -70,36 +70,50 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/thread_cache.result b/mysql-test/suite/perfschema/r/thread_cache.result
index daa9f318e7b..8c39f4ddca5 100644
--- a/mysql-test/suite/perfschema/r/thread_cache.result
+++ b/mysql-test/suite/perfschema/r/thread_cache.result
@@ -1,7 +1,7 @@
flush status;
SET @saved_thread_cache_size = @@global.thread_cache_size;
set global thread_cache_size = 0;
-show variables like "thread_cache_size";
+show global variables like "thread_cache_size";
Variable_name Value
thread_cache_size 0
connect con1, localhost, root, , ;
@@ -26,7 +26,7 @@ select @thread_id_increment;
@thread_id_increment
1
set global thread_cache_size = 100;
-show variables like "thread_cache_size";
+show global variables like "thread_cache_size";
Variable_name Value
thread_cache_size 100
connect con1, localhost, root, , ;
@@ -51,7 +51,7 @@ select @thread_id_increment;
@thread_id_increment
1
set global thread_cache_size = @saved_thread_cache_size;
-show status like "performance_schema_thread%";
+show global status like "performance_schema_thread%";
Variable_name Value
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/thread_misc.result b/mysql-test/suite/perfschema/r/thread_misc.result
new file mode 100644
index 00000000000..31094e64b59
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/thread_misc.result
@@ -0,0 +1 @@
+select * from information_schema.columns ORDER BY table_name;
diff --git a/mysql-test/suite/perfschema/r/threads_history.result b/mysql-test/suite/perfschema/r/threads_history.result
new file mode 100644
index 00000000000..aaf2cd09e31
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/threads_history.result
@@ -0,0 +1,700 @@
+create user user1@localhost;
+create user user2@localhost;
+create user user3@localhost;
+create user user4@localhost;
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+grant ALL on *.* to user3@localhost;
+grant ALL on *.* to user4@localhost;
+flush privileges;
+select * from performance_schema.setup_consumers;
+NAME ENABLED
+events_stages_current YES
+events_stages_history YES
+events_stages_history_long YES
+events_statements_current YES
+events_statements_history YES
+events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
+events_waits_current YES
+events_waits_history YES
+events_waits_history_long YES
+global_instrumentation YES
+thread_instrumentation YES
+statements_digest YES
+# Switch to (con1, localhost, user1, , )
+connect con1, localhost, user1, , ;
+update performance_schema.threads
+set INSTRUMENTED='YES', HISTORY='YES'
+ where PROCESSLIST_ID = connection_id();
+# Switch to (con2, localhost, user2, , )
+connect con2, localhost, user2, , ;
+update performance_schema.threads
+set INSTRUMENTED='YES', HISTORY='NO'
+ where PROCESSLIST_ID = connection_id();
+# Switch to (con3, localhost, user3, , )
+connect con3, localhost, user3, , ;
+update performance_schema.threads
+set INSTRUMENTED='NO', HISTORY='YES'
+ where PROCESSLIST_ID = connection_id();
+# Switch to (con4, localhost, user4, , )
+connect con4, localhost, user4, , ;
+update performance_schema.threads
+set INSTRUMENTED='NO', HISTORY='NO'
+ where PROCESSLIST_ID = connection_id();
+# Switch to connection default
+connection default;
+truncate table performance_schema.events_transactions_current;
+truncate table performance_schema.events_transactions_history;
+truncate table performance_schema.events_transactions_history_long;
+truncate table performance_schema.events_statements_current;
+truncate table performance_schema.events_statements_history;
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_current;
+truncate table performance_schema.events_stages_history;
+truncate table performance_schema.events_stages_history_long;
+truncate table performance_schema.events_waits_current;
+truncate table performance_schema.events_waits_history;
+truncate table performance_schema.events_waits_history_long;
+# Switch to connection con1
+connection con1;
+XA START 'XA_CON1', 'XA_BQUAL', 12;
+select "Hi from con1";
+Hi from con1
+Hi from con1
+XA END 'XA_CON1', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON1', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON1', 'XA_BQUAL', 12;
+# Switch to connection con2
+connection con2;
+XA START 'XA_CON2', 'XA_BQUAL', 12;
+select "Hi from con2";
+Hi from con2
+Hi from con2
+XA END 'XA_CON2', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON2', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON2', 'XA_BQUAL', 12;
+# Switch to connection con3
+connection con3;
+XA START 'XA_CON3', 'XA_BQUAL', 12;
+select "Hi from con3";
+Hi from con3
+Hi from con3
+XA END 'XA_CON3', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON3', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON3', 'XA_BQUAL', 12;
+# Switch to connection con4
+connection con4;
+XA START 'XA_CON4', 'XA_BQUAL', 12;
+select "Hi from con4";
+Hi from con4
+Hi from con4
+XA END 'XA_CON4', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON4', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON4', 'XA_BQUAL', 12;
+connection default;
+"=========================== Transactions user 1"
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+"=========================== Transactions user 2"
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON2 XA_BQUAL
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 1"
+EVENT_NAME SQL_TEXT
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+EVENT_NAME SQL_TEXT
+statement/sql/xa_start XA START 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/select select "Hi from con1"
+statement/sql/xa_end XA END 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_prepare XA PREPARE 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+EVENT_NAME SQL_TEXT
+statement/sql/xa_start XA START 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/select select "Hi from con1"
+statement/sql/xa_end XA END 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_prepare XA PREPARE 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+"=========================== Statements user 2"
+EVENT_NAME SQL_TEXT
+statement/sql/xa_commit XA COMMIT 'XA_CON2', 'XA_BQUAL', 12
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 1"
+EVENT_NAME
+EVENT_NAME
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+EVENT_NAME
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/checking permissions
+stage/sql/Opening tables
+stage/sql/After opening tables
+stage/sql/init
+stage/sql/Optimizing
+stage/sql/Executing
+stage/sql/End of update loop
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+"=========================== Stages user 2"
+EVENT_NAME
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 1"
+EVENT_NAME
+idle
+has_waits
+1
+has_waits
+1
+"=========================== Waits user 2"
+EVENT_NAME
+idle
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+# Switch to connection default, disable consumers
+connection default;
+update performance_schema.setup_consumers
+set enabled='NO' where name like "%history%";
+select * from performance_schema.setup_consumers;
+NAME ENABLED
+events_stages_current YES
+events_stages_history NO
+events_stages_history_long NO
+events_statements_current YES
+events_statements_history NO
+events_statements_history_long NO
+events_transactions_current YES
+events_transactions_history NO
+events_transactions_history_long NO
+events_waits_current YES
+events_waits_history NO
+events_waits_history_long NO
+global_instrumentation YES
+thread_instrumentation YES
+statements_digest YES
+truncate table performance_schema.events_transactions_current;
+truncate table performance_schema.events_transactions_history;
+truncate table performance_schema.events_transactions_history_long;
+truncate table performance_schema.events_statements_current;
+truncate table performance_schema.events_statements_history;
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_current;
+truncate table performance_schema.events_stages_history;
+truncate table performance_schema.events_stages_history_long;
+truncate table performance_schema.events_waits_current;
+truncate table performance_schema.events_waits_history;
+truncate table performance_schema.events_waits_history_long;
+# Switch to connection con1
+connection con1;
+XA START 'XA_CON1', 'XA_BQUAL', 12;
+select "Hi from con1";
+Hi from con1
+Hi from con1
+XA END 'XA_CON1', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON1', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON1', 'XA_BQUAL', 12;
+# Switch to connection con2
+connection con2;
+XA START 'XA_CON2', 'XA_BQUAL', 12;
+select "Hi from con2";
+Hi from con2
+Hi from con2
+XA END 'XA_CON2', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON2', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON2', 'XA_BQUAL', 12;
+# Switch to connection con3
+connection con3;
+XA START 'XA_CON3', 'XA_BQUAL', 12;
+select "Hi from con3";
+Hi from con3
+Hi from con3
+XA END 'XA_CON3', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON3', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON3', 'XA_BQUAL', 12;
+# Switch to connection con4
+connection con4;
+XA START 'XA_CON4', 'XA_BQUAL', 12;
+select "Hi from con4";
+Hi from con4
+Hi from con4
+XA END 'XA_CON4', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON4', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON4', 'XA_BQUAL', 12;
+connection default;
+"=========================== Transactions user 1"
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 2"
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON2 XA_BQUAL
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 1"
+EVENT_NAME SQL_TEXT
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 2"
+EVENT_NAME SQL_TEXT
+statement/sql/xa_commit XA COMMIT 'XA_CON2', 'XA_BQUAL', 12
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 1"
+EVENT_NAME
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 2"
+EVENT_NAME
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 1"
+EVENT_NAME
+idle
+has_waits
+0
+has_waits
+0
+"=========================== Waits user 2"
+EVENT_NAME
+idle
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+# Switch to connection default, enable consumers
+connection default;
+update performance_schema.setup_consumers
+set enabled='YES' where name like "%history%";
+select * from performance_schema.setup_consumers;
+NAME ENABLED
+events_stages_current YES
+events_stages_history YES
+events_stages_history_long YES
+events_statements_current YES
+events_statements_history YES
+events_statements_history_long YES
+events_transactions_current YES
+events_transactions_history YES
+events_transactions_history_long YES
+events_waits_current YES
+events_waits_history YES
+events_waits_history_long YES
+global_instrumentation YES
+thread_instrumentation YES
+statements_digest YES
+truncate table performance_schema.events_transactions_current;
+truncate table performance_schema.events_transactions_history;
+truncate table performance_schema.events_transactions_history_long;
+truncate table performance_schema.events_statements_current;
+truncate table performance_schema.events_statements_history;
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_current;
+truncate table performance_schema.events_stages_history;
+truncate table performance_schema.events_stages_history_long;
+truncate table performance_schema.events_waits_current;
+truncate table performance_schema.events_waits_history;
+truncate table performance_schema.events_waits_history_long;
+# Switch to connection con1
+connection con1;
+XA START 'XA_CON1', 'XA_BQUAL', 12;
+select "Hi from con1";
+Hi from con1
+Hi from con1
+XA END 'XA_CON1', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON1', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON1', 'XA_BQUAL', 12;
+# Switch to connection con2
+connection con2;
+XA START 'XA_CON2', 'XA_BQUAL', 12;
+select "Hi from con2";
+Hi from con2
+Hi from con2
+XA END 'XA_CON2', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON2', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON2', 'XA_BQUAL', 12;
+# Switch to connection con3
+connection con3;
+XA START 'XA_CON3', 'XA_BQUAL', 12;
+select "Hi from con3";
+Hi from con3
+Hi from con3
+XA END 'XA_CON3', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON3', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON3', 'XA_BQUAL', 12;
+# Switch to connection con4
+connection con4;
+XA START 'XA_CON4', 'XA_BQUAL', 12;
+select "Hi from con4";
+Hi from con4
+Hi from con4
+XA END 'XA_CON4', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON4', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON4', 'XA_BQUAL', 12;
+connection default;
+"=========================== Transactions user 1"
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON1 XA_BQUAL
+"=========================== Transactions user 2"
+XID_FORMAT_ID XID_GTRID XID_BQUAL
+12 XA_CON2 XA_BQUAL
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Transactions user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 1"
+EVENT_NAME SQL_TEXT
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+EVENT_NAME SQL_TEXT
+statement/sql/xa_start XA START 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/select select "Hi from con1"
+statement/sql/xa_end XA END 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_prepare XA PREPARE 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+EVENT_NAME SQL_TEXT
+statement/sql/xa_start XA START 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/select select "Hi from con1"
+statement/sql/xa_end XA END 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_prepare XA PREPARE 'XA_CON1', 'XA_BQUAL', 12
+statement/sql/xa_commit XA COMMIT 'XA_CON1', 'XA_BQUAL', 12
+"=========================== Statements user 2"
+EVENT_NAME SQL_TEXT
+statement/sql/xa_commit XA COMMIT 'XA_CON2', 'XA_BQUAL', 12
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Statements user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 1"
+EVENT_NAME
+EVENT_NAME
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+EVENT_NAME
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/checking permissions
+stage/sql/Opening tables
+stage/sql/After opening tables
+stage/sql/init
+stage/sql/Optimizing
+stage/sql/Executing
+stage/sql/End of update loop
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+stage/sql/starting
+stage/sql/Query end
+stage/sql/Commit
+stage/sql/closing tables
+stage/sql/Starting cleanup
+stage/sql/Freeing items
+stage/sql/Reset for next command
+"=========================== Stages user 2"
+EVENT_NAME
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Stages user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 1"
+EVENT_NAME
+idle
+has_waits
+1
+has_waits
+1
+"=========================== Waits user 2"
+EVENT_NAME
+idle
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 3"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+"=========================== Waits user 4"
+count(*)
+0
+count(*)
+0
+count(*)
+0
+# Switch to connection default
+connection default;
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+revoke all privileges, grant option from user3@localhost;
+revoke all privileges, grant option from user4@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+drop user user3@localhost;
+drop user user4@localhost;
+flush privileges;
+truncate table performance_schema.setup_actors;
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+select * from performance_schema.setup_actors;
+HOST USER ROLE ENABLED HISTORY
+% % % YES YES
diff --git a/mysql-test/suite/perfschema/r/threads_mysql_freebsd.result b/mysql-test/suite/perfschema/r/threads_mysql_freebsd.result
new file mode 100644
index 00000000000..36158d06406
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/threads_mysql_freebsd.result
@@ -0,0 +1,3 @@
+SELECT THREAD_ID, NAME, THREAD_OS_ID from performance_schema.threads
+WHERE THREAD_OS_ID is NULL;
+THREAD_ID NAME THREAD_OS_ID
diff --git a/mysql-test/suite/perfschema/r/threads_mysql_linux.result b/mysql-test/suite/perfschema/r/threads_mysql_linux.result
new file mode 100644
index 00000000000..36158d06406
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/threads_mysql_linux.result
@@ -0,0 +1,3 @@
+SELECT THREAD_ID, NAME, THREAD_OS_ID from performance_schema.threads
+WHERE THREAD_OS_ID is NULL;
+THREAD_ID NAME THREAD_OS_ID
diff --git a/mysql-test/suite/perfschema/r/threads_mysql_windows.result b/mysql-test/suite/perfschema/r/threads_mysql_windows.result
new file mode 100644
index 00000000000..36158d06406
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/threads_mysql_windows.result
@@ -0,0 +1,3 @@
+SELECT THREAD_ID, NAME, THREAD_OS_ID from performance_schema.threads
+WHERE THREAD_OS_ID is NULL;
+THREAD_ID NAME THREAD_OS_ID
diff --git a/mysql-test/suite/perfschema/r/transaction.result b/mysql-test/suite/perfschema/r/transaction.result
new file mode 100644
index 00000000000..56c50d14879
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/transaction.result
@@ -0,0 +1,680 @@
+set global binlog_format=ROW;
+
+========================================================================
+STEP 1 - SETUP
+========================================================================
+
+# Control thread
+
+connection default;
+SET SESSION AUTOCOMMIT= 1;
+SELECT thread_id INTO @my_thread_id
+FROM performance_schema.threads
+WHERE processlist_id = connection_id();
+
+# Connection 1
+
+connect con1, localhost, root,,;
+SET SESSION AUTOCOMMIT= 0;
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE;
+connection default;
+
+# Create test tables, one transactional and one non-transactional
+
+connection default;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS nt1;
+CREATE TABLE t1 (s1 int, s2 varchar(64)) ENGINE=INNODB;
+CREATE TABLE nt1 (s1 int, s2 varchar(64)) ENGINE=MYISAM;
+
+# Disable all events from the control thread
+
+
+# Clear transaction tables
+
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 2 - BASIC TRANSACTION
+========================================================================
+
+connection con1;
+SELECT @@global.tx_isolation;
+@@global.tx_isolation
+REPEATABLE-READ
+SELECT @@global.autocommit;
+@@global.autocommit
+1
+SELECT @@global.binlog_format;
+@@global.binlog_format
+ROW
+SELECT @@tx_isolation;
+@@tx_isolation
+REPEATABLE-READ
+SELECT @@autocommit;
+@@autocommit
+0
+SELECT @@binlog_format;
+@@binlog_format
+ROW
+
+# STEP 2.1 - START/COMMIT
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (101, 'COMMITTED');
+COMMIT;
+
+# STEP 2.2 - ROLLBACK
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (102, 'ROLLED BACK');
+ROLLBACK;
+
+## Expect 1 committed and 1 rolled back transaction
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+# STEP 2.3 - COMMIT AND CHAIN
+
+connection con1;
+START TRANSACTION;
+INSERT INTO t1 VALUES (103, 'COMMIT AND CHAIN');
+COMMIT AND CHAIN;
+INSERT INTO t1 VALUES (104, 'COMMIT AND CHAIN');
+COMMIT;
+
+## Expect 2 committed transactions
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 2);
+ACTUAL EXPECTED
+ 2 2
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 3 - ISOLATION LEVEL
+========================================================================
+
+connection con1
+connection con1;
+SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+START TRANSACTION;
+INSERT INTO t1 VALUES (301, 'SERIALIZABLE');
+COMMIT;
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
+START TRANSACTION;
+INSERT INTO t1 VALUES (302, 'REPEATABLE READ');
+COMMIT;
+SELECT @@binlog_format INTO @binlog_save;
+SET SESSION BINLOG_FORMAT=ROW;
+SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
+START TRANSACTION;
+INSERT INTO t1 VALUES (303, 'READ COMMITTED');
+COMMIT;
+SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+START TRANSACTION;
+INSERT INTO t1 VALUES (304, 'READ UNCOMMITTED');
+COMMIT;
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
+SET binlog_format= @binlog_save;
+
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'SERIALIZABLE', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'READ COMMITTED', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'READ UNCOMMITTED', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 4 - ACCESS MODE
+========================================================================
+#
+# STEP 4.1 - READ ONLY, TIMING ENABLED
+#
+
+connection con1
+connection con1;
+SET SESSION TRANSACTION READ WRITE;
+START TRANSACTION;
+INSERT INTO t1 VALUES (410, 'READ ONLY');
+INSERT INTO t1 VALUES (411, 'READ ONLY');
+INSERT INTO t1 VALUES (412, 'READ ONLY');
+INSERT INTO t1 VALUES (413, 'READ ONLY');
+COMMIT;
+SET SESSION TRANSACTION READ ONLY;
+START TRANSACTION;
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+101 COMMITTED
+103 COMMIT AND CHAIN
+104 COMMIT AND CHAIN
+301 SERIALIZABLE
+302 REPEATABLE READ
+303 READ COMMITTED
+304 READ UNCOMMITTED
+410 READ ONLY
+411 READ ONLY
+412 READ ONLY
+413 READ ONLY
+COMMIT;
+
+## Expect 1 read only, committed transaction in events_transactions_history
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ ONLY', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+#
+# STEP 4.2 - READ ONLY, TIMING DISABLED
+#
+
+## Disable timing stats for 'transaction'
+UPDATE performance_schema.setup_instruments SET timed = 'NO' WHERE name = 'transaction';
+
+TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;
+connection con1
+connection con1;
+START TRANSACTION;
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+101 COMMITTED
+103 COMMIT AND CHAIN
+104 COMMIT AND CHAIN
+301 SERIALIZABLE
+302 REPEATABLE READ
+303 READ COMMITTED
+304 READ UNCOMMITTED
+410 READ ONLY
+411 READ ONLY
+412 READ ONLY
+413 READ ONLY
+COMMIT;
+
+SET SESSION TRANSACTION READ WRITE;
+connection default;
+
+## Expect 1 event, 0 stats
+SELECT * FROM performance_schema.events_transactions_summary_global_by_event_name;
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
+transaction 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+
+## Restore setup_instruments
+UPDATE performance_schema.setup_instruments SET enabled = 'YES' WHERE name = 'transaction';
+
+========================================================================
+# STEP 5 - IMPLICIT START
+========================================================================
+# When AUTOCOMMIT is disabled, the first statement following a committed
+# transaction marks the start of a new transaction. Subsequent statements will
+# be part of the transaction until it is committed.
+
+connection con1;
+SET SESSION AUTOCOMMIT = 0;
+INSERT INTO t1 VALUES (501, 'IMPLICIT START');
+
+## Expect 1 active transaction in events_transactions_current
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+connection con1;
+INSERT INTO t1 VALUES (502, 'IMPLICIT START');
+COMMIT;
+
+## Expect one committed transaction in events_transactions_current and history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 6 - IMPLICIT COMMIT (DDL, ETC)
+========================================================================
+# Transactions are implicitly ended by DDL statements, locking statements
+# and server administration commands.
+
+connection con1;
+SET SESSION AUTOCOMMIT = 0;
+INSERT INTO t1 VALUES (601, 'IMPLICIT COMMIT');
+
+## Expect one active transaction in events_transactions_current, zero events in history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', 'NO', 0, 0, 0, 0);
+ACTUAL EXPECTED
+ 0 0
+connection con1;
+INSERT INTO t1 VALUES (602, 'IMPLICIT COMMIT');
+## Issue a DDL statement to force a commmit
+CREATE TABLE t2 (s1 INT, s2 VARCHAR(64)) ENGINE=INNODB;
+
+## Expect 0 active transactions, 1 committed transaction
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 0);
+ACTUAL EXPECTED
+ 0 0
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+DROP TABLE test.t2;
+
+========================================================================
+STEP 7 - XA TRANSACTIONS
+========================================================================
+#
+# STEP 7.1 - XA START
+#
+connection con1;
+XA START 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+## Expect 1 active XA transaction, state ACTIVE
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'ACTIVE', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+# STEP 7.2 - XA END
+
+connection con1;
+INSERT INTO t1 VALUES (701, 'XA');
+XA END 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+## Expect 1 active XA transaction, state IDLE
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'IDLE', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+#
+# STEP 7.3 - XA PREPARE
+#
+connection con1;
+XA PREPARE 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+## Expect 1 active XA transaction, state PREPARED
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'PREPARED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+#
+# STEP 7.4 - XA COMMIT
+#
+connection con1;
+XA COMMIT 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+## Expect 1 committed XA transaction, state COMMITTED in current and history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+#
+# STEP 7.5 - XA ROLLBACK
+#
+connection con1;
+XA START 'XA_CON1_002';
+INSERT INTO t1 VALUES (702, 'XA');
+XA END 'XA_CON1_002';
+XA PREPARE 'XA_CON1_002';
+
+## Expect 1 active XA transaction, state PREPARED
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, 'XA_CON1_002', '', 'PREPARED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+connection con1;
+XA ROLLBACK 'XA_CON1_002';
+
+## Expect 1 XA transaction, state ROLLBACK ONLY in current and history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, 'XA_CON1_002', '', 'ROLLBACK ONLY', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, 'XA_CON1_002', '', 'ROLLBACK ONLY', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+SELECT * FROM performance_schema.events_transactions_current ORDER BY event_id;
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME STATE TRX_ID GTID XID_FORMAT_ID XID_GTRID XID_BQUAL XA_STATE SOURCE TIMER_START TIMER_END TIMER_WAIT ACCESS_MODE ISOLATION_LEVEL AUTOCOMMIT NUMBER_OF_SAVEPOINTS NUMBER_OF_ROLLBACK_TO_SAVEPOINT NUMBER_OF_RELEASE_SAVEPOINT OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID NESTING_EVENT_TYPE
+#
+# STEP 7.6 - XA TRANSACTION - LONG GTRID AND BQUAL
+#
+connection con1;
+XA START 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+INSERT INTO t1 VALUES (703, 'XA LONG');
+XA END 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+XA PREPARE 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+XA COMMIT 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+
+## Expect 1 committed XA transaction, state COMMITTED in current and history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', 'BQUAL_6789012345678901234567890123456789012345678901234567890123', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', 'BQUAL_6789012345678901234567890123456789012345678901234567890123', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+#
+# STEP 7.7 - XA TRANSACTION - LONG GTRID AND BINARY BQUAL
+#
+connection con1;
+XA START 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+INSERT INTO t1 VALUES (704, 'XA LONG/BINARY');
+XA END 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+XA PREPARE 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+XA COMMIT 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+
+## Expect 1 committed XA transaction, state COMMITTED in current and history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', '0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', '0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 8 - TRANSACTIONAL AND NON-TRANSACTIONAL TABLES
+========================================================================
+
+## MariaDB bug: MDEV-6012? MDEV-14436?
+set @mariadb_bug=1;
+connection con1;
+SET SESSION AUTOCOMMIT = 0;
+SELECT * FROM performance_schema.events_transactions_current ORDER BY event_id;
+THREAD_ID EVENT_ID END_EVENT_ID EVENT_NAME STATE TRX_ID GTID XID_FORMAT_ID XID_GTRID XID_BQUAL XA_STATE SOURCE TIMER_START TIMER_END TIMER_WAIT ACCESS_MODE ISOLATION_LEVEL AUTOCOMMIT NUMBER_OF_SAVEPOINTS NUMBER_OF_ROLLBACK_TO_SAVEPOINT NUMBER_OF_RELEASE_SAVEPOINT OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID NESTING_EVENT_TYPE
+
+#
+# STEP 8.1 - UPDATE NON-TRANSACTIONAL TABLE
+#
+INSERT INTO nt1 VALUES (801, 'NON-TRANSACTIONAL');
+
+## Expect 0 transactions in events_transactions_current
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, @mariadb_bug);
+ACTUAL EXPECTED
+ 1 1
+connection con1;
+COMMIT;
+
+## Expect 0 transactions in events_transactions_history
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, @mariadb_bug);
+ACTUAL EXPECTED
+ 1 1
+
+#
+# STEP 8.2 - UPDATE TRANSACTIONAL AND NON-TRANSACTIONAL TABLES
+#
+
+## First non-transactional...
+
+connection con1;
+INSERT INTO nt1 VALUES (802, 'NON-TRANSACTIONAL');
+
+## Expect 0 transactions in events_transactions_current
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, @mariadb_bug);
+ACTUAL EXPECTED
+ 1 1
+
+## Now transactional. Transaction should be started.
+connection con1;
+INSERT INTO t1 VALUES (802, 'TRANSACTIONAL');
+
+## Expect 1 transaction in events_transactions_current
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+connection con1;
+COMMIT;
+
+## Expect 1 committed transaction in events_transactions_current and history
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1+@mariadb_bug);
+ACTUAL EXPECTED
+ 2 2
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 9 - SAVEPOINTS
+========================================================================
+#
+# STEP 9.1 - SAVEPOINT 1
+#
+connection con1;
+START TRANSACTION;
+INSERT INTO t1 VALUES (901, 'SAVEPOINT');
+SAVEPOINT SVP001;
+
+## Expect 1 active transaction with 1 savepoint
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 1, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+#
+# STEP 9.2 - SAVEPOINTS 2 and 3
+#
+connection con1;
+INSERT INTO t1 VALUES (902, 'SAVEPOINT');
+SAVEPOINT SVP002;
+INSERT INTO t1 VALUES (903, 'SAVEPOINT');
+SAVEPOINT SVP003;
+INSERT INTO t1 VALUES (904, 'SAVEPOINT');
+SELECT COUNT(*) FROM t1 WHERE s1 > 900;
+COUNT(*)
+4
+
+#
+# STEP 9.3 - ROLLBACK TO SAVEPOINT 2
+#
+connection con1;
+ROLLBACK TO SVP002;
+
+## Expect 1 active transaction with 3 savepoints, 1 rollback to savepoint
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+#
+# STEP 9.4 - RELEASE SAVEPOINT 1
+#
+connection con1;
+RELEASE SAVEPOINT SVP001;
+
+## Expect 1 active transaction with 3 savepoints, 1 rollback to savepoint, 1 release savepoint
+connection default;
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 1, 1);
+ACTUAL EXPECTED
+ 1 1
+#
+# STEP 9.5 - COMMIT
+#
+connection con1;
+COMMIT;
+
+## Expect 1 committed transaction with 3 savepoints, 1 rollback to savepoint, 1 release savepoint
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 1, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+========================================================================
+# STEP 10 - GTIDs
+========================================================================
+GTIDs are tested in transaction_gtid.test.
+
+========================================================================
+# STEP 11 - MISCELLANY
+========================================================================
+#
+# STEP 11.1 - TRUNCATE DURING ACTIVE TRANSACTION
+#
+
+# Verify that truncating events_transactions_current during an active transaction
+# does not leave an orphaned transaction event, and that the row index to
+# events_transactions_history is reset to 0.
+
+connection con1;
+START TRANSACTION;
+INSERT INTO t1 VALUES (1110, 'INSERT 1110');
+connection default;
+TRUNCATE performance_schema.events_transactions_current;
+connection con1;
+
+COMMIT;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (1111, 'INSERT 1111');
+COMMIT;
+
+## Expect 1 transaction for connection 1
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', '', '', '', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_transaction_tables();
+
+#
+# STEP 11.2 - DISABLE THREAD INSTRUMENTATION
+#
+connection default;
+UPDATE performance_schema.setup_consumers
+SET enabled = 'NO'
+ WHERE name = 'thread_instrumentation';
+
+TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;
+connection con1;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (1120, 'INSERT 1120');
+COMMIT;
+connection default;
+
+## Expect 1 event with non-zero summary stats
+SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, COUNT_READ_WRITE
+FROM performance_schema.events_transactions_summary_global_by_event_name
+WHERE count_star = 1 and sum_timer_wait != 0;
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT COUNT_READ_WRITE
+
+## Disable timing stats for 'transaction'
+UPDATE performance_schema.setup_instruments SET timed = 'NO' WHERE name = 'transaction';
+
+TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;
+connection default;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (1121, 'INSERT 1121');
+COMMIT;
+connection default;
+
+## Expect 1 event, 0 stats
+SELECT * FROM performance_schema.events_transactions_summary_global_by_event_name;
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT COUNT_READ_WRITE SUM_TIMER_READ_WRITE MIN_TIMER_READ_WRITE AVG_TIMER_READ_WRITE MAX_TIMER_READ_WRITE COUNT_READ_ONLY SUM_TIMER_READ_ONLY MIN_TIMER_READ_ONLY AVG_TIMER_READ_ONLY MAX_TIMER_READ_ONLY
+transaction 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+
+## Restore setup_consumers and setup_instruments
+UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'thread_instrumentation';
+UPDATE performance_schema.setup_instruments SET enabled = 'YES' WHERE name = 'transaction';
+
+DELETE FROM t1;
+CALL clear_history();
+
+#
+# STEP 11.3 - STATEMENT ROLLBACK - AUTOCOMMIT OFF - BINLOG FORMAT 'STATEMENT'
+#
+connection con1;
+SET SESSION binlog_format = STATEMENT;
+SET SESSION AUTOCOMMIT = 0;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (1130, 'INSERT 1130');
+
+## Expect binlog statement mode error
+UPDATE t1, performance_schema.setup_instruments pfs
+SET t1.s1 = 1, pfs.timed = 'NO';
+
+COMMIT;
+
+SET SESSION AUTOCOMMIT = 1;
+
+## Expect 1 committed transaction
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', '', '', 'NO', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+
+DELETE FROM t1;
+CALL clear_history();
+
+#
+# STEP 11.4 - STATEMENT ROLLBACK - AUTOCOMMIT ON - BINLOG FORMAT 'STATEMENT'
+#
+connection con1;
+SET SESSION binlog_format = STATEMENT;
+SET SESSION AUTOCOMMIT = 1;
+
+## Expect binlog statement mode error
+UPDATE t1, performance_schema.setup_instruments pfs
+SET t1.s1 = 1, pfs.timed = 'NO';
+
+## Expect 1 rolled back transaction
+connection default;
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, '', '', '', '', '', '', 'YES', 0, 0, 0, 1);
+ACTUAL EXPECTED
+ 1 1
+CALL clear_history();
+
+========================================================================
+# CLEAN UP
+========================================================================
+
+disconnect con1;
+connection default;
+DROP TABLE t1;
+DROP TABLE nt1;
+DROP PROCEDURE clear_transaction_tables;
+DROP PROCEDURE clear_transaction_history;
+DROP PROCEDURE clear_statement_history;
+DROP PROCEDURE clear_history;
+DROP PROCEDURE transaction_verifier;
+set global binlog_format=default;
diff --git a/mysql-test/suite/perfschema/r/transaction_gtid.result b/mysql-test/suite/perfschema/r/transaction_gtid.result
new file mode 100644
index 00000000000..ed0d743444f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/transaction_gtid.result
@@ -0,0 +1,171 @@
+include/rpl_init.inc [topology=none]
+==== Configure ====
+SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON;
+CREATE TABLE t1 (a INT);
+==== Test ====
+---- Case 1: Specify ANONYMOUS prior to transaction ----
+* BEGIN ... ROLLBACK
+- history=none current=none
+SET SESSION GTID_NEXT = 'ANONYMOUS';
+BEGIN;
+INSERT INTO t1 VALUES (1);
+ROLLBACK;
+- history=ANONYMOUS current=ANONYMOUS
+* BEGIN ... COMMIT
+- history=none current=none
+SET SESSION GTID_NEXT = 'ANONYMOUS';
+- history=none current=none
+[START] BEGIN;
+- history=none current=AUTOMATIC
+[END] BEGIN;
+- history=none current=ANONYMOUS
+INSERT INTO t1 VALUES (1);
+- history=none current=ANONYMOUS
+COMMIT;
+- history=ANONYMOUS current=ANONYMOUS
+* AUTOCOMMIT = OFF
+SET @@SESSION.AUTOCOMMIT = 0;
+- history=none current=none
+SET SESSION GTID_NEXT = 'ANONYMOUS';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (1);
+- history=none current=ANONYMOUS
+[END] INSERT INTO t1 VALUES (1);
+- history=none current=ANONYMOUS
+COMMIT;
+- history=ANONYMOUS current=ANONYMOUS
+* AUTOCOMMIT = ON
+SET @@SESSION.AUTOCOMMIT = 1;
+- history=none current=none
+SET SESSION GTID_NEXT = 'ANONYMOUS';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (1);
+- history=none current=ANONYMOUS
+[END] INSERT INTO t1 VALUES (1);
+- history=ANONYMOUS current=ANONYMOUS
+---- Case 2: Generate ANONYMOUS at commit ----
+* BEGIN ... ROLLBACK
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+BEGIN;
+INSERT INTO t1 VALUES (2);
+ROLLBACK;
+- history=AUTOMATIC current=AUTOMATIC
+* BEGIN ... COMMIT
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+- history=none current=none
+[START] BEGIN;
+- history=none current=AUTOMATIC
+[END] BEGIN;
+- history=none current=AUTOMATIC
+INSERT INTO t1 VALUES (2);
+- history=none current=AUTOMATIC
+COMMIT;
+- history=ANONYMOUS current=ANONYMOUS
+* AUTOCOMMIT = OFF
+SET @@SESSION.AUTOCOMMIT = 0;
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (2);
+- history=none current=AUTOMATIC
+[END] INSERT INTO t1 VALUES (2);
+- history=none current=AUTOMATIC
+COMMIT;
+- history=ANONYMOUS current=ANONYMOUS
+* AUTOCOMMIT = ON
+SET @@SESSION.AUTOCOMMIT = 1;
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (2);
+- history=none current=AUTOMATIC
+[END] INSERT INTO t1 VALUES (2);
+- history=ANONYMOUS current=ANONYMOUS
+include/rpl_set_gtid_mode.inc [ON on servers 1]
+---- Case 3: Specify GTID prior to transaction ----
+* BEGIN ... ROLLBACK
+- history=none current=none
+SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';
+BEGIN;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+- history=A:1 current=A:1
+* BEGIN ... COMMIT
+- history=none current=none
+SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';
+- history=none current=none
+[START] BEGIN;
+- history=none current=AUTOMATIC
+[END] BEGIN;
+- history=none current=A:1
+INSERT INTO t1 VALUES (3);
+- history=none current=A:1
+COMMIT;
+- history=A:1 current=A:1
+* AUTOCOMMIT = OFF
+SET @@SESSION.AUTOCOMMIT = 0;
+- history=none current=none
+SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (3);
+- history=none current=A:1
+[END] INSERT INTO t1 VALUES (3);
+- history=none current=A:1
+COMMIT;
+- history=A:1 current=A:1
+* AUTOCOMMIT = ON
+SET @@SESSION.AUTOCOMMIT = 1;
+- history=none current=none
+SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (3);
+- history=none current=A:1
+[END] INSERT INTO t1 VALUES (3);
+- history=A:1 current=A:1
+---- Case 4: Generate GTID at commit ----
+* BEGIN ... ROLLBACK
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+BEGIN;
+INSERT INTO t1 VALUES (4);
+ROLLBACK;
+- history=AUTOMATIC current=AUTOMATIC
+* BEGIN ... COMMIT
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+- history=none current=none
+[START] BEGIN;
+- history=none current=AUTOMATIC
+[END] BEGIN;
+- history=none current=AUTOMATIC
+INSERT INTO t1 VALUES (4);
+- history=none current=AUTOMATIC
+COMMIT;
+- history=SERVER_UUID:1 current=SERVER_UUID:1
+* AUTOCOMMIT = OFF
+SET @@SESSION.AUTOCOMMIT = 0;
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (4);
+- history=none current=AUTOMATIC
+[END] INSERT INTO t1 VALUES (4);
+- history=none current=AUTOMATIC
+COMMIT;
+- history=SERVER_UUID:1 current=SERVER_UUID:1
+* AUTOCOMMIT = ON
+SET @@SESSION.AUTOCOMMIT = 1;
+- history=none current=none
+SET SESSION GTID_NEXT = 'AUTOMATIC';
+- history=none current=none
+[START] INSERT INTO t1 VALUES (4);
+- history=none current=AUTOMATIC
+[END] INSERT INTO t1 VALUES (4);
+- history=SERVER_UUID:1 current=SERVER_UUID:1
+==== Clean up ====
+DROP TABLE t1;
+include/rpl_set_gtid_mode.inc [OFF on servers 1]
+SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF;
+include/rpl_end.inc
diff --git a/mysql-test/suite/perfschema/r/transaction_nested_events.result b/mysql-test/suite/perfschema/r/transaction_nested_events.result
new file mode 100644
index 00000000000..62152f2c2cf
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/transaction_nested_events.result
@@ -0,0 +1,1258 @@
+
+#========================================================================
+# STEP 1 - SETUP
+#========================================================================
+
+## Setup control thread
+
+connection default;
+SET SESSION AUTOCOMMIT= 1;
+USE test;
+DROP DATABASE IF EXISTS db;
+
+## Create test database, test tables, one transactional and one non-transactional
+CREATE DATABASE db;
+CREATE TABLE db.t1 (s1 int, s2 varchar(64)) ENGINE=INNODB;
+CREATE TABLE db.nt1 (s1 int, s2 varchar(64)) ENGINE=MYISAM;
+
+## Setup connection 1
+connect con1, localhost, root,,;
+USE db;
+SET SESSION AUTOCOMMIT = 1;
+SELECT thread_id INTO @my_thread_id
+FROM performance_schema.threads
+WHERE processlist_id = connection_id();
+connection default;
+
+## Disable events from the control (default) connection
+UPDATE performance_schema.threads SET instrumented = 'NO' WHERE processlist_id = CONNECTION_ID();
+SET @all_threads= 0;
+
+## Enable only transaction and statement instruments
+UPDATE performance_schema.setup_instruments SET enabled='NO', timed='NO';
+UPDATE performance_schema.setup_instruments SET enabled='YES'
+ WHERE name LIKE ('statement/%') OR name = 'transaction';
+
+## Clear statement and transaction history
+CALL test.clear_history();
+
+#========================================================================
+# STEP 2 - BASIC TRANSACTION
+#========================================================================
+#
+# STEP 2.1 - IMPLICIT
+#
+connection con1;
+INSERT INTO t1 VALUES (210, "INSERT 210");
+INSERT INTO t1 VALUES (211, "INSERT 211");
+INSERT INTO t1 VALUES (212, "INSERT 212");
+UPDATE t1 SET s1 = s1 + 1 WHERE s1 = 212;
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 8 8 transaction COMMITTED READ WRITE REPEATABLE READ YES 7 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 2 2 transaction COMMITTED READ WRITE REPEATABLE READ YES 1 STATEMENT
+thread_id 4 4 transaction COMMITTED READ WRITE REPEATABLE READ YES 3 STATEMENT
+thread_id 6 6 transaction COMMITTED READ WRITE REPEATABLE READ YES 5 STATEMENT
+thread_id 8 8 transaction COMMITTED READ WRITE REPEATABLE READ YES 7 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 2 statement/sql/insert NULL NULL NULL 0 INSERT INTO t1 VALUES (210, "INSERT 210")
+thread_id 3 4 statement/sql/insert NULL NULL NULL 0 INSERT INTO t1 VALUES (211, "INSERT 211")
+thread_id 5 6 statement/sql/insert NULL NULL NULL 0 INSERT INTO t1 VALUES (212, "INSERT 212")
+thread_id 7 8 statement/sql/update NULL NULL NULL 0 UPDATE t1 SET s1 = s1 + 1 WHERE s1 = 212
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 2 statement/sql/insert NULL NULL INSERT INTO t1 VALUES (210, "INSERT 210")
+thread_id 2 2 transaction 1 STATEMENT <transaction started>
+thread_id 3 4 statement/sql/insert NULL NULL INSERT INTO t1 VALUES (211, "INSERT 211")
+thread_id 4 4 transaction 3 STATEMENT <transaction started>
+thread_id 5 6 statement/sql/insert NULL NULL INSERT INTO t1 VALUES (212, "INSERT 212")
+thread_id 6 6 transaction 5 STATEMENT <transaction started>
+thread_id 7 8 statement/sql/update NULL NULL UPDATE t1 SET s1 = s1 + 1 WHERE s1 = 212
+thread_id 8 8 transaction 7 STATEMENT <transaction started>
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+#
+# STEP 2.2 - EXPLICIT
+#
+connection con1;
+START TRANSACTION;
+INSERT INTO t1 VALUES (220, "INSERT 220"), (221, "INSERT 221");
+UPDATE t1 SET s2 = "UPDATE 221" WHERE s1 = 221;
+COMMIT;
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 2 5 transaction COMMITTED READ WRITE REPEATABLE READ NO 1 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 2 5 transaction COMMITTED READ WRITE REPEATABLE READ NO 1 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 2 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 3 3 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (220, "INSERT 220"), (221, "INSERT 221")
+thread_id 4 4 statement/sql/update NULL 2 TRANSACTION 0 UPDATE t1 SET s2 = "UPDATE 221" WHERE s1 = 221
+thread_id 5 5 statement/sql/commit NULL 2 TRANSACTION 0 COMMIT
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 2 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 2 5 transaction 1 STATEMENT <transaction started>
+thread_id 3 3 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (220, "INSERT 220"), (221, "INSERT 221")
+thread_id 4 4 statement/sql/update 2 TRANSACTION UPDATE t1 SET s2 = "UPDATE 221" WHERE s1 = 221
+thread_id 5 5 statement/sql/commit 2 TRANSACTION COMMIT
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+#========================================================================
+# STEP 3 - TRANSACTIONS AND STORED PROCEDURES
+#========================================================================
+#
+# STEP 3.1 - STORED PROCEDURE STARTED WITHIN TRANSACTION
+#
+connection con1;
+CREATE PROCEDURE tp_update() UPDATE t1 SET s1 = s1 + 1;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (310, "INSERT 310");
+INSERT INTO t1 VALUES (311, "INSERT 311");
+INSERT INTO t1 VALUES (312, "INSERT 312");
+INSERT INTO t1 VALUES (313, "INSERT 313");
+CALL tp_update();
+COMMIT;
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 3 10 transaction COMMITTED READ WRITE REPEATABLE READ NO 2 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 3 10 transaction COMMITTED READ WRITE REPEATABLE READ NO 2 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 1 statement/sql/create_procedure NULL NULL NULL 0 CREATE PROCEDURE tp_update() UPDATE t1 SET s1 = s1 + 1
+thread_id 2 3 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 4 4 statement/sql/insert NULL 3 TRANSACTION 0 INSERT INTO t1 VALUES (310, "INSERT 310")
+thread_id 5 5 statement/sql/insert NULL 3 TRANSACTION 0 INSERT INTO t1 VALUES (311, "INSERT 311")
+thread_id 6 6 statement/sql/insert NULL 3 TRANSACTION 0 INSERT INTO t1 VALUES (312, "INSERT 312")
+thread_id 7 7 statement/sql/insert NULL 3 TRANSACTION 0 INSERT INTO t1 VALUES (313, "INSERT 313")
+thread_id 8 9 statement/sql/call_procedure NULL 3 TRANSACTION 0 CALL tp_update()
+thread_id 9 9 statement/sp/stmt tp_update 8 STATEMENT 1 UPDATE t1 SET s1 = s1 + 1
+thread_id 10 10 statement/sql/commit NULL 3 TRANSACTION 0 COMMIT
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 1 statement/sql/create_proc NULL NULL CREATE PROCEDURE tp_update() UPDATE t1 SET s1 = s1 + 1
+thread_id 2 3 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 3 10 transaction 2 STATEMENT <transaction started>
+thread_id 4 4 statement/sql/insert 3 TRANSACTION INSERT INTO t1 VALUES (310, "INSERT 310")
+thread_id 5 5 statement/sql/insert 3 TRANSACTION INSERT INTO t1 VALUES (311, "INSERT 311")
+thread_id 6 6 statement/sql/insert 3 TRANSACTION INSERT INTO t1 VALUES (312, "INSERT 312")
+thread_id 7 7 statement/sql/insert 3 TRANSACTION INSERT INTO t1 VALUES (313, "INSERT 313")
+thread_id 8 9 statement/sql/call_proced 3 TRANSACTION CALL tp_update()
+thread_id 9 9 statement/sp/stmt 8 STATEMENT UPDATE t1 SET s1 = s1 + 1
+thread_id 10 10 statement/sql/commit 3 TRANSACTION COMMIT
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+#
+# STEP 3.2 - TRANSACTION STARTED WITHIN STORED PROCEDURE
+#
+connection con1;
+CREATE PROCEDURE tp_start() START TRANSACTION;
+
+CALL tp_start();
+INSERT INTO t1 VALUES (320, "INSERT 320"),(321, "INSERT 321");
+INSERT INTO t1 VALUES (322, "INSERT 322"),(323, "INSERT 323");
+UPDATE t1 SET s1 = s1 + 1 WHERE s1 > 320;
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+320 INSERT 320
+322 INSERT 321
+323 INSERT 322
+324 INSERT 323
+COMMIT;
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 4 9 transaction COMMITTED READ WRITE REPEATABLE READ NO 3 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 4 9 transaction COMMITTED READ WRITE REPEATABLE READ NO 3 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 1 statement/sql/create_procedure NULL NULL NULL 0 CREATE PROCEDURE tp_start() START TRANSACTION
+thread_id 2 4 statement/sql/call_procedure NULL NULL NULL 0 CALL tp_start()
+thread_id 3 4 statement/sp/stmt tp_start 2 STATEMENT 1 START TRANSACTION
+thread_id 5 5 statement/sql/insert NULL 4 TRANSACTION 0 INSERT INTO t1 VALUES (320, "INSERT 320"),(321, "INSERT 321")
+thread_id 6 6 statement/sql/insert NULL 4 TRANSACTION 0 INSERT INTO t1 VALUES (322, "INSERT 322"),(323, "INSERT 323")
+thread_id 7 7 statement/sql/update NULL 4 TRANSACTION 0 UPDATE t1 SET s1 = s1 + 1 WHERE s1 > 320
+thread_id 8 8 statement/sql/select NULL 4 TRANSACTION 0 SELECT * FROM t1 ORDER BY s1
+thread_id 9 9 statement/sql/commit NULL 4 TRANSACTION 0 COMMIT
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 1 statement/sql/create_proc NULL NULL CREATE PROCEDURE tp_start() START TRANSACTION
+thread_id 2 4 statement/sql/call_proced NULL NULL CALL tp_start()
+thread_id 3 4 statement/sp/stmt 2 STATEMENT START TRANSACTION
+thread_id 4 9 transaction 3 STATEMENT <transaction started>
+thread_id 5 5 statement/sql/insert 4 TRANSACTION INSERT INTO t1 VALUES (320, "INSERT 320"),(321, "INSERT 321")
+thread_id 6 6 statement/sql/insert 4 TRANSACTION INSERT INTO t1 VALUES (322, "INSERT 322"),(323, "INSERT 323")
+thread_id 7 7 statement/sql/update 4 TRANSACTION UPDATE t1 SET s1 = s1 + 1 WHERE s1 > 320
+thread_id 8 8 statement/sql/select 4 TRANSACTION SELECT * FROM t1 ORDER BY s1
+thread_id 9 9 statement/sql/commit 4 TRANSACTION COMMIT
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+#
+# STEP 3.3 - TRANSACTION ENDED WITHIN STORED PROCEDURE
+#
+connection con1;
+CREATE PROCEDURE tp_rollback() ROLLBACK;
+CREATE PROCEDURE tp_commit() COMMIT;
+
+## COMMIT within stored procedure
+START TRANSACTION;
+INSERT INTO t1 VALUES (330, "INSERT 330"),(331, "INSERT 331");
+INSERT INTO t1 VALUES (332, "INSERT 332"),(333, "INSERT 333");
+DELETE FROM t1 WHERE s1 > 331;
+CALL tp_commit();
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+330 INSERT 330
+331 INSERT 331
+
+## ROLLBACK within stored procedure
+START TRANSACTION;
+UPDATE t1 SET s1 = s1*2 WHERE s1 > 331;
+CALL tp_rollback();
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+330 INSERT 330
+331 INSERT 331
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 18 18 transaction COMMITTED READ WRITE REPEATABLE READ YES 17 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 4 9 transaction COMMITTED READ WRITE REPEATABLE READ NO 3 STATEMENT
+thread_id 11 11 transaction COMMITTED READ WRITE REPEATABLE READ YES 10 STATEMENT
+thread_id 13 16 transaction ROLLED BACK READ WRITE REPEATABLE READ NO 12 STATEMENT
+thread_id 18 18 transaction COMMITTED READ WRITE REPEATABLE READ YES 17 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 1 statement/sql/create_procedure NULL NULL NULL 0 CREATE PROCEDURE tp_rollback() ROLLBACK
+thread_id 2 2 statement/sql/create_procedure NULL NULL NULL 0 CREATE PROCEDURE tp_commit() COMMIT
+thread_id 3 4 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 5 5 statement/sql/insert NULL 4 TRANSACTION 0 INSERT INTO t1 VALUES (330, "INSERT 330"),(331, "INSERT 331")
+thread_id 6 6 statement/sql/insert NULL 4 TRANSACTION 0 INSERT INTO t1 VALUES (332, "INSERT 332"),(333, "INSERT 333")
+thread_id 7 7 statement/sql/delete NULL 4 TRANSACTION 0 DELETE FROM t1 WHERE s1 > 331
+thread_id 8 9 statement/sql/call_procedure NULL 4 TRANSACTION 0 CALL tp_commit()
+thread_id 9 9 statement/sp/stmt tp_commit 8 STATEMENT 1 COMMIT
+thread_id 10 11 statement/sql/select NULL NULL NULL 0 SELECT * FROM t1 ORDER BY s1
+thread_id 12 13 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 14 14 statement/sql/update NULL 13 TRANSACTION 0 UPDATE t1 SET s1 = s1*2 WHERE s1 > 331
+thread_id 15 16 statement/sql/call_procedure NULL 13 TRANSACTION 0 CALL tp_rollback()
+thread_id 16 16 statement/sp/stmt tp_rollback 15 STATEMENT 1 ROLLBACK
+thread_id 17 18 statement/sql/select NULL NULL NULL 0 SELECT * FROM t1 ORDER BY s1
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 1 statement/sql/create_proc NULL NULL CREATE PROCEDURE tp_rollback() ROLLBACK
+thread_id 2 2 statement/sql/create_proc NULL NULL CREATE PROCEDURE tp_commit() COMMIT
+thread_id 3 4 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 4 9 transaction 3 STATEMENT <transaction started>
+thread_id 5 5 statement/sql/insert 4 TRANSACTION INSERT INTO t1 VALUES (330, "INSERT 330"),(331, "INSERT 331")
+thread_id 6 6 statement/sql/insert 4 TRANSACTION INSERT INTO t1 VALUES (332, "INSERT 332"),(333, "INSERT 333")
+thread_id 7 7 statement/sql/delete 4 TRANSACTION DELETE FROM t1 WHERE s1 > 331
+thread_id 8 9 statement/sql/call_proced 4 TRANSACTION CALL tp_commit()
+thread_id 9 9 statement/sp/stmt 8 STATEMENT COMMIT
+thread_id 10 11 statement/sql/select NULL NULL SELECT * FROM t1 ORDER BY s1
+thread_id 11 11 transaction 10 STATEMENT <transaction started>
+thread_id 12 13 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 13 16 transaction 12 STATEMENT <transaction started>
+thread_id 14 14 statement/sql/update 13 TRANSACTION UPDATE t1 SET s1 = s1*2 WHERE s1 > 331
+thread_id 15 16 statement/sql/call_proced 13 TRANSACTION CALL tp_rollback()
+thread_id 16 16 statement/sp/stmt 15 STATEMENT ROLLBACK
+thread_id 17 18 statement/sql/select NULL NULL SELECT * FROM t1 ORDER BY s1
+thread_id 18 18 transaction 17 STATEMENT <transaction started>
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+#========================================================================
+# STEP 4 - TRANSACTIONS AND STORED FUNCTIONS
+#========================================================================
+
+#
+# STEP 4.1 - FUNCTION WITHIN A TRANSACTION
+#
+connection con1;
+CREATE FUNCTION fn_add(x INT, y INT) RETURNS INT
+BEGIN
+INSERT INTO t1 VALUES (x, "INSERT x"),(y, "INSERT y");
+RETURN x+y;
+END |
+
+## Clear history
+connection default;
+CALL test.clear_history();
+connection con1;
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (410, "INSERT 410");
+INSERT INTO t1 VALUES (411, "INSERT 411");
+INSERT INTO t1 VALUES (412, "INSERT 412");
+DELETE FROM t1 WHERE s1 > 410;
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+410 INSERT 410
+
+SELECT fn_add(413, 414);
+fn_add(413, 414)
+827
+COMMIT;
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+410 INSERT 410
+413 INSERT x
+414 INSERT y
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 13 13 transaction COMMITTED READ WRITE REPEATABLE READ YES 12 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 2 11 transaction COMMITTED READ WRITE REPEATABLE READ NO 1 STATEMENT
+thread_id 13 13 transaction COMMITTED READ WRITE REPEATABLE READ YES 12 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 2 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 3 3 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (410, "INSERT 410")
+thread_id 4 4 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (411, "INSERT 411")
+thread_id 5 5 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (412, "INSERT 412")
+thread_id 6 6 statement/sql/delete NULL 2 TRANSACTION 0 DELETE FROM t1 WHERE s1 > 410
+thread_id 7 7 statement/sql/select NULL 2 TRANSACTION 0 SELECT * FROM t1 ORDER BY s1
+thread_id 8 10 statement/sql/select NULL 2 TRANSACTION 0 SELECT fn_add(413, 414)
+thread_id 9 9 statement/sp/stmt fn_add 8 STATEMENT 1 INSERT INTO t1 VALUES (x, "INSERT x"),(y, "INSERT y")
+thread_id 10 10 statement/sp/freturn fn_add 8 STATEMENT 1 NULL
+thread_id 11 11 statement/sql/commit NULL 2 TRANSACTION 0 COMMIT
+thread_id 12 13 statement/sql/select NULL NULL NULL 0 SELECT * FROM t1 ORDER BY s1
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 2 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 2 11 transaction 1 STATEMENT <transaction started>
+thread_id 3 3 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (410, "INSERT 410")
+thread_id 4 4 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (411, "INSERT 411")
+thread_id 5 5 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (412, "INSERT 412")
+thread_id 6 6 statement/sql/delete 2 TRANSACTION DELETE FROM t1 WHERE s1 > 410
+thread_id 7 7 statement/sql/select 2 TRANSACTION SELECT * FROM t1 ORDER BY s1
+thread_id 8 10 statement/sql/select 2 TRANSACTION SELECT fn_add(413, 414)
+thread_id 9 9 statement/sp/stmt 8 STATEMENT INSERT INTO t1 VALUES (x, "INSERT x"),(y, "INSERT y")
+thread_id 10 10 statement/sp/freturn 8 STATEMENT NULL
+thread_id 11 11 statement/sql/commit 2 TRANSACTION COMMIT
+thread_id 12 13 statement/sql/select NULL NULL SELECT * FROM t1 ORDER BY s1
+thread_id 13 13 transaction 12 STATEMENT <transaction started>
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+connection con1;
+
+## Again, but this time with a rollback
+
+START TRANSACTION;
+SELECT fn_add(415, 416);
+fn_add(415, 416)
+831
+
+ROLLBACK;
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 8 8 transaction COMMITTED READ WRITE REPEATABLE READ YES 7 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 2 6 transaction ROLLED BACK READ WRITE REPEATABLE READ NO 1 STATEMENT
+thread_id 8 8 transaction COMMITTED READ WRITE REPEATABLE READ YES 7 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 2 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 3 5 statement/sql/select NULL 2 TRANSACTION 0 SELECT fn_add(415, 416)
+thread_id 4 4 statement/sp/stmt fn_add 3 STATEMENT 1 INSERT INTO t1 VALUES (x, "INSERT x"),(y, "INSERT y")
+thread_id 5 5 statement/sp/freturn fn_add 3 STATEMENT 1 NULL
+thread_id 6 6 statement/sql/rollback NULL 2 TRANSACTION 0 ROLLBACK
+thread_id 7 8 statement/sql/select NULL NULL NULL 0 SELECT * FROM t1 ORDER BY s1
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 2 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 2 6 transaction 1 STATEMENT <transaction started>
+thread_id 3 5 statement/sql/select 2 TRANSACTION SELECT fn_add(415, 416)
+thread_id 4 4 statement/sp/stmt 3 STATEMENT INSERT INTO t1 VALUES (x, "INSERT x"),(y, "INSERT y")
+thread_id 5 5 statement/sp/freturn 3 STATEMENT NULL
+thread_id 6 6 statement/sql/rollback 2 TRANSACTION ROLLBACK
+thread_id 7 8 statement/sql/select NULL NULL SELECT * FROM t1 ORDER BY s1
+thread_id 8 8 transaction 7 STATEMENT <transaction started>
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+#
+# STEP 4.2 - TRANSACTION CANNOT BE STARTED OR ENDED WITHIN FUNCTION
+#
+connection con1;
+CREATE FUNCTION fn_err1() RETURNS VARCHAR(10) BEGIN START TRANSACTION ; RETURN 'invalid' ; END|
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger
+
+## Expect 0 transactions
+connection default;
+SELECT COUNT(*) FROM performance_schema.events_transactions_history;
+COUNT(*)
+0
+connection con1;
+
+## Expect stored function does not exist
+
+SELECT fn_err1();
+ERROR 42000: FUNCTION db.fn_err1 does not exist
+
+## Expect 0 transactions
+connection default;
+SELECT COUNT(*) FROM performance_schema.events_transactions_history;
+COUNT(*)
+0
+connection con1;
+
+CREATE FUNCTION fn_err2() RETURNS VARCHAR(10) BEGIN COMMIT; RETURN 'invalid' ; END|
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger
+
+## Expect stored function does not exist
+
+START TRANSACTION;
+DELETE FROM t1 WHERE s1 > 320;
+SELECT fn_err2();
+ERROR 42000: FUNCTION db.fn_err2 does not exist
+
+## Expect 0 transactions
+connection default;
+SELECT COUNT(*) FROM performance_schema.events_transactions_history;
+COUNT(*)
+0
+
+## Clear transaction and statement tables
+CALL test.clear_history();
+#========================================================================
+# STEP 5 - TRANSACTIONS AND TRIGGERS
+#========================================================================
+
+#
+# STEP 5.1 - FORCE STATEMENT ROLLBACK FROM TRIGGER
+#
+connection con1;
+## Create a trigger to force statement rollback
+
+CREATE TRIGGER trigger_before_update BEFORE UPDATE ON t1
+FOR EACH ROW
+BEGIN
+IF OLD.s1 >= 505 THEN
+SIGNAL sqlstate '45001' SET message_text = "FORCE ERROR";
+END IF;
+END;|
+
+## Clear history
+connection default;
+CALL test.clear_history();
+connection con1;
+
+## Insert multiple rows, then update. Trigger will force rollback the
+## UPDATE statement, but the transaction should not roll back.
+
+START TRANSACTION;
+INSERT INTO t1 VALUES (500, "INSERT 500");
+INSERT INTO t1 VALUES (501, "INSERT 501");
+INSERT INTO t1 VALUES (502, "INSERT 502");
+INSERT INTO t1 VALUES (503, "INSERT 503");
+INSERT INTO t1 VALUES (504, "INSERT 504");
+INSERT INTO t1 VALUES (505, "INSERT 505");
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+500 INSERT 500
+501 INSERT 501
+502 INSERT 502
+503 INSERT 503
+504 INSERT 504
+505 INSERT 505
+
+## Expect error when UPDATE hits record 505
+
+UPDATE t1 SET s1 = s1 * 2 WHERE s1 >= 500;
+ERROR 45001: FORCE ERROR
+
+## Verify that INSERT succeeded, UPDATE failed and transaction did not rollback
+
+SELECT * FROM t1 ORDER BY s1;
+s1 s2
+500 INSERT 500
+501 INSERT 501
+502 INSERT 502
+503 INSERT 503
+504 INSERT 504
+505 INSERT 505
+COMMIT;
+
+DROP TRIGGER trigger_before_update;
+connection default;
+#========================================================================
+# Verify
+#========================================================================
+SELECT event_id into @base_tx_event_id
+from performance_schema.events_transactions_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+SELECT event_id into @base_stmt_event_id from performance_schema.events_statements_history_long
+where (THREAD_ID = @con1_thread_id)
+order by event_id limit 1;
+select if(@base_tx_event_id < @base_stmt_event_id,
+@base_tx_event_id - 1,
+@base_stmt_event_id - 1)
+into @base_event_id;
+EVENTS_TRANSACTIONS_CURRENT
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_current
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 21 21 transaction COMMITTED READ WRITE REPEATABLE READ YES 20 STATEMENT
+
+EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 11, ' ') 'EVENT_NAME ',
+RPAD(STATE, 11, ' ') 'STATE ',
+RPAD(ACCESS_MODE, 11, ' ') ACCESS_MODE,
+RPAD(ISOLATION_LEVEL, 16, ' ') 'ISOLATION_LEVEL ',
+RPAD(AUTOCOMMIT, 4, ' ') AUTO,
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE
+FROM performance_schema.events_transactions_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME STATE ACCESS_MODE ISOLATION_LEVEL AUTO R_NESTING_EVENT_ID NESTING_EVENT_TYPE
+thread_id 2 19 transaction COMMITTED READ WRITE REPEATABLE READ NO 1 STATEMENT
+thread_id 21 21 transaction COMMITTED READ WRITE REPEATABLE READ YES 20 STATEMENT
+
+EVENTS_STATEMENTS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 30, ' ') 'EVENT_NAME ',
+RPAD(IFNULL(object_name, 'NULL'), 12, ' ') 'OBJECT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+LPAD(NESTING_EVENT_LEVEL, 5, ' ') LEVEL,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long
+WHERE ((THREAD_ID = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME OBJECT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE LEVEL SQL_TEXT
+thread_id 1 2 statement/sql/begin NULL NULL NULL 0 START TRANSACTION
+thread_id 3 3 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (500, "INSERT 500")
+thread_id 4 4 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (501, "INSERT 501")
+thread_id 5 5 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (502, "INSERT 502")
+thread_id 6 6 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (503, "INSERT 503")
+thread_id 7 7 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (504, "INSERT 504")
+thread_id 8 8 statement/sql/insert NULL 2 TRANSACTION 0 INSERT INTO t1 VALUES (505, "INSERT 505")
+thread_id 9 9 statement/sql/select NULL 2 TRANSACTION 0 SELECT * FROM t1 ORDER BY s1
+thread_id 10 17 statement/sql/update NULL 2 TRANSACTION 0 UPDATE t1 SET s1 = s1 * 2 WHERE s1 >= 500
+thread_id 11 11 statement/sp/jump_if_not trigger_befo 10 STATEMENT 1 NULL
+thread_id 12 12 statement/sp/jump_if_not trigger_befo 10 STATEMENT 1 NULL
+thread_id 13 13 statement/sp/jump_if_not trigger_befo 10 STATEMENT 1 NULL
+thread_id 14 14 statement/sp/jump_if_not trigger_befo 10 STATEMENT 1 NULL
+thread_id 15 15 statement/sp/jump_if_not trigger_befo 10 STATEMENT 1 NULL
+thread_id 16 16 statement/sp/jump_if_not trigger_befo 10 STATEMENT 1 NULL
+thread_id 17 17 statement/sp/stmt trigger_befo 10 STATEMENT 1 SIGNAL sqlstate '45001' SET message_text = "FORCE ERROR"
+thread_id 18 18 statement/sql/select NULL 2 TRANSACTION 0 SELECT * FROM t1 ORDER BY s1
+thread_id 19 19 statement/sql/commit NULL 2 TRANSACTION 0 COMMIT
+thread_id 20 21 statement/sql/drop_trigger NULL NULL NULL 0 DROP TRIGGER trigger_before_update
+
+## Combined statement and transaction event history ordered by event id
+
+EVENTS_STATEMENTS_HISTORY_LONG + EVENTS_TRANSACTIONS_HISTORY_LONG
+
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(NESTING_EVENT_ID - @base_event_id, 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+'<transaction started>' AS SQL_TXT
+FROM performance_schema.events_transactions_history_long t
+WHERE (t.thread_id = @con1_thread_id)
+UNION
+SELECT THREAD_ID,
+LPAD(EVENT_ID - @base_event_id, 11, ' ') as R_EVENT_ID,
+LPAD(END_EVENT_ID - @base_event_id, 11, ' ') as R_END_EVENT_ID,
+RPAD(EVENT_NAME, 25, ' ') 'EVENT_NAME ',
+LPAD(IFNULL(NESTING_EVENT_ID - @base_event_id, 'NULL'), 19, ' ') as R_NESTING_EVENT_ID,
+RPAD(IFNULL(NESTING_EVENT_TYPE, 'NULL'), 18, ' ') NESTING_EVENT_TYPE,
+SQL_TEXT
+FROM performance_schema.events_statements_history_long s
+WHERE ((s.thread_id = @con1_thread_id) OR (@all_threads = 1))
+ORDER BY thread_id, r_event_id;
+THREAD_ID R_EVENT_ID R_END_EVENT_ID EVENT_NAME R_NESTING_EVENT_ID NESTING_EVENT_TYPE SQL_TXT
+thread_id 1 2 statement/sql/begin NULL NULL START TRANSACTION
+thread_id 2 19 transaction 1 STATEMENT <transaction started>
+thread_id 3 3 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (500, "INSERT 500")
+thread_id 4 4 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (501, "INSERT 501")
+thread_id 5 5 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (502, "INSERT 502")
+thread_id 6 6 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (503, "INSERT 503")
+thread_id 7 7 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (504, "INSERT 504")
+thread_id 8 8 statement/sql/insert 2 TRANSACTION INSERT INTO t1 VALUES (505, "INSERT 505")
+thread_id 9 9 statement/sql/select 2 TRANSACTION SELECT * FROM t1 ORDER BY s1
+thread_id 10 17 statement/sql/update 2 TRANSACTION UPDATE t1 SET s1 = s1 * 2 WHERE s1 >= 500
+thread_id 11 11 statement/sp/jump_if_not 10 STATEMENT NULL
+thread_id 12 12 statement/sp/jump_if_not 10 STATEMENT NULL
+thread_id 13 13 statement/sp/jump_if_not 10 STATEMENT NULL
+thread_id 14 14 statement/sp/jump_if_not 10 STATEMENT NULL
+thread_id 15 15 statement/sp/jump_if_not 10 STATEMENT NULL
+thread_id 16 16 statement/sp/jump_if_not 10 STATEMENT NULL
+thread_id 17 17 statement/sp/stmt 10 STATEMENT SIGNAL sqlstate '45001' SET message_text = "FORCE ERROR"
+thread_id 18 18 statement/sql/select 2 TRANSACTION SELECT * FROM t1 ORDER BY s1
+thread_id 19 19 statement/sql/commit 2 TRANSACTION COMMIT
+thread_id 20 21 statement/sql/drop_trigge NULL NULL DROP TRIGGER trigger_before_update
+thread_id 21 21 transaction 20 STATEMENT <transaction started>
+
+## Clear statement and transaction history
+CALL test.clear_history();
+CALL test.clear_history();
+## Reset db.t1
+DELETE FROM db.t1;
+
+# TODO: Detect statement events from scheduled event
+#=======================================================================
+# Cleanup
+#=======================================================================
+connection con1;
+disconnect con1;
+connection default;
+DROP DATABASE db;
+UPDATE performance_schema.setup_instruments SET enabled='YES', timed='YES';
+DROP PROCEDURE clear_transaction_tables;
+DROP PROCEDURE clear_transaction_history;
+DROP PROCEDURE clear_statement_history;
+DROP PROCEDURE clear_history;
+DROP PROCEDURE transaction_verifier;
diff --git a/mysql-test/suite/perfschema/r/trigger_table_io.result b/mysql-test/suite/perfschema/r/trigger_table_io.result
index 9fc63e69675..02821a481af 100644
--- a/mysql-test/suite/perfschema/r/trigger_table_io.result
+++ b/mysql-test/suite/perfschema/r/trigger_table_io.result
@@ -83,108 +83,110 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 update NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t1 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test t2 fetch NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t2 insert 1
+wait/io/table/sql/handler TABLE test t1 insert 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t2 insert 1
+wait/io/table/sql/handler TABLE test t1 insert 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t2 fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 update 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t2 fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 delete 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 delete 1
+wait/io/table/sql/handler TABLE test t2 insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t2 fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t2 delete 1
+wait/io/table/sql/handler TABLE test t2 fetch 1
+wait/io/table/sql/handler TABLE test t1 delete 1
+wait/io/table/sql/handler TABLE test t2 insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test t1 fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test t2 fetch 2
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/r/user_var_func.result b/mysql-test/suite/perfschema/r/user_var_func.result
new file mode 100644
index 00000000000..82a8e7ec096
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/user_var_func.result
@@ -0,0 +1,91 @@
+set @v1a="Hello";
+set @v2a="World";
+set @v3a=65;
+set @v4a=NULL;
+select @v1a, @v2a, @v3a, @v4a, @v_unknown;
+@v1a @v2a @v3a @v4a @v_unknown
+Hello World 65 NULL NULL
+select VARIABLE_NAME, VARIABLE_VALUE
+from performance_schema.user_variables_by_thread
+order by VARIABLE_NAME;
+VARIABLE_NAME VARIABLE_VALUE
+v1a Hello
+v2a World
+v3a 65
+v4a NULL
+connect con1, localhost, root,,;
+set @v1b="Salut";
+set @v2b="La compagnie";
+set @v3b=12;
+set @v4b=NULL;
+select @v1b, @v2b, @v3b, @v4b, @v_unknown;
+@v1b @v2b @v3b @v4b @v_unknown
+Salut La compagnie 12 NULL NULL
+select VARIABLE_NAME, VARIABLE_VALUE
+from performance_schema.user_variables_by_thread
+order by VARIABLE_NAME;
+VARIABLE_NAME VARIABLE_VALUE
+v1a Hello
+v1b Salut
+v2a World
+v2b La compagnie
+v3a 65
+v3b 12
+v4a NULL
+v4b NULL
+connection default;
+disconnect con1;
+select VARIABLE_NAME, VARIABLE_VALUE
+from performance_schema.user_variables_by_thread
+order by VARIABLE_NAME;
+VARIABLE_NAME VARIABLE_VALUE
+v1a Hello
+v2a World
+v3a 65
+v4a NULL
+set @blob_under_16_bits=repeat("a", 65000);
+set @blob_under_24_bits=repeat("a", 1000000);
+select length(@blob_under_16_bits);
+length(@blob_under_16_bits)
+65000
+select length(@blob_under_24_bits);
+length(@blob_under_24_bits)
+1000000
+select variable_name, length(variable_value)
+from performance_schema.user_variables_by_thread
+where VARIABLE_NAME like "blob%"
+ order by VARIABLE_NAME;
+variable_name length(variable_value)
+blob_under_16_bits 65000
+blob_under_24_bits 1000000
+set @a=10;
+CREATE procedure test_user_val
+(IN input INT,OUT output INT)
+BEGIN
+SELECT input + input
+INTO output;
+END|
+CALL test_user_val(@a , @total);
+select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.user_variables_by_thread
+where variable_name in ('a','total') order by VARIABLE_NAME;
+VARIABLE_NAME VARIABLE_VALUE
+a 10
+total 20
+create table t1 (c1 int);
+CREATE TRIGGER test_uvar_trigger
+AFTER INSERT ON t1
+FOR EACH ROW BEGIN
+set @a=@a+@a;
+END|
+insert into t1 values(1);
+select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.user_variables_by_thread
+where variable_name ='a' order by VARIABLE_NAME;
+VARIABLE_NAME VARIABLE_VALUE
+a 20
+insert into t1 values(1);
+select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.user_variables_by_thread
+where variable_name ='a' order by VARIABLE_NAME;
+VARIABLE_NAME VARIABLE_VALUE
+a 40
+drop table t1;
+drop procedure test_user_val;
diff --git a/mysql-test/suite/perfschema/r/view_table_io.result b/mysql-test/suite/perfschema/r/view_table_io.result
index 2f9a70cdeaa..f1591f46a41 100644
--- a/mysql-test/suite/perfschema/r/view_table_io.result
+++ b/mysql-test/suite/perfschema/r/view_table_io.result
@@ -77,65 +77,71 @@ where event_name like 'wait/io/table/%'
and object_schema in ("test")
order by thread_id, event_id;
event_name short_source object_type object_schema pretty_name operation number_of_bytes
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL
-show status where Variable_name like 'performance_schema_%' and
-Variable_name not like 'performance_schema_%_classes_lost';
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 3
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab update 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test no_index_tab delete 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test no_index_tab fetch 2
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+wait/io/table/sql/handler TABLE test marker insert 1
+show global status like 'performance_schema_%';
Variable_name Value
Performance_schema_accounts_lost 0
+Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_digest_lost 0
+Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_hosts_lost 0
+Performance_schema_index_stat_lost 0
Performance_schema_locker_lost 0
+Performance_schema_memory_classes_lost 0
+Performance_schema_metadata_lock_lost 0
+Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
+Performance_schema_nested_statement_lost 0
+Performance_schema_prepared_statements_lost 0
+Performance_schema_program_lost 0
+Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_session_connect_attrs_lost 0
+Performance_schema_socket_classes_lost 0
Performance_schema_socket_instances_lost 0
+Performance_schema_stage_classes_lost 0
+Performance_schema_statement_classes_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
+Performance_schema_table_lock_stat_lost 0
+Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Performance_schema_users_lost 0
truncate performance_schema.events_waits_history_long;
diff --git a/mysql-test/suite/perfschema/t/all_tests.test b/mysql-test/suite/perfschema/t/all_tests.test
index e0db6d459de..b16364ba17f 100644
--- a/mysql-test/suite/perfschema/t/all_tests.test
+++ b/mysql-test/suite/perfschema/t/all_tests.test
@@ -43,10 +43,13 @@ insert into t2 select concat('dml_', table_name, '.test') from information_schem
update t2 set test_name= replace(test_name, "events_waits_summary_", "ews_");
update t2 set test_name= replace(test_name, "events_stages_summary_", "esgs_");
update t2 set test_name= replace(test_name, "events_statements_summary_", "esms_");
+update t2 set test_name= replace(test_name, "events_transactions_summary_", "ets_");
update t2 set test_name= replace(test_name, "file_summary_", "fs_");
update t2 set test_name= replace(test_name, "objects_summary_", "os_");
update t2 set test_name= replace(test_name, "table_io_waits_summary_", "tiws_");
update t2 set test_name= replace(test_name, "table_lock_waits_summary_", "tlws_");
+update t2 set test_name= replace(test_name, "memory_summary_", "mems_");
+update t2 set test_name= replace(test_name, "user_variables_", "uvar_");
# Debug
# select test_name as 'FOUND' from t1;
diff --git a/mysql-test/suite/perfschema/t/alter_table_progress.test b/mysql-test/suite/perfschema/t/alter_table_progress.test
new file mode 100644
index 00000000000..fbaf1281a30
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/alter_table_progress.test
@@ -0,0 +1,145 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_innodb.inc
+--source include/have_perfschema.inc
+--source include/have_debug.inc
+--source include/have_debug_sync.inc
+
+# Presence of the query cache changes query stages,
+# causing noise in the test output
+#--source include/have_query_cache_disabled.inc
+
+# Setup
+
+connect (con1, localhost, root, , );
+
+let $con1_THREAD_ID=`select thread_id from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1(a int) engine = myisam;
+
+insert into t1 values (1), (2), (3), (4), (5);
+
+--connection default
+
+update performance_schema.threads
+ set instrumented = 'NO'
+ where processlist_id = connection_id();
+
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_history_long;
+
+--disable_query_log
+eval select $con1_THREAD_ID into @con1_thread_id;
+--enable_query_log
+
+--connection con1
+
+# ALTER TABLE statement to inspect,
+# execution should instrument progress
+
+SET DEBUG_SYNC='RESET';
+SET DEBUG_SYNC='copy_data_between_tables_before SIGNAL found_row WAIT_FOR wait_row EXECUTE 5';
+--send ALTER TABLE t1 engine = innodb;
+
+--connection default
+
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+
+# Find the statement id of the ALTER TABLE
+select event_id from performance_schema.events_statements_current
+ where thread_id = @con1_thread_id into @con1_stmt_id;
+
+# completed 0
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+ from performance_schema.events_stages_current
+ where (thread_id = @con1_thread_id);
+
+SET DEBUG_SYNC='now SIGNAL wait_row';
+
+#======
+
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+
+# completed 1
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+ from performance_schema.events_stages_current
+ where (thread_id = @con1_thread_id);
+
+SET DEBUG_SYNC='now SIGNAL wait_row';
+
+#======
+
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+
+# completed 2
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+ from performance_schema.events_stages_current
+ where (thread_id = @con1_thread_id);
+
+SET DEBUG_SYNC='now SIGNAL wait_row';
+
+#======
+
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+
+# completed 3
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+ from performance_schema.events_stages_current
+ where (thread_id = @con1_thread_id);
+
+SET DEBUG_SYNC='now SIGNAL wait_row';
+
+#======
+
+SET DEBUG_SYNC='now WAIT_FOR found_row';
+
+# completed 4
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+ from performance_schema.events_stages_current
+ where (thread_id = @con1_thread_id);
+
+SET DEBUG_SYNC='now SIGNAL wait_row';
+
+#======
+
+--connection con1
+
+# Complete the ALTER TABLE statement.
+--reap
+
+# Make sure the ALTER TABLE cleanup is executed,
+# as the last stages are after writing back to the client,
+# and done asynchronously from the last 'reap'.
+select "After payload";
+
+--connection default
+
+--echo Dumping ALTER TABLE stages
+
+# Print all stages for this ALTER TABLE statement
+select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
+ from performance_schema.events_stages_history_long
+ where (thread_id = @con1_thread_id)
+ and (nesting_event_id = @con1_stmt_id)
+ order by thread_id, event_id;
+
+SET DEBUG_SYNC='RESET';
+
+--connection con1
+
+drop table t1;
+
+--disconnect con1
+
+--connection default
+
+update performance_schema.threads
+ set instrumented = 'YES'
+ where processlist_id = connection_id();
+
diff --git a/mysql-test/suite/perfschema/t/bad_option.test b/mysql-test/suite/perfschema/t/bad_option.test
new file mode 100644
index 00000000000..5d4d49ed12c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/bad_option.test
@@ -0,0 +1,74 @@
+# Tests for PERFORMANCE_SCHEMA
+# Check error handling for invalid server start options and values
+
+# The current test unites and replaces all suite/perfschema/t/bad_option_*.test
+# which were developed by Marc.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+let $error_log= $MYSQLTEST_VARDIR/log/my_restart.err;
+--error 0,1
+--remove_file $error_log
+let SEARCH_FILE= $error_log;
+# Stop the server
+let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
+--exec echo "wait" > $restart_file
+--shutdown_server
+--source include/wait_until_disconnected.inc
+--error 7
+--exec $MYSQLD_CMD --loose-console --skip-log-error --performance-schema-enabled=maybe > $error_log 2>&1
+# The server restart aborts
+# [ERROR] unknown variable 'performance-schema-enabled=maybe'
+let SEARCH_PATTERN= \[ERROR\].*unknown variable 'performance-schema-enabled=maybe';
+--source include/search_pattern_in_file.inc
+--echo # Server start with invalid startup option value 'performance-schema-enabled=maybe' : pass
+
+--remove_file $error_log
+--error 7
+--exec $MYSQLD_CMD --loose-console --skip-log-error --performance-schema-max_=12 > $error_log 2>&1
+# The server restart aborts
+# [ERROR] unknown variable 'performance-schema-max_=12'
+let SEARCH_PATTERN= \[ERROR\].*unknown variable 'performance-schema-max_=12';
+--source include/search_pattern_in_file.inc
+--echo # Server start with ambigous startup option 'performance-schema-max_=12' : pass
+# The important points is here:
+# 1. There is no option 'performance-schema-max_' or 'performance-schema-max-' at all.
+# 2. But we have many options where the name starts exact with this pattern.
+# 3. There is a value assigned.
+# 4. The server criticizes "variable" and not "option"!
+# This seems to be caused by 3. because "--performance-schema-unknown=ON" gets
+# a similar reaction.
+
+--remove_file $error_log
+--error 2
+--exec $MYSQLD_CMD --loose-console --skip-log-error --performance-schema-unknown_99 > $error_log 2>&1
+# The server restart aborts
+let SEARCH_PATTERN= \[ERROR\].*unknown option '--performance-schema-unknown_99';
+--source include/search_pattern_in_file.inc
+--echo # Server start with invalid startup option '--performance-schema-unknown_99' : pass
+
+--remove_file $error_log
+--error 1
+--exec $MYSQLD_CMD --loose-console --skip-log-error --datadir=bad_option_h_param > $error_log 2>&1
+# The server restart aborts
+# [ERROR] failed to set datadir to /work/repo1/mysql-trunk2/bad_option_h_param
+let SEARCH_PATTERN= Can.t change dir to .*bad_option_h_param;
+--source include/search_pattern_in_file.inc
+--echo # Server start with invalid startup option value '--datadir=bad_option_h_param' : pass
+# The important point is here:
+# There is no directory "bad_option_h_param".
+
+--remove_file $error_log
+# Write file to make mysql-test-run.pl start up the server again
+--exec echo "restart" > $restart_file
+
+# Turn on reconnect
+--enable_reconnect
+
+# Call script that will poll the server waiting for it to be back online again
+--source include/wait_until_connected_again.inc
+
+# Turn off reconnect again
+--disable_reconnect
+
diff --git a/mysql-test/suite/perfschema/t/bad_option_1.test b/mysql-test/suite/perfschema/t/bad_option_1.test
deleted file mode 100644
index bba0d6d5357..00000000000
--- a/mysql-test/suite/perfschema/t/bad_option_1.test
+++ /dev/null
@@ -1,39 +0,0 @@
-# Tests for PERFORMANCE_SCHEMA
-# Check error handling for invalid server start options
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
---source include/kill_mysqld.inc
-
-let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_1.txt;
---disable_warnings
---error 0,1
---remove_file $outfile
---enable_warnings
---error 7
---exec $MYSQLD_BOOTSTRAP_CMD --loose-console --performance-schema-enabled=maybe > $outfile 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
---remove_file $outfile
-
---source include/start_mysqld.inc
diff --git a/mysql-test/suite/perfschema/t/bad_option_2.test b/mysql-test/suite/perfschema/t/bad_option_2.test
deleted file mode 100644
index d6c2b905167..00000000000
--- a/mysql-test/suite/perfschema/t/bad_option_2.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# Tests for PERFORMANCE_SCHEMA
-# Check error handling for ambiguous server start options
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
---source include/kill_mysqld.inc
-
-let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_2.txt;
---disable_warnings
---error 0,1
---remove_file $outfile
---enable_warnings
---error 3
---exec $MYSQLD_BOOTSTRAP_CMD --loose-console --enable-getopt-prefix-matching --performance-schema-max_=12 > $outfile 2>&1
---let SEARCH_PATTERN=ambiguous option '--performance-schema-max_=12'
---let SEARCH_FILE=$outfile
---source include/search_pattern_in_file.inc
---remove_file $outfile
-
---source include/start_mysqld.inc
diff --git a/mysql-test/suite/perfschema/t/bad_option_3.test b/mysql-test/suite/perfschema/t/bad_option_3.test
deleted file mode 100644
index a4efcbccd74..00000000000
--- a/mysql-test/suite/perfschema/t/bad_option_3.test
+++ /dev/null
@@ -1,39 +0,0 @@
-# Tests for PERFORMANCE_SCHEMA
-# Check error handling for invalid server start options
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
---source include/kill_mysqld.inc
-
-let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_3.txt;
---disable_warnings
---error 0,1
---remove_file $outfile
---enable_warnings
---error 2
---exec $MYSQLD_BOOTSTRAP_CMD --loose-console -a -x > $outfile 2>&1
-
-perl;
- use strict;
- use warnings;
- my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_3.txt";
- open(FILE, "<", $fname) or die;
- my @lines= <FILE>;
- # those must be in the file for the test to pass
- my @patterns=
- ("unknown option '-x'",
- "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
---remove_file $outfile
-
---source include/start_mysqld.inc
diff --git a/mysql-test/suite/perfschema/t/bad_option_4.test b/mysql-test/suite/perfschema/t/bad_option_4.test
deleted file mode 100644
index ee8705788bc..00000000000
--- a/mysql-test/suite/perfschema/t/bad_option_4.test
+++ /dev/null
@@ -1,39 +0,0 @@
-# Tests for PERFORMANCE_SCHEMA
-# Check error handling for invalid server start options
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
---source include/kill_mysqld.inc
-
-let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_4.txt;
---disable_warnings
---error 0,1
---remove_file $outfile
---enable_warnings
---error 1
---exec $MYSQLD_BOOTSTRAP_CMD --loose-console -a -h bad_option_h_param > $outfile 2>&1
-
-perl;
- use strict;
- use warnings;
- my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_4.txt";
- open(FILE, "<", $fname) or die;
- my @lines= <FILE>;
- # those must be in the file for the test to pass
- my @patterns=
- ("Can't change dir to.*bad_option_h_param",
- "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
---remove_file $outfile
-
---source include/start_mysqld.inc
diff --git a/mysql-test/suite/perfschema/t/bad_option_5.test b/mysql-test/suite/perfschema/t/bad_option_5.test
deleted file mode 100644
index c9c6fc75d52..00000000000
--- a/mysql-test/suite/perfschema/t/bad_option_5.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# Tests for PERFORMANCE_SCHEMA
-# Check error handling for invalid server start options
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
---source include/kill_mysqld.inc
-
-let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_5.txt;
---disable_warnings
---error 0,1
---remove_file $outfile
---enable_warnings
---error 2
---exec $MYSQLD_BOOTSTRAP_CMD --loose-console -aXbroken > $outfile 2>&1
-
-# -aXbroken should be parsed as -a -Xbroken, or --ansi -Xbroken,
-# therefore the -X option is what the server should complain about
-
-perl;
- use strict;
- use warnings;
- my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_5.txt";
- open(FILE, "<", $fname) or die;
- my @lines= <FILE>;
- # those must be in the file for the test to pass
- my @patterns=
- ("unknown option '-X'",
- "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
---remove_file $outfile
-
---source include/start_mysqld.inc
diff --git a/mysql-test/suite/perfschema/t/batch_table_io_func.test b/mysql-test/suite/perfschema/t/batch_table_io_func.test
new file mode 100644
index 00000000000..c35d8a06125
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/batch_table_io_func.test
@@ -0,0 +1,148 @@
+--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 in ('wait/io/table/sql/handler',
+ 'wait/lock/table/sql/handler');
+
+--disable_warnings
+drop procedure if exists before_payload;
+drop procedure if exists after_payload;
+--enable_warnings
+
+delimiter $$;
+
+create procedure before_payload()
+begin
+ TRUNCATE TABLE performance_schema.table_io_waits_summary_by_index_usage;
+ TRUNCATE TABLE performance_schema.table_io_waits_summary_by_table;
+ TRUNCATE TABLE performance_schema.events_waits_history_long;
+ TRUNCATE TABLE performance_schema.events_waits_history;
+ TRUNCATE TABLE performance_schema.events_waits_current;
+end
+$$
+
+create procedure after_payload()
+begin
+ select count(1) as number_seen,
+ OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+ OPERATION, NUMBER_OF_BYTES
+ from performance_schema.events_waits_history_long
+ where OBJECT_SCHEMA = "test"
+ group by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME, OPERATION, NUMBER_OF_BYTES;
+
+ select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+ COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA = "test"
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+ select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA = "test"
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+end
+$$
+
+delimiter ;$$
+
+
+--disable_warnings
+drop table if exists t1;
+drop table if exists t2;
+drop table if exists t3;
+--enable_warnings
+
+create table t0(v int);
+create table t1(id1 int, a int);
+create table t2(id1 int, id2 int, b int);
+create table t3(id2 int, id3 int, c int);
+
+insert into t0 values
+ (0), (1), (2), (3), (4),
+ (5), (6), (7), (8), (9);
+
+insert into t1(id1, a)
+ select v, 100*v from t0;
+
+insert into t2(id1, id2, b)
+ select X.v, 10*X.v + Y.v, 100*X.v + 10*Y.v
+ from t0 X, t0 Y;
+
+insert into t3(id2, id3, c)
+ select 10*X.v + Y.v, 100*X.v + 10*Y.v + Z.v, 100*X.v + 10*Y.v + Z.v
+ from t0 X, t0 Y, t0 Z;
+
+analyze table t1;
+analyze table t2;
+analyze table t3;
+
+select * from t1 order by a;
+
+# Only dump a small part
+select * from t2
+ where (b >= 180) and (b <= 220)
+ order by b;
+
+# Only dump a small part
+select * from t3
+ where (c >= 587) and (c <= 612)
+ order by c;
+
+#
+# TEST 1 (join, no index)
+#
+
+explain extended select t1.*, t2.*, t3.*
+ from t1 join t2 using (id1) join t3 using (id2);
+
+call before_payload();
+
+# Payload query to analyse: should do batch io on t3
+
+--disable_result_log
+select t1.*, t2.*, t3.*
+ from t1 join t2 using (id1) join t3 using (id2);
+--enable_result_log
+
+call after_payload();
+
+#
+# TEST 2 (join, with index)
+#
+
+alter table t1 add unique index(id1);
+alter table t2 add unique index(id2);
+alter table t2 add index(id1);
+alter table t3 add unique index(id3);
+alter table t3 add index(id2);
+
+explain extended select t1.*, t2.*, t3.*
+ from t1 join t2 using (id1) join t3 using (id2);
+
+call before_payload();
+
+# Payload query to analyse: should do batch io on t3
+
+--disable_result_log
+select t1.*, t2.*, t3.*
+ from t1 join t2 using (id1) join t3 using (id2);
+--enable_result_log
+
+call after_payload();
+
+# Cleanup
+
+drop table t0;
+drop table t1;
+drop table t2;
+drop table t3;
+
+drop procedure before_payload;
+drop procedure after_payload;
+
+UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
+
diff --git a/mysql-test/suite/perfschema/t/checksum.test b/mysql-test/suite/perfschema/t/checksum.test
index 125573242cc..a2d43b27bce 100644
--- a/mysql-test/suite/perfschema/t/checksum.test
+++ b/mysql-test/suite/perfschema/t/checksum.test
@@ -27,6 +27,14 @@ checksum table performance_schema.events_statements_summary_by_host_by_event_nam
checksum table performance_schema.events_statements_summary_by_thread_by_event_name;
checksum table performance_schema.events_statements_summary_by_user_by_event_name;
checksum table performance_schema.events_statements_summary_global_by_event_name;
+checksum table performance_schema.events_transactions_current;
+checksum table performance_schema.events_transactions_history;
+checksum table performance_schema.events_transactions_history_long;
+checksum table performance_schema.events_transactions_summary_by_account_by_event_name;
+checksum table performance_schema.events_transactions_summary_by_host_by_event_name;
+checksum table performance_schema.events_transactions_summary_by_thread_by_event_name;
+checksum table performance_schema.events_transactions_summary_by_user_by_event_name;
+checksum table performance_schema.events_transactions_summary_global_by_event_name;
checksum table performance_schema.events_waits_current;
checksum table performance_schema.events_waits_history;
checksum table performance_schema.events_waits_history_long;
@@ -73,6 +81,14 @@ checksum table performance_schema.events_statements_summary_by_host_by_event_nam
checksum table performance_schema.events_statements_summary_by_thread_by_event_name extended;
checksum table performance_schema.events_statements_summary_by_user_by_event_name extended;
checksum table performance_schema.events_statements_summary_global_by_event_name extended;
+checksum table performance_schema.events_transactions_current extended;
+checksum table performance_schema.events_transactions_history extended;
+checksum table performance_schema.events_transactions_history_long extended;
+checksum table performance_schema.events_transactions_summary_by_account_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_by_host_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_by_thread_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_by_user_by_event_name extended;
+checksum table performance_schema.events_transactions_summary_global_by_event_name extended;
checksum table performance_schema.events_waits_current extended;
checksum table performance_schema.events_waits_history extended;
checksum table performance_schema.events_waits_history_long extended;
diff --git a/mysql-test/suite/perfschema/t/cnf_option.test b/mysql-test/suite/perfschema/t/cnf_option.test
index 698bb44b104..04140310cf4 100644
--- a/mysql-test/suite/perfschema/t/cnf_option.test
+++ b/mysql-test/suite/perfschema/t/cnf_option.test
@@ -4,6 +4,6 @@
--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';
+show global variables like 'performance_schema_max_thread_classes';
+show global variables like 'performance_schema_max_thread_instances';
diff --git a/mysql-test/suite/perfschema/t/connect_attrs.test b/mysql-test/suite/perfschema/t/connect_attrs.test
index 850d9ddd248..c703badef85 100644
--- a/mysql-test/suite/perfschema/t/connect_attrs.test
+++ b/mysql-test/suite/perfschema/t/connect_attrs.test
@@ -57,7 +57,7 @@ SELECT COUNT(DISTINCT PROCESSLIST_ID)
FROM performance_schema.session_connect_attrs;
connection non_privileged_user;
---error ER_TABLEACCESS_DENIED_ERROR
+--echo # must return 1
SELECT COUNT(DISTINCT PROCESSLIST_ID)
FROM performance_schema.session_account_connect_attrs;
diff --git a/mysql-test/suite/perfschema/t/connection_type_notwin.test b/mysql-test/suite/perfschema/t/connection_type_notwin.test
new file mode 100644
index 00000000000..800fdb7ad51
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/connection_type_notwin.test
@@ -0,0 +1,98 @@
+
+--source include/not_windows.inc
+--source include/not_embedded.inc
+--source include/have_debug.inc
+--source include/have_perfschema.inc
+
+--echo "Default connection"
+
+--vertical_results
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+create user 'root'@'santa.claus.ipv4.example.com';
+grant select on *.* to 'root'@'santa.claus.ipv4.example.com';
+create user 'rootssl'@'santa.claus.ipv4.example.com'
+ require SSL;
+grant select on *.* to 'rootssl'@'santa.claus.ipv4.example.com';
+
+set @old_dbug=@@global.debug_dbug;
+set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4";
+
+# Setup
+# make sure we start with a clean slate. log_tables.test says this is OK.
+TRUNCATE TABLE mysql.general_log;
+
+SET @old_log_output= @@global.log_output;
+SET @old_general_log= @@global.general_log;
+SET @old_general_log_file= @@global.general_log_file;
+
+--replace_result $MYSQLTEST_VARDIR ...
+eval SET GLOBAL general_log_file = '$MYSQLTEST_VARDIR/log/rewrite_general_con.log';
+SET GLOBAL log_output = 'FILE,TABLE';
+SET GLOBAL general_log= 'ON';
+
+connect(con1, localhost, root,,);
+
+--echo "Connection con1"
+
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+--disconnect con1
+
+connect(con2, "127.0.0.1", root,,test,$MASTER_MYPORT,);
+
+--echo "Connection con2"
+
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+--disconnect con2
+
+connect(con3, "127.0.0.1", rootssl,,test,$MASTER_MYPORT,,SSL);
+
+--echo "Connection con3"
+
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+--disconnect con3
+
+--connection default
+
+SET GLOBAL general_log= 'OFF';
+
+# show general-logging to file is correct
+CREATE TABLE test_log (argument TEXT);
+--replace_result $MYSQLTEST_VARDIR ...
+eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/log/rewrite_general_con.log'
+ INTO TABLE test_log FIELDS TERMINATED BY '\n' LINES TERMINATED BY '\n';
+
+select user_host, command_type, argument from mysql.general_log
+ where command_type = "Connect";
+
+select substring(argument, locate("Connect", argument)) from test_log
+ where argument like "%Connect%on test%";
+
+
+DROP TABLE test_log;
+
+--remove_file $MYSQLTEST_VARDIR/log/rewrite_general_con.log
+
+SET GLOBAL general_log_file= @old_general_log_file;
+SET GLOBAL general_log= @old_general_log;
+SET GLOBAL log_output= @old_log_output;
+
+--horizontal_results
+
+set global debug_dbug= @old_dbug;
+revoke select on *.* from 'root'@'santa.claus.ipv4.example.com';
+drop user 'root'@'santa.claus.ipv4.example.com';
+revoke select on *.* from 'rootssl'@'santa.claus.ipv4.example.com';
+drop user 'rootssl'@'santa.claus.ipv4.example.com';
+
diff --git a/mysql-test/suite/perfschema/t/connection_type_win.test b/mysql-test/suite/perfschema/t/connection_type_win.test
new file mode 100644
index 00000000000..fa09fc7fe57
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/connection_type_win.test
@@ -0,0 +1,96 @@
+
+--source include/windows.inc
+--source include/not_embedded.inc
+--source include/have_debug.inc
+--source include/have_perfschema.inc
+
+--echo "Default connection"
+
+--vertical_results
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+create user 'root'@'santa.claus.ipv4.example.com';
+grant select on *.* to 'root'@'santa.claus.ipv4.example.com';
+create user 'rootssl'@'santa.claus.ipv4.example.com'
+ require SSL;
+grant select on *.* to 'rootssl'@'santa.claus.ipv4.example.com';
+
+set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4";
+
+# Setup
+# make sure we start with a clean slate. log_tables.test says this is OK.
+TRUNCATE TABLE mysql.general_log;
+
+SET @old_log_output= @@global.log_output;
+SET @old_general_log= @@global.general_log;
+SET @old_general_log_file= @@global.general_log_file;
+
+--replace_result $MYSQLTEST_VARDIR ...
+eval SET GLOBAL general_log_file = '$MYSQLTEST_VARDIR/log/rewrite_general_con.log';
+SET GLOBAL log_output = 'FILE,TABLE';
+SET GLOBAL general_log= 'ON';
+
+connect(con1, localhost, root,,);
+
+--echo "Connection con1"
+
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+--disconnect con1
+
+connect(con2, "127.0.0.1", root,,test,$MASTER_MYPORT,);
+
+--echo "Connection con2"
+
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+--disconnect con2
+
+connect(con3, "127.0.0.1", rootssl,,test,$MASTER_MYPORT,,SSL);
+
+--echo "Connection con3"
+
+select NAME, PROCESSLIST_USER, PROCESSLIST_HOST, CONNECTION_TYPE
+ from performance_schema.threads
+ where PROCESSLIST_ID = connection_id();
+
+--disconnect con3
+
+--connection default
+
+SET GLOBAL general_log= 'OFF';
+
+# show general-logging to file is correct
+CREATE TABLE test_log (argument TEXT);
+--replace_result $MYSQLTEST_VARDIR ...
+eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/log/rewrite_general_con.log'
+ INTO TABLE test_log FIELDS TERMINATED BY '\n' LINES TERMINATED BY '\n';
+
+select user_host, command_type, argument from mysql.general_log
+ where command_type = "Connect";
+
+select substring(argument, locate("Connect", argument)) from test_log
+ where argument like "%Connect%on test%";
+
+
+DROP TABLE test_log;
+
+--remove_file $MYSQLTEST_VARDIR/log/rewrite_general_con.log
+
+SET GLOBAL general_log_file= @old_general_log_file;
+SET GLOBAL general_log= @old_general_log;
+SET GLOBAL log_output= @old_log_output;
+
+--horizontal_results
+
+set global debug_dbug= default;
+revoke select on *.* from 'root'@'santa.claus.ipv4.example.com';
+drop user 'root'@'santa.claus.ipv4.example.com';
+revoke select on *.* from 'rootssl'@'santa.claus.ipv4.example.com';
+drop user 'rootssl'@'santa.claus.ipv4.example.com';
diff --git a/mysql-test/suite/perfschema/t/ddl_esms_by_program.test b/mysql-test/suite/perfschema/t/ddl_esms_by_program.test
new file mode 100644
index 00000000000..ba24da5e4ba
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_esms_by_program.test
@@ -0,0 +1,21 @@
+# This line and the line below is a temporary line for tests that do not need MyISAM in future, but need to be kept for tests that need it.
+#--source include/have_myisam.inc
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_statements_summary_by_program
+ add column foo integer;
+
+truncate table performance_schema.events_statements_summary_by_program;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_statements_summary_by_program ADD INDEX test_index(OBJECT_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.events_statements_summary_by_program(OBJECT_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ets_by_account_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ets_by_account_by_event_name.test
new file mode 100644
index 00000000000..2ec1ddf79b3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ets_by_account_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_summary_by_account_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.events_transactions_summary_by_account_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_summary_by_account_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.events_transactions_summary_by_account_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ets_by_host_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ets_by_host_by_event_name.test
new file mode 100644
index 00000000000..47ae1d197f5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ets_by_host_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_summary_by_host_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.events_transactions_summary_by_host_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_summary_by_host_by_event_name
+ ADD INDEX test_index(HOSTNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.events_transactions_summary_by_host_by_event_name(HOSTNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ets_by_thread_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ets_by_thread_by_event_name.test
new file mode 100644
index 00000000000..63cdfd898f3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ets_by_thread_by_event_name.test
@@ -0,0 +1,18 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_summary_by_thread_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.events_transactions_summary_by_thread_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_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_transactions_summary_by_thread_by_event_name(THREAD_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ets_by_user_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ets_by_user_by_event_name.test
new file mode 100644
index 00000000000..9a70075b653
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ets_by_user_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_summary_by_user_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.events_transactions_summary_by_user_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_summary_by_user_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.events_transactions_summary_by_user_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ets_global_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ets_global_by_event_name.test
new file mode 100644
index 00000000000..5bb70245bd4
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ets_global_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_summary_global_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.events_transactions_summary_global_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_summary_global_by_event_name
+ ADD INDEX test_index(EVENT_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.events_transactions_summary_global_by_event_name(EVENT_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_events_stages_current.test b/mysql-test/suite/perfschema/t/ddl_events_stages_current.test
index 6085e41a7fd..822600ce6d4 100644
--- a/mysql-test/suite/perfschema/t/ddl_events_stages_current.test
+++ b/mysql-test/suite/perfschema/t/ddl_events_stages_current.test
@@ -14,3 +14,8 @@ ALTER TABLE performance_schema.events_stages_current ADD INDEX test_index(EVENT_
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.events_stages_current(EVENT_ID);
+--disable_query_log
+# Checking if the column WORK_COMPLETED and WORK_ESTIMATED exists
+select * from information_schema.columns where TABLE_NAME = 'events_stages_current' and column_name in ('WORK_COMPLETED','WORK_ESTIMATED')
+and table_schema='performance_schema';
+--enable_query_log
diff --git a/mysql-test/suite/perfschema/t/ddl_events_stages_history.test b/mysql-test/suite/perfschema/t/ddl_events_stages_history.test
index 1dd186571b2..eac2889e7cb 100644
--- a/mysql-test/suite/perfschema/t/ddl_events_stages_history.test
+++ b/mysql-test/suite/perfschema/t/ddl_events_stages_history.test
@@ -14,3 +14,8 @@ ALTER TABLE performance_schema.events_stages_history ADD INDEX test_index(EVENT_
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.events_stages_history(EVENT_ID);
+--disable_query_log
+# Checking if the column WORK_COMPLETED and WORK_ESTIMATED exists
+select * from information_schema.columns where TABLE_NAME ='events_stages_history' and column_name in ('WORK_COMPLETED','WORK_ESTIMATED')
+and table_schema='performance_schema';
+--enable_query_log
diff --git a/mysql-test/suite/perfschema/t/ddl_events_stages_history_long.test b/mysql-test/suite/perfschema/t/ddl_events_stages_history_long.test
index 8298500cf6d..2bc78b12674 100644
--- a/mysql-test/suite/perfschema/t/ddl_events_stages_history_long.test
+++ b/mysql-test/suite/perfschema/t/ddl_events_stages_history_long.test
@@ -14,3 +14,8 @@ ALTER TABLE performance_schema.events_stages_history_long ADD INDEX test_index(E
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.events_stages_history_long(EVENT_ID);
+--disable_query_log
+# Checking if the column WORK_COMPLETED and WORK_ESTIMATED exists
+select * from information_schema.columns where TABLE_NAME ='events_stages_history_long' and column_name in ('WORK_COMPLETED','WORK_ESTIMATED')
+and table_schema='performance_schema';
+--enable_query_log
diff --git a/mysql-test/suite/perfschema/t/ddl_events_transactions_current.test b/mysql-test/suite/perfschema/t/ddl_events_transactions_current.test
new file mode 100644
index 00000000000..5f64e65cd1e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_events_transactions_current.test
@@ -0,0 +1,16 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_current add column foo integer;
+
+truncate table performance_schema.events_transactions_current;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_current ADD INDEX test_index(EVENT_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.events_transactions_current(EVENT_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_events_transactions_history.test b/mysql-test/suite/perfschema/t/ddl_events_transactions_history.test
new file mode 100644
index 00000000000..a3b0cdded5e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_events_transactions_history.test
@@ -0,0 +1,16 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_history add column foo integer;
+
+truncate table performance_schema.events_transactions_history;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_history ADD INDEX test_index(EVENT_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.events_transactions_history(EVENT_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_events_transactions_history_long.test b/mysql-test/suite/perfschema/t/ddl_events_transactions_history_long.test
new file mode 100644
index 00000000000..1c8d6076f9f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_events_transactions_history_long.test
@@ -0,0 +1,16 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.events_transactions_history_long add column foo integer;
+
+truncate table performance_schema.events_transactions_history_long;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.events_transactions_history_long ADD INDEX test_index(EVENT_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.events_transactions_history_long(EVENT_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_global_status.test b/mysql-test/suite/perfschema/t/ddl_global_status.test
new file mode 100644
index 00000000000..fe65b79ab11
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_global_status.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.global_status
+ add column foo integer;
+
+truncate table performance_schema.global_status;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.global_status
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.global_status(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_global_variables.test b/mysql-test/suite/perfschema/t/ddl_global_variables.test
new file mode 100644
index 00000000000..f9b66a7d41c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_global_variables.test
@@ -0,0 +1,20 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.global_variables
+ add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.global_variables;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.global_variables
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.global_variables(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_mems_by_account_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_mems_by_account_by_event_name.test
new file mode 100644
index 00000000000..34d08cfe05c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_mems_by_account_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.memory_summary_by_account_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.memory_summary_by_account_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.memory_summary_by_account_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.memory_summary_by_account_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_mems_by_host_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_mems_by_host_by_event_name.test
new file mode 100644
index 00000000000..fc2e8c054e4
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_mems_by_host_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.memory_summary_by_host_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.memory_summary_by_host_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.memory_summary_by_host_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.memory_summary_by_host_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_mems_by_thread_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_mems_by_thread_by_event_name.test
new file mode 100644
index 00000000000..d4fdf155710
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_mems_by_thread_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.memory_summary_by_thread_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.memory_summary_by_thread_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.memory_summary_by_thread_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.memory_summary_by_thread_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_mems_by_user_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_mems_by_user_by_event_name.test
new file mode 100644
index 00000000000..03e5cebe6a2
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_mems_by_user_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.memory_summary_by_user_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.memory_summary_by_user_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.memory_summary_by_user_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.memory_summary_by_user_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_mems_global_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_mems_global_by_event_name.test
new file mode 100644
index 00000000000..a2c48997877
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_mems_global_by_event_name.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.memory_summary_global_by_event_name
+ add column foo integer;
+
+truncate table performance_schema.memory_summary_global_by_event_name;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.memory_summary_global_by_event_name
+ ADD INDEX test_index(USERNAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.memory_summary_global_by_event_name(USERNAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_metadata_locks.test b/mysql-test/suite/perfschema/t/ddl_metadata_locks.test
new file mode 100644
index 00000000000..520b8fcd3fb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_metadata_locks.test
@@ -0,0 +1,17 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.metadata_locks add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.metadata_locks;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.metadata_locks ADD INDEX test_index(TIMER_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.metadata_locks(TIMER_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_prepared_statements_instances.test b/mysql-test/suite/perfschema/t/ddl_prepared_statements_instances.test
new file mode 100644
index 00000000000..0cba4c485a5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_prepared_statements_instances.test
@@ -0,0 +1,21 @@
+# This line and the line below is a temporary line for tests that do not need MyISAM in future, but need to be kept for tests that need it.
+#--source include/have_myisam.inc
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.prepared_statements_instances
+ add column foo integer;
+
+truncate table performance_schema.prepared_statements_instances;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.prepared_statements_instances ADD INDEX test_index(OWNER_OBJECT_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.prepared_statements_instances(OWNER_OBJECT_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_applier_configuration.test b/mysql-test/suite/perfschema/t/ddl_replication_applier_configuration.test
new file mode 100644
index 00000000000..bc7ef8c28ab
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_applier_configuration.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_applier_configuration
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_configuration
+ ADD COLUMN foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_applier_configuration;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_configuration
+ ADD INDEX test_index(desired_delay);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON
+ performance_schema.replication_applier_configuration(desired_delay);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_applier_status.test b/mysql-test/suite/perfschema/t/ddl_replication_applier_status.test
new file mode 100644
index 00000000000..7cf1f656cd5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_applier_status.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_applier_status
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_status
+ ADD COLUMN foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_applier_status;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_status
+ ADD INDEX test_index(remaining_delay);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON
+ performance_schema.replication_applier_status(remaining_delay);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_coordinator.test b/mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_coordinator.test
new file mode 100644
index 00000000000..0e5f172e2b6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_coordinator.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_applier_status_by_coordinator
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_status_by_coordinator
+ ADD COLUMN foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_applier_status_by_coordinator;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_status_by_coordinator
+ ADD INDEX test_index(thread_id);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON
+ performance_schema.replication_applier_status_by_coordinator(thread_id);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_worker.test b/mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_worker.test
new file mode 100644
index 00000000000..c5adf4ea5c5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_applier_status_by_worker.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_applier_status_by_worker.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_status_by_worker
+ add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_applier_status_by_worker;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_applier_status_by_worker
+ ADD INDEX test_index(worker_id);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON
+ performance_schema.replication_applier_status_by_worker(worker_id);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_connection_configuration.test b/mysql-test/suite/perfschema/t/ddl_replication_connection_configuration.test
new file mode 100644
index 00000000000..4d1dd2ddc75
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_connection_configuration.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_connection_configuration.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_connection_configuration
+ ADD COLUMN foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_connection_configuration;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_connection_configuration
+ ADD INDEX test_index(HOST);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.replication_connection_configuration(HOST);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_connection_status.test b/mysql-test/suite/perfschema/t/ddl_replication_connection_status.test
new file mode 100644
index 00000000000..4420a0dfbd4
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_connection_status.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_connection_status.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_connection_status
+ ADD COLUMN foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_connection_status;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_connection_status
+ ADD INDEX test_index(Thread_Id);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.replication_connection_status(Thread_Id);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_group_member_stats.test b/mysql-test/suite/perfschema/t/ddl_replication_group_member_stats.test
new file mode 100644
index 00000000000..eae5ed1281a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_group_member_stats.test
@@ -0,0 +1,21 @@
+# Tests for PERFORMANCE_SCHEMA
+# This test verifies the correct behaviour in case of invalid
+# Usage of DDLs on the table replication_group_member_stats.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_group_member_stats
+ ADD COLUMN foo INTEGER;
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_group_member_stats;
+
+--error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_group_member_stats
+ ADD INDEX test_index(Member_Id);
+
+--error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.replication_group_member_stats(Member_Id);
diff --git a/mysql-test/suite/perfschema/t/ddl_replication_group_members.test b/mysql-test/suite/perfschema/t/ddl_replication_group_members.test
new file mode 100644
index 00000000000..bcb2c962a50
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_replication_group_members.test
@@ -0,0 +1,22 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DDLs on the table replication_group_members.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_group_members
+ ADD COLUMN foo INTEGER;
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+TRUNCATE TABLE performance_schema.replication_group_members;
+
+--error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.replication_group_members
+ ADD INDEX test_index(Member_Id);
+
+--error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.replication_group_members(Member_Id);
diff --git a/mysql-test/suite/perfschema/t/ddl_session_status.test b/mysql-test/suite/perfschema/t/ddl_session_status.test
new file mode 100644
index 00000000000..5dfa74a0d36
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_session_status.test
@@ -0,0 +1,20 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.session_status
+ add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.session_status;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.session_status
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.session_status(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_session_variables.test b/mysql-test/suite/perfschema/t/ddl_session_variables.test
new file mode 100644
index 00000000000..a649d2bc921
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_session_variables.test
@@ -0,0 +1,20 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.session_variables
+ add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.session_variables;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.session_variables
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.session_variables(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_setup_actors.test b/mysql-test/suite/perfschema/t/ddl_setup_actors.test
index 836fe559d77..73e2c988939 100644
--- a/mysql-test/suite/perfschema/t/ddl_setup_actors.test
+++ b/mysql-test/suite/perfschema/t/ddl_setup_actors.test
@@ -27,3 +27,5 @@ ALTER TABLE performance_schema.setup_actors ADD INDEX test_index(HOST);
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.setup_actors(HOST);
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.setup_actors ADD KEY ENA(ENABLED);
diff --git a/mysql-test/suite/perfschema/t/ddl_status_by_account.test b/mysql-test/suite/perfschema/t/ddl_status_by_account.test
new file mode 100644
index 00000000000..52f5d72f04d
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_status_by_account.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.status_by_account
+ add column foo integer;
+
+truncate table performance_schema.status_by_account;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.status_by_account
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.status_by_account(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_status_by_host.test b/mysql-test/suite/perfschema/t/ddl_status_by_host.test
new file mode 100644
index 00000000000..418880d5c34
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_status_by_host.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.status_by_host
+ add column foo integer;
+
+truncate table performance_schema.status_by_host;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.status_by_host
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.status_by_host(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_status_by_thread.test b/mysql-test/suite/perfschema/t/ddl_status_by_thread.test
new file mode 100644
index 00000000000..8ac778a20ae
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_status_by_thread.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.status_by_thread
+ add column foo integer;
+
+truncate table performance_schema.status_by_thread;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.status_by_thread
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.status_by_thread(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_status_by_user.test b/mysql-test/suite/perfschema/t/ddl_status_by_user.test
new file mode 100644
index 00000000000..b0d97aebc6b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_status_by_user.test
@@ -0,0 +1,19 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.status_by_user
+ add column foo integer;
+
+truncate table performance_schema.status_by_user;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.status_by_user
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.status_by_user(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_table_handles.test b/mysql-test/suite/perfschema/t/ddl_table_handles.test
new file mode 100644
index 00000000000..15ef69f34e0
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_table_handles.test
@@ -0,0 +1,17 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.table_handles add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.table_handles;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.table_handles ADD INDEX test_index(TIMER_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.table_handles(TIMER_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_uvar_by_thread.test b/mysql-test/suite/perfschema/t/ddl_uvar_by_thread.test
new file mode 100644
index 00000000000..d8ccda59872
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_uvar_by_thread.test
@@ -0,0 +1,20 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.user_variables_by_thread
+ add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.user_variables_by_thread;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.user_variables_by_thread
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.user_variables_by_thread(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_variables_by_thread.test b/mysql-test/suite/perfschema/t/ddl_variables_by_thread.test
new file mode 100644
index 00000000000..e5d04f09695
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_variables_by_thread.test
@@ -0,0 +1,20 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.variables_by_thread
+ add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.variables_by_thread;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.variables_by_thread
+ ADD INDEX test_index(VARIABLE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.variables_by_thread(VARIABLE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/digest_table_full.test b/mysql-test/suite/perfschema/t/digest_table_full.test
index dbbce662256..605ea1f31ab 100644
--- a/mysql-test/suite/perfschema/t/digest_table_full.test
+++ b/mysql-test/suite/perfschema/t/digest_table_full.test
@@ -24,7 +24,7 @@ SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_AFFECTED, SUM_WARNINGS,
# Expect no digest
-SHOW VARIABLES LIKE "performance_schema_digests_size";
+SHOW GLOBAL VARIABLES LIKE "performance_schema_digests_size";
SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_digest;
# Cleanup for Digest
diff --git a/mysql-test/suite/perfschema/t/disabled.def b/mysql-test/suite/perfschema/t/disabled.def
index 888298bbb09..2dc57ee9ad0 100644
--- a/mysql-test/suite/perfschema/t/disabled.def
+++ b/mysql-test/suite/perfschema/t/disabled.def
@@ -9,3 +9,4 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
+# perfschema.pfs_ccccccc : Bug#nnnnnnnn 2014-09-10 Anitha Frequent failures on PB2
diff --git a/mysql-test/suite/perfschema/t/dml_esms_by_program.test b/mysql-test/suite/perfschema/t/dml_esms_by_program.test
new file mode 100644
index 00000000000..b80b9aa5039
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_esms_by_program.test
@@ -0,0 +1,44 @@
+# This line and the line below is a temporary line for tests that do not need MyISAM in future, but need to be kept for tests that need it.
+#--source include/have_myisam.inc
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+#--disable_result_log
+select * from performance_schema.events_statements_summary_by_program
+ where object_name like 'XXYYZZ%' limit 1;
+
+select * from performance_schema.events_statements_summary_by_program
+ where object_name='XXYYZZ';
+#--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_statements_summary_by_program
+ set object_name='XXYYZZ', count_star=1, sum_timer_wait=2, min_timer_wait=3,
+ avg_timer_wait=4, max_timer_wait=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_statements_summary_by_program
+ set count_star=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_statements_summary_by_program
+ set count_star=12 where object_name like "XXYYZZ";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_statements_summary_by_program
+ where count_star=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_statements_summary_by_program;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_statements_summary_by_program READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_statements_summary_by_program WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ets_by_account_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ets_by_account_by_event_name.test
new file mode 100644
index 00000000000..ede5f708dd9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ets_by_account_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_summary_by_account_by_event_name
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_summary_by_account_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_summary_by_account_by_event_name
+ set event_name='FOO', user='BAR', host='BAZ',
+ count_star=1, sum_timer_wait=2, min_timer_wait=3,
+ avg_timer_wait=4, max_timer_wait=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_account_by_event_name
+ set count_star=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_account_by_event_name
+ set count_star=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_account_by_event_name
+ where count_star=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_account_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_account_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_account_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ets_by_host_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ets_by_host_by_event_name.test
new file mode 100644
index 00000000000..a2163b166fd
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ets_by_host_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_summary_by_host_by_event_name
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_summary_by_host_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_summary_by_host_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 ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_host_by_event_name
+ set count_star=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_host_by_event_name
+ set count_star=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_host_by_event_name
+ where count_star=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_host_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_host_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_host_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ets_by_thread_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ets_by_thread_by_event_name.test
new file mode 100644
index 00000000000..bbbb0cadcf2
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ets_by_thread_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_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 ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_thread_by_event_name
+ set count_star=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_thread_by_event_name
+ set count_star=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_thread_by_event_name
+ where count_star=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_thread_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_thread_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_thread_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ets_by_user_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ets_by_user_by_event_name.test
new file mode 100644
index 00000000000..dcca969c041
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ets_by_user_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_summary_by_user_by_event_name
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_summary_by_user_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_summary_by_user_by_event_name
+ set event_name='FOO', user='BAR',
+ count_star=1, sum_timer_wait=2, min_timer_wait=3,
+ avg_timer_wait=4, max_timer_wait=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_user_by_event_name
+ set count_star=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_by_user_by_event_name
+ set count_star=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_user_by_event_name
+ where count_star=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_by_user_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_user_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_by_user_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ets_global_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ets_global_by_event_name.test
new file mode 100644
index 00000000000..f5c11cf8fda
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ets_global_by_event_name.test
@@ -0,0 +1,41 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_summary_global_by_event_name
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_summary_global_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_summary_global_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 ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_global_by_event_name
+ set count_star=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_summary_global_by_event_name
+ set count_star=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_global_by_event_name
+ where count_star=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_summary_global_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_global_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_summary_global_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_events_transactions_current.test b/mysql-test/suite/perfschema/t/dml_events_transactions_current.test
new file mode 100644
index 00000000000..99ab2eda766
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_events_transactions_current.test
@@ -0,0 +1,41 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_current
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_current
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_current
+ set thread_id='1', event_id=1,
+ event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_current
+ set timer_start=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_current
+ set timer_start=12 where thread_id=0;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_current
+ where thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_current;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_current READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_current WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_events_transactions_history.test b/mysql-test/suite/perfschema/t/dml_events_transactions_history.test
new file mode 100644
index 00000000000..dfad802f219
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_events_transactions_history.test
@@ -0,0 +1,47 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_history
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_history
+ where event_name='FOO';
+
+select * from performance_schema.events_transactions_history
+ where event_name in ('transaction') order by timer_wait limit 1;
+
+select * from performance_schema.events_transactions_history
+ where event_name in ('transaction') order by timer_wait desc limit 1;
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_history
+ set thread_id='1', event_id=1,
+ event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_history
+ set timer_start=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_history
+ set timer_start=12 where thread_id=0;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_history
+ where thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_history;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_history READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_history WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_events_transactions_history_long.test b/mysql-test/suite/perfschema/t/dml_events_transactions_history_long.test
new file mode 100644
index 00000000000..b78f3e167d9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_events_transactions_history_long.test
@@ -0,0 +1,47 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.events_transactions_history_long
+ where event_name in ('transaction') limit 1;
+
+select * from performance_schema.events_transactions_history_long
+ where event_name='FOO';
+
+select * from performance_schema.events_transactions_history_long
+ where event_name in ('transaction') order by timer_wait limit 1;
+
+select * from performance_schema.events_transactions_history_long
+ where event_name in ('transaction') order by timer_wait desc limit 1;
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.events_transactions_history_long
+ set thread_id='1', event_id=1,
+ event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_history_long
+ set timer_start=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.events_transactions_history_long
+ set timer_start=12 where thread_id=0;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_history_long
+ where thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.events_transactions_history_long;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_history_long READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.events_transactions_history_long 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
index f95f74fd61a..ea3bf0a1917 100644
--- a/mysql-test/suite/perfschema/t/dml_file_instances.test
+++ b/mysql-test/suite/perfschema/t/dml_file_instances.test
@@ -2,6 +2,7 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
+--source include/have_innodb.inc
--disable_result_log
select * from performance_schema.file_instances limit 1;
@@ -33,3 +34,62 @@ UNLOCK TABLES;
LOCK TABLES performance_schema.file_instances WRITE;
UNLOCK TABLES;
+--echo ###
+--echo ### Bug#26152751: INNODB LEAKS MEMORY, PERFORMANCE_SCHEMA FILE_INSTANCES
+--echo ### #SQL-IB3129987-252773.IBD
+--echo ###
+
+CREATE DATABASE db_26152751;
+USE db_26152751;
+
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+CREATE TABLE t_db_26152751 (a INT) ENGINE=MYISAM;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+RENAME TABLE t_db_26152751 to t_db_26152751_new;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+RENAME TABLE t_db_26152751_new to t_db_26152751;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+ALTER TABLE t_db_26152751 ADD COLUMN b INT;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+DROP TABLE t_db_26152751;
+
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+CREATE TABLE t_db_26152751 (a INT) ENGINE=INNODB;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+RENAME TABLE t_db_26152751 to t_db_26152751_new;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+RENAME TABLE t_db_26152751_new to t_db_26152751;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+ALTER TABLE t_db_26152751 ADD COLUMN b INT;
+
+--replace_regex /.*\/t_db_26152751/t_db_26152751/
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+DROP TABLE t_db_26152751;
+
+SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%";
+
+DROP DATABASE db_26152751;
diff --git a/mysql-test/suite/perfschema/t/dml_global_status.test b/mysql-test/suite/perfschema/t/dml_global_status.test
new file mode 100644
index 00000000000..65f7c3f5564
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_global_status.test
@@ -0,0 +1,36 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.global_status
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.global_status
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.global_status
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.global_status
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.global_status
+ where variable_name <> 'FOO';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.global_status;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.global_status READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.global_status WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_global_variables.test b/mysql-test/suite/perfschema/t/dml_global_variables.test
new file mode 100644
index 00000000000..20507732818
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_global_variables.test
@@ -0,0 +1,36 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.global_variables
+ where variable_name like 'autocommit%' limit 1;
+
+select * from performance_schema.global_variables
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.global_variables
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.global_variables
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.global_variables
+ where variable_name <> 'FOO';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.global_variables;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.global_variables READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.global_variables WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_mems_by_account_by_event_name.test b/mysql-test/suite/perfschema/t/dml_mems_by_account_by_event_name.test
new file mode 100644
index 00000000000..a620f586553
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_mems_by_account_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.memory_summary_by_account_by_event_name
+ where event_name like 'memory/%' limit 1;
+
+select * from performance_schema.memory_summary_by_account_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.memory_summary_by_account_by_event_name
+ set event_name='FOO', user='BAR', host='BAZ',
+ count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+ sum_number_of_bytes_free=4, low_count_used=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_account_by_event_name
+ set count_alloc=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_account_by_event_name
+ set count_alloc=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_account_by_event_name
+ where count_alloc=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_account_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_account_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_account_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_mems_by_host_by_event_name.test b/mysql-test/suite/perfschema/t/dml_mems_by_host_by_event_name.test
new file mode 100644
index 00000000000..71c21457691
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_mems_by_host_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.memory_summary_by_host_by_event_name
+ where event_name like 'memory/%' limit 1;
+
+select * from performance_schema.memory_summary_by_host_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.memory_summary_by_host_by_event_name
+ set event_name='FOO', host='BAZ',
+ count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+ sum_number_of_bytes_free=4, low_count_used=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_host_by_event_name
+ set count_alloc=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_host_by_event_name
+ set count_alloc=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_host_by_event_name
+ where count_alloc=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_host_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_host_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_host_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_mems_by_thread_by_event_name.test b/mysql-test/suite/perfschema/t/dml_mems_by_thread_by_event_name.test
new file mode 100644
index 00000000000..5a75dbe78f2
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_mems_by_thread_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.memory_summary_by_thread_by_event_name
+ where event_name like 'memory/%' limit 1;
+
+select * from performance_schema.memory_summary_by_thread_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.memory_summary_by_thread_by_event_name
+ set event_name='FOO', thread_id=12,
+ count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+ sum_number_of_bytes_free=4, low_count_used=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_thread_by_event_name
+ set count_alloc=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_thread_by_event_name
+ set count_alloc=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_thread_by_event_name
+ where count_alloc=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_thread_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_thread_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_thread_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_mems_by_user_by_event_name.test b/mysql-test/suite/perfschema/t/dml_mems_by_user_by_event_name.test
new file mode 100644
index 00000000000..3cf63097356
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_mems_by_user_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.memory_summary_by_user_by_event_name
+ where event_name like 'memory/%' limit 1;
+
+select * from performance_schema.memory_summary_by_user_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.memory_summary_by_user_by_event_name
+ set event_name='FOO', user='BAR',
+ count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+ sum_number_of_bytes_free=4, low_count_used=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_user_by_event_name
+ set count_alloc=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_by_user_by_event_name
+ set count_alloc=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_user_by_event_name
+ where count_alloc=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_by_user_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_user_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_by_user_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_mems_global_by_event_name.test b/mysql-test/suite/perfschema/t/dml_mems_global_by_event_name.test
new file mode 100644
index 00000000000..4e716dc668f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_mems_global_by_event_name.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.memory_summary_global_by_event_name
+ where event_name like 'memory/%' limit 1;
+
+select * from performance_schema.memory_summary_global_by_event_name
+ where event_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.memory_summary_global_by_event_name
+ set event_name='FOO',
+ count_alloc=1, count_free=2, sum_number_of_bytes_alloc=3,
+ sum_number_of_bytes_free=4, low_count_used=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_global_by_event_name
+ set count_alloc=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.memory_summary_global_by_event_name
+ set count_alloc=12 where event_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_global_by_event_name
+ where count_alloc=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.memory_summary_global_by_event_name;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_global_by_event_name READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.memory_summary_global_by_event_name WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_metadata_locks.test b/mysql-test/suite/perfschema/t/dml_metadata_locks.test
new file mode 100644
index 00000000000..d4ace2c708b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_metadata_locks.test
@@ -0,0 +1,35 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.metadata_locks;
+--enable_result_log
+
+select * from performance_schema.metadata_locks
+ where object_name='foo';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.metadata_locks
+ set object_name='FOO', owner_thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.metadata_locks
+ set owner_thread_id=12 where object_name='foo';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.metadata_locks;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.metadata_locks
+ where timer_name='CYCLE';
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.metadata_locks READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.metadata_locks WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_prepared_statements_instances.test b/mysql-test/suite/perfschema/t/dml_prepared_statements_instances.test
new file mode 100644
index 00000000000..3c96740df77
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_prepared_statements_instances.test
@@ -0,0 +1,43 @@
+# This line and the line below is a temporary line for tests that do not need MyISAM in future, but need to be kept for tests that need it.
+#--source include/have_myisam.inc
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+#--disable_result_log
+select * from performance_schema.prepared_statements_instances
+ where owner_object_name like 'XXYYZZ%' limit 1;
+
+select * from performance_schema.prepared_statements_instances
+ where owner_object_name='XXYYZZ';
+#--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.prepared_statements_instances
+ set owner_object_name='XXYYZZ', count_execute=1, sum_timer_execute=2,
+ min_timer_execute=3, avg_timer_execute=4, max_timer_execute=5;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.prepared_statements_instances set count_execute=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.prepared_statements_instances
+ set count_execute=12 where owner_object_name like "XXYYZZ";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.prepared_statements_instances
+ where count_execute=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.prepared_statements_instances;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.prepared_statements_instances READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.prepared_statements_instances WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_replication_applier_configuration.test b/mysql-test/suite/perfschema/t/dml_replication_applier_configuration.test
new file mode 100644
index 00000000000..f465e8f7c0c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_applier_configuration.test
@@ -0,0 +1,38 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_applier_configuration.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_applier_configuration
+ LIMIT 1;
+
+sELECT * FROM performance_schema.replication_applier_configuration
+ WHERE desired_delay=12;
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_applier_configuration
+ SET desired_delay=2;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_configuration
+ SET desired_delay=12 WHERE desired_delay=2;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_configuration
+ WHERE desired_delay=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_configuration;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_configuration READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_configuration WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_applier_status.test b/mysql-test/suite/perfschema/t/dml_replication_applier_status.test
new file mode 100644
index 00000000000..d2738c1c099
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_applier_status.test
@@ -0,0 +1,42 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_applier_status.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_applier_status
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_applier_status
+ WHERE service_state='YES' OR remaining_delay=12;
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_applier_status
+ SET service_state='YES', remaining_delay=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_status
+ SET remaining_delay=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_status
+ SET remaining_delay=12 WHERE service_state='YES';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_status
+ WHERE service_state='YES';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_status;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_status READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_status WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_applier_status_by_coordinator.test b/mysql-test/suite/perfschema/t/dml_replication_applier_status_by_coordinator.test
new file mode 100644
index 00000000000..6c1b82b823c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_applier_status_by_coordinator.test
@@ -0,0 +1,43 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_applier_status_by_coordinator
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_applier_status_by_coordinator
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_applier_status_by_coordinator
+ WHERE service_state='YES' or last_error_message='ERROR';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_applier_status_by_coordinator
+ SET service_state='YES', last_error_message='ERROR', thread_id=2,
+ last_error_number=1234;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_status_by_coordinator
+ SET last_error_number=1234;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_status_by_coordinator
+ SET last_error_number=1234 where service_state like "YES";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_status_by_coordinator
+ WHERE thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_status_by_coordinator;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_status_by_coordinator READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_status_by_coordinator WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_applier_status_by_worker.test b/mysql-test/suite/perfschema/t/dml_replication_applier_status_by_worker.test
new file mode 100644
index 00000000000..53f50935258
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_applier_status_by_worker.test
@@ -0,0 +1,43 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_applier_status_by_worker.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_applier_status_by_worker
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_applier_status_by_worker
+ WHERE service_state='YES' OR last_error_message='ERROR';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_applier_status_by_worker
+ SET service_state='YES', last_error_message='ERROR',
+ worker_id=1, thread_id=2, last_error_number=1234;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_status_by_worker
+ SET worker_id=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_applier_status_by_worker
+ SET worker_d=12 where service_state like "YES";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_status_by_worker
+ WHERE worker_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_applier_status_by_worker;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_status_by_worker READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_applier_status_by_worker WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_connection_configuration.test b/mysql-test/suite/perfschema/t/dml_replication_connection_configuration.test
new file mode 100644
index 00000000000..b787cbf8f63
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_connection_configuration.test
@@ -0,0 +1,43 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_connection_configuration.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_connection_configuration
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_connection_configuration
+ WHERE user='FOO' or host='BAR';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_connection_configuration
+ SET user='FOO', host='BAR',
+ port=1, connection_retry_count=2;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_connection_configuration
+ SET connection_retry_interval=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_connection_configuration
+ SET connection_retry_interval=12 WHERE host LIKE "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_connection_configuration
+ WHERE connection_retry_count=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_connection_configuration;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_connection_configuration READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_connection_configuration WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_connection_status.test b/mysql-test/suite/perfschema/t/dml_replication_connection_status.test
new file mode 100644
index 00000000000..207ee9f5b32
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_connection_status.test
@@ -0,0 +1,43 @@
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_connection_status.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_connection_status
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_connection_status
+ WHERE received_transaction_set='FOO' OR last_error_message='BAR';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_connection_status
+ SET received_transaction_set='FOO', last_error_message='BAR',
+ thread_id=1, last_error_number=2;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_connection_status
+ SET last_error_number=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_connection_status
+ SET thread_id=12 WHERE received_transaction_set like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_connection_status
+ WHERE last_error_number=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_connection_status;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_connection_status READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_connection_status WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_group_member_stats.test b/mysql-test/suite/perfschema/t/dml_replication_group_member_stats.test
new file mode 100644
index 00000000000..db42ce2d7de
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_group_member_stats.test
@@ -0,0 +1,38 @@
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_group_member_stats
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+SELECT * FROM performance_schema.replication_group_member_stats
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_group_member_stats
+ WHERE channel_name='FOO';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_group_member_stats
+ SET channel_name='FOO', node_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_group_member_stats
+ SET member_id=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_group_member_stats
+ SET member_id=12 WHERE group_name LIKE "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_group_member_stats
+ WHERE member_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_group_member_stats;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_group_member_stats READ;
+UNLOCK TABLES;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_group_member_stats WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_replication_group_members.test b/mysql-test/suite/perfschema/t/dml_replication_group_members.test
new file mode 100644
index 00000000000..1a49b2d162f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_replication_group_members.test
@@ -0,0 +1,40 @@
+# This test verifies the correct behaviour in case of invalid
+# usage of DMLs on the table replication_group_members.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+SELECT * FROM performance_schema.replication_group_members
+ LIMIT 1;
+
+SELECT * FROM performance_schema.replication_group_members
+ WHERE channel_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+INSERT INTO performance_schema.replication_group_members
+ SET channel_name='FOO', member_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_group_members
+ SET member_id=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.replication_group_members
+ SET member_id=12 WHERE channel_name LIKE "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_group_members
+ WHERE member_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+DELETE FROM performance_schema.replication_group_members;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_group_members READ;
+UNLOCK TABLES;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.replication_group_members WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/t/dml_session_status.test b/mysql-test/suite/perfschema/t/dml_session_status.test
new file mode 100644
index 00000000000..c5995738636
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_session_status.test
@@ -0,0 +1,36 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.session_status
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.session_status
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.session_status
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.session_status
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.session_status
+ where variable_name <> 'FOO';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.session_status;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.session_status READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.session_status WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_session_variables.test b/mysql-test/suite/perfschema/t/dml_session_variables.test
new file mode 100644
index 00000000000..0640ce05ebb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_session_variables.test
@@ -0,0 +1,36 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.session_variables
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.session_variables
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.session_variables
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.session_variables
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.session_variables
+ where variable_name <> 'FOO';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.session_variables;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.session_variables READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.session_variables WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_setup_actors.test b/mysql-test/suite/perfschema/t/dml_setup_actors.test
index d5424cad7e3..f74fa9b5581 100644
--- a/mysql-test/suite/perfschema/t/dml_setup_actors.test
+++ b/mysql-test/suite/perfschema/t/dml_setup_actors.test
@@ -10,6 +10,16 @@ drop table if exists test.setup_actors;
# Save the setup
create table test.setup_actors as
select * from performance_schema.setup_actors;
+
+# Inserting Duplicate values in the table should
+# throw error
+--error ER_DUP_KEY
+insert into performance_schema.setup_actors
+ values ('%','%','%','YES', 'YES');
+--error ER_DUP_KEY
+insert into performance_schema.setup_actors
+ values ('%','%','%','NO', 'NO');
+
truncate table performance_schema.setup_actors;
select * from performance_schema.setup_actors;
@@ -29,6 +39,16 @@ insert into performance_schema.setup_actors
insert into performance_schema.setup_actors
set user='%', host='%';
+# Insert with wrong value for ENABLED column
+--error 1265
+insert into performance_schema.setup_actors
+ values ('localhost', 'user1', '%', 'NO%', 'NO');
+
+# Insert with wrong value for HISTORY column
+--error 1265
+insert into performance_schema.setup_actors
+ values ('localhost', 'user1', '%', 'NO', 'KO');
+
select * from performance_schema.setup_actors
order by USER, HOST;
@@ -44,6 +64,44 @@ update performance_schema.setup_actors
update performance_schema.setup_actors
set role='ILLEGAL';
+# update on ENABLED column is allowed
+update performance_schema.setup_actors
+ set ENABLED='YES';
+
+# update on HISTORY column is allowed
+update performance_schema.setup_actors
+ set HISTORY='YES';
+
+# update on ENABLED column with wrong values
+#throws error
+--error 1265
+update performance_schema.setup_actors
+ set ENABLED='';
+
+--error 1265
+update performance_schema.setup_actors
+ set ENABLED='YESS';
+
+--error 1265
+update performance_schema.setup_actors
+ set ENABLED='NO%';
+
+--error ER_BAD_NULL_ERROR
+update performance_schema.setup_actors
+ set ENABLED=NULL;
+
+--error 1265
+update performance_schema.setup_actors
+ set HISTORY='YESS';
+
+--error 1265
+update performance_schema.setup_actors
+ set HISTORY='NO%';
+
+--error ER_BAD_NULL_ERROR
+update performance_schema.setup_actors
+ set HISTORY=NULL;
+
select * from performance_schema.setup_actors
order by USER, HOST;
@@ -64,6 +122,17 @@ UNLOCK TABLES;
LOCK TABLES performance_schema.setup_actors WRITE;
UNLOCK TABLES;
+--echo #
+--echo # WL#2284: Increase the length of a user name
+--echo #
+
+insert into performance_schema.setup_actors
+ set user='user_name_len_22_01234', host='localhost';
+
+delete from performance_schema.setup_actors
+ where user = 'user_name_len_22_01234' and host = 'localhost';
+
+
# Restore the setup
truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors
diff --git a/mysql-test/suite/perfschema/t/dml_setup_instruments.test b/mysql-test/suite/perfschema/t/dml_setup_instruments.test
index 098d6bd031d..0a8fba62d32 100644
--- a/mysql-test/suite/perfschema/t/dml_setup_instruments.test
+++ b/mysql-test/suite/perfschema/t/dml_setup_instruments.test
@@ -33,12 +33,17 @@ select * from performance_schema.setup_instruments
# COND_handler_count is dependent on the build (Windows only)
# DEBUG_SYNC::cond is dependent on the build (DEBUG only)
+# COND_main_thread_in_use is dependent on the build (non Windows)
+# COND_start_signal_handler is dependent on the build (non Windows)
select * from performance_schema.setup_instruments
where name like 'Wait/Synch/Cond/sql/%'
and name not in (
+ 'wait/synch/cond/sql/COND_open',
'wait/synch/cond/sql/COND_handler_count',
- 'wait/synch/cond/sql/DEBUG_SYNC::cond')
+ 'wait/synch/cond/sql/DEBUG_SYNC::cond',
+ 'wait/synch/cond/sql/COND_socket_listener_active',
+ 'wait/synch/cond/sql/COND_start_signal_handler')
order by name limit 10;
--disable_result_log
@@ -92,9 +97,7 @@ UNLOCK TABLES;
UPDATE performance_schema.setup_instruments SET timed='NO'
ORDER BY RAND();
-# MTR is configured to start with everything set to ON,
-# so we need to restore it after the previous update
---disable_query_log
-update performance_schema.setup_instruments set timed='YES';
---enable_query_log
+# Test cleanup
+update performance_schema.setup_instruments
+ set enabled='YES', TIMED='YES';
diff --git a/mysql-test/suite/perfschema/t/dml_setup_objects.test b/mysql-test/suite/perfschema/t/dml_setup_objects.test
index ac7b5fd35bb..1f4765a0c70 100644
--- a/mysql-test/suite/perfschema/t/dml_setup_objects.test
+++ b/mysql-test/suite/perfschema/t/dml_setup_objects.test
@@ -6,7 +6,7 @@
--disable_warnings
drop table if exists test.setup_objects;
--enable_warnings
-
+SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
# Save the setup
create table test.setup_objects as
select * from performance_schema.setup_objects;
@@ -93,4 +93,4 @@ truncate table performance_schema.setup_objects;
insert into performance_schema.setup_objects
select * from test.setup_objects;
drop table test.setup_objects;
-
+SET sql_mode = default;
diff --git a/mysql-test/suite/perfschema/t/dml_setup_timers.test b/mysql-test/suite/perfschema/t/dml_setup_timers.test
index bd8822d2b19..10988d54bc3 100644
--- a/mysql-test/suite/perfschema/t/dml_setup_timers.test
+++ b/mysql-test/suite/perfschema/t/dml_setup_timers.test
@@ -12,6 +12,8 @@ update performance_schema.setup_timers
update performance_schema.setup_timers
set timer_name='NANOSECOND' where name="statement";
update performance_schema.setup_timers
+ set timer_name='MICROSECOND' where name="transaction";
+update performance_schema.setup_timers
set timer_name='MICROSECOND' where name="idle";
select * from performance_schema.setup_timers;
@@ -60,6 +62,8 @@ update performance_schema.setup_timers
update performance_schema.setup_timers
set timer_name='NANOSECOND' where name="statement";
update performance_schema.setup_timers
+ set timer_name='MICROSECOND' where name="transaction";
+update performance_schema.setup_timers
set timer_name='MICROSECOND' where name="idle";
select * from performance_schema.setup_timers;
diff --git a/mysql-test/suite/perfschema/t/dml_status_by_account.test b/mysql-test/suite/perfschema/t/dml_status_by_account.test
new file mode 100644
index 00000000000..5b31a572955
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_status_by_account.test
@@ -0,0 +1,40 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.status_by_account
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.status_by_account
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.status_by_account
+ set user='USER', host='HOST', variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_account
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_account
+ set variable_name='FOO' where user <> 'USER';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_account
+ where user <> 'USER';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_account;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_account READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_account WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_status_by_host.test b/mysql-test/suite/perfschema/t/dml_status_by_host.test
new file mode 100644
index 00000000000..6c5c4462688
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_status_by_host.test
@@ -0,0 +1,40 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.status_by_host
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.status_by_host
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.status_by_host
+ set host='HOST', variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_host
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_host
+ set variable_name='FOO' where host <> 'HOST';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_host
+ where host <> 'HOST';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_host;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_host READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_host WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_status_by_thread.test b/mysql-test/suite/perfschema/t/dml_status_by_thread.test
new file mode 100644
index 00000000000..09022b05a47
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_status_by_thread.test
@@ -0,0 +1,40 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.status_by_thread
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.status_by_thread
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.status_by_thread
+ set thread_id=1, variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_thread
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_thread
+ set variable_name='FOO' where thread_id=0;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_thread
+ where thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_thread;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_thread READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_thread WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_status_by_user.test b/mysql-test/suite/perfschema/t/dml_status_by_user.test
new file mode 100644
index 00000000000..25cba557228
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_status_by_user.test
@@ -0,0 +1,40 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.status_by_user
+ where variable_name like 'bytes_%' limit 1;
+
+select * from performance_schema.status_by_user
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.status_by_user
+ set user='USER', variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_user
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.status_by_user
+ set variable_name='FOO' where user <> 'USER';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_user
+ where user <> 'USER';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.status_by_user;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_user READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.status_by_user WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_table_handles.test b/mysql-test/suite/perfschema/t/dml_table_handles.test
new file mode 100644
index 00000000000..31f5fe0bc46
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_table_handles.test
@@ -0,0 +1,35 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.table_handles;
+--enable_result_log
+
+select * from performance_schema.table_handles
+ where object_name='foo';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.table_handles
+ set object_name='FOO', owner_event_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.table_handles
+ set owner_event_id=12 where object_name='foo';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.table_handles;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.table_handles
+ where timer_name='CYCLE';
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.table_handles READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.table_handles WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_uvar_by_thread.test b/mysql-test/suite/perfschema/t/dml_uvar_by_thread.test
new file mode 100644
index 00000000000..71518d35d1f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_uvar_by_thread.test
@@ -0,0 +1,48 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.user_variables_by_thread
+ where variable_name like 'foo%' limit 1;
+
+select * from performance_schema.user_variables_by_thread
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.user_variables_by_thread
+ set thread_id=12, variable_name='foo', variable_value='bar';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.user_variables_by_thread
+ set thread_id=12;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.user_variables_by_thread
+ set thread_id=12 where variable_name like "FOO";
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.user_variables_by_thread
+ where thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.user_variables_by_thread;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.user_variables_by_thread READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.user_variables_by_thread WRITE;
+UNLOCK TABLES;
+
+DELIMITER |;
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE TRIGGER test_uvar_trigger
+ AFTER INSERT ON performance_schema.user_variables_by_thread
+ FOR EACH ROW BEGIN
+ set @a='OK';
+END|
+DELIMITER ;|
diff --git a/mysql-test/suite/perfschema/t/dml_variables_by_thread.test b/mysql-test/suite/perfschema/t/dml_variables_by_thread.test
new file mode 100644
index 00000000000..db087d58ba4
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_variables_by_thread.test
@@ -0,0 +1,40 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_result_log
+select * from performance_schema.variables_by_thread
+ where variable_name like 'autocommit%' limit 1;
+
+select * from performance_schema.variables_by_thread
+ where variable_name='FOO';
+--enable_result_log
+
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.variables_by_thread
+ set thread_id=1, variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.variables_by_thread
+ set variable_name='FOO', variable_value='BAR';
+
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.variables_by_thread
+ set variable_name='FOO' where thread_id=0;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.variables_by_thread
+ where thread_id=1;
+
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.variables_by_thread;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.variables_by_thread READ;
+UNLOCK TABLES;
+
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.variables_by_thread WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/event_aggregate.test b/mysql-test/suite/perfschema/t/event_aggregate.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_a.test b/mysql-test/suite/perfschema/t/event_aggregate_no_a.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_a.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_a.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_h.test b/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_h.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_h.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_h.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u.test b/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u_no_h.test b/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u_no_h.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u_no_h.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_a_no_u_no_h.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_h.test b/mysql-test/suite/perfschema/t/event_aggregate_no_h.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_h.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_h.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_u.test b/mysql-test/suite/perfschema/t/event_aggregate_no_u.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_u.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_u.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/event_aggregate_no_u_no_h.test b/mysql-test/suite/perfschema/t/event_aggregate_no_u_no_h.test
index 372cda050ee..685cbbaed28 100644
--- a/mysql-test/suite/perfschema/t/event_aggregate_no_u_no_h.test
+++ b/mysql-test/suite/perfschema/t/event_aggregate_no_u_no_h.test
@@ -1,6 +1,5 @@
# Tests for the performance schema
#
-
--source ../include/event_aggregate_setup.inc
--source ../include/event_aggregate_load.inc
--source ../include/event_aggregate_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/file_misc-master.opt b/mysql-test/suite/perfschema/t/file_misc-master.opt
new file mode 100644
index 00000000000..9d6fb53ff50
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/file_misc-master.opt
@@ -0,0 +1 @@
+--loose-performance-schema-max-file-instances=0
diff --git a/mysql-test/suite/perfschema/t/file_misc.test b/mysql-test/suite/perfschema/t/file_misc.test
new file mode 100644
index 00000000000..e495aa90676
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/file_misc.test
@@ -0,0 +1,11 @@
+
+# Bug#22118669 - ASSERTION `PFS_FILE != __NULL' FAILED
+
+# Cause a temporary file to be instrumented,
+# while there are no file instruments available.
+
+--disable_result_log
+select * from information_schema.columns ORDER BY table_name;
+--enable_result_log
+
+
diff --git a/mysql-test/suite/perfschema/t/func_file_io.test b/mysql-test/suite/perfschema/t/func_file_io.test
index 2055fa9a008..e29b05b81ff 100644
--- a/mysql-test/suite/perfschema/t/func_file_io.test
+++ b/mysql-test/suite/perfschema/t/func_file_io.test
@@ -189,5 +189,5 @@ ORDER BY p.processlist_user, h.operation;
UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
# In case of failure, will indicate the root cause
-show status like "performance_schema%";
+show global status like "performance_schema%";
diff --git a/mysql-test/suite/perfschema/t/func_mutex.test b/mysql-test/suite/perfschema/t/func_mutex.test
index 66bcb68accb..1964852134d 100644
--- a/mysql-test/suite/perfschema/t/func_mutex.test
+++ b/mysql-test/suite/perfschema/t/func_mutex.test
@@ -21,7 +21,7 @@ flush status;
select NAME from performance_schema.mutex_instances
where NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex' GROUP BY NAME;
select NAME from performance_schema.rwlock_instances
- where NAME = 'wait/synch/rwlock/sql/LOCK_grant';
+ where NAME = 'wait/synch/rwlock/sql/LOCK_grant' limit 1;
--disable_warnings
DROP TABLE IF EXISTS t1;
@@ -130,5 +130,5 @@ DROP TABLE t1;
UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
# In case of failure, will indicate the root cause
-show status like "performance_schema%";
+show global status like "performance_schema%";
diff --git a/mysql-test/suite/perfschema/t/global_objects-master.opt b/mysql-test/suite/perfschema/t/global_objects-master.opt
new file mode 100644
index 00000000000..b00c11c1247
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/global_objects-master.opt
@@ -0,0 +1 @@
+--loose-performance-schema-instrument='%=OFF'
diff --git a/mysql-test/suite/perfschema/t/global_objects.test b/mysql-test/suite/perfschema/t/global_objects.test
new file mode 100644
index 00000000000..cf041c14b32
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/global_objects.test
@@ -0,0 +1,29 @@
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+--source include/not_windows.inc
+
+# Bug#79784 update setup_instruments do not affect the global
+# mutex/rwlock/cond
+
+# Verify instruments are off by default, per *.opt file
+select count(*) from performance_schema.setup_instruments
+ where enabled='YES'
+ and name like "wait/%";
+
+# Verify that we have instrumented objects
+select count(*) > 0 from performance_schema.mutex_instances;
+select count(*) > 0 from performance_schema.rwlock_instances;
+select count(*) > 0 from performance_schema.cond_instances;
+select count(*) > 0 from performance_schema.socket_instances;
+
+# Check for some known global objects.
+select NAME from performance_schema.mutex_instances
+ where NAME = "wait/synch/mutex/sql/LOCK_gdl";
+select NAME from performance_schema.rwlock_instances
+ where NAME = "wait/synch/rwlock/sql/LOCK_system_variables_hash";
+select NAME from performance_schema.cond_instances
+ where NAME = "wait/synch/cond/sql/COND_server_started";
+select EVENT_NAME from performance_schema.socket_instances
+ where EVENT_NAME = "wait/io/socket/sql/client_connection";
diff --git a/mysql-test/suite/perfschema/t/indexed_table_io.test b/mysql-test/suite/perfschema/t/indexed_table_io.test
index 1a7597113d2..59fe4dd134d 100644
--- a/mysql-test/suite/perfschema/t/indexed_table_io.test
+++ b/mysql-test/suite/perfschema/t/indexed_table_io.test
@@ -13,7 +13,7 @@ drop table if exists test.no_index_tab;
drop table if exists test.index_tab;
--enable_warnings
-let $table_io_select= select COUNT(*)
+let $table_io_select= select SUM(NUMBER_OF_BYTES)
from performance_schema.events_waits_history_long
where event_name like 'wait/io/table/%'
and object_schema = 'test'
@@ -104,7 +104,7 @@ update performance_schema.setup_consumers set enabled='NO';
eval $table_io_select 'index_tab';
# In case of failures, this will tell if table io are lost.
-show status like 'performance_schema_%';
+show global status like 'performance_schema_%';
# Cleanup
drop table test.no_index_tab;
diff --git a/mysql-test/suite/perfschema/t/information_schema.test b/mysql-test/suite/perfschema/t/information_schema.test
index 0152ef21905..937a1b4f61b 100644
--- a/mysql-test/suite/perfschema/t/information_schema.test
+++ b/mysql-test/suite/perfschema/t/information_schema.test
@@ -24,9 +24,21 @@ select lower(TABLE_NAME), VERSION, ROW_FORMAT
where TABLE_SCHEMA='performance_schema'
order by table_name;
+# Query status and system variable tables separately because AVG_ROW_LENGTH
+# depends upon which plugins are loaded at the time of the query.
+#
+# TABLE_ROWS is unpredictable with autoscaling buffers
+select lower(TABLE_NAME), AVG_ROW_LENGTH
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema' and
+ lower(TABLE_NAME) not regexp '^variables|variables$|^status|session_status|global_status'
+ order by table_name;
+
+--replace_column 2 table_rows 3 avg_row_len
select lower(TABLE_NAME), TABLE_ROWS, AVG_ROW_LENGTH
from information_schema.tables
- where TABLE_SCHEMA='performance_schema'
+ where TABLE_SCHEMA='performance_schema' and
+ lower(TABLE_NAME) regexp '^variables|variables$|^status|session_status|global_status'
order by table_name;
select lower(TABLE_NAME), DATA_LENGTH, MAX_DATA_LENGTH
@@ -49,11 +61,10 @@ select lower(TABLE_NAME), TABLE_COLLATION, CHECKSUM
where TABLE_SCHEMA='performance_schema'
order by table_name;
-# TABLESPACE_NAME does not exist in 5.4
-# select lower(TABLE_NAME), CREATE_OPTIONS, TABLESPACE_NAME
-# from information_schema.tables
-# where TABLE_SCHEMA='performance_schema'
-# order by table_name;
+select lower(TABLE_NAME), CREATE_OPTIONS
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema'
+ order by table_name;
select lower(TABLE_NAME), TABLE_COMMENT
from information_schema.tables
diff --git a/mysql-test/suite/perfschema/t/io_cache-master.opt b/mysql-test/suite/perfschema/t/io_cache-master.opt
new file mode 100644
index 00000000000..8f75ada354c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/io_cache-master.opt
@@ -0,0 +1,3 @@
+--binlog_cache_size=4096
+--binlog_stmt_cache_size=4096
+--log-bin=master-bin
diff --git a/mysql-test/suite/perfschema/t/io_cache.test b/mysql-test/suite/perfschema/t/io_cache.test
new file mode 100644
index 00000000000..9da633a5414
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/io_cache.test
@@ -0,0 +1,121 @@
+################## suite/perfschema/t/io_cache.test###################
+# #
+# IO_CACHE is a file I/O caching mechanism that uses temporary files #
+# when the cache overflows. This test verifies that the temporary #
+# files created by the IO_CACHE buffers for the binlog_cache and #
+# binlog_stmt_cache are instrumented. #
+# #
+######################################################################
+
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/no_protocol.inc
+
+--echo
+--echo ## Connection default
+--echo
+--connection default
+--disable_warnings
+USE test;
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+SELECT @@global.binlog_cache_size;
+SELECT @@global.binlog_stmt_cache_size;
+SELECT * FROM performance_schema.setup_instruments WHERE name LIKE "%file/sql/io_cache%";
+
+--echo
+--echo ## Connection con1
+--echo
+connect(con1, localhost, root,,);
+USE test;
+CREATE TABLE t1 (s1 INT, s2 VARCHAR(4096));
+SET SESSION AUTOCOMMIT = 0;
+
+#
+# Force an IO_CACHE overflow and subsequent write to a temporary file.
+#
+START TRANSACTION;
+INSERT INTO t1 VALUES (1,'
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+');
+
+INSERT INTO t1 VALUES (2,'
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+');
+
+INSERT INTO t1 VALUES (3,'
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+');
+
+INSERT INTO t1 VALUES (4,'
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+');
+
+INSERT INTO t1 VALUES (5,'
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+');
+
+INSERT INTO t1 VALUES (6,'
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+');
+
+INSERT INTO t1 VALUES (7,'
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+');
+
+INSERT INTO t1 VALUES (8,'
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+');
+
+COMMIT;
+SELECT COUNT(*) FROM t1;
+--disconnect con1
+
+--echo
+--echo ## Connection default
+--echo
+--connection default
+SELECT COUNT(*) FROM test.t1;
+
+#
+# Verify that IO events on the temporary file.
+#
+SELECT COUNT(*) FROM performance_schema.file_summary_by_event_name WHERE event_name LIKE "%io_cache%";
+
+--connection default
+DROP TABLE t1;
+
+
+
diff --git a/mysql-test/suite/perfschema/t/max_program_zero-master.opt b/mysql-test/suite/perfschema/t/max_program_zero-master.opt
new file mode 100644
index 00000000000..7803f9c5e1b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/max_program_zero-master.opt
@@ -0,0 +1,3 @@
+--loose-performance_schema_max_program_instances=0
+--loose-performance_schema_max_statement_stack=1
+--thread_stack=655360
diff --git a/mysql-test/suite/perfschema/t/max_program_zero.test b/mysql-test/suite/perfschema/t/max_program_zero.test
new file mode 100644
index 00000000000..064ba2ae2d9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/max_program_zero.test
@@ -0,0 +1,48 @@
+#-------------------------------------------------------------
+# Tests for PERFORMANCE_SCHEMA stored programs instrumentation
+#-------------------------------------------------------------
+
+#
+# Test case to show the behaviour of stored program instrumentation
+# when values of the system variables performance_schema_max_program_instances &
+# performance_schema_max_statement_stack are zero.
+# PS table will return empty set
+#
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Values of variables server variables
+show global variables like "performance_schema_max_program_instances";
+show global variables like "performance_schema_max_statement_stack";
+
+--echo #####################
+--echo # Setup
+--echo #####################
+--source suite/perfschema/include/program_nested_setup.inc
+
+# Truncate summary table
+TRUNCATE performance_schema.events_statements_summary_by_program;
+
+--echo #####################
+--echo # Executing Queries
+--echo #####################
+--source suite/perfschema/include/program_nested_execution.inc
+
+--echo ###########################################
+--echo # Quering PS statement summary table #
+--echo ###########################################
+
+SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA
+ FROM performance_schema.events_statements_summary_by_program;
+
+SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_program;
+
+--echo #####################
+--echo # Cleanup
+--echo #####################
+--source suite/perfschema/include/program_nested_cleanup.inc
+
+
diff --git a/mysql-test/suite/perfschema/t/mdl_func.test b/mysql-test/suite/perfschema/t/mdl_func.test
new file mode 100644
index 00000000000..7f422a6e870
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/mdl_func.test
@@ -0,0 +1,479 @@
+--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 in ('wait/io/table/sql/handler',
+ 'wait/lock/table/sql/handler',
+ 'wait/lock/metadata/sql/mdl');
+
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+set sql_mode= @orig_sql_mode;
+
+insert into performance_schema.setup_objects (object_type, object_schema, object_name, enabled, timed)
+ values ('TABLE', 'mtr', '%', 'NO', 'NO');
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+let $user1_tid=`select THREAD_ID from performance_schema.threads where PROCESSLIST_ID=connection_id()`;
+
+--echo # Switch to (con2, localhost, user2, , )
+connect (con2, localhost, user2, , );
+
+let $user2_tid=`select THREAD_ID from performance_schema.threads where PROCESSLIST_ID=connection_id()`;
+
+--connection default
+
+--disable_query_log
+--eval set @user1_tid= $user1_tid;
+--eval set @user2_tid= $user2_tid;
+--enable_query_log
+
+--disable_warnings
+drop function if exists thread_id_name;
+--enable_warnings
+
+--delimiter //
+
+create function thread_id_name(THREAD_ID int)
+returns varchar(16)
+begin
+ if (THREAD_ID IS NULL)
+ then
+ return NULL;
+ end if;
+ if (THREAD_ID = @user1_tid)
+ then
+ return "USER1";
+ end if;
+ if (THREAD_ID = @user2_tid)
+ then
+ return "USER2";
+ end if;
+ return "OTHER";
+end;
+//
+
+delimiter ;//
+
+select thread_id_name(NULL);
+select thread_id_name(@user1_tid);
+select thread_id_name(@user2_tid);
+
+prepare dump_metadata_locks from
+ "select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ LOCK_TYPE, LOCK_DURATION, LOCK_STATUS,
+ thread_id_name(OWNER_THREAD_ID) as OWNER_THREAD_ID
+ from performance_schema.metadata_locks
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ LOCK_TYPE, LOCK_DURATION, LOCK_STATUS, OWNER_THREAD_ID;";
+
+prepare dump_table_handles from
+ "select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ INTERNAL_LOCK, EXTERNAL_LOCK,
+ thread_id_name(OWNER_THREAD_ID) as OWNER_THREAD_ID
+ from performance_schema.table_handles
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME,
+ INTERNAL_LOCK, EXTERNAL_LOCK, OWNER_THREAD_ID;";
+
+prepare dump_waits_current from
+ "select thread_id_name(THREAD_ID) as THREAD_ID,
+ EVENT_NAME,
+ TIMER_START is not NULL as TIMER_START_SET,
+ TIMER_END is not NULL as TIMER_END_SET,
+ OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+ OPERATION
+ from performance_schema.events_waits_current
+ where event_name = \'wait/lock/metadata/sql/mdl\';";
+
+prepare dump_waits_history_long from
+ "select thread_id_name(THREAD_ID) as THREAD_ID,
+ EVENT_NAME,
+ TIMER_START is not NULL as TIMER_START_SET,
+ TIMER_END is not NULL as TIMER_END_SET,
+ OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
+ OPERATION
+ from performance_schema.events_waits_history_long
+ where event_name = \'wait/lock/metadata/sql/mdl\';";
+
+# reset lost counters
+truncate table performance_schema.events_statements_summary_by_digest;
+flush status;
+
+flush tables;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value');
+
+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;
+
+--connection con1
+
+BEGIN;
+
+# MDL lock granted immediately, no wait.
+SELECT * from t1 where id=1;
+
+--connection default
+
+echo "---- Marker 1 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+# The MDL lock is now released
+COMMIT;
+
+--connection default
+
+echo "---- Marker 2 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+BEGIN;
+
+# MDL lock is granted immediately, no wait
+UPDATE t1 set b="new value" where id=2;
+
+--connection default
+
+echo "---- Marker 3 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con2
+
+BEGIN;
+
+# MDL lock is PENDING : waiting for the update transaction
+--send DROP TABLE t1;
+
+--connection default
+
+# Wait for the DROP TABLE t1 to block
+let $wait_condition=
+ select count(*) = 1 from performance_schema.events_waits_current
+ where event_name = 'wait/lock/metadata/sql/mdl'
+ and object_name = 't1';
+--source include/wait_condition.inc
+
+echo "---- Marker 4 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+# MDL lock on the update is released,
+# MDL pending lock is granted for the drop table, then released.
+COMMIT;
+
+--connection con2
+
+# complete DROP TABLE t1
+--reap
+
+--connection default
+
+echo "---- Marker 5 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection default
+
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+create table t1 (a int);
+
+--connection con1
+
+# Get MDL read lock
+LOCK TABLE t1 READ;
+
+--connection default
+
+echo "---- Marker 6 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con2
+
+# User1 has a READ LOCK
+# User2 waiting for WRITE LOCK
+--send LOCK TABLE t1 write;
+
+--connection default
+
+# Wait for the LOCK TABLE t1 write to block
+let $wait_condition=
+ select count(*) = 1 from performance_schema.events_waits_current
+ where event_name = 'wait/lock/metadata/sql/mdl'
+ and object_name = 't1';
+--source include/wait_condition.inc
+
+echo "---- Marker 7 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+# User1 releases a READ LOCK
+# User2 granted a WRITE LOCK
+UNLOCK TABLES;
+
+--connection con2
+
+# Complete LOCK TABLE t1 write
+--reap
+
+--connection default
+
+echo "---- Marker 8 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+# User2 granted a WRITE LOCK
+# User1 waits for a READ LOCK
+--send LOCK TABLES t1 read;
+
+--connection default
+
+# Wait for the LOCK TABLES t1 READ to block
+let $wait_condition=
+ select count(*) = 1 from performance_schema.events_waits_current
+ where event_name = 'wait/lock/metadata/sql/mdl'
+ and object_name = 't1';
+--source include/wait_condition.inc
+
+echo "---- Marker 9 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con2
+
+UNLOCK TABLES;
+
+--connection con1
+
+# Complete LOCK TABLE t1 read
+--reap
+
+--connection default
+
+echo "---- Marker 10 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+UNLOCK TABLES;
+
+--connection default
+
+echo "---- Marker 11 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+--connection con1
+
+BEGIN;
+
+# MDL lock is granted immediately, no wait
+UPDATE LOW_PRIORITY t1 SET a=8;
+
+--connection default
+
+echo "---- Marker 12 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+COMMIT;
+
+--connection default
+
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+
+--connection con1
+
+SELECT GET_LOCK('test', 0);
+
+--connection default
+
+echo "---- Marker 13 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con2
+
+--send SELECT GET_LOCK('test', 120);
+
+--connection default
+
+let $wait_condition=
+ select count(*) = 1 from performance_schema.events_waits_current
+ where event_name = 'wait/lock/metadata/sql/mdl'
+ and object_name = 'test';
+--source include/wait_condition.inc
+
+echo "---- Marker 14 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con1
+
+SELECT RELEASE_LOCK('test');
+
+--connection con2
+
+--reap
+
+--connection default
+
+echo "---- Marker 15 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+--connection con2
+
+SELECT RELEASE_LOCK('test');
+
+--connection default
+
+echo "---- Marker 16 ----";
+
+--vertical_results
+execute dump_metadata_locks;
+execute dump_table_handles;
+execute dump_waits_current;
+execute dump_waits_history_long;
+--horizontal_results
+
+# Cleanup
+
+--disconnect con1
+--disconnect con2
+
+--connection default
+
+drop table t1;
+
+UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
+
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+
+drop user user1@localhost;
+drop user user2@localhost;
+
+drop function thread_id_name;
+
+drop prepare dump_metadata_locks;
+drop prepare dump_table_handles;
+drop prepare dump_waits_current;
+drop prepare dump_waits_history_long;
+
+delete from performance_schema.setup_objects
+ where object_schema='mtr';
+
+# In case of failure, will indicate the root cause
+show global status like "performance_schema%";
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate-master.opt
new file mode 100644
index 00000000000..cd2044483ef
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate-master.opt
@@ -0,0 +1 @@
+--query_cache_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate.test b/mysql-test/suite/perfschema/t/memory_aggregate.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_32bit-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_32bit-master.opt
new file mode 100644
index 00000000000..cd2044483ef
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_32bit-master.opt
@@ -0,0 +1 @@
+--query_cache_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_32bit.test b/mysql-test/suite/perfschema/t/memory_aggregate_32bit.test
new file mode 100644
index 00000000000..abd16212acc
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_32bit.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_32bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_a-master.opt
new file mode 100644
index 00000000000..0cdab7054d8
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a-master.opt
@@ -0,0 +1,2 @@
+--query_cache_size=0
+--loose-performance_schema_accounts_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_a.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h-master.opt
new file mode 100644
index 00000000000..30b8ed74c88
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h-master.opt
@@ -0,0 +1,3 @@
+--query_cache_size=0
+--loose-performance_schema_accounts_size=0
+--loose-performance_schema_hosts_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_h.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u-master.opt
new file mode 100644
index 00000000000..b0629a513c0
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u-master.opt
@@ -0,0 +1,3 @@
+--query_cache_size=0
+--loose-performance_schema_accounts_size=0
+--loose-performance_schema_users_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h-master.opt
new file mode 100644
index 00000000000..89df63a3251
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h-master.opt
@@ -0,0 +1,4 @@
+--query_cache_size=0
+--loose-performance_schema_accounts_size=0
+--loose-performance_schema_users_size=0
+--loose-performance_schema_hosts_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_a_no_u_no_h.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_h-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_h-master.opt
new file mode 100644
index 00000000000..d630f88b87a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_h-master.opt
@@ -0,0 +1,2 @@
+--query_cache_size=0
+--loose-performance_schema_hosts_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_h.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_h.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_h.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_u-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_u-master.opt
new file mode 100644
index 00000000000..0d4faa03cd1
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_u-master.opt
@@ -0,0 +1,2 @@
+--query_cache_size=0
+--loose-performance_schema_users_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_u.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_u.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_u.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h-master.opt b/mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h-master.opt
new file mode 100644
index 00000000000..2a23af9d390
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h-master.opt
@@ -0,0 +1,3 @@
+--query_cache_size=0
+--loose-performance_schema_users_size=0
+--loose-performance_schema_hosts_size=0
diff --git a/mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h.test b/mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h.test
new file mode 100644
index 00000000000..a77dae2a65f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/memory_aggregate_no_u_no_h.test
@@ -0,0 +1,7 @@
+# Tests for the performance schema
+#
+--source include/have_64bit.inc
+--source ../include/memory_aggregate_setup.inc
+--source ../include/memory_aggregate_load.inc
+--source ../include/memory_aggregate_cleanup.inc
+
diff --git a/mysql-test/suite/perfschema/t/misc.test b/mysql-test/suite/perfschema/t/misc.test
index 80ce64f0302..b30722743b3 100644
--- a/mysql-test/suite/perfschema/t/misc.test
+++ b/mysql-test/suite/perfschema/t/misc.test
@@ -156,7 +156,7 @@ DELETE FROM t_60905 WHERE i = 1;
# should delete with a full scan (5 NULL fetch, 1 NULL delete)
DELETE FROM t_60905 WHERE j = 8;
-# show the instrument data
+# show the instrument data.
SELECT object_schema,
object_name,
index_name,
@@ -170,6 +170,23 @@ SELECT object_schema,
DROP TABLE t_60905;
+#
+# Bug#71278 NUMBER OF ROWS IN PERFORMANCE SCHEMA TABLES
+#
+
+show global variables like "performance_schema_max_thread_instances";
+explain select * from performance_schema.threads;
+
+#
+# Bug #73082 SHOW EVENTS in performance_schema gives Access Denied
+#
+
+use performance_schema;
+show events;
+show events from performance_schema;
+show events where Db= 'performance_schema';
+use test;
+
#
# Bug#11929832 - EVENTS_STATEMENTS_HISTORY HAS ERRORS=0 WHEN THERE ARE ERRORS
diff --git a/mysql-test/suite/perfschema/t/myisam_file_io.test b/mysql-test/suite/perfschema/t/myisam_file_io.test
index 3b6a1369ab5..96f24d8a835 100644
--- a/mysql-test/suite/perfschema/t/myisam_file_io.test
+++ b/mysql-test/suite/perfschema/t/myisam_file_io.test
@@ -51,7 +51,7 @@ select event_name,
order by thread_id, event_id;
# In case of failures, this will tell if file io are lost.
-show status like 'performance_schema_%';
+show global status like 'performance_schema_%';
# Cleanup
diff --git a/mysql-test/suite/perfschema/t/nesting.test b/mysql-test/suite/perfschema/t/nesting.test
index d0547d8a932..dd8b6f6154a 100644
--- a/mysql-test/suite/perfschema/t/nesting.test
+++ b/mysql-test/suite/perfschema/t/nesting.test
@@ -1,5 +1,8 @@
# Test to check the proper nesting of events
+## To skip the test with QC enabled till BUG#14830950 is fixed.
+#-- source include/have_QC_Disabled.inc
+
--source include/not_embedded.inc
--source include/have_perfschema.inc
# On windows, the socket instrumentation collects an extra "opt"
@@ -40,6 +43,7 @@ update performance_schema.setup_instruments set enabled='YES', timed='YES'
'wait/synch/rwlock/sql/LOCK_grant',
'wait/synch/mutex/sql/THD::LOCK_thd_data',
'wait/synch/mutex/sql/THD::LOCK_thd_kill',
+ 'wait/synch/mutex/sql/THD::LOCK_thd_query',
'wait/io/file/sql/query_log');
update performance_schema.setup_instruments set enabled='YES', timed='YES'
@@ -105,7 +109,7 @@ set @marker_end = (select end_event_id from performance_schema.events_statements
select (@marker_end is not null) as expected;
# Will point to what happened on spurious test failures
-show status like "performance_schema%";
+show global status like "performance_schema%";
#
# This is the test itself:
@@ -183,5 +187,3 @@ update performance_schema.threads set instrumented='YES';
update performance_schema.setup_instruments set enabled='YES', timed='YES';
--enable_query_log
-
-
diff --git a/mysql-test/suite/perfschema/t/no_threads-master.opt b/mysql-test/suite/perfschema/t/no_threads-master.opt
index 64275d009d4..eea71a77864 100644
--- a/mysql-test/suite/perfschema/t/no_threads-master.opt
+++ b/mysql-test/suite/perfschema/t/no_threads-master.opt
@@ -1 +1,5 @@
---thread-handling=no-threads --loose-performance-schema-max-thread_instances=10 --default-storage-engine=MyISAM --skip-innodb
+--thread-handling=no-threads
+--loose-performance-schema-max-thread_instances=50
+--default-storage-engine=MyISAM
+--default-tmp-storage-engine=MyISAM
+--loose-skip-innodb
diff --git a/mysql-test/suite/perfschema/t/no_threads.test b/mysql-test/suite/perfschema/t/no_threads.test
index ee745bd87b0..3cf9a9e3126 100644
--- a/mysql-test/suite/perfschema/t/no_threads.test
+++ b/mysql-test/suite/perfschema/t/no_threads.test
@@ -20,14 +20,17 @@ 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";
+show global variables like "thread_handling";
+
+# Make sure no thread instrumentation is lost
+show status like "Performance_schema_thread_instances_lost";
# 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%";
+show global variables like "performance_schema";
+show global variables like "performance_schema_max_thread%";
# Verification : in this main thread
diff --git a/mysql-test/suite/perfschema/t/one_thread_per_con.test b/mysql-test/suite/perfschema/t/one_thread_per_con.test
index 6aeec55dbb5..7a66cd2088f 100644
--- a/mysql-test/suite/perfschema/t/one_thread_per_con.test
+++ b/mysql-test/suite/perfschema/t/one_thread_per_con.test
@@ -24,7 +24,7 @@ drop table if exists test.t3;
truncate table performance_schema.events_waits_history_long;
-show variables like "thread_handling";
+show global variables like "thread_handling";
# Code to test
diff --git a/mysql-test/suite/perfschema/t/ortho_iter.test b/mysql-test/suite/perfschema/t/ortho_iter.test
index f7e68538906..fe1d916b6a0 100644
--- a/mysql-test/suite/perfschema/t/ortho_iter.test
+++ b/mysql-test/suite/perfschema/t/ortho_iter.test
@@ -3,6 +3,7 @@
# for every table and instruments.
--source include/not_embedded.inc
+--source include/no_valgrind_without_big.inc
--source include/have_perfschema.inc
--disable_warnings
@@ -13,17 +14,39 @@ drop procedure if exists check_instrument;
truncate table performance_schema.events_statements_summary_by_digest;
flush status;
+# Print known global memory instruments (PSI_FLAG_GLOBAL),
+# see maintenance of count_global_expected below.
+
+# --echo "Known PSI_FLAG_GLOBAL memory instruments"
+# select name from performance_schema.setup_instruments
+# where (name like "memory/%")
+# and (name not like "memory/performance_schema/%")
+# and (name not in
+# (select event_name from
+# performance_schema.memory_summary_by_account_by_event_name));
+
delimiter $;
create procedure check_instrument(in instr_name varchar(128))
begin
+ declare save_count_expected integer;
declare count_expected integer;
- declare count_actual integer;
+ declare count_builtin_expected integer;
+ declare count_global_expected integer;
declare is_wait integer;
+ declare is_wait_file integer;
+ declare is_wait_socket integer;
declare is_stage integer;
declare is_statement integer;
+ declare is_transaction integer;
+ declare is_memory integer;
declare is_wait_table integer;
+ declare is_wait_file_table integer;
+ declare is_wait_socket_table integer;
declare is_stage_table integer;
declare is_statement_table integer;
+ declare is_transaction_table integer;
+ declare is_memory_table integer;
+ declare is_memory_global_table integer;
declare pfs_table_name varchar(64);
declare msg varchar(512);
declare msg_detail varchar(512);
@@ -35,23 +58,59 @@ begin
declare pfs_cursor CURSOR FOR
select table_name from information_schema.tables
where table_schema= 'performance_schema'
- and table_name like "events_%_by_event_name%"
+ and table_name like "%_by_event_name%"
order by table_name;
declare continue handler for sqlstate '02000'
set done = 1;
- select (instr_name like "wait/%") or (instr_name like "idle/%") into is_wait;
+ select (instr_name like "wait/%") or (instr_name like "idle") into is_wait;
+ select (instr_name like "wait/io/file/%") into is_wait_file;
+ select (instr_name like "wait/io/socket/%") into is_wait_socket;
select (instr_name like "stage/%") into is_stage;
select (instr_name like "statement/%") into is_statement;
+ select (instr_name like "memory/%") into is_memory;
+ select (instr_name like "transaction") into is_transaction;
- select instr_name, is_wait, is_stage, is_statement;
+ select instr_name, is_wait, is_wait_file, is_wait_socket, is_stage, is_statement, is_memory, is_transaction;
select count(name)
from performance_schema.setup_instruments
where (name like (concat(instr_name, "%")))
and (not name like "%/abstract/%")
- into count_expected;
+ and (not name like "memory/performance_schema/%")
+ into save_count_expected;
+
+ select count(name)
+ from performance_schema.setup_instruments
+ where (name like (concat(instr_name, "%")))
+ and (name like "memory/performance_schema/%")
+ into count_builtin_expected;
+
+ select count(name)
+ from performance_schema.setup_instruments
+ where (name like (concat(instr_name, "%")))
+ and (name in (
+ "memory/sql/buffered_logs",
+ "memory/sql/sql_acl_mem",
+ "memory/sql/sql_acl_memex",
+ "memory/sql/acl_cache",
+ "memory/sql/TABLE_SHARE::mem_root",
+ "memory/sql/TABLE",
+ "memory/sql/Query_cache",
+ "memory/sql/native_functions",
+ "memory/sql/Event_basic::mem_root",
+ "memory/sql/root",
+ "memory/sql/load_env_plugins",
+ "memory/sql/plugin_ref",
+ "memory/sql/plugin_mem_root",
+ "memory/sql/plugin_bookmark",
+ "memory/csv/TINA_SHARE",
+ "memory/sql/tz_storage",
+ "memory/sql/servers_cache",
+ "memory/sql/udf_mem"
+ ))
+ into count_global_expected;
set cmd_1= "select count(*) from (select distinct event_name from performance_schema.";
set cmd_2= concat(" where event_name like \"",
@@ -63,8 +122,25 @@ begin
fetch pfs_cursor into pfs_table_name;
if not done then
select (pfs_table_name like "%waits%") into is_wait_table;
+ select (pfs_table_name like "file_summary%") into is_wait_file_table;
+ select (pfs_table_name like "socket_summary%") into is_wait_socket_table;
select (pfs_table_name like "%stages%") into is_stage_table;
select (pfs_table_name like "%statements%") into is_statement_table;
+ select (pfs_table_name like "%memory%") into is_memory_table;
+ select (pfs_table_name like "memory_summary_global_by_event_name") into is_memory_global_table;
+ select (pfs_table_name like "%transaction%") into is_transaction_table;
+
+ set count_expected = save_count_expected;
+
+ if is_memory_global_table
+ then
+ set count_expected = save_count_expected + count_builtin_expected;
+ end if;
+
+ if is_memory_table = 1 and is_memory_global_table = 0
+ then
+ set count_expected = save_count_expected - count_global_expected;
+ end if;
select concat("Checking table ", pfs_table_name, " ...") as status;
select concat(cmd_1, pfs_table_name, cmd_2) into @cmd;
@@ -79,40 +155,112 @@ begin
", instruments ", count_expected,
", found ", @count_actual);
- if is_wait = 1 and is_wait_table = 1 and @count_actual <> count_expected
+ if is_wait = 1
then
- set msg= concat("Missing wait events: ", msg_detail);
- signal sqlstate '05000' set message_text= msg;
+ if is_wait_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing wait events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_wait_table = 0
+ and is_wait_file_table = 0
+ and is_wait_socket_table = 0
+ and @count_actual <> 0
+ then
+ set msg= concat("Unexpected wait events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
end if;
- if is_wait = 1 and is_wait_table = 0 and @count_actual <> 0
+ if is_wait_file = 1
then
- set msg= concat("Unexpected wait events: ", msg_detail);
- signal sqlstate '05000' set message_text= msg;
+ if is_wait_file_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing wait/io/file events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_wait_table = 0 and is_wait_file_table = 0 and @count_actual <> 0
+ then
+ set msg= concat("Unexpected wait/io/file events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
end if;
- if is_stage = 1 and is_stage_table = 1 and @count_actual <> count_expected
+ if is_wait_socket = 1
then
- set msg= concat("Missing stage events: ", msg_detail);
- signal sqlstate '05000' set message_text= msg;
+ if is_wait_socket_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing wait/io/socket events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_wait_table = 0 and is_wait_socket_table = 0 and @count_actual <> 0
+ then
+ set msg= concat("Unexpected wait/io/socket events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
end if;
- if is_stage = 1 and is_stage_table = 0 and @count_actual <> 0
+ if is_stage = 1
then
- set msg= concat("Unexpected stage events: ", msg_detail);
- signal sqlstate '05000' set message_text= msg;
+ if is_stage_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing stage events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_stage_table = 0 and @count_actual <> 0
+ then
+ set msg= concat("Unexpected stage events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
end if;
- if is_statement = 1 and is_statement_table = 1 and @count_actual <> count_expected
+ if is_statement = 1
then
- set msg= concat("Missing statement events: ", msg_detail);
- signal sqlstate '05000' set message_text= msg;
+ if is_statement_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing statement events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_statement_table = 0 and @count_actual <> 0
+ then
+ set msg= concat("Unexpected statement events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+ end if;
+
+ if is_memory = 1
+ then
+ if is_memory_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing memory events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_memory_table = 0 and @count_actual <> 0
+ then
+ set msg= concat("Unexpected memory events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
end if;
- if is_statement = 1 and is_statement_table = 0 and @count_actual <> 0
+ if is_transaction = 1
then
- set msg= concat("Unexpected statement events: ", msg_detail);
- signal sqlstate '05000' set message_text= msg;
+ if is_transaction_table = 1 and @count_actual <> count_expected
+ then
+ set msg= concat("Missing transaction events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
+
+ if is_transaction_table = 0 and @count_actual <> 0
+ then
+ set msg= concat("Unexpected transaction events: ", msg_detail);
+ signal sqlstate '05000' set message_text= msg;
+ end if;
end if;
end if;
@@ -127,16 +275,15 @@ $
delimiter ;$
# Check the configuration is ok
-show variables where
- `Variable_name` != "performance_schema_max_statement_classes" and
- `Variable_name` like "performance_schema%";
+show global variables like "performance_schema%";
call check_instrument("wait/synch/mutex/");
call check_instrument("wait/synch/rwlock/");
+call check_instrument("wait/synch/sxlock/");
call check_instrument("wait/synch/cond/");
call check_instrument("wait/synch/");
call check_instrument("wait/io/file/");
-call check_instrument("wait/io/net/");
+call check_instrument("wait/io/socket/");
call check_instrument("wait/io/table/");
call check_instrument("wait/io/");
call check_instrument("wait/lock/table/");
@@ -147,8 +294,10 @@ call check_instrument("statement/com/");
call check_instrument("statement/sql/");
call check_instrument("statement/abstract/");
call check_instrument("statement/");
-call check_instrument("idle/io/socket");
-call check_instrument("idle/");
+call check_instrument("idle");
+call check_instrument("memory/");
+call check_instrument("memory/performance_schema/");
+call check_instrument("transaction");
drop procedure check_instrument;
diff --git a/mysql-test/suite/perfschema/t/pfs_upgrade_event-master.opt b/mysql-test/suite/perfschema/t/pfs_upgrade_event-master.opt
new file mode 100644
index 00000000000..275a585d298
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/pfs_upgrade_event-master.opt
@@ -0,0 +1,2 @@
+--general_log=0
+--slow_query_log=0
diff --git a/mysql-test/suite/perfschema/t/pfs_upgrade_func-master.opt b/mysql-test/suite/perfschema/t/pfs_upgrade_func-master.opt
new file mode 100644
index 00000000000..275a585d298
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/pfs_upgrade_func-master.opt
@@ -0,0 +1,2 @@
+--general_log=0
+--slow_query_log=0
diff --git a/mysql-test/suite/perfschema/t/pfs_upgrade_proc-master.opt b/mysql-test/suite/perfschema/t/pfs_upgrade_proc-master.opt
new file mode 100644
index 00000000000..275a585d298
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/pfs_upgrade_proc-master.opt
@@ -0,0 +1,2 @@
+--general_log=0
+--slow_query_log=0
diff --git a/mysql-test/suite/perfschema/t/pfs_upgrade_table-master.opt b/mysql-test/suite/perfschema/t/pfs_upgrade_table-master.opt
new file mode 100644
index 00000000000..275a585d298
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/pfs_upgrade_table-master.opt
@@ -0,0 +1,2 @@
+--general_log=0
+--slow_query_log=0
diff --git a/mysql-test/suite/perfschema/t/pfs_upgrade_view-master.opt b/mysql-test/suite/perfschema/t/pfs_upgrade_view-master.opt
new file mode 100644
index 00000000000..275a585d298
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/pfs_upgrade_view-master.opt
@@ -0,0 +1,2 @@
+--general_log=0
+--slow_query_log=0
diff --git a/mysql-test/suite/perfschema/t/pool_of_threads-master.opt b/mysql-test/suite/perfschema/t/pool_of_threads-master.opt
deleted file mode 100644
index 75a5cd77203..00000000000
--- a/mysql-test/suite/perfschema/t/pool_of_threads-master.opt
+++ /dev/null
@@ -1 +0,0 @@
---loose-pool-of-threads
diff --git a/mysql-test/suite/perfschema/t/prepared_statements.test b/mysql-test/suite/perfschema/t/prepared_statements.test
new file mode 100644
index 00000000000..75d10238ac1
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/prepared_statements.test
@@ -0,0 +1,210 @@
+# Test for prepared statement instrumentation
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+CREATE DATABASE db;
+USE db;
+
+--let $psi_select = SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
+--let $psi_truncate = TRUNCATE TABLE performance_schema.prepared_statements_instances
+--let $eshl_select = SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db'
+--let $eshl_truncate = TRUNCATE TABLE performance_schema.events_statements_history_long
+
+--eval $psi_truncate
+--eval $eshl_truncate
+
+--source suite/perfschema/include/prepared_stmts_setup.inc
+
+--vertical_results
+--eval $psi_select
+--eval $eshl_select
+--horizontal_results
+
+--source suite/perfschema/include/prepared_stmts_execution.inc
+
+--vertical_results
+--eval $psi_select
+--eval $eshl_select
+--horizontal_results
+
+# Truncate to reset the statistics
+--eval $psi_truncate
+
+# check whether the statistics are reset
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+--source suite/perfschema/include/prepared_stmts_deallocation.inc
+
+--vertical_results
+# select query on prepared_statements_instances table must return empty set
+--eval $psi_select
+--eval $eshl_select
+--horizontal_results
+
+# truncate
+--eval $eshl_truncate
+
+#
+# Test to check the instrumentation of prepared statements
+# when all consumers in setup_consumers are disabled.
+#
+
+# Disable all consumers
+UPDATE performance_schema.setup_consumers SET ENABLED = 'NO';
+
+--source suite/perfschema/include/prepared_stmts_setup.inc
+
+--vertical_results
+--eval $psi_select
+--eval $eshl_select
+--horizontal_results
+
+--source suite/perfschema/include/prepared_stmts_execution.inc
+
+--vertical_results
+--eval $psi_select
+--eval $eshl_select
+--horizontal_results
+
+--source suite/perfschema/include/prepared_stmts_deallocation.inc
+
+--vertical_results
+--eval $psi_select
+--eval $eshl_select
+--horizontal_results
+
+# truncate
+--eval $eshl_truncate
+
+# restore the initial set-up of consumers table
+UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
+
+#
+# Aggregation
+#
+
+PREPARE st FROM 'SELECT SUM(1000 + ?) AS total';
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+SET @d=100;
+EXECUTE st USING @d;
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+let $i=5;
+while($i)
+{
+ SET @d = @d + 100;
+ EXECUTE st USING @d;
+ --vertical_results
+ --eval $psi_select
+ --horizontal_results
+ dec $i;
+}
+
+# truncate
+--eval $psi_truncate
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+#
+# check whether the instrumented prepared statement is removed from the
+# prepared_statement_instances table after de allocation of the prepared
+# statement even if instrumentation is disabled
+#
+
+# Disable prepared statement instrumentation
+UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
+ WHERE NAME like "statement/sql/execute%";
+
+SET @d=3274;
+# COUNT_EXECUTE should remain 0. No increment must be seen.
+EXECUTE st USING @d;
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
+ WHERE NAME like "statement/sql/prepare%";
+
+DEALLOCATE PREPARE st;
+# should return empty set.
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+# Restore back teh initial set-up of setup_instruments table
+
+UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
+ WHERE NAME like "statement/sql/prepare%";
+UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
+ WHERE NAME like "statement/sql/execute%";
+
+
+# Reprepare
+
+CREATE TABLE tab(
+ Id INT,
+ name CHAR(10),
+ age INT
+);
+
+INSERT INTO tab VALUES(1,"Nakshatr",25),(2,"chanda",24),(3,"tejas",78);
+
+PREPARE st FROM 'SELECT * FROM tab';
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+EXECUTE st;
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+ALTER TABLE tab DROP COLUMN age;
+
+EXECUTE st;
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+ALTER TABLE tab ADD COLUMN age INT NULL;
+
+EXECUTE st;
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+# check if the statistics are reset
+--eval $psi_truncate
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+DEALLOCATE PREPARE st;
+
+--vertical_results
+--eval $psi_select
+--horizontal_results
+
+# clean up
+# truncate
+--eval $psi_truncate
+--eval $eshl_truncate
+
+DROP TABLE tab;
+DROP DATABASE db;
diff --git a/mysql-test/suite/perfschema/t/prepared_stmts_by_stored_programs.test b/mysql-test/suite/perfschema/t/prepared_stmts_by_stored_programs.test
new file mode 100644
index 00000000000..bf81d036c2d
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/prepared_stmts_by_stored_programs.test
@@ -0,0 +1,151 @@
+# Test to check instrumentation of prepared statements created by
+# stored programs. SQL prepared statements (PREPARE, EXECUTE, DEALLOCATE PREPARE)
+# can be used in stored procedures, but not stored functions or triggers.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+--let $psi_select = SELECT STATEMENT_NAME, SQL_TEXT, COUNT_EXECUTE, COUNT_REPREPARE, OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME FROM performance_schema.prepared_statements_instances
+TRUNCATE TABLE performance_schema.prepared_statements_instances;
+
+CREATE DATABASE db;
+USE db;
+
+CREATE TABLE t
+(
+ a INT,
+ b CHAR(10),
+ name CHAR(10)
+);
+SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
+INSERT INTO t VALUES (1,"kuchipudi","Vempati");
+INSERT INTO t VALUES (2,"odissi","Mohapatra");
+INSERT INTO t VALUES (3,"kathak","Maharaj");
+INSERT INTO t VALUES (4,"mohiyattam","Kalyanikutty");
+INSERT INTO t VALUES (5,"manipuri","Guru");
+INSERT INTO t VALUES (6,"kathakali","Manavedan");
+SET sql_mode= default;
+# Stored Procedure
+DELIMITER |;
+CREATE PROCEDURE p1()
+BEGIN
+ PREPARE st FROM 'SELECT * FROM t WHERE a<=?' ;
+ SET @a=3;
+ EXECUTE st using @a;
+END|
+
+CALL p1()|
+--eval $psi_select
+
+DEALLOCATE PREPARE st|
+--eval $psi_select
+
+CREATE PROCEDURE p2()
+BEGIN
+ PREPARE st1 FROM 'INSERT INTO t SELECT * FROM t WHERE a<=?' ;
+END|
+
+CALL p2()|
+--eval $psi_select
+
+SET @a=4|
+EXECUTE st1 using @a|
+--eval $psi_select
+
+CREATE PROCEDURE p3()
+BEGIN
+ SET @a=2;
+ EXECUTE st1 using @a;
+END|
+
+CALL p3()|
+--eval $psi_select
+
+DEALLOCATE PREPARE st1|
+--eval $psi_select
+
+PREPARE st2 FROM 'UPDATE t SET a=a+1 WHERE b=?'|
+--eval $psi_select
+
+CREATE PROCEDURE p4()
+BEGIN
+ SET @b='kuchipudi';
+ EXECUTE st2 USING @b;
+END|
+
+CALL p4()|
+--eval $psi_select
+
+ALTER TABLE t DROP COLUMN name;
+
+# COUNT_REPREPARE must be 1
+CALL p4()|
+--eval $psi_select
+
+DEALLOCATE PREPARE st2|
+--eval $psi_select
+
+CREATE PROCEDURE p5()
+BEGIN
+ SET @a=1;
+ SELECT @a;
+END|
+
+PREPARE st3 FROM 'CALL p5()'|
+--eval $psi_select
+EXECUTE st3|
+--eval $psi_select
+DEALLOCATE PREPARE st3|
+--eval $psi_select
+
+DELIMITER ;|
+
+# Events
+
+CREATE TABLE tab(a INT);
+
+SET GLOBAL event_scheduler=ON;
+
+DELIMITER |;
+CREATE EVENT e1 ON SCHEDULE EVERY 10 HOUR DO
+BEGIN
+ PREPARE st FROM 'INSERT INTO tab VALUES(?)';
+ SET @a=1;
+ EXECUTE st USING @a;
+END|
+
+DELIMITER ;|
+
+# Let e1 insert 1 records into the table tab
+
+--let $wait_condition= select count(*) >= 1 from tab
+--source include/wait_condition.inc
+SELECT * FROM tab LIMIT 1;
+
+# Wait till the above one execution of event is instrumented.
+
+--let $wait_condition= select count_star >= 1 from performance_schema.events_statements_summary_by_program where object_type='EVENT'
+--source include/wait_condition.inc
+
+SET GLOBAL event_scheduler=OFF;
+--source include/no_running_event_scheduler.inc
+
+# The following should return empty set as the instrumented prepared statement
+# row is removed as de allocation of the statement happens automatically as
+# event thread is cleaned up.
+--eval $psi_select
+
+# clean-up
+TRUNCATE TABLE performance_schema.prepared_statements_instances;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+DROP TABLE t;
+DROP TABLE tab;
+DROP PROCEDURE p1;
+DROP PROCEDURE p2;
+DROP PROCEDURE p3;
+DROP PROCEDURE p4;
+DROP PROCEDURE p5;
+DROP EVENT IF EXISTS e1;
+DROP DATABASE db;
diff --git a/mysql-test/suite/perfschema/t/privilege.test b/mysql-test/suite/perfschema/t/privilege.test
index 0e51d161934..a0af41e0372 100644
--- a/mysql-test/suite/perfschema/t/privilege.test
+++ b/mysql-test/suite/perfschema/t/privilege.test
@@ -336,3 +336,15 @@ UPDATE performance_schema.setup_consumers SET enabled = 'YES';
UPDATE performance_schema.setup_timers SET timer_name = 'MICROSECOND' where name="idle";
UPDATE performance_schema.setup_timers SET timer_name = 'NANOSECOND' where name="stage";
UPDATE performance_schema.setup_timers SET timer_name = 'NANOSECOND' where name="statement";
+
+--echo #
+--echo # WL#2284: Increase the length of a user name
+--echo #
+
+CREATE USER 'user_name_len_22_01234'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+GRANT ALL ON performance_schema.* TO 'user_name_len_22_01234'@localhost with GRANT OPTION;
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_name_len_22_01234'@localhost;
+DROP USER 'user_name_len_22_01234'@localhost;
diff --git a/mysql-test/suite/perfschema/t/privilege_table_io.test b/mysql-test/suite/perfschema/t/privilege_table_io.test
index a74805f5c7b..1265b03b503 100644
--- a/mysql-test/suite/perfschema/t/privilege_table_io.test
+++ b/mysql-test/suite/perfschema/t/privilege_table_io.test
@@ -40,10 +40,8 @@ insert into test.marker set a = 1;
# This will not, the ACL cache is already loaded
insert into test.marker set a = 1;
insert into test.marker set a = 1;
-show variables where
- `Variable_name` != "performance_schema_max_statement_classes" and
- `Variable_name` like "performance_schema%";
-show status like "performance_schema%";
+show global variables like "performance_schema%";
+show global status like "performance_schema%";
# Stop recording events + pull results
let $schema_to_dump= "test", "mysql";
--source ../include/table_io_result_helper.inc
diff --git a/mysql-test/suite/perfschema/t/query_cache.test b/mysql-test/suite/perfschema/t/query_cache.test
index 4c130813611..d5e3008d3af 100644
--- a/mysql-test/suite/perfschema/t/query_cache.test
+++ b/mysql-test/suite/perfschema/t/query_cache.test
@@ -24,33 +24,33 @@ flush status;
select * from t1;
-show status like "Qcache_queries_in_cache";
-show status like "Qcache_inserts";
-show status like "Qcache_hits";
+show global status like "Qcache_queries_in_cache";
+show global status like "Qcache_inserts";
+show global status like "Qcache_hits";
select * from t1;
-show status like "Qcache_queries_in_cache";
-show status like "Qcache_inserts";
-show status like "Qcache_hits";
+show global status like "Qcache_queries_in_cache";
+show global status like "Qcache_inserts";
+show global status like "Qcache_hits";
select spins from performance_schema.events_waits_current order by event_name limit 1;
--replace_result CYCLE {CYCLE_OR_NANOSECOND} NANOSECOND {CYCLE_OR_NANOSECOND}
select * from performance_schema.setup_timers where name='wait';
-show status like "Qcache_queries_in_cache";
-show status like "Qcache_inserts";
-show status like "Qcache_hits";
+show global status like "Qcache_queries_in_cache";
+show global status like "Qcache_inserts";
+show global status like "Qcache_hits";
select spins from performance_schema.events_waits_current order by event_name limit 1;
--replace_result CYCLE {CYCLE_OR_NANOSECOND} NANOSECOND {CYCLE_OR_NANOSECOND}
select * from performance_schema.setup_timers where name='wait';
-show status like "Qcache_queries_in_cache";
-show status like "Qcache_inserts";
-show status like "Qcache_hits";
+show global status like "Qcache_queries_in_cache";
+show global status like "Qcache_inserts";
+show global status like "Qcache_hits";
SET GLOBAL query_cache_size=@save_query_cache_size;
diff --git a/mysql-test/suite/perfschema/t/read_only.test b/mysql-test/suite/perfschema/t/read_only.test
index 0020c64937b..2d8e41595d1 100644
--- a/mysql-test/suite/perfschema/t/read_only.test
+++ b/mysql-test/suite/perfschema/t/read_only.test
@@ -6,6 +6,7 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
+--enable_connect_log
use performance_schema;
@@ -26,6 +27,7 @@ connection con1;
select @@global.read_only;
show grants;
--disable_result_log
+--echo # Update on perf_schema is allowed in read_only mode.
select * from performance_schema.setup_instruments;
update performance_schema.setup_instruments set enabled='NO';
update performance_schema.setup_instruments set enabled='YES';
@@ -49,7 +51,7 @@ update performance_schema.setup_instruments set enabled='YES';
connection default;
-grant super on *.* to pfsuser@localhost;
+grant READ_ONLY ADMIN on *.* to pfsuser@localhost;
flush privileges;
disconnect con1;
diff --git a/mysql-test/suite/perfschema/t/rpl_group_member_stats.test b/mysql-test/suite/perfschema/t/rpl_group_member_stats.test
new file mode 100644
index 00000000000..256c6a69c26
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/rpl_group_member_stats.test
@@ -0,0 +1,48 @@
+# WL#6839 - GCS Replication: P_S table to show DBSM stats
+#
+# This test proofs the existence of the replication_group_member_stats table
+# and all its fields. Since the table only returns values if the plugin is
+# loaded, all queries will return "No such row" or "0"
+#
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--let $member_id= query_get_value(SELECT Member_Id from performance_schema.replication_group_member_stats, Member_Id, 1)
+--let $assert_text= The value of member_id should not be present
+--let $assert_cond= "$member_id" = "No such row"
+--source include/assert.inc
+
+--let $view_id= query_get_value(SELECT View_Id from performance_schema.replication_group_member_stats, View_Id, 1)
+--let $assert_text= The value of view_id should not be present
+--let $assert_cond= "$View_Id" = "No such row"
+--source include/assert.inc
+
+--let $transaction_in_queue= query_get_value(SELECT Count_Transactions_in_queue from performance_schema.replication_group_member_stats, Count_Transactions_in_queue, 1)
+--let $assert_text= The value of Count_Transactions_in_queue should be 0
+--let $assert_cond= "$transaction_in_queue" = 0
+--source include/assert.inc
+
+--let $certified_transactions= query_get_value(SELECT Count_Transactions_checked from performance_schema.replication_group_member_stats, Count_Transactions_checked, 1)
+--let $assert_text= The value of Count_Transactions_checked should be 0
+--let $assert_cond= "$certified_transactions" = 0
+--source include/assert.inc
+
+--let $negatively_certified= query_get_value(SELECT Count_conflicts_detected from performance_schema.replication_group_member_stats, Count_conflicts_detected, 1)
+--let $assert_text= The value of Count_conflicts_detected should be 0
+--let $assert_cond= "$negatively_certified" = 0
+--source include/assert.inc
+
+--let $certification_db_size= query_get_value(SELECT Count_Transactions_rows_validating from performance_schema.replication_group_member_stats, Count_Transactions_rows_validating, 1)
+--let $assert_text= The value of Count_Transactions_rows_validating should be 0
+--let $assert_cond= "$certification_db_size" = 0
+--source include/assert.inc
+
+--let $stable_set= query_get_value(SELECT Transactions_Committed_all_members from performance_schema.replication_group_member_stats, Transactions_Committed_all_members, 1)
+--let $assert_text= The value of Transactions_Committed_all_members should be 0
+--let $assert_cond= "$stable_set" = 0
+--source include/assert.inc
+
+--let $last_certified_transaction= query_get_value(SELECT Last_conflict_free_transaction from performance_schema.replication_group_member_stats, Last_conflict_free_transaction, 1)
+--let $assert_text= The value of Last_conflict_free_transaction should not be present
+--let $assert_cond= "$last_certified_transaction" = "No such row"
+--source include/assert.inc
diff --git a/mysql-test/suite/perfschema/t/rpl_group_members.test b/mysql-test/suite/perfschema/t/rpl_group_members.test
new file mode 100644
index 00000000000..e5dfde747f1
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/rpl_group_members.test
@@ -0,0 +1,33 @@
+# WL#6841 - GCS Replication: P_S table to show GCS kernel stats
+#
+# This test proofs the existence of the replication_connection_status table
+# and all its fields. Since the table only returns values if the plugin is
+# loaded, all queries will return "No such row" or "0"
+#
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--let $channel_name= query_get_value(SELECT Channel_Name from performance_schema.replication_group_members, Channel_Name, 1)
+--let $assert_text= The value of channel name should be empty
+--let $assert_cond= "$channel_name" = "No such row"
+--source include/assert.inc
+
+--let $member_id= query_get_value(SELECT Member_Id from performance_schema.replication_group_members, Member_Id, 1)
+--let $assert_text= The value of member_id should be empty
+--let $assert_cond= "$member_id" = "No such row"
+--source include/assert.inc
+
+--let $member_host= query_get_value(SELECT Member_Host from performance_schema.replication_group_members, Member_Host, 1)
+--let $assert_text= The value of member_host should be empty
+--let $assert_cond= "$member_host" = "No such row"
+--source include/assert.inc
+
+--let $member_port= query_get_value(SELECT Member_Port from performance_schema.replication_group_members, Member_Port, 1)
+--let $assert_text= The value of member_port should be empty
+--let $assert_cond= "$member_port" = "No such row"
+--source include/assert.inc
+
+--let $member_state= query_get_value(SELECT Member_State from performance_schema.replication_group_members, Member_State, 1)
+--let $assert_text= The value of member_state should be empty
+--let $assert_cond= "$member_state" = "No such row"
+--source include/assert.inc
diff --git a/mysql-test/suite/perfschema/t/rpl_gtid_func.test b/mysql-test/suite/perfschema/t/rpl_gtid_func.test
index 048dbca0576..ffa58b27d4b 100644
--- a/mysql-test/suite/perfschema/t/rpl_gtid_func.test
+++ b/mysql-test/suite/perfschema/t/rpl_gtid_func.test
@@ -32,7 +32,7 @@ update performance_schema.setup_instruments
connection master;
select * from performance_schema.setup_instruments
- where timed='NO';
+ where timed='NO' and name not like "memory/%";
select "This better be in the master" as in_master_digest;
diff --git a/mysql-test/suite/perfschema/t/rpl_statements.test b/mysql-test/suite/perfschema/t/rpl_statements.test
index a4604e7904c..dd9d2bd1c89 100644
--- a/mysql-test/suite/perfschema/t/rpl_statements.test
+++ b/mysql-test/suite/perfschema/t/rpl_statements.test
@@ -60,7 +60,7 @@ connection master;
--echo *** Create test tables
--echo
-show variables like 'binlog_format%';
+show global variables like 'binlog_format%';
--disable_warnings
drop table if exists test.marker;
@@ -113,7 +113,7 @@ select count(*) = 1 as 'Expect 1' from test.marker;
connection master;
--echo
-show variables like 'binlog_format%';
+show global variables like 'binlog_format%';
--echo *** Clear statement events
--source ../include/rpl_statements_truncate.inc
diff --git a/mysql-test/suite/perfschema/t/rpl_threads.test b/mysql-test/suite/perfschema/t/rpl_threads.test
new file mode 100644
index 00000000000..984939c21f8
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/rpl_threads.test
@@ -0,0 +1,79 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/have_log_bin.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/master-slave.inc
+
+--disable_warnings
+drop table if exists test.t1;
+--sync_slave_with_master
+reset master;
+--enable_warnings
+
+create table test.t1(a int);
+drop table test.t1;
+
+--source include/show_binlog_events.inc
+
+# Notes
+#
+# The point of this test is to make sure code is properly instrumented,
+# for replication threads.
+# Each time an ID is assigned to a replication thread,
+# visible in the INFORMATION_SCHEMA.PROCESSLIST table,
+# the same PROCESSLIST_ID should be visible in table performance_schema.threads
+
+connection master;
+-- echo "============ Performance schema on master ============"
+
+# Read the ID of the binlog dump connection,
+# as exposed in PROCESSLIST.
+select ID from INFORMATION_SCHEMA.PROCESSLIST
+ where COMMAND = "Binlog Dump"
+ into @master_dump_pid;
+
+select COMMAND, STATE
+ from INFORMATION_SCHEMA.PROCESSLIST
+ where ID = @master_dump_pid;
+
+# Make sure the performance schema also knows this PROCESSLIST_ID
+select NAME, TYPE, PROCESSLIST_COMMAND, PROCESSLIST_STATE
+ from performance_schema.threads
+ where PROCESSLIST_ID = @master_dump_pid;
+
+sync_slave_with_master;
+-- echo "============ Performance schema on slave ============"
+
+# Read the ID of the SLAVE IO thread,
+# as exposed in PROCESSLIST.
+select ID from INFORMATION_SCHEMA.PROCESSLIST
+ where STATE like "Waiting for master to send event%"
+ into @slave_io_pid;
+
+select COMMAND, STATE
+ from INFORMATION_SCHEMA.PROCESSLIST
+ where ID = @slave_io_pid;
+
+# Make sure the performance schema also knows this PROCESSLIST_ID
+select NAME, TYPE, PROCESSLIST_COMMAND, PROCESSLIST_STATE
+ from performance_schema.threads
+ where PROCESSLIST_ID = @slave_io_pid;
+
+# Read the ID of the SLAVE SQL thread,
+# as exposed in PROCESSLIST.
+select ID from INFORMATION_SCHEMA.PROCESSLIST
+ where STATE like "Slave has read all relay log%"
+ into @slave_sql_pid;
+
+select COMMAND, STATE
+ from INFORMATION_SCHEMA.PROCESSLIST
+ where ID = @slave_sql_pid;
+
+# Make sure the performance schema also knows this PROCESSLIST_ID
+select NAME, TYPE, PROCESSLIST_COMMAND, PROCESSLIST_STATE
+ from performance_schema.threads
+ where PROCESSLIST_ID = @slave_sql_pid;
+
+--source include/rpl_end.inc
+
diff --git a/mysql-test/suite/perfschema/t/server_init.test b/mysql-test/suite/perfschema/t/server_init.test
index 19ed7ba97c7..ae4f7ac945b 100644
--- a/mysql-test/suite/perfschema/t/server_init.test
+++ b/mysql-test/suite/perfschema/t/server_init.test
@@ -14,9 +14,6 @@ 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
@@ -36,10 +33,8 @@ select count(name) from mutex_instances
# 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";
+# There are no global conditions in mysys
+# (THR_COND_threads is only present in debug builds
# Verify that these global mutexes have been properly initilized in sql
@@ -53,21 +48,9 @@ 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";
-
-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
@@ -103,10 +86,7 @@ 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";
-
-select count(name) from mutex_instances
- where name like "wait/synch/mutex/sql/Cversion_lock";
+ where name like "wait/synch/mutex/sql/LOCK_item_func_sleep";
select count(name) from mutex_instances
where name like "wait/synch/mutex/sql/LOCK_audit_mask";
@@ -124,9 +104,6 @@ select count(name) from mutex_instances
# 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
diff --git a/mysql-test/suite/perfschema/t/setup_actors.test b/mysql-test/suite/perfschema/t/setup_actors.test
index 1d4a86b6517..9e9e0a4eb80 100644
--- a/mysql-test/suite/perfschema/t/setup_actors.test
+++ b/mysql-test/suite/perfschema/t/setup_actors.test
@@ -9,26 +9,26 @@
# The initial number of rows is 1. The initial row always looks like this:
# mysql> select * from performance_schema.setup_actors;
-# +------+------+------+
-# | Host | User | ROLE |
-# +------+------+------+
-# | % | % | % |
-# +------+------+------+
+# +------+------+------+---------+---------+
+# | HOST | USER | ROLE | ENABLED | HISTORY |
+# +------+------+------+---------+---------+
+# | % | % | % | YES | YES |
+# +------+------+------+---------+---------+
select * from performance_schema.setup_actors;
truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors
-values ('hosta', 'user1', '%');
+values ('hosta', 'user1', '%', 'YES', 'YES');
insert into performance_schema.setup_actors
-values ('%', 'user2', '%');
+values ('%', 'user2', '%', 'YES', 'YES');
insert into performance_schema.setup_actors
-values ('localhost', 'user3', '%');
+values ('localhost', 'user3', '%', 'YES', 'YES');
insert into performance_schema.setup_actors
-values ('hostb', '%', '%');
+values ('hostb', '%', '%', 'YES', 'YES');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
@@ -57,7 +57,7 @@ let $con1_thread_id= `select THREAD_ID from performance_schema.threads
--connection default
insert into performance_schema.setup_actors
-values ('%', 'user1', '%');
+values ('%', 'user1', '%', 'YES', 'YES');
--connection con1
# INSTRUMENTED must be NO because there was no match in performance_schema.setup_actors
@@ -165,7 +165,7 @@ where PROCESSLIST_ID = connection_id();
--connection default
insert into performance_schema.setup_actors
-values ('localhost', '%', '%');
+values ('localhost', '%', '%', 'YES', 'YES');
select * from performance_schema.setup_actors
order by USER, HOST, ROLE;
@@ -182,7 +182,7 @@ where PROCESSLIST_ID = connection_id();
--connection default
insert into performance_schema.setup_actors
-values ('%', 'user5', '%');
+values ('%', 'user5', '%', 'YES', 'YES');
create sql security definer view test.v1 as select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
from performance_schema.threads
@@ -224,7 +224,7 @@ flush privileges;
truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors
-values ('%', '%', '%');
+values ('%', '%', '%', 'YES', 'YES');
select * from performance_schema.setup_actors;
diff --git a/mysql-test/suite/perfschema/t/setup_actors_enabled.test b/mysql-test/suite/perfschema/t/setup_actors_enabled.test
new file mode 100644
index 00000000000..959c4d9cb80
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/setup_actors_enabled.test
@@ -0,0 +1,219 @@
+# Check the impact of changes done in ENABLED column in
+# performance_schema.setup_actors.
+
+--source include/not_windows.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# The initial number of rows is 1. The initial row always looks like this:
+# mysql> select * from performance_schema.setup_actors;
+# +------+------+------+---------+---------+
+# | HOST | USER | ROLE | ENABLED | HISTORY |
+# +------+------+------+---------+---------+
+# | % | % | % | YES | YES |
+# +------+------+------+---------+---------+
+select * from performance_schema.setup_actors;
+
+truncate table performance_schema.setup_actors;
+
+insert into performance_schema.setup_actors
+values ('localhost', 'user1', '%', 'YES', 'YES');
+
+insert into performance_schema.setup_actors
+values ('localhost', 'user2', '%', 'NO', 'NO');
+
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+set sql_mode= @orig_sql_mode;
+
+flush privileges;
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# INSTRUMENTED must be YES because there is a match in
+# performance_schema.setup_actors and its ENABLED
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to (con2, localhost, user2, , )
+connect (con2, localhost, user2, , );
+
+# INSTRUMENTED must be NO because there is a match in
+# performance_schema.setup_actors but its DISABLED.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to connection default
+--connection default
+update performance_schema.setup_actors set ENABLED='NO' where USER='user1';
+update performance_schema.setup_actors set ENABLED='YES' where USER='user2';
+
+--echo # Switch to connection con1
+--connection con1
+
+# INSTRUMENTED must still be YES because update to setup_actors doesn't affect
+# existing connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to connection con2
+--connection con2
+
+# INSTRUMENTED must still be NO because update to setup_actors doesn't affect
+# existing connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Disconnect con1 and con2
+--disconnect con1
+--disconnect con2
+
+# Now reconnect
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# INSTRUMENTED must still be NO because update to setup_actors affects
+# new connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to (con2 localhost, user2, , )
+connect (con2, localhost, user2, , );
+
+# INSTRUMENTED must still be YES because update to setup_actors affects
+# new connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Disconnect con1 and con2
+--disconnect con1
+--disconnect con2
+
+--echo # Switch to connection default
+--connection default
+
+# Checking if update is allowed on performance_schema.setup_actors ENABLED
+# column after revoke update privilege
+
+revoke update on *.* from 'user2'@'localhost';
+
+flush privileges;
+
+--echo # Switch to (con2 localhost, user2, , )
+connect (con2, localhost, user2, , );
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.setup_actors
+ set ENABLED='NO';
+
+--disconnect con2
+--connection default
+
+# Checking for Rules Order
+# 1. a match for 'U1' and 'H1'.
+# 2. then for 'U1' and '%'.
+# 3. then for '%' and 'H1'.
+# 4. then for '%' and '%'.
+
+insert into performance_schema.setup_actors
+values ('%', 'user1', '%', 'YES', 'YES');
+
+
+insert into performance_schema.setup_actors
+values ('localhost', '%', '%', 'NO', 'NO');
+
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# INSTRUMENTED must still be NO as it will match rule1
+# new connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--disconnect con1
+--connection default
+
+delete from performance_schema.setup_actors where
+HOST='localhost' and USER='user1';
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# INSTRUMENTED must still be YES as it will match rule2
+# new connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+
+--disconnect con1
+--connection default
+
+delete from performance_schema.setup_actors where
+HOST='%' and USER='user1';
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# INSTRUMENTED must still be NO as it will match rule3
+# new connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--disconnect con1
+--connection default
+
+delete from performance_schema.setup_actors where
+HOST='localhost' and USER='%';
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# INSTRUMENTED must still be YES as it will match rule4
+# new connetions.
+select NAME, TYPE, INSTRUMENTED, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--disconnect con1
+--connection default
+
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+flush privileges;
+
+truncate table performance_schema.setup_actors;
+
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+
+select * from performance_schema.setup_actors;
+
diff --git a/mysql-test/suite/perfschema/t/setup_actors_history.test b/mysql-test/suite/perfschema/t/setup_actors_history.test
new file mode 100644
index 00000000000..ecb3324a3c5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/setup_actors_history.test
@@ -0,0 +1,177 @@
+# Check the impact of changes done in HISTORY column in
+# performance_schema.setup_actors.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# The initial number of rows is 1. The initial row always looks like this:
+# mysql> select * from performance_schema.setup_actors;
+# +------+------+------+---------+---------+
+# | HOST | USER | ROLE | ENABLED | HISTORY |
+# +------+------+------+---------+---------+
+# | % | % | % | YES | YES |
+# +------+------+------+---------+---------+
+select * from performance_schema.setup_actors;
+
+truncate table performance_schema.setup_actors;
+
+insert into performance_schema.setup_actors
+values ('localhost', 'user1', '%', 'YES', 'YES');
+
+insert into performance_schema.setup_actors
+values ('localhost', 'user2', '%', 'YES', 'NO');
+
+insert into performance_schema.setup_actors
+values ('localhost', 'user3', '%', 'NO', 'YES');
+
+insert into performance_schema.setup_actors
+values ('localhost', 'user4', '%', 'NO', 'NO');
+
+create user user1@localhost;
+create user user2@localhost;
+create user user3@localhost;
+create user user4@localhost;
+
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+grant ALL on *.* to user3@localhost;
+grant ALL on *.* to user4@localhost;
+
+flush privileges;
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# Expecting INSTRUMENTED=YES, HISTORY=YES
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to (con2, localhost, user2, , )
+connect (con2, localhost, user2, , );
+
+# Expecting INSTRUMENTED=YES, HISTORY=NO
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to (con3, localhost, user3, , )
+connect (con3, localhost, user3, , );
+
+# Expecting INSTRUMENTED=NO, HISTORY=YES
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to (con4, localhost, user4, , )
+connect (con4, localhost, user4, , );
+
+# Expecting INSTRUMENTED=NO, HISTORY=NO
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to connection default
+--connection default
+update performance_schema.setup_actors
+ set HISTORY='NO' where USER in ('user1', 'user3');
+update performance_schema.setup_actors
+ set HISTORY='YES' where USER in ('user2', 'user4');
+
+--echo # Switch to connection con1
+--connection con1
+
+# Expecting INSTRUMENTED=YES, HISTORY=YES
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to connection con2
+--connection con2
+
+# Expecting INSTRUMENTED=YES, HISTORY=NO
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to connection con3
+--connection con3
+
+# Expecting INSTRUMENTED=NO, HISTORY=YES
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to connection con4
+--connection con4
+
+# Expecting INSTRUMENTED=NO, HISTORY=NO
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Disconnect all con
+--disconnect con1
+--disconnect con2
+--disconnect con3
+--disconnect con4
+
+# Now reconnect
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+# Expecting INSTRUMENTED=YES, HISTORY=NO
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to (con2 localhost, user2, , )
+connect (con2, localhost, user2, , );
+
+# Expecting INSTRUMENTED=YES, HISTORY=YES
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to (con3, localhost, user3, , )
+connect (con3, localhost, user3, , );
+
+# Expecting INSTRUMENTED=NO, HISTORY=NO
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Switch to (con4 localhost, user4, , )
+connect (con4, localhost, user4, , );
+
+# Expecting INSTRUMENTED=NO, HISTORY=YES
+select NAME, TYPE, INSTRUMENTED, HISTORY, PROCESSLIST_USER, PROCESSLIST_HOST
+from performance_schema.threads
+where PROCESSLIST_ID = connection_id();
+
+--echo # Disconnect all con
+--disconnect con1
+--disconnect con2
+--disconnect con3
+--disconnect con4
+
+--echo # Switch to connection default
+--connection default
+
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+revoke all privileges, grant option from user3@localhost;
+revoke all privileges, grant option from user4@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+drop user user3@localhost;
+drop user user4@localhost;
+flush privileges;
+
+truncate table performance_schema.setup_actors;
+
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+
+select * from performance_schema.setup_actors;
+
diff --git a/mysql-test/suite/perfschema/t/setup_consumers_defaults-master.opt b/mysql-test/suite/perfschema/t/setup_consumers_defaults-master.opt
index bc05fa8d5bc..db53957b031 100644
--- a/mysql-test/suite/perfschema/t/setup_consumers_defaults-master.opt
+++ b/mysql-test/suite/perfschema/t/setup_consumers_defaults-master.opt
@@ -1,11 +1,18 @@
--loose-performance-schema-consumer-events-stages-current=OFF
--loose-performance-schema-consumer-events-stages-history=ON
--loose-performance-schema-consumer-events-stages-history-long=OFF
+
--loose-performance-schema-consumer-events-statements-current=ON
--loose-performance-schema-consumer-events-statements-history=OFF
--loose-performance-schema-consumer-events-statements-history-long=ON
+
+--loose-performance-schema-consumer-events-transactions-current=ON
+--loose-performance-schema-consumer-events-transactions-history=OFF
+--loose-performance-schema-consumer-events-transactions-history-long=ON
+
--loose-performance-schema-consumer-events-waits-current=OFF
--loose-performance-schema-consumer-events-waits-history=ON
--loose-performance-schema-consumer-events-waits-history-long=OFF
+
--loose-performance-schema-consumer-global-instrumentation=ON
--loose-performance-schema-consumer-thread-instrumentation=ON
diff --git a/mysql-test/suite/perfschema/t/setup_consumers_defaults.test b/mysql-test/suite/perfschema/t/setup_consumers_defaults.test
index e845e577fb7..d8aa52a1796 100644
--- a/mysql-test/suite/perfschema/t/setup_consumers_defaults.test
+++ b/mysql-test/suite/perfschema/t/setup_consumers_defaults.test
@@ -15,4 +15,4 @@ SELECT @@performance_schema_consumer_events_stages_current;
--error ER_UNKNOWN_SYSTEM_VARIABLE
SET @@performance_schema_consumer_events_stages_current=0;
-SHOW VARIABLES LIKE "performance_schema_consumer%";
+SHOW GLOBAL VARIABLES LIKE "performance_schema_consumer%";
diff --git a/mysql-test/suite/perfschema/t/setup_instruments_defaults-master.opt b/mysql-test/suite/perfschema/t/setup_instruments_defaults-master.opt
index ed6702ed5ef..dd2aa078cc4 100644
--- a/mysql-test/suite/perfschema/t/setup_instruments_defaults-master.opt
+++ b/mysql-test/suite/perfschema/t/setup_instruments_defaults-master.opt
@@ -9,7 +9,7 @@
--loose-performance-schema-instrument=' wait/synch/mutex/sql/% = OFF '
--loose-performance-schema-instrument='wait/synch/mutex/sql/% = OFF '
--loose-performance-schema-instrument='wait/synch/mutex/sql/LOCK% = ON'
---loose-performance-schema-instrument='wait/synch/mutex/sql/LOCK_thread_count=OFF'
+--loose-performance-schema-instrument='wait/synch/mutex/sql/LOCK_thd_count=OFF'
--loose-performance-schema-instrument=' wait/synch/mutex/sql/LOCK_user_conn = COUNTED'
--loose-performance-schema-instrument='wait%/synch/mutex/sql/LOCK_uu%_genera%/= COUNTED'
--loose-performance-schema-instrument='%%wait/synch/mutex/sql/LOCK_plugin=COUNTED'
@@ -23,7 +23,6 @@
--loose-performance-schema-instrument='wait/synch/mutex/sql/THD::LOCK_thd_data= TRUE'
--loose-performance-schema-instrument='wait/synch/mutex/sql/hash_filo::lock =FALSE'
--loose-performance-schema-instrument='wait/synch/mutex/sql/TABLE_SHARE::LOCK_ha_data= NO'
-
-
-
+--loose-performance-schema-instrument='memory/%=ON'
+--loose-performance-schema-instrument='memory/performance_schema/%=OFF'
diff --git a/mysql-test/suite/perfschema/t/setup_instruments_defaults.test b/mysql-test/suite/perfschema/t/setup_instruments_defaults.test
index 5e0a3a5067a..ea59cd4f266 100644
--- a/mysql-test/suite/perfschema/t/setup_instruments_defaults.test
+++ b/mysql-test/suite/perfschema/t/setup_instruments_defaults.test
@@ -21,13 +21,13 @@ AND enabled = 'yes' AND timed = 'no'
ORDER BY name;
SELECT * FROM performance_schema.setup_instruments
-WHERE name = 'wait/synch/mutex/sql/LOCK_thread_count'
+WHERE name = 'wait/synch/mutex/sql/LOCK_thd_list'
AND enabled = 'no' AND timed = 'no';
SELECT * FROM performance_schema.setup_instruments
WHERE name IN (
'wait/synch/mutex/sql/LOG_INFO::lock',
- 'wait/synch/mutex/sql/THD::LOCK_thd_data')
+ 'wait/synch/mutex/sql/THD::LOCK_thd_list')
AND enabled = 'yes' AND timed = 'yes'
ORDER BY name;
@@ -37,6 +37,21 @@ AND enabled = 'no' AND timed = 'no'
ORDER BY name;
--echo #
+--echo # Verify that the memory instruments are never timed
+--echo #
+SELECT * FROM performance_schema.setup_instruments
+WHERE name like 'memory/%'
+AND timed = 'YES';
+
+--echo #
+--echo # Verify that the memory/performance_schema instruments are never disabled
+--echo #
+SELECT * FROM performance_schema.setup_instruments
+WHERE name like 'memory/performance_schema/%'
+AND enabled = 'NO';
+
+
+--echo #
--echo # Verify that the instrument startup settings are not not visible.
--echo #
SHOW VARIABLES LIKE "%/wait/synch/mutex%";
diff --git a/mysql-test/suite/perfschema/t/setup_object_table_lock_io.test b/mysql-test/suite/perfschema/t/setup_object_table_lock_io.test
new file mode 100644
index 00000000000..aaa17fa79ad
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/setup_object_table_lock_io.test
@@ -0,0 +1,107 @@
+# Test for Performance Schema.
+# To test the effect of disabling/enabling instrumentation for a table
+# in setup_objects table.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_warnings
+drop table if exists test.setup_objects;
+--enable_warnings
+
+# Make sure only table io / table lock is instrumented and timed
+update performance_schema.setup_instruments set enabled='NO';
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name in ('wait/io/table/sql/handler', 'wait/lock/table/sql/handler');
+
+# Remove noise from previous tests
+truncate table performance_schema.table_io_waits_summary_by_table;
+truncate table performance_schema.table_lock_waits_summary_by_table;
+
+# Save the setup
+create table test.setup_objects as select * from performance_schema.setup_objects;
+truncate table performance_schema.setup_objects;
+select * from performance_schema.setup_objects;
+
+insert into performance_schema.setup_objects
+ values ('TABLE', 'db1', 't1', 'YES', 'YES');
+
+insert into performance_schema.setup_objects
+ values ('TABLE', 'db1', 't2', 'YES', 'YES');
+
+select * from performance_schema.setup_objects
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+SET sql_mode = default;
+
+--disable_warnings
+drop database if exists db1;
+--enable_warnings
+
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default', unique key uidx(a));
+create table db1.t2 (a int, b char(10) default 'default');
+
+# Insert some values in tables.
+insert into db1.t1 values('11', 'db1.t1');
+insert into db1.t1 values('12', 'db1.t1');
+insert into db1.t1 values('13', 'db1.t1');
+insert into db1.t2 values('21', 'db1.t2');
+insert into db1.t2 values('22', 'db1.t2');
+insert into db1.t2 values('23', 'db1.t2');
+
+# Query P_S tables. Stats should be updated.
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+
+truncate table db1.t1;
+truncate table db1.t2;
+
+# Query P_S tables. Stats should be updated.
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+
+# Disable instrumentation for db1.t1
+update performance_schema.setup_objects
+ set ENABLED='NO' where OBJECT_SCHEMA = 'db1' and OBJECT_NAME='t1';
+
+# Query P_S tables. Stats for db1.t1 should have been removed while for db1.t2 it should have been preserved.
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+
+# Enable instrumentation for db1.t1
+update performance_schema.setup_objects
+ set ENABLED='YES' where OBJECT_SCHEMA = 'db1' and OBJECT_NAME='t1';
+
+# Query P_S tables. Stats for db1.t1 should have been reset while for db1.t2 it should have been preserved.
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+select OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1';
+
+truncate table performance_schema.setup_objects;
+
+select count(*) from performance_schema.setup_objects;
+
+drop database db1;
+
+# 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;
+
+update performance_schema.setup_instruments set enabled='YES', timed='YES';
+
diff --git a/mysql-test/suite/perfschema/t/setup_objects.test b/mysql-test/suite/perfschema/t/setup_objects.test
index eb22953b1a6..604b35b00ca 100644
--- a/mysql-test/suite/perfschema/t/setup_objects.test
+++ b/mysql-test/suite/perfschema/t/setup_objects.test
@@ -48,8 +48,7 @@ insert into performance_schema.setup_objects
values ('TABLE', 'db4', '%', 'YES', 'NO');
# Also test insert of invalid enum values
-
-set sql_mode= '';
+SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
--error ER_NO_REFERENCED_ROW_2
insert into performance_schema.setup_objects
values ('SOMETHING', 'bad1', 'bad1', 'YES', 'NO');
@@ -89,8 +88,7 @@ update performance_schema.setup_objects
select * from performance_schema.setup_objects
order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
-set sql_mode= DEFAULT;
-
+SET sql_mode = default;
--disable_warnings
drop database if exists db1;
drop database if exists db2;
diff --git a/mysql-test/suite/perfschema/t/short_option_1-master.opt b/mysql-test/suite/perfschema/t/short_option_1-master.opt
index d3ad08d3d54..a9cda7a08ed 100644
--- a/mysql-test/suite/perfschema/t/short_option_1-master.opt
+++ b/mysql-test/suite/perfschema/t/short_option_1-master.opt
@@ -1 +1 @@
--a -Cutf8 --collation-server=utf8_bin -T12 -W3
+-a -Cutf8 --collation-server=utf8_bin -T12 -W2
diff --git a/mysql-test/suite/perfschema/t/short_option_1.test b/mysql-test/suite/perfschema/t/short_option_1.test
index ff62a392cfa..4d00c3729d8 100644
--- a/mysql-test/suite/perfschema/t/short_option_1.test
+++ b/mysql-test/suite/perfschema/t/short_option_1.test
@@ -6,13 +6,13 @@ select 'Ok, the server started' as result;
# See the associated -master.opt file.
select @@SQL_MODE;
-show variables like 'sql_mode';
+show global variables like 'sql_mode';
select @@character_set_server;
-show variables like 'character_set_system';
+show global variables like 'character_set_system';
-show variables like 'general_log';
+show global variables like 'general_log';
-show variables like 'new';
+show global variables like 'new';
-show variables like 'log_warnings';
+show global variables like 'log_warnings';
diff --git a/mysql-test/suite/perfschema/t/short_option_2-master.opt b/mysql-test/suite/perfschema/t/short_option_2-master.opt
index 5cf7590a1c8..5d45b9ec91d 100644
--- a/mysql-test/suite/perfschema/t/short_option_2-master.opt
+++ b/mysql-test/suite/perfschema/t/short_option_2-master.opt
@@ -1 +1 @@
--aW5
+-aW2
diff --git a/mysql-test/suite/perfschema/t/short_option_2.test b/mysql-test/suite/perfschema/t/short_option_2.test
index 77798c36722..0921849cd08 100644
--- a/mysql-test/suite/perfschema/t/short_option_2.test
+++ b/mysql-test/suite/perfschema/t/short_option_2.test
@@ -4,11 +4,11 @@
select 'Ok, the server started' as result;
# See the associated -master.opt file.
-# -aW5 should be parsed as -a -W5, which are two separate short options
+# -aW2 should be parsed as -a -W2, which are two separate short options
# stuffed inside a single argv[i] argument.
# Should contain ANSI, since we started the server with -a (stands for --ansi)
select @@SQL_MODE;
-# Should be 5, since we started the server with -W5
+# Should be 2, since we started the server with -W2
select @@log_warnings;
diff --git a/mysql-test/suite/perfschema/t/show_aggregate.test b/mysql-test/suite/perfschema/t/show_aggregate.test
new file mode 100644
index 00000000000..788979dc0f0
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/show_aggregate.test
@@ -0,0 +1,306 @@
+################# suite/perfschema/t/show_aggregate.test #######################
+# #
+# This test verifies: #
+# 1. Status variable values are consistent with corresponding server events. #
+# 2. Status variable values are consistent across session, thread, account, #
+# host, user and global tables. #
+# 3. Status totals for user, host and account are retained after related #
+# threads disconnect. #
+################################################################################
+
+--source include/have_perfschema.inc
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source include/no_protocol.inc
+--source include/maybe_pool_of_threads.inc
+
+--enable_connect_log
+
+--echo
+--echo ================================================================================
+--echo SETUP
+--echo ================================================================================
+SET @@session.sql_log_bin=OFF;
+--echo
+--echo # CREATE 3 CLIENTS, 3 CONNECTIONS, RESULTS TABLE
+connection default;
+USE test;
+
+# Clear user, host and account status accumulated from preliminary checks by mtr.
+--disable_query_log
+flush status;
+--enable_query_log
+
+--echo
+--echo # Create results table
+CREATE TABLE test.status_results
+ (variable_name VARCHAR(64), start INT DEFAULT 0, stop INT DEFAULT 0, delta INT DEFAULT 0,
+ t1 INT DEFAULT 0, t2 INT DEFAULT 0, t3 INT DEFAULT 0, thread INT DEFAULT 0,
+ u1 INT DEFAULT 0, u2 INT DEFAULT 0, u3 INT DEFAULT 0, user INT DEFAULT 0,
+ h1 INT DEFAULT 0, h2 INT DEFAULT 0, h3 INT DEFAULT 0, host INT DEFAULT 0,
+ a1 INT DEFAULT 0, a2 INT DEFAULT 0, a3 INT DEFAULT 0, acct INT DEFAULT 0);
+
+INSERT INTO test.status_results (variable_name, start)
+ SELECT sg.variable_name, sg.variable_value+0 FROM performance_schema.global_status sg
+ WHERE variable_name IN ('handler_delete', 'handler_rollback');
+
+--echo
+--echo # Create test tables
+CREATE TABLE t1 (s1 int) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1), (2), (2), (3), (3), (3);
+CREATE TABLE t2 (s1 int) ENGINE=InnoDB;
+CREATE TABLE t3 (s1 int) ENGINE=InnoDB;
+--echo
+set @orig_sql_mode= @@sql_mode;
+set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
+GRANT ALL ON *.* to 'user1'@localhost;
+GRANT ALL ON *.* to 'user2'@localhost;
+GRANT ALL ON *.* to 'user3'@localhost;
+set sql_mode= @orig_sql_mode;
+
+--echo
+--echo ================================================================================
+--echo CONNECTION 1: DELETE 1, ROLLBACK x 1
+--echo ================================================================================
+connect(con1, localhost, user1,,);
+SET @@session.sql_log_bin=OFF;
+DELETE FROM t1 WHERE s1 = 1;
+START TRANSACTION;
+INSERT INTO t1 VALUES (1);
+ROLLBACK;
+
+--echo
+--echo ================================================================================
+--echo CONNECTION 2: DELETE 2, ROLLBACK x 2
+--echo ================================================================================
+connect(con2, localhost, user2,,);
+SET @@session.sql_log_bin=OFF;
+DELETE FROM t1 WHERE s1 = 2;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+ROLLBACK;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+ROLLBACK;
+
+--echo
+--echo ================================================================================
+--echo CONNECTION 3: DELETE 3, ROLLBACK x 3
+--echo ================================================================================
+connect(con3, localhost, user3,,);
+SET @@session.sql_log_bin=OFF;
+DELETE FROM t1 WHERE s1 = 3;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (3);
+ROLLBACK;
+
+--echo
+--echo ================================================================================
+--echo CONNECTION DEFAULT: Gather results, compare session and global status counts
+--echo ================================================================================
+connection default;
+--echo # Get thread ids for each connection.
+USE performance_schema;
+SELECT thread_id INTO @con1_id FROM threads WHERE processlist_user IN ('user1');
+SELECT thread_id INTO @con2_id FROM threads WHERE processlist_user IN ('user2');
+SELECT thread_id INTO @con3_id FROM threads WHERE processlist_user IN ('user3');
+
+--source ../include/show_aggregate.inc
+
+#--echo DEBUG
+#USE test;
+#SELECT * FROM test.status_results;
+
+--echo
+--echo ================================================================================
+--echo TEST 1: STATUS_BY_THREAD: Verify expected status counts per thread (1,2,3)
+--echo ================================================================================
+--echo #
+--echo # Review per-thread status counts
+--echo #
+USE performance_schema;
+--replace_column 1 thread_id
+SELECT * FROM status_by_thread WHERE thread_id IN (@con1_id, @con2_id, @con3_id) AND variable_name IN ('handler_delete', 'handler_rollback') ORDER BY thread_id;
+
+--echo #
+--echo # Verify expected counts for 'handler_delete' per thread
+--echo #
+--replace_column 1 connect_1
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_thread WHERE thread_id = @con1_id AND variable_name IN ('handler_delete');
+--echo
+--replace_column 1 connnect_2
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_thread WHERE thread_id = @con2_id AND variable_name IN ('handler_delete');
+--echo
+--replace_column 1 connnect_3
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_thread WHERE thread_id = @con3_id AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_THREAD vs. GLOBAL_STATUS
+--echo #
+SELECT variable_name, t1, t2, t3, delta, thread, IF(thread=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 2: STATUS_BY_USER: Verify expected status counts per user (1,2,3)
+--echo ================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_USER vs. GLOBAL_STATUS
+--echo #
+SELECT variable_name, u1, u2, u3, delta, user, IF(user=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 3: STATUS_BY_ACCOUNT: Verify expected status counts per user, host (1,2,3)
+--echo ================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_ACCOUNT vs. GLOBAL_STATUS
+--echo #
+SELECT variable_name, a1, a2, a3, delta, acct, IF(acct=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+--echo ================================================================================
+--echo TEST 4: STATUS_BY_HOST: Verify expected status counts per host (6)
+--echo ================================================================================
+SELECT *, IF (variable_value = 6,'OK','ERROR') AS Expected FROM status_by_host WHERE host IN ('localhost') AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_HOST vs. GLOBAL_STATUS
+--echo #
+--echo # Special case: No way to isolate pre-existing 'localhost' activity, so
+--echo # just check global totals = sum(status_by_host).
+--echo #
+SELECT variable_name, h1, h2, h3, delta, host, IF(host=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+--echo
+--echo ================================================================================
+--echo DISCONNECT ALL USERS AND RUN THE TESTS AGAIN. RESULTS SHOULD NOT CHANGE.
+--echo ================================================================================
+connection default;
+disconnect con1;
+disconnect con2;
+disconnect con3;
+--echo
+USE test;
+--echo
+--echo # Clear results table, leave initial global_status counts
+UPDATE test.status_results
+ SET stop=0, delta=0,
+ t1=0, t2=0, t3=0, thread=0,
+ u1=0, u2=0, u3=0, user=0,
+ h1=0, h2=0, h3=0, host=0,
+ a1=0, a2=0, a3=0, acct=0;
+
+#--echo DEBUG
+#SELECT * FROM test.status_results;
+--echo
+--source ../include/show_aggregate.inc
+
+USE performance_schema;
+--echo
+--echo ================================================================================
+--echo TEST X: STATUS_BY_THREAD: Connections are gone--nothing to verify.
+--echo ================================================================================
+--echo
+--echo ================================================================================
+--echo TEST 5: STATUS_BY_USER: Verify expected status counts per user (1,2,3)
+--echo ================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_user WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_USER vs. GLOBAL_STATUS
+--echo #
+SELECT variable_name, u1, u2, u3, delta, user, IF(user=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 6: STATUS_BY_ACCOUNT: Verify expected status counts per user:host (1,2,3)
+--echo ================================================================================
+SELECT *, IF (variable_value = 1,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user1') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 2,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user2') AND variable_name IN ('handler_delete');
+--echo
+SELECT *, IF (variable_value = 3,'OK','ERROR') AS Expected FROM status_by_account WHERE user IN ('user3') AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_ACCOUNT vs. GLOBAL_STATUS
+--echo #
+SELECT variable_name, a1, a2, a3, delta, acct, IF(acct=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+--echo ================================================================================
+--echo TEST 7: STATUS_BY_HOST: Verify expected status counts per host (6)
+--echo ================================================================================
+SELECT *, IF (variable_value = 6,'OK','ERROR') AS Expected FROM status_by_host WHERE host IN ('localhost') AND variable_name IN ('handler_delete');
+
+--echo #
+--echo # STATUS_BY_HOST vs. GLOBAL_STATUS
+--echo #
+--echo # Special case: No way to isolate pre-existing 'localhost' activity, so
+--echo # just check global totals = sum(status_by_host).
+--echo #
+SELECT variable_name, h1, h2, h3, delta, host, IF(host=delta,'OK','ERROR') Expected
+FROM test.status_results
+ORDER BY variable_name;
+
+
+--echo ================================================================================
+--echo TEST 8: FLUSH STATUS should clear account, host and user status
+--echo ================================================================================
+--echo
+FLUSH STATUS;
+--echo
+SELECT * FROM status_by_account WHERE user IN ('user1', 'user2', 'user3') AND variable_name IN ('handler_delete');
+--echo
+SELECT * FROM status_by_host WHERE host IN ('localhost') AND variable_name IN ('handler_delete');
+--echo
+SELECT * FROM status_by_user WHERE user IN ('user1', 'user2', 'user3') AND variable_name IN ('handler_delete');
+
+
+--echo ================================================================================
+--echo CLEANUP
+--echo ================================================================================
+DROP TABLE test.t1;
+DROP TABLE test.t2;
+DROP TABLE test.t3;
+DROP TABLE test.status_results;
+DROP USER 'user1'@localhost;
+DROP USER 'user2'@localhost;
+DROP USER 'user3'@localhost;
+--echo
diff --git a/mysql-test/suite/perfschema/t/show_coverage.test b/mysql-test/suite/perfschema/t/show_coverage.test
new file mode 100644
index 00000000000..31a24de7b6e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/show_coverage.test
@@ -0,0 +1,186 @@
+################### suite/perfschema/t/show_coverage.test ######################
+# #
+# Testcases to increase DGCOV coverage of the status and system variable #
+# implementation in the Performance Schema. #
+# #
+################################################################################
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/no_protocol.inc
+--source include/count_sessions.inc
+
+--echo
+--echo # TEST 1
+--echo # Handling of SHOW STATUS/VARIABLES ... WHERE
+--echo #
+SHOW STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+
+--echo
+--echo # TEST 2
+--echo # CREATE..SELECT -- Expect correct ER_WARN_DEPRECATED_SYNTAX
+--echo #
+USE test;
+CREATE TABLE t0 SELECT * FROM information_schema.global_status WHERE variable_name = 'COM_SELECT';
+DROP TABLE t0;
+
+--echo
+--echo # TEST 3
+--echo # Select status and system variable tables using ORDER BY to exercise the
+--echo # rnd_pos() method
+--echo #
+use performance_schema;
+--disable_result_log
+select * from global_variables order by variable_name;
+select * from variables_by_thread order by variable_name;
+select * from session_variables order by variable_name;
+select * from global_status order by variable_name;
+select * from session_status order by variable_name;
+select * from status_by_thread order by variable_name;
+select * from status_by_user order by variable_name;
+select * from status_by_host order by variable_name;
+select * from status_by_account order by variable_name;
+--enable_result_log
+
+--echo
+--echo # TEST 4
+--echo # Handling of SHOW STATUS/VARIABLES ... WHERE
+--echo #
+SHOW STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+
+--echo
+--echo # TEST 5
+--echo # Confirm FLUSH STATUS resets counters for all threads.
+--echo #
+--echo
+--echo # Create a new connection
+--connect(con1, localhost, root,,)
+--echo
+--echo # Record thread id
+let $thread_id= `SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID()`;
+--echo
+--echo # Increase bytes_received for new connection
+USE test;
+SHOW TABLES;
+--connection default
+USE performance_schema;
+--disable_query_log
+eval SELECT $thread_id INTO @thread_id;
+--enable_query_log
+
+--echo
+--echo # Record bytes_received for other connection
+SELECT variable_value FROM status_by_thread
+ WHERE variable_name = "bytes_received" and thread_id = @thread_id INTO @bytes_before;
+--echo
+--echo # Reset status counters
+FLUSH STATUS;
+--echo
+--echo # Record bytes_received after reset
+SELECT variable_value FROM status_by_thread
+ WHERE variable_name = "bytes_received" and thread_id = @thread_id INTO @bytes_after;
+--echo
+--echo # Expect bytes_before > bytes_after
+SELECT @bytes_before > @bytes_after AS 'Expect 1';
+--echo
+--echo # Expect bytes_after is zero
+SELECT @bytes_after AS 'Expect 0';
+
+disconnect con1;
+--source include/wait_until_count_sessions.inc
+
+
+--echo
+--echo # TEST 6
+--echo #
+--echo # Bug#28291258 FLUSH STATUS ADDS TWICE TO GLOBAL VALUES
+--echo #
+
+--echo
+--echo # Default connection
+--let $initial_global_value = query_get_value(SHOW GLOBAL STATUS LIKE 'Slow_queries', Value, 1)
+
+--source include/count_sessions.inc
+
+--echo
+--echo # First connection
+--connect (con1, localhost, root,,)
+
+## Global value requested from the first session must not change
+--let $current_global_value = query_get_value(SHOW GLOBAL STATUS LIKE 'Slow_queries', Value, 1)
+--let $assert_cond = $current_global_value - $initial_global_value = 0
+--let $assert_text = Global value requested from the first session must not change
+--source include/assert.inc
+
+--echo
+--echo # Generate a slow query
+--echo
+SET long_query_time = 2;
+SELECT SLEEP(4);
+SET long_query_time = @@global.long_query_time;
+--echo
+
+## Global value requested from the first session after SLEEP() must increase by 1
+--let $current_global_value = query_get_value(SHOW GLOBAL STATUS LIKE 'Slow_queries', Value, 1)
+--let $first_session_value = query_get_value(SHOW SESSION STATUS LIKE 'Slow_queries', Value, 1)
+--let $assert_cond = $current_global_value - $initial_global_value = 1
+--let $assert_text = Global value requested from the first session after SLEEP() must increase by 1
+--source include/assert.inc
+--let $assert_cond = $first_session_value = 1
+--let $assert_text = First session value must increase by 1
+--source include/assert.inc
+
+--connection default
+--disconnect con1
+--source include/wait_until_count_sessions.inc
+
+--echo
+--echo # Default connection
+--connection default
+
+## Global value requested from the default session after DISCONNECT must remain the same
+--let $current_global_value = query_get_value(SHOW GLOBAL STATUS LIKE 'Slow_queries', Value, 1)
+--let $default_session_value = query_get_value(SHOW SESSION STATUS LIKE 'Slow_queries', Value, 1)
+--let $assert_cond = $current_global_value - $initial_global_value = 1
+--let $assert_text = Global value requested from the default session after DISCONNECT must remain the same
+--source include/assert.inc
+
+## Default session value must remain zero
+--let $assert_cond = $default_session_value = 0
+--let $assert_text = Default session value must remain zero
+--source include/assert.inc
+
+--echo
+FLUSH STATUS;
+--echo
+
+## Global value requested from the default session after FLUSH must remain the same
+--let $current_global_value = query_get_value(SHOW GLOBAL STATUS LIKE 'Slow_queries', Value, 1)
+--let $default_session_value = query_get_value(SHOW SESSION STATUS LIKE 'Slow_queries', Value, 1)
+--let $assert_cond = $current_global_value - $initial_global_value = 1
+--let $assert_text = Global value requested from the default session after FLUSH must remain the same
+--source include/assert.inc
+
+## Default session value after FLUSH must remain zero
+--let $assert_cond = $default_session_value = 0
+--let $assert_text = Default session value after FLUSH must remain zero
+--source include/assert.inc
diff --git a/mysql-test/suite/perfschema/t/show_misc.test b/mysql-test/suite/perfschema/t/show_misc.test
new file mode 100644
index 00000000000..65241ab1c75
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/show_misc.test
@@ -0,0 +1,64 @@
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/no_protocol.inc
+
+select 1;
+SHOW STATUS LIKE 'Last_query_partial_plans';
+select 2;
+SHOW STATUS LIKE 'Last_query_cost';
+
+flush status;
+SHOW STATUS LIKE 'Created_tmp_tables';
+
+--echo
+--echo ================================================================================
+--echo Bug#21789221 SHOW STATUS FAILS WITH LOCK TABLES AND SHOW_COMPATIBILITY_56=OFF
+--echo ================================================================================
+--echo Verify that SHOW STATUS and SHOW VARIABLES works under LOCK TABLES mode
+--echo
+CREATE TABLE test.t1 (s1 INT);
+LOCK TABLE test.t1 READ;
+--echo
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+UNLOCK TABLES;
+--echo
+LOCK TABLE test.t1 WRITE;
+--echo
+SHOW GLOBAL STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION STATUS WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+SHOW SESSION VARIABLES WHERE VARIABLE_NAME LIKE "foo";
+--echo
+UNLOCK TABLES;
+
+DROP TABLE test.t1;
+
+
+--echo
+--echo ================================================================================
+--echo Bug#28515475 BOGUS DATA WHEN ORDERING RESULTS FROM VARIABLES_BY_THREAD
+--echo ================================================================================
+--echo Verify the results from "WHERE variable_name IN(...)", particularly for those
+--echo variables that are listed after the deprecated variable gtid_executed.
+--echo The ORDER BY also forces an additional code path through rnd_pos().
+--echo
+
+SELECT variable_name FROM performance_schema.variables_by_thread
+ WHERE variable_name IN ('interactive_timeout','net_read_timeout','net_write_timeout','wait_timeout')
+ ORDER BY variable_name;
+
+
+--echo
+--echo ================================================================================
+--echo CLEAN UP
+--echo ================================================================================
diff --git a/mysql-test/suite/perfschema/t/show_plugin.test b/mysql-test/suite/perfschema/t/show_plugin.test
new file mode 100644
index 00000000000..53ef699468c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/show_plugin.test
@@ -0,0 +1,321 @@
+################# suite/perfschema/t/show_plugin.test ##########################
+# #
+# MySQL plugins can define their own status variables and system variables. #
+# This test exercises SHOW STATUS, SHOW VARIABLES and the status and system #
+# variable tables while the EXAMPLE plugin is loaded and unloaded. #
+# #
+# The EXAMPLE plugin defines the following system and status variables: #
+# Global system variables: #
+# example_double_thdvar #
+# example_double_var #
+# example_enum_var #
+# example_ulong_var #
+# #
+# Session variables: #
+# example_double_thdvar - Local and/or global #
+# #
+# Global status: #
+# example_func_example - Status function #
+# #
+################################################################################
+
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/not_windows_embedded.inc
+--source include/have_example_plugin.inc
+--source include/have_innodb.inc
+--source include/have_debug_sync.inc
+
+--enable_connect_log
+
+--echo
+--echo ================================================================================
+--echo SETUP
+--echo ================================================================================
+--echo # Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+--echo
+--echo # Verify EXAMPLE plugin is not loaded
+SELECT COUNT(*) = 0 AS "Expect 1" FROM information_schema.plugins WHERE plugin_name = "EXAMPLE";
+--echo
+--echo # Create one session to force local and global system variables
+--connect(con0, localhost, root,,)
+--connection default
+--echo
+--echo ================================================================================
+--echo TEST 1- NO PLUGIN VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+--echo
+
+--echo ================================================================================
+--echo TEST 2 - PLUGIN LOAD, UNLOAD, RELOAD
+--echo ================================================================================
+--echo ================================================================================
+--echo 2.1 - INSTALL PLUGIN
+--echo ================================================================================
+INSTALL PLUGIN example SONAME 'ha_example';
+
+--echo
+--echo ================================================================================
+--echo 2.1a - FORCE SYNC OF LOCAL AND GLOBAL SYSTEM VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+
+--disconnect con0
+
+--echo
+--echo ================================================================================
+--echo 2.2 - SET PLUGIN VARS
+--echo ================================================================================
+--echo # GLOBAL
+SET GLOBAL example_ulong_var = 100;
+SET GLOBAL example_enum_var = e1;
+SET GLOBAL example_double_var = 100.9990;
+SET GLOBAL example_double_thdvar = 101.9991;
+--echo # SESSION
+SET SESSION example_double_thdvar = 102.9992;
+
+--echo
+--echo ================================================================================
+--echo 2.3 - VERIFY UPDATED PLUGIN VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+
+--echo
+--echo ================================================================================
+--echo 2.4 - UNINSTALL PLUGIN
+--echo ================================================================================
+UNINSTALL PLUGIN example;
+
+--echo
+--echo ================================================================================
+--echo 2.5 - VERIFY NO PLUGIN VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+
+--echo
+--echo ================================================================================
+--echo 2.6 - REINSTALL PLUGIN
+--echo ================================================================================
+--echo # Reinstall EXAMPLE plugin
+INSTALL PLUGIN example SONAME 'ha_example';
+
+--echo
+--echo ================================================================================
+--echo 2.7 - SET PLUGIN VARS AGAIN
+--echo ================================================================================
+--echo # GLOBAL
+SET GLOBAL example_ulong_var = 200;
+SET GLOBAL example_enum_var = e2;
+SET GLOBAL example_double_var = 200.8880;
+SET GLOBAL example_double_thdvar = 201.8881;
+--echo # SESSION
+SET SESSION example_double_thdvar = 202.8882;
+
+--echo
+--echo ================================================================================
+--echo 2.8 - VERIFY PLUGIN VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+
+--echo
+--echo ================================================================================
+--echo 2.9 - UNINSTALL PLUGIN
+--echo ================================================================================
+UNINSTALL PLUGIN example;
+
+--echo
+--echo ================================================================================
+--echo 2.10 - VERIFY NO PLUGIN VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+
+--echo
+--echo ================================================================================
+--echo TEST 3 - SESSION PLUGIN VARS ON MULTIPLE CONNECTIONS
+--echo ================================================================================
+--echo
+--echo ================================================================================
+--echo 3.1 - INSTALL PLUGIN
+--echo ================================================================================
+INSTALL PLUGIN example SONAME 'ha_example';
+
+--echo
+--echo ================================================================================
+--echo 3.2 - SET GLOBAL AND DEFAULT CONNECTION VARS
+--echo ================================================================================
+--connection default
+SET GLOBAL example_ulong_var = 300;
+SET GLOBAL example_enum_var = e1;
+SET GLOBAL example_double_var = 301.0000;
+SET GLOBAL example_double_thdvar = 302.0000;
+SET SESSION example_double_thdvar = 300.0000;
+
+--echo
+--echo ================================================================================
+--echo 3.3 - CONNECT 3 CLIENTS, SET LOCAL PLUGIN VARS
+--echo ================================================================================
+--connect(con1, localhost, root,,)
+SET SESSION example_double_thdvar = 300.1111;
+--echo
+--connect(con2, localhost, root,,)
+SET SESSION example_double_thdvar = 300.2222;
+--echo
+--connect(con3, localhost, root,,)
+SET SESSION example_double_thdvar = 300.3333;
+--echo
+--connection default
+
+--echo
+--echo ================================================================================
+--echo 3.4 - VERIFY GLOBAL AND SESSION PLUGIN VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+--echo
+--echo # Variables by thread
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+
+--echo
+--echo ================================================================================
+--echo 3.5 - DISCONNECT CLIENTS
+--echo ================================================================================
+--connection con1
+--disconnect con1
+--source include/wait_until_disconnected.inc
+
+--connection con2
+--disconnect con2
+--source include/wait_until_disconnected.inc
+
+--connection con3
+--disconnect con3
+--source include/wait_until_disconnected.inc
+
+--connection default
+
+--echo
+--echo ================================================================================
+--echo 3.6 - VERIFY SESSION VARS ARE REMOVED
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+--echo
+--echo # Variables by thread
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+
+--echo
+--echo ================================================================================
+--echo 3.7 - RECONNECT 3 CLIENTS, SET SESSION VARS FOR EACH
+--echo ================================================================================
+--connect(con1, localhost, root,,)
+SET SESSION example_double_thdvar = 311.1111;
+--echo
+--connect(con2, localhost, root,,)
+SET SESSION example_double_thdvar = 322.2222;
+--echo
+--connect(con3, localhost, root,,)
+SET SESSION example_double_thdvar = 333.3333;
+--echo
+--connection default
+
+--echo
+--echo ================================================================================
+--echo 3.8 - VERIFY GLOBAL AND SESSION VARS
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+--echo
+--echo # Variables by thread
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+
+--echo
+--echo ================================================================================
+--echo 3.9 - UNINSTALL PLUGIN, LEAVE CLIENTS CONNECTED
+--echo ================================================================================
+UNINSTALL PLUGIN example;
+
+--echo
+--echo ================================================================================
+--echo 3.10 - VERIFY SESSION VARS ARE REMOVED
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+--echo
+--echo # VARIABLES BY THREAD
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+
+--echo
+--echo ================================================================================
+--echo 3.11 - DISCONNECT CLIENTS
+--echo ================================================================================
+--connection con1
+--disconnect con1
+--source include/wait_until_disconnected.inc
+
+--connection con2
+--disconnect con2
+--source include/wait_until_disconnected.inc
+
+--connection con3
+--disconnect con3
+--source include/wait_until_disconnected.inc
+
+--connection default
+
+--echo
+--echo ================================================================================
+--echo 3.12 - VERIFY CLIENTS ARE REMOVED
+--echo ================================================================================
+--source ../include/show_plugin_verifier.inc
+--echo
+--echo # VARIABLES BY THREAD
+SELECT variable_name, variable_value FROM performance_schema.variables_by_thread
+WHERE variable_name LIKE "example_%" ORDER BY variable_value;
+
+--echo
+--echo ================================================================================
+--echo TEST 4 - BUG#18008907: DEADLOCK WITH CHANGE_USER, SHOW VARIABLES, INSTALL PLUGIN
+--echo ================================================================================
+--echo
+--echo
+--echo ================================================================================
+--echo TEST 5 - BUG#22225549 MYSQL_CHANGE_USER/MYSQL_RESET_CONNECTION + SET INNODB...
+--echo Update to plugin-defined session variable triggers resync with global
+--echo variables and deadlocks on THD::LOCK_thd_sysvar.
+--echo ================================================================================
+#
+# The deadlock occurs when plugin-defined session variables are resynced with the global
+# variables. To force a resync, change the user and update a session variable from a
+# plugin, in this case InnoDB.
+#
+select @@session.innodb_strict_mode;
+let $innodb_strict_mode_save = `select @@session.innodb_strict_mode`;
+select user(), current_user();
+--echo change_user root
+--change_user root
+--echo #
+--echo # Trigger a resync of session variables with global variables.
+--echo #
+set @@session.innodb_strict_mode=off;
+
+--echo
+--echo # Restore
+--echo
+eval set @@session.innodb_strict_mode=$innodb_strict_mode_save;
+select @@session.innodb_strict_mode;
+
+--echo
+--echo ================================================================================
+--echo CLEAN UP
+--echo ================================================================================
+--connection default
+--echo
+
+--echo
+--disable_connect_log
+
+--echo
+--echo # Wait till we reached the initial number of concurrent sessions
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test
new file mode 100644
index 00000000000..cc54d1af744
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/show_sanity.test
@@ -0,0 +1,1863 @@
+################# suite/perfschema/t/show_sanity.test ##########################
+# #
+# Compare global/session status and system variables in the Information Schema #
+# to those in Performance Schema. Do this once with SHOW_COMPATIBILITY_56 = ON #
+# again with SHOW_COMPATIBILITY_56 = OFF. #
+# #
+# Status and system variables may have a scope of: #
+# #
+# GLOBAL - System level only. #
+# SESSION - Applies at both the global and session level. #
+# Status variables with SESSION scope are totaled across all #
+# threads for global queries such as SHOW GLOBAL STATUS. #
+# System variables with SESSION scope have a global default #
+# that can be changed at the session level. #
+# SESSION-ONLY - Client connection level only. #
+# #
+#==============================================================================#
+# This test consists of two phases: #
+# #
+# COLLECTION - Gather results from SHOW commands and SELECTs on the I_S/P_S #
+# tables into a single table. Tag each variable with the source (SHOW, SELECT, #
+# P_S, I_S) and compatibility mode setting (OFF, ON). #
+# #
+# VERIFICATION - Compare and cross-reference the results between and across #
+# sources and compatibility modes, factoring in the known variances. #
+# #
+# The verification phase assumes that there will be no variation between the #
+# 5.6 and 5.7 results as long as known discrepancies in scope handling are #
+# accounted for. Expected variations are tagged as "JUNK" and filtered from #
+# the comparisons. #
+# #
+# The expected scope for each variable was initially determined from the MySQL #
+# system and status variable documentation and then further verified by the #
+# actual implementation. #
+# #
+# The difference between how 5.6 and 5.7 manage query scope vs. variable scope #
+# are summarized as follows: #
+# #
+# *** SHOW_COMPATIBILITY_56 = ON *** #
+# #
+# SHOW GLOBAL STATUS / I_S.GLOBAL_STATUS #
+# GLOBAL - Yes #
+# SESSION - Yes, totaled across all threads #
+# SESSION-ONLY - Yes, current session #
+# #
+# SHOW SESSION STATUS / I_S.SESSION_STATUS #
+# GLOBAL - Yes #
+# SESSION - Yes, current session #
+# SESSION-ONLY - Yes #
+# #
+# SHOW GLOBAL VARIABLES / I_S.GLOBAL_VARIABLES #
+# GLOBAL - Yes #
+# SESSION - Yes #
+# SESSION-ONLY - No #
+# #
+# SHOW SESSION VARIABLES / I_S.SESSION_VARIABLES #
+# GLOBAL - Yes #
+# SESSION - Yes, current session #
+# SESSION-ONLY - Yes #
+# #
+# *** SHOW_COMPATIBILITY_56 = OFF *** #
+# #
+# Information Schema status and system tables are disabled #
+# (ER_FEATURE_DISABLED_SEE_DOC). #
+# #
+# SHOW GLOBAL STATUS / P_S.GLOBAL_STATUS #
+# GLOBAL - Yes #
+# SESSION - Yes (totaled across all threads for SHOW STATUS) #
+# SESSION-ONLY - No #
+# #
+# SHOW SESSION STATUS / P_S.SESSION_STATUS, STATUS_BY_THREAD #
+# GLOBAL - No #
+# SESSION - Yes #
+# SESSION-ONLY - Yes #
+# #
+# P_S.STATUS_BY_USER / HOST / ACCOUNT #
+# GLOBAL - No #
+# SESSION - Yes (totaled across all related threads) #
+# SESSION-ONLY - No #
+# #
+# SHOW GLOBAL VARIABLES / P_S.GLOBAL_VARIABLES #
+# GLOBAL - Yes #
+# SESSION - No #
+# SESSION-ONLY - No #
+# #
+# SHOW SESSION VARIABLES / P_S.SESSION_VARIABLES, VARIABLES_BY_THREAD #
+# GLOBAL - No #
+# SESSION - Yes #
+# SESSION-ONLY - Yes #
+# #
+# In addition to the differences in how variable scope is handled, comparisons #
+# between 5.6 and 5.7 must also account for differences in how variables are #
+# represented based upon the variable type or meaning. For example, #
+# SESSION-ONLY variables such as "Last Query Cost" have no meaning when #
+# aggregated by user, account or host. #
+# #
+# These additional differences are summarized as follows: #
+# #
+# I_S.GLOBAL_STATUS vs. P_S.GLOBAL_STATUS #
+# - Remove SESSION-ONLY #
+# - Remove SLAVE-ONLY #
+# #
+# I_S.SESSION_STATUS vs. P_S.SESSION_STATUS #
+# - Remove GLOBAL-only vars #
+# - Remove SLAVE-ONLY #
+# #
+# P_S.SESSION_STATUS vs. P_S.STATUS_BY_USER/HOST/ACCOUNT #
+# - Remove SESSION-ONLY #
+# - Remove non-aggregatable #
+# #
+################################################################################
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/no_protocol.inc
+
+create table test.sanity(
+ `SHOW_MODE` varchar(48) NOT NULL,
+ `SOURCE` varchar(64) NOT NULL,
+ `VARIABLE_NAME` varchar(64) NOT NULL);
+
+select thread_id from performance_schema.threads
+ where processlist_id = connection_id()
+ into @my_tid;
+
+select @@global.show_compatibility_56 into @show_compatibility_56_save;
+
+set @my_user='root';
+set @my_host='localhost';
+
+# Debug
+# select connection_id(), @my_tid, @my_user, @my_host;
+# show plugins
+--echo
+--echo ================================================================================
+--echo SHOW_COMPATIBILITY_56 = ON
+--echo ================================================================================
+set global show_compatibility_56 = on;
+
+--echo
+--echo # STEP 1-1
+insert into test.sanity
+ select "5.6", "I_S.GLOBAL_VARIABLES", variable_name
+ from information_schema.global_variables;
+
+--echo
+--echo # STEP 1-2
+insert into test.sanity
+ select "5.6", "I_S.SESSION_VARIABLES", variable_name
+ from information_schema.session_variables;
+
+--echo
+--echo # STEP 1-3
+insert into test.sanity
+ select "5.6", "P_S.GLOBAL_VARIABLES", variable_name
+ from performance_schema.global_variables;
+
+--echo
+--echo # STEP 1-4
+insert into test.sanity
+ select "5.6", "P_S.VARIABLES_BY_THREAD", variable_name
+ from performance_schema.variables_by_thread
+ where thread_id = @my_tid;
+
+--echo
+--echo # STEP 1-5
+insert into test.sanity
+ select "5.6", "P_S.SESSION_VARIABLES", variable_name
+ from performance_schema.session_variables;
+
+--echo
+--echo # STEP 1-6
+insert into test.sanity
+ select "5.6", "I_S.GLOBAL_STATUS", variable_name
+ from information_schema.global_status;
+
+--echo
+--echo # STEP 1-7
+insert into test.sanity
+ select "5.6", "I_S.SESSION_STATUS", variable_name
+ from information_schema.session_status;
+
+--echo
+--echo # STEP 1-8
+insert into test.sanity
+ select "5.6", "P_S.GLOBAL_STATUS", variable_name
+ from performance_schema.global_status;
+
+--echo
+--echo # STEP 1-9
+--echo # EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+ from performance_schema.status_by_thread;
+
+--echo
+--echo # STEP 1-10
+insert into test.sanity
+ select "5.6", "P_S.SESSION_STATUS", variable_name
+ from performance_schema.session_status;
+
+--echo
+--echo # STEP 1-11
+--echo # EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+ from performance_schema.status_by_account;
+
+--echo
+--echo # STEP 1-12
+--echo # EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+ from performance_schema.status_by_user;
+
+--echo
+--echo # STEP 1-13
+--echo # EMPTY, NO WARNINGS (not available in 5.6 mode)
+select *
+ from performance_schema.status_by_host;
+
+--echo
+--echo ================================================================================
+--echo SHOW_COMPATIBILITY_56 = OFF
+--echo ================================================================================
+set global show_compatibility_56 = off;
+
+--echo
+--echo # STEP 2-1
+--echo # FAILS WITH ERROR
+--error ER_FEATURE_DISABLED_SEE_DOC
+select *
+ from information_schema.global_variables;
+
+--echo
+--echo # STEP 2-2
+--echo # FAILS WITH ERROR
+--error ER_FEATURE_DISABLED_SEE_DOC
+select *
+ from information_schema.session_variables;
+
+--echo
+--echo # STEP 2-3
+insert into test.sanity
+ select "5.7", "P_S.GLOBAL_VARIABLES", variable_name
+ from performance_schema.global_variables;
+
+--echo
+--echo # STEP 2-4
+insert into test.sanity
+ select "5.7", "P_S.VARIABLES_BY_THREAD", variable_name
+ from performance_schema.variables_by_thread
+ where thread_id = @my_tid;
+
+--echo
+--echo # STEP 2-5
+insert into test.sanity
+ select "5.7", "P_S.SESSION_VARIABLES", variable_name
+ from performance_schema.session_variables;
+
+--echo
+--echo # STEP 2-6
+--echo # FAILS WITH ERROR
+--error ER_FEATURE_DISABLED_SEE_DOC
+select *
+ from information_schema.global_status;
+
+--echo
+--echo # STEP 2-7
+--echo # FAILS WITH ERROR
+--error ER_FEATURE_DISABLED_SEE_DOC
+select *
+ from information_schema.session_status;
+
+--echo
+--echo # STEP 2-8
+insert into test.sanity
+ select "5.7", "P_S.GLOBAL_STATUS", variable_name
+ from performance_schema.global_status;
+
+--echo
+--echo # STEP 2-9
+insert into test.sanity
+ select "5.7", "P_S.STATUS_BY_THREAD", variable_name
+ from performance_schema.status_by_thread
+ where thread_id = @my_tid;
+
+--echo
+--echo # STEP 2-10
+insert into test.sanity
+ select "5.7", "P_S.SESSION_STATUS", variable_name
+ from performance_schema.session_status;
+
+--echo
+--echo # STEP 2-11
+insert into test.sanity
+ select "5.7", "P_S.STATUS_BY_ACCOUNT", variable_name
+ from performance_schema.status_by_account
+ where `user` = @my_user and `host` = @my_host;
+
+--echo
+--echo # STEP 2-12
+insert into test.sanity
+ select "5.7", "P_S.STATUS_BY_USER", variable_name
+ from performance_schema.status_by_user
+ where `user` = @my_user;
+
+--echo
+--echo # STEP 2-13
+insert into test.sanity
+ select "5.7", "P_S.STATUS_BY_HOST", variable_name
+ from performance_schema.status_by_host
+ where `host` = @my_host;
+
+--echo
+--echo # STEP 2-14
+--echo # Known global variables in 5.6 that should not display in session queries.
+--echo # These should be global-only system variables.
+--disable_query_log
+insert into test.sanity values
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "AUTO_GENERATE_CERTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "AUTOMATIC_SP_PRIVILEGES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "AVOID_TEMPORAL_UPGRADE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BACK_LOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BASEDIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BIND_ADDRESS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOGGING_IMPOSSIBLE_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_CHECKSUM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_ERROR_ACTION"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_GROUP_COMMIT_SYNC_DELAY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_GTID_SIMPLE_RECOVERY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_MAX_FLUSH_QUEUE_TIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_ORDER_COMMITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "BINLOG_STMT_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "CHARACTER_SETS_DIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "CHARACTER_SET_SYSTEM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "CHECK_PROXY_USERS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "CONCURRENT_INSERT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "CONNECT_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "CORE_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DATADIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DATETIME_FORMAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DATE_FORMAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DEFAULT_AUTHENTICATION_PLUGIN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DEFAULT_PASSWORD_LIFETIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DELAYED_INSERT_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DELAYED_INSERT_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DELAYED_QUEUE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DELAY_KEY_WRITE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DISABLED_STORAGE_ENGINES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DISCONNECT_ON_EXPIRED_PASSWORD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "ENFORCE_GTID_CONSISTENCY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "EVENT_SCHEDULER"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "EXECUTED_GTIDS_COMPRESSION_PERIOD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "EXPIRE_LOGS_DAYS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FLUSH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FLUSH_TIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FT_BOOLEAN_SYNTAX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FT_MAX_WORD_LEN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FT_MIN_WORD_LEN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FT_QUERY_EXPANSION_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "FT_STOPWORD_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "GENERAL_LOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "GENERAL_LOG_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "GTID_EXECUTED_COMPRESSION_PERIOD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "GTID_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "GTID_PURGED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_COMPRESS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_CRYPT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_DYNAMIC_LOADING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_GEOMETRY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_OPENSSL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_PROFILING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_QUERY_CACHE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_RTREE_KEYS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_SSL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_STATEMENT_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HAVE_SYMLINK"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HOSTNAME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "HOST_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "IGNORE_BUILTIN_INNODB"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "IGNORE_DB_DIRS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INIT_CONNECT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INIT_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INIT_SLAVE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ADAPTIVE_FLUSHING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ADAPTIVE_FLUSHING_LWM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FLUSH_SYNC"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ADAPTIVE_HASH_INDEX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ADAPTIVE_HASH_INDEX_PARTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ADAPTIVE_MAX_SLEEP_DELAY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_API_BK_COMMIT_INTERVAL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_API_DISABLE_ROWLOCK"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_API_ENABLE_BINLOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_API_ENABLE_MDL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_API_TRX_LEVEL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_AUTOEXTEND_INCREMENT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_AUTOINC_LOCK_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BACKGROUND_DROP_LIST_EMPTY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_CHUNK_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_DUMP_AT_SHUTDOWN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_DUMP_NOW"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_DUMP_PCT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_EVICT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_FILENAME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_LOAD_ABORT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_LOAD_AT_STARTUP"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_LOAD_NOW"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUFFER_POOL_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_BUF_FLUSH_LIST_NOW"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CHANGE_BUFFERING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CHANGE_BUFFERING_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CHANGE_BUFFER_MAX_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CHECKSUMS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CHECKSUM_ALGORITHM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CMP_PER_INDEX_ENABLED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_COMMIT_CONCURRENCY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_COMPRESS_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_COMPRESSION_FAILURE_THRESHOLD_PCT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_COMPRESSION_LEVEL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_COMPRESSION_PAD_PCT_MAX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_CONCURRENCY_TICKETS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DATA_FILE_PATH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DATA_HOME_DIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DEFAULT_ROW_FORMAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DICT_STATS_DISABLED_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DISABLE_BACKGROUND_MERGE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DISABLE_RESIZE_BUFFER_POOL_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DISABLE_SORT_FILE_CACHE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DOUBLEWRITE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DOUBLEWRITE_BATCH_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FAST_SHUTDOWN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT_CHECK"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT_MAX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_PER_TABLE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILL_FACTOR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FIL_MAKE_PAGE_DIRTY_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FLUSHING_AVG_LOOPS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FLUSH_LOG_AT_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FLUSH_LOG_AT_TRX_COMMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FLUSH_METHOD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FLUSH_NEIGHBORS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FORCE_LOAD_CORRUPTED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FORCE_RECOVERY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FORCE_RECOVERY_CRASH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_AUX_TABLE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_ENABLE_DIAG_PRINT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_MAX_TOKEN_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_MIN_TOKEN_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_NUM_WORD_OPTIMIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_RESULT_CACHE_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_SERVER_STOPWORD_TABLE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_SORT_PLL_DEGREE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FT_TOTAL_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_IO_CAPACITY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_IO_CAPACITY_MAX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LARGE_PREFIX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOCKS_UNSAFE_FOR_BINLOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_BUFFER_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_CHECKPOINT_NOW"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_CHECKSUMS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_COMPRESSED_PAGES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_FILES_IN_GROUP"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_FILE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_GROUP_HOME_DIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_WRITE_AHEAD_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LRU_SCAN_DEPTH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MASTER_THREAD_DISABLED_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_DIRTY_PAGES_PCT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_DIRTY_PAGES_PCT_LWM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_PURGE_LAG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_PURGE_LAG_DELAY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_UNDO_LOG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MERGE_THRESHOLD_SET_ALL_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MONITOR_DISABLE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MONITOR_ENABLE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MONITOR_RESET"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MONITOR_RESET_ALL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_NUMA_INTERLEAVE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_OLD_BLOCKS_PCT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_OLD_BLOCKS_TIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ONLINE_ALTER_LOG_MAX_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_OPEN_FILES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_OPTIMIZE_FULLTEXT_ONLY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PAGE_CLEANERS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PAGE_CLEANER_DISABLED_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PAGE_HASH_LOCKS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PAGE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PRINT_ALL_DEADLOCKS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PURGE_BATCH_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PURGE_RUN_NOW"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PURGE_STOP_NOW"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_PURGE_THREADS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_RANDOM_READ_AHEAD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_READ_AHEAD_THRESHOLD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_READ_IO_THREADS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_READ_ONLY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_REPLICATION_DELAY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ROLLBACK_ON_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ROLLBACK_SEGMENTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SAVED_PAGE_NUMBER_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SEMAPHORE_WAIT_TIMEOUT_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SORT_BUFFER_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SPIN_WAIT_DELAY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_AUTO_RECALC"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_METHOD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_ON_METADATA"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_PERSISTENT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_PERSISTENT_SAMPLE_PAGES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_SAMPLE_PAGES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATS_TRANSIENT_SAMPLE_PAGES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATUS_OUTPUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_STATUS_OUTPUT_LOCKS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SYNC_ARRAY_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SYNC_SPIN_LOOPS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_SYNC_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_TEMP_DATA_FILE_PATH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_THREAD_CONCURRENCY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_THREAD_SLEEP_DELAY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_TRX_RSEG_N_SLOTS_DEBUG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_DIRECTORY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_LOG_TRUNCATE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_LOGS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_TABLESPACES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_USE_NATIVE_AIO"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_VERSION"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_WRITE_IO_THREADS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INTERNAL_TMP_DISK_STORAGE_ENGINE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "KEY_BUFFER_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "KEY_CACHE_AGE_THRESHOLD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "KEY_CACHE_BLOCK_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "KEY_CACHE_DIVISION_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LARGE_FILES_SUPPORT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LARGE_PAGES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LARGE_PAGE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LC_MESSAGES_DIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LICENSE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOCAL_INFILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOCKED_IN_MEMORY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_BIN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_BIN_BASENAME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_BIN_INDEX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_BIN_TRUST_FUNCTION_CREATORS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_BIN_USE_V1_ROW_EVENTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_ERROR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_ERROR_VERBOSITY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_OUTPUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_QUERIES_NOT_USING_INDEXES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SLAVE_UPDATES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SLOW_ADMIN_STATEMENTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SLOW_SLAVE_STATEMENTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SYSLOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SYSLOG_FACILITY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SYSLOG_INCLUDE_PID"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_SYSLOG_TAG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_THROTTLE_QUERIES_NOT_USING_INDEXES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_TIMESTAMPS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOG_WARNINGS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOWER_CASE_FILE_SYSTEM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "LOWER_CASE_TABLE_NAMES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MASTER_INFO_REPOSITORY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MASTER_VERIFY_CHECKSUM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_BINLOG_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_BINLOG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_BINLOG_STMT_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_CONNECTIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_CONNECT_ERRORS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_DIGEST_LENGTH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_PREPARED_STMT_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_RELAY_LOG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MAX_WRITE_LOCK_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "METADATA_LOCKS_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "METADATA_LOCKS_HASH_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MYISAM_DATA_POINTER_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MYISAM_MAX_SORT_FILE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MYISAM_MMAP_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MYISAM_RECOVER_OPTIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MYISAM_USE_MMAP"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "MYSQL_NATIVE_PASSWORD_PROXY_USERS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NAMED_PIPE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NAMED_PIPE_FULL_ACCESS_GROUP"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NDBINFO_DATABASE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NDBINFO_OFFLINE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NDBINFO_TABLE_PREFIX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NDBINFO_VERSION"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "NGRAM_TOKEN_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "OFFLINE_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "OLD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "OPEN_FILES_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_ACCOUNTS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_DIGESTS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_HOSTS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_COND_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_COND_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_FILE_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_FILE_HANDLES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_INDEX_STAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PERFORMANCE_SCHEMA_USERS_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PID_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PLUGIN_DIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PORT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "PROTOCOL_VERSION"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "QUERY_CACHE_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "QUERY_CACHE_MIN_RES_UNIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "QUERY_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "READ_ONLY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_BASENAME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_INDEX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_INFO_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_INFO_REPOSITORY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_PURGE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_RECOVERY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RELAY_LOG_SPACE_LIMIT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "REPORT_HOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "REPORT_PASSWORD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "REPORT_PORT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "REPORT_USER"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "RPL_STOP_SLAVE_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SECURE_AUTH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SECURE_FILE_PRIV"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SERVER_ID"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SERVER_ID_BITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SERVER_UUID"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHA256_PASSWORD_PRIVATE_KEY_PATH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHA256_PASSWORD_PUBLIC_KEY_PATH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHARED_MEMORY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHARED_MEMORY_BASE_NAME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHA256_PASSWORD_PROXY_USERS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SHOW_COMPATIBILITY_56"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SIMPLIFIED_BINLOG_GTID_RECOVERY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SKIP_EXTERNAL_LOCKING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SKIP_NAME_RESOLVE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SKIP_NETWORKING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SKIP_SHOW_DATABASE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_ALLOW_BATCHING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_CHECKPOINT_GROUP"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_CHECKPOINT_PERIOD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_COMPRESSED_PROTOCOL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_EXEC_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_LOAD_TMPDIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_MAX_ALLOWED_PACKET"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_NET_TIMEOUT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_PARALLEL_TYPE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_PARALLEL_WORKERS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_PENDING_JOBS_SIZE_MAX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_PRESERVE_COMMIT_ORDER"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_ROWS_SEARCH_ALGORITHMS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_SKIP_ERRORS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_SQL_VERIFY_CHECKSUM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_TRANSACTION_RETRIES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLAVE_TYPE_CONVERSIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLOW_LAUNCH_TIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLOW_QUERY_LOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SLOW_QUERY_LOG_FILE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SOCKET"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SQL_SLAVE_SKIP_COUNTER"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_CA"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_CAPATH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_CERT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_CIPHER"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_CRL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_CRLPATH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SSL_KEY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SUPER_READ_ONLY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "STORED_PROGRAM_CACHE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SYNC_BINLOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SYNC_FRM"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SYNC_MASTER_INFO"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SYNC_RELAY_LOG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SYNC_RELAY_LOG_INFO"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "SYSTEM_TIME_ZONE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "TABLE_DEFINITION_CACHE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "TABLE_OPEN_CACHE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "TABLE_OPEN_CACHE_INSTANCES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "THREAD_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "THREAD_HANDLING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "THREAD_STACK"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "TIME_FORMAT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "TMPDIR"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "VERSION"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "VERSION_COMMENT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "VERSION_COMPILE_MACHINE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "VERSION_COMPILE_OS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "REQUIRE_SECURE_TRANSPORT")
+;
+--enable_query_log
+
+--echo
+--echo # STEP 2-15
+--echo # Known global status in 5.6 that should not exist in session queries.
+--echo # These should be global-only status variables.
+--disable_query_log
+insert into test.sanity values
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "ABORTED_CLIENTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "ABORTED_CONNECTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "BINLOG_CACHE_DISK_USE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "BINLOG_CACHE_USE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "BINLOG_STMT_CACHE_DISK_USE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "BINLOG_STMT_CACHE_USE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTION_ERRORS_ACCEPT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTION_ERRORS_INTERNAL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTION_ERRORS_MAX_CONNECTIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTION_ERRORS_PEER_ADDRESS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTION_ERRORS_SELECT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CONNECTION_ERRORS_TCPWRAP"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "CREATED_TMP_FILES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "DELAYED_ERRORS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "DELAYED_INSERT_THREADS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "DELAYED_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "FLUSH_COMMANDS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_AHI_DROP_LOOKUPS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_AVAILABLE_UNDO_LOGS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_BYTES_DATA"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_BYTES_DIRTY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_DUMP_STATUS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_LOAD_STATUS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_DATA"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_DIRTY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_FLUSHED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_FREE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_LATCHED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_MISC"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_PAGES_TOTAL"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_READS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_READ_AHEAD"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_READ_AHEAD_EVICTED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_READ_AHEAD_RND"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_READ_REQUESTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_RESIZE_STATUS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_WAIT_FREE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_BUFFER_POOL_WRITE_REQUESTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_FSYNCS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_PENDING_FSYNCS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_PENDING_READS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_PENDING_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_READ"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_READS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_WRITTEN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DBLWR_PAGES_WRITTEN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DBLWR_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_HAVE_ATOMIC_BUILTINS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_LOG_WAITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_LOG_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_LOG_WRITE_REQUESTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_NUM_OPEN_FILES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OS_LOG_FSYNCS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OS_LOG_PENDING_FSYNCS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OS_LOG_PENDING_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OS_LOG_WRITTEN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES_CREATED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES_READ"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES_WRITTEN"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PURGE_TRX_ID_AGE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PURGE_VIEW_TRX_ID_AGE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROWS_DELETED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROWS_INSERTED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROWS_READ"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROWS_UPDATED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROW_LOCK_CURRENT_WAITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROW_LOCK_TIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROW_LOCK_TIME_AVG"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROW_LOCK_TIME_MAX"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ROW_LOCK_WAITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_TRUNCATED_STATUS_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_BLOCKS_NOT_FLUSHED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_BLOCKS_UNUSED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_BLOCKS_USED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_READS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_READ_REQUESTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_WRITES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "KEY_WRITE_REQUESTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "LOCKED_CONNECTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "MAX_USED_CONNECTIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "MAX_USED_CONNECTIONS_TIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "NOT_FLUSHED_DELAYED_ROWS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "OPENED_FILES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "OPEN_FILES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "OPEN_STREAMS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "OPEN_TABLE_DEFINITIONS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "ONGOING_ANONYMOUS_GTID_VIOLATING_TRANSACTION_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "ONGOING_ANONYMOUS_TRANSACTION_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "ONGOING_AUTOMATIC_GTID_VIOLATING_TRANSACTION_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_ACCOUNTS_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_COND_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_COND_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_DIGEST_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_FILE_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_FILE_HANDLES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_FILE_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_INDEX_STAT_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_HOSTS_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_LOCKER_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_MEMORY_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_METADATA_LOCK_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_MUTEX_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_MUTEX_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_NESTED_STATEMENT_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_PREPARED_STATEMENTS_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_PROGRAM_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_RWLOCK_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_RWLOCK_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_SOCKET_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_SOCKET_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_STAGE_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_STATEMENT_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_TABLE_HANDLES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_TABLE_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_THREAD_CLASSES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_THREAD_INSTANCES_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PERFORMANCE_SCHEMA_USERS_LOST"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "PREPARED_STMT_COUNT"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_FREE_BLOCKS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_FREE_MEMORY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_HITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_INSERTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_LOWMEM_PRUNES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_NOT_CACHED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_QUERIES_IN_CACHE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "QCACHE_TOTAL_BLOCKS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "RSA_PUBLIC_KEY"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SLAVE_OPEN_TEMP_TABLES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SLAVE_ROWS_LAST_SEARCH_ALGORITHM_USED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_ACCEPTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_ACCEPT_RENEGOTIATES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_CALLBACK_CACHE_HITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_CLIENT_CONNECTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_CONNECT_RENEGOTIATES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_CTX_VERIFY_DEPTH"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_CTX_VERIFY_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_FINISHED_ACCEPTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_FINISHED_CONNECTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_SESSION_CACHE_HITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_SESSION_CACHE_MISSES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_SESSION_CACHE_MODE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_SESSION_CACHE_OVERFLOWS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_SESSION_CACHE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_SESSION_CACHE_TIMEOUTS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "SSL_USED_SESSION_CACHE_ENTRIES"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "TABLE_LOCKS_IMMEDIATE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "TABLE_LOCKS_WAITED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "TC_LOG_MAX_PAGES_USED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "TC_LOG_PAGE_SIZE"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "TC_LOG_PAGE_WAITS"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "THREADS_CACHED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "THREADS_CONNECTED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "THREADS_CREATED"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "THREADS_RUNNING"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "UPTIME"),
+ ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "UPTIME_SINCE_FLUSH_STATUS")
+;
+--enable_query_log
+
+--echo
+--echo # STEP 2-15A
+--echo # COM counters appear in I_S.SESSION_STATUS, but not in P_S.SESSION_STATUS
+--disable_query_log
+insert into test.sanity values
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ADMIN_COMMANDS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_DB"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_DB_UPGRADE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_FUNCTION"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_INSTANCE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_SERVER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_TABLESPACE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ALTER_USER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ANALYZE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ASSIGN_TO_KEYCACHE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_BEGIN"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_BINLOG"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CALL_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CHANGE_DB"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CHANGE_MASTER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CHANGE_REPL_FILTER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CHECK"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CHECKSUM"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_COMMIT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_DB"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_FUNCTION"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_INDEX"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_SERVER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_TRIGGER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_UDF"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_USER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_CREATE_VIEW"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DEALLOC_SQL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DELETE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DELETE_MULTI"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DO"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_DB"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_FUNCTION"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_INDEX"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_SERVER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_TRIGGER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_USER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_DROP_VIEW"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_EMPTY_QUERY"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_EXECUTE_SQL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_EXPLAIN_OTHER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_FLUSH"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_GET_DIAGNOSTICS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_GROUP_REPLICATION_START"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_GROUP_REPLICATION_STOP"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_GRANT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_HA_CLOSE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_HA_OPEN"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_HA_READ"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_HELP"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_INSERT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_INSERT_SELECT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_INSTALL_PLUGIN"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_KILL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_LOAD"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_LOCK_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_OPTIMIZE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_PRELOAD_KEYS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_PREPARE_SQL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_PURGE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_PURGE_BEFORE_DATE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_RELEASE_SAVEPOINT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_RENAME_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_RENAME_USER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_REPAIR"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_REPLACE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_REPLACE_SELECT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_RESET"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_RESIGNAL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_REVOKE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_REVOKE_ALL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ROLLBACK"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_ROLLBACK_TO_SAVEPOINT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SAVEPOINT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SELECT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SET_OPTION"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_BINLOGS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_BINLOG_EVENTS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CHARSETS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_COLLATIONS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_DB"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_FUNC"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_PROC"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_TRIGGER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_CREATE_USER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_DATABASES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_ENGINE_LOGS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_ENGINE_MUTEX"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_ENGINE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_ERRORS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_EVENTS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_FIELDS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_FUNCTION_CODE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_FUNCTION_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_GRANTS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_KEYS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_MASTER_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_OPEN_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PLUGINS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PRIVILEGES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PROCEDURE_CODE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PROCEDURE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PROCESSLIST"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PROFILE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_PROFILES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_RELAYLOG_EVENTS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_SLAVE_HOSTS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_SLAVE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_SLAVE_STATUS_NONBLOCKING"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_STORAGE_ENGINES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_TABLE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_TRIGGERS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_VARIABLES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SHOW_WARNINGS"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SIGNAL"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SLAVE_START"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_SLAVE_STOP"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_STMT_CLOSE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_STMT_EXECUTE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_STMT_FETCH"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_STMT_PREPARE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_STMT_RESET"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_STMT_SEND_LONG_DATA"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_TRUNCATE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_UNINSTALL_PLUGIN"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_UNLOCK_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_UPDATE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_UPDATE_MULTI"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_XA_COMMIT"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_XA_END"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_XA_PREPARE"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_XA_RECOVER"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_XA_ROLLBACK"),
+ ("JUNK: COM COUNTER", "I_S.SESSION_STATUS", "COM_XA_START")
+;
+
+--enable_query_log
+
+--echo
+--echo # STEP 2-15B
+--echo # These slave status counters appear in I_S.SESSION_STATUS, but not in P_S.SESSION_STATUS
+insert into test.sanity values
+ ("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_HEARTBEAT_PERIOD"),
+ ("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_LAST_HEARTBEAT"),
+ ("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_RECEIVED_HEARTBEATS"),
+ ("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_RETRIED_TRANSACTIONS"),
+ ("JUNK: SLAVE-ONLY", "I_S.SESSION_STATUS", "SLAVE_RUNNING")
+;
+
+--echo
+--echo # STEP 2-16
+--echo # Known session-only status in 5.6 that should not exist in global queries.
+insert into test.sanity values
+ ("JUNK: SESSION-ONLY", "I_S.GLOBAL_STATUS", "COMPRESSION"),
+ ("JUNK: SESSION-ONLY", "I_S.GLOBAL_STATUS", "LAST_QUERY_COST"),
+ ("JUNK: SESSION-ONLY", "I_S.GLOBAL_STATUS", "LAST_QUERY_PARTIAL_PLANS")
+;
+
+--echo
+--echo # STEP 2-16A
+--echo # COM counters appear in I_S.GLOBAL_STATUS but not in P_S.GLOBAL_STATUS
+--disable_query_log
+insert into test.sanity values
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ADMIN_COMMANDS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_DB"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_DB_UPGRADE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_FUNCTION"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_INSTANCE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_SERVER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_TABLESPACE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ALTER_USER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ANALYZE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ASSIGN_TO_KEYCACHE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_BEGIN"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_BINLOG"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CALL_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CHANGE_DB"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CHANGE_MASTER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CHANGE_REPL_FILTER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CHECK"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CHECKSUM"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_COMMIT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_DB"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_FUNCTION"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_INDEX"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_SERVER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_TRIGGER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_UDF"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_USER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_CREATE_VIEW"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DEALLOC_SQL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DELETE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DELETE_MULTI"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DO"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_DB"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_FUNCTION"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_INDEX"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_PROCEDURE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_SERVER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_TRIGGER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_USER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_DROP_VIEW"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_EMPTY_QUERY"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_EXECUTE_SQL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_EXPLAIN_OTHER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_FLUSH"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_GET_DIAGNOSTICS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_GRANT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_GROUP_REPLICATION_START"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_GROUP_REPLICATION_STOP"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_HA_CLOSE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_HA_OPEN"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_HA_READ"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_HELP"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_INSERT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_INSERT_SELECT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_INSTALL_PLUGIN"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_KILL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_LOAD"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_LOCK_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_OPTIMIZE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_PRELOAD_KEYS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_PREPARE_SQL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_PURGE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_PURGE_BEFORE_DATE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_RELEASE_SAVEPOINT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_RENAME_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_RENAME_USER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_REPAIR"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_REPLACE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_REPLACE_SELECT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_RESET"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_RESIGNAL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_REVOKE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_REVOKE_ALL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ROLLBACK"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_ROLLBACK_TO_SAVEPOINT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SAVEPOINT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SELECT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SET_OPTION"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_BINLOGS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_BINLOG_EVENTS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CHARSETS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_COLLATIONS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_DB"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_EVENT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_FUNC"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_PROC"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_TABLE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_TRIGGER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_CREATE_USER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_DATABASES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_ENGINE_LOGS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_ENGINE_MUTEX"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_ENGINE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_ERRORS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_EVENTS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_FIELDS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_FUNCTION_CODE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_FUNCTION_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_GRANTS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_KEYS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_MASTER_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_OPEN_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PLUGINS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PRIVILEGES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PROCEDURE_CODE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PROCEDURE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PROCESSLIST"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PROFILE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_PROFILES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_RELAYLOG_EVENTS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_SLAVE_HOSTS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_SLAVE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_SLAVE_STATUS_NONBLOCKING"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_STORAGE_ENGINES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_TABLE_STATUS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_TRIGGERS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_VARIABLES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SHOW_WARNINGS"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SIGNAL"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SLAVE_START"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_SLAVE_STOP"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_STMT_CLOSE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_STMT_EXECUTE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_STMT_FETCH"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_STMT_PREPARE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_STMT_RESET"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_STMT_SEND_LONG_DATA"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_TRUNCATE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_UNINSTALL_PLUGIN"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_UNLOCK_TABLES"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_UPDATE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_UPDATE_MULTI"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_XA_COMMIT"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_XA_END"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_XA_PREPARE"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_XA_RECOVER"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_XA_ROLLBACK"),
+ ("JUNK: COM COUNTER", "I_S.GLOBAL_STATUS", "COM_XA_START")
+ ;
+
+--enable_query_log
+
+--echo
+--echo # STEP 2-16B
+--echo # These slave status counters appear in I_S.GLOBAL_STATUS, but not in P_S.GLOBAL_STATUS
+insert into test.sanity values
+ ("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_HEARTBEAT_PERIOD"),
+ ("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_LAST_HEARTBEAT"),
+ ("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_RECEIVED_HEARTBEATS"),
+ ("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_RETRIED_TRANSACTIONS"),
+ ("JUNK: SLAVE-ONLY", "I_S.GLOBAL_STATUS", "SLAVE_RUNNING")
+;
+
+--echo
+--echo # STEP 2-17
+--echo # Status variables that should not exist in queries that aggregate across threads.
+--echo # Criteria: Session-only OR non-aggregatable.
+insert into test.sanity values
+ ("JUNK", "NO AGGREGATE", "COMPRESSION"),
+ ("JUNK", "NO AGGREGATE", "LAST_QUERY_COST"),
+ ("JUNK", "NO AGGREGATE", "LAST_QUERY_PARTIAL_PLANS"),
+ ("JUNK", "NO AGGREGATE", "OPEN_TABLES"),
+ ("JUNK", "NO AGGREGATE", "QUERIES"),
+ ("JUNK", "NO AGGREGATE", "SLOW_LAUNCH_THREADS"),
+ ("JUNK", "NO AGGREGATE", "SSL_CIPHER"),
+ ("JUNK", "NO AGGREGATE", "SSL_CIPHER_LIST"),
+ ("JUNK", "NO AGGREGATE", "SSL_DEFAULT_TIMEOUT"),
+ ("JUNK", "NO AGGREGATE", "SSL_SERVER_NOT_AFTER"),
+ ("JUNK", "NO AGGREGATE", "SSL_SERVER_NOT_BEFORE"),
+ ("JUNK", "NO AGGREGATE", "SSL_SESSIONS_REUSED"),
+ ("JUNK", "NO AGGREGATE", "SSL_VERIFY_DEPTH"),
+ ("JUNK", "NO AGGREGATE", "SSL_VERIFY_MODE"),
+ ("JUNK", "NO AGGREGATE", "SSL_VERSION")
+;
+
+#Debug
+#select * from test.sanity order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 1A
+--echo Present in 5.6 P_S.GLOBAL_VARIABLES (1-3)
+--echo Missing in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 1B
+--echo Present in 5.7 P_S.GLOBAL_VARIABLES (2-3)
+--echo Missing in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 2A
+--echo Present in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+--echo Missing in 5.6 P_S.GLOBAL_VARIABLES (1-3)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.GLOBAL_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 2B
+--echo Present in 5.6 I_S.GLOBAL_VARIABLES (1-1)
+--echo Missing in 5.7 P_S.GLOBAL_VARIABLES (2-3)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.GLOBAL_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 3A
+--echo Present in 5.6 P_S.SESSION_VARIABLES (1-5)
+--echo Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 3B
+--echo Present in 5.7 P_S.SESSION_VARIABLES (2-5)
+--echo Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 4A
+--echo Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo Missing in 5.6 P_S.SESSION_VARIABLES (1-5)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 4B
+--echo Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo Missing in 5.7 P_S.SESSION_VARIABLES (2-5)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 5A
+--echo Present in 5.6 P_S.VARIABLES_BY_THREAD (1-4)
+--echo Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.VARIABLES_BY_THREAD"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 5B
+--echo Present in 5.7 P_S.VARIABLES_BY_THREAD (2-4)
+--echo Missing in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.VARIABLES_BY_THREAD"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 5C
+--echo Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo Missing in 5.6 P_S.VARIABLES_BY_THREAD (1-4)
+--echo EXPECT NOTHING BESIDE KNOWN GLOBAL VARIABLES (2-14)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.VARIABLES_BY_THREAD")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 5D
+--echo Present in 5.6 I_S.SESSION_VARIABLES (1-2)
+--echo Missing in 5.7 P_S.VARIABLES_BY_THREAD (2-5)
+--echo EXPECT NOTHING BESIDE KNOWN GLOBAL VARIABLES (2-14)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.VARIABLES_BY_THREAD")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 5E
+--echo KNOWN GLOBAL VARIABLES (2-14)
+--echo Expect missing in 5.6 P_S.VARIABLES_BY_THREAD (1-4)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.VARIABLES_BY_THREAD")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 5F
+--echo KNOWN GLOBAL VARIABLES (2-14)
+--echo Expect missing in 5.7 P_S.VARIABLES_BY_THREAD (2-5)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "JUNK: GLOBAL-ONLY"
+ and source = "I_S.SESSION_VARIABLES"
+ and upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.VARIABLES_BY_THREAD")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 6A
+--echo Present in 5.7 P_S.GLOBAL_STATUS (2-8)
+--echo Missing in 5.6 I_S.GLOBAL_STATUS (1-6)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.GLOBAL_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 6B
+--echo Present in 5.7 P_S.GLOBAL_STATUS (2-8)
+--echo Missing in 5.6 P_S.GLOBAL_STATUS (1-8)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.GLOBAL_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 6C
+--echo Present in 5.6 P_S.GLOBAL_STATUS (1-8)
+--echo Missing in 5.7 P_S.GLOBAL_STATUS (2-8)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 7
+--echo Present in 5.6 I_S.GLOBAL_STATUS (1-6)
+--echo Missing in 5.7 P_S.GLOBAL_STATUS (2-8)
+--echo EXPECT NOTHING AFTER REMOVING KNOWN SESSION-ONLY, COM COUNTERS AND SLAVE-ONLY (2-16 & 2-16A & 2-16B)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.GLOBAL_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: SESSION-ONLY" or show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+ and source = "I_S.GLOBAL_STATUS")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 8
+--echo KNOWN SESSION-ONLY (2-16)
+--echo KNOWN COM COUNTERS (2-16A)
+--echo KNOWN SLAVE-ONLY (2-16B)
+--echo Status variables that should NOT be present in 5.7 P_S.GLOBAL_STATUS (2-8)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.GLOBAL_STATUS"
+ and upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: SESSION-ONLY" or show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+ and source = "I_S.GLOBAL_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 9A
+--echo Present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo Missing in 5.6 I_S.SESSION_STATUS (1-7)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 9B
+--echo Present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo Missing in 5.6 P_S.SESSION_STATUS (1-10)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 9C
+--echo Present in 5.6 P_S.SESSION_STATUS (1-10)
+--echo Missing in 5.7 P_S.SESSION_STATUS (2-10)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 10
+--echo Present in 5.6 I_S.SESSION_STATUS (1-7)
+--echo Missing in 5.7 P_S.SESSION_STATUS (2-10)
+--echo EXPECT NOTHING AFTER REMOVING KNOWN COM COUNTERS AND SLAVE-ONLY (2-15A & 2-15B)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.6"
+ and source = "I_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+ and source = "I_S.SESSION_STATUS")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 11
+--echo KNOWN COM COUNTERS (2-15A)
+--echo KNOWN SLAVE-ONLY (2-15B)
+--echo Status variables that should NOT be present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: COM COUNTER" or show_mode = "JUNK: SLAVE-ONLY")
+ and source = "I_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 12
+--echo Present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo Missing in 5.7 P_S.STATUS_BY_THREAD
+--echo EXPECT NOTHING AFTER REMOVING KNOWN GLOBAL-ONLY (2-15)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_THREAD")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: GLOBAL-ONLY")
+ and source = "I_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 13
+--echo Present in 5.7 P_S.STATUS_BY_THREAD
+--echo Missing in 5.7 P_S.SESSION_STATUS (2-10)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_THREAD"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 14
+--echo Present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo Missing in 5.7 P_S.STATUS_BY_ACCOUNT
+--echo EXPECT NOTHING AFTER REMOVING
+--echo - KNOWN GLOBAL-ONLY (2-15)
+--echo - STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: GLOBAL-ONLY")
+ and source = "I_S.SESSION_STATUS")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_ACCOUNT")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 15
+--echo Present in 5.7 P_S.STATUS_BY_ACCOUNT
+--echo Missing in 5.7 P_S.SESSION_STATUS (2-10)
+--echo EXPECT NOTHING
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_ACCOUNT"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 16
+--echo KNOWN STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+--echo Status variables that should NOT be present in 5.7 P_S.STATUS_BY_ACCOUNT
+--echo ================================================================================
+select * from performance_schema.status_by_account
+ where upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+ order by variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 17
+--echo Present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo Missing in 5.7 P_S.STATUS_BY_USER
+--echo EXPECT NOTHING AFTER REMOVING
+--echo - KNOWN GLOBAL-ONLY (2-15)
+--echo - STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: GLOBAL-ONLY")
+ and source = "I_S.SESSION_STATUS")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_USER")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 18
+--echo Present in 5.7 P_S.STATUS_BY_USER
+--echo Missing in 5.7 P_S.SESSION_STATUS (2-10)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_USER"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 19
+--echo KNOWN STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+--echo Status variables that should NOT be present in 5.7 P_S.STATUS_BY_USER
+--echo ================================================================================
+select * from performance_schema.status_by_user
+ where upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+ order by variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 20
+--echo Present in 5.7 P_S.SESSION_STATUS (2-10)
+--echo Missing in 5.7 P_S.STATUS_BY_HOST
+--echo EXPECT NOTHING AFTER REMOVING
+--echo - KNOWN GLOBAL-ONLY (2-15)
+--echo - STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where (show_mode = "JUNK: GLOBAL-ONLY")
+ and source = "I_S.SESSION_STATUS")
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_HOST")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 21
+--echo Present in 5.7 P_S.STATUS_BY_HOST
+--echo Missing in 5.7 P_S.SESSION_STATUS (2-10)
+--echo ================================================================================
+select * from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.STATUS_BY_HOST"
+ and upper(variable_name) not in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "5.7"
+ and source = "P_S.SESSION_STATUS")
+ order by show_mode, source, variable_name;
+
+--echo
+--echo ================================================================================
+--echo TEST 22
+--echo KNOWN STATUS VARS THAT CAN'T BE AGGREGATED (2-17)
+--echo Status variables that should NOT be present in 5.7 P_S.STATUS_BY_HOST
+--echo ================================================================================
+select * from performance_schema.status_by_host
+ where upper(variable_name) in (
+ select upper(variable_name) from test.sanity
+ where show_mode = "JUNK"
+ and source = "NO AGGREGATE")
+ order by variable_name;
+
+--echo
+--echo ================================================================================
+--echo CLEAN UP
+--echo ================================================================================
+set @@global.show_compatibility_56 = @show_compatibility_56_save;
+drop table test.sanity;
+
+
diff --git a/mysql-test/suite/perfschema/t/sizing_default.cnf b/mysql-test/suite/perfschema/t/sizing_default.cnf
deleted file mode 100644
index 6a929998329..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_default.cnf
+++ /dev/null
@@ -1,37 +0,0 @@
-
-!include include/default_mysqld_autosize.cnf
-
-[mysqld.1]
-
-# Default values used in the server, out of the box
-# open_files_limit can be scaled down based on the os configuration (ulimit -n),
-# so to get a stable test output, make sure ulimit -n is big enough
-#
-# What is supposed to happen here by default:
-# table_open_cache = 2000
-# table_definition_cache = 400 + 2000/2 = 1400
-# max_connections = 151
-
-# Automated sizing for everything
-
-loose-performance-schema-accounts-size=-1
-loose-performance-schema-digests-size=-1
-loose-performance-schema-hosts-size=-1
-loose-performance-schema-users-size=-1
-
-loose-performance-schema-events-waits-history-size=-1
-loose-performance-schema-events-waits-history-long-size=-1
-loose-performance-schema-events-stages-history-size=-1
-loose-performance-schema-events-stages-history-long-size=-1
-loose-performance-schema-events-statements-history-size=-1
-loose-performance-schema-events-statements-history-long-size=-1
-
-loose-performance-schema-max-mutex-instances=-1
-loose-performance-schema-max-rwlock-instances=-1
-loose-performance-schema-max-cond-instances=-1
-loose-performance-schema-max-file-instances=-1
-loose-performance-schema-max-socket-instances=-1
-loose-performance-schema-max-thread-instances=-1
-loose-performance-schema-max-table-instances=-1
-loose-performance-schema-max-table-handles=-1
-
diff --git a/mysql-test/suite/perfschema/t/sizing_default.test b/mysql-test/suite/perfschema/t/sizing_default.test
deleted file mode 100644
index d5fb8be9f77..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_default.test
+++ /dev/null
@@ -1,31 +0,0 @@
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
---source include/have_64bit.inc
---source include/not_valgrind.inc
---source ../include/have_aligned_memory.inc
-
-# Skip test if not defaults is used.
-let $max_open_files_limit= `SELECT @@open_files_limit < 5000`;
-if ($max_open_files_limit)
-{
- skip Need open_files_limit to be at least 5000;
-}
-let $max_table_open_cache= `SELECT @@table_open_cache != 2000`;
-if ($max_table_open_cache)
-{
- skip Need table_open_cache to be exactly 2000;
-}
-let $max_table_definition_cache= `SELECT @@table_definition_cache != 1400`;
-if ($max_table_definition_cache)
-{
- skip Need table_definition_cache to be exactly 1400;
-}
-let $max_connections= `SELECT @@max_connections != 151`;
-if ($max_connections)
-{
- skip Need max_connections to be exactly 151;
-}
-
---source ../include/sizing_auto.inc
-
diff --git a/mysql-test/suite/perfschema/t/sizing_growth-master.opt b/mysql-test/suite/perfschema/t/sizing_growth-master.opt
deleted file mode 100644
index 69f0f157f70..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_growth-master.opt
+++ /dev/null
@@ -1,3 +0,0 @@
---force-restart
---innodb_file_per_table=1
-
diff --git a/mysql-test/suite/perfschema/t/sizing_growth.test b/mysql-test/suite/perfschema/t/sizing_growth.test
deleted file mode 100644
index d6944d2aee0..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_growth.test
+++ /dev/null
@@ -1,478 +0,0 @@
-# Tests for PERFORMANCE_SCHEMA
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
-#
-# Important note:
-# this test is extremely sensitive to how threads are running inside the server,
-# so it has it's own -master.opt file, to enforce it runs alone in mysqld
-#
-
-# Setup
-
-flush status;
-flush tables;
-
-# Remove to debug
---disable_result_log
-
-# Make sure the internal server caches are all full
-select * from performance_schema.mutex_instances;
-select * from performance_schema.rwlock_instances;
-select * from performance_schema.cond_instances;
-select * from performance_schema.file_instances;
-
-select count(*) from performance_schema.mutex_instances
- into @v0_mutex_instances;
-
-select count(*) from performance_schema.rwlock_instances
- into @v0_rwlock_instances;
-
-select count(*) from performance_schema.cond_instances
- into @v0_cond_instances;
-
-select count(*) from performance_schema.file_instances
- into @v0_file_instances;
-
-select count(*) from performance_schema.mutex_instances
- into @v1_mutex_instances;
-
-select count(*) from performance_schema.rwlock_instances
- into @v1_rwlock_instances;
-
-select count(*) from performance_schema.cond_instances
- into @v1_cond_instances;
-
-select count(*) from performance_schema.file_instances
- into @v1_file_instances;
-
-select count(name), name from performance_schema.mutex_instances
- group by name;
-
-select count(name), name from performance_schema.rwlock_instances
- group by name;
-
-select count(name), name from performance_schema.cond_instances
- group by name;
-
-select count(event_name), event_name from performance_schema.file_instances
- group by event_name;
-
-begin;
-create table test.t1(a int) engine = innodb;
-create table test.t2(a int) engine = innodb;
-create table test.t3(a int) engine = innodb;
-create table test.t4(a int) engine = innodb;
-create table test.t5(a int) engine = innodb;
-create table test.t6(a int) engine = innodb;
-create table test.t7(a int) engine = innodb;
-create table test.t8(a int) engine = innodb;
-create table test.t9(a int) engine = innodb;
-create table test.t10(a int) engine = innodb;
-
-# Make sure there is at least 1 table handle,
-# to fully initialize the storage engine share if needed.
-select * from test.t1;
-select * from test.t2;
-select * from test.t3;
-select * from test.t4;
-select * from test.t5;
-select * from test.t6;
-select * from test.t7;
-select * from test.t8;
-select * from test.t9;
-select * from test.t10;
-commit;
-
-select count(*) from performance_schema.mutex_instances
- into @v2_mutex_instances;
-
-select count(*) from performance_schema.rwlock_instances
- into @v2_rwlock_instances;
-
-select count(*) from performance_schema.cond_instances
- into @v2_cond_instances;
-
-select count(*) from performance_schema.file_instances
- into @v2_file_instances;
-
-select count(name), name from performance_schema.mutex_instances
- group by name;
-
-select count(name), name from performance_schema.rwlock_instances
- group by name;
-
-select count(name), name from performance_schema.cond_instances
- group by name;
-
-select count(event_name), event_name from performance_schema.file_instances
- group by event_name;
-
-select @v2_mutex_instances, @v1_mutex_instances, @v0_mutex_instances;
-select @v2_rwlock_instances, @v1_rwlock_instances, @v0_rwlock_instances;
-select @v2_cond_instances, @v1_cond_instances, @v0_cond_instances;
-select @v2_file_instances, @v1_file_instances, @v0_file_instances;
-
-select round((@v2_mutex_instances - @v1_mutex_instances) / 10)
- into @mutex_per_share;
-select round((@v2_rwlock_instances - @v1_rwlock_instances) / 10)
- into @rwlock_per_share;
-select round((@v2_cond_instances - @v1_cond_instances) / 10)
- into @cond_per_share;
-select round((@v2_file_instances - @v1_file_instances) / 10)
- into @file_per_share;
-
-connect (con1, localhost, root,,);
-select "con1 connected";
-
-connect (con2, localhost, root,,);
-select "con2 connected";
-
-connect (con3, localhost, root,,);
-select "con3 connected";
-
-connect (con4, localhost, root,,);
-select "con4 connected";
-
-connect (con5, localhost, root,,);
-select "con5 connected";
-
-connect (con6, localhost, root,,);
-select "con6 connected";
-
-connect (con7, localhost, root,,);
-select "con7 connected";
-
-connect (con8, localhost, root,,);
-select "con8 connected";
-
-connect (con9, localhost, root,,);
-select "con9 connected";
-
-connect (con10, localhost, root,,);
-select "con10 connected";
-
-connection default;
-
-select count(*) from performance_schema.mutex_instances
- into @v3_mutex_instances;
-
-select count(*) from performance_schema.rwlock_instances
- into @v3_rwlock_instances;
-
-select count(*) from performance_schema.cond_instances
- into @v3_cond_instances;
-
-select count(*) from performance_schema.file_instances
- into @v3_file_instances;
-
-select count(name), name from performance_schema.mutex_instances
- group by name;
-
-select count(name), name from performance_schema.rwlock_instances
- group by name;
-
-select count(name), name from performance_schema.cond_instances
- group by name;
-
-select count(event_name), event_name from performance_schema.file_instances
- group by event_name;
-
-select @v3_mutex_instances, @v2_mutex_instances;
-select @v3_rwlock_instances, @v2_rwlock_instances;
-select @v3_cond_instances, @v2_cond_instances;
-select @v3_file_instances, @v2_file_instances;
-
-select round((@v3_mutex_instances - @v2_mutex_instances) / 10)
- into @mutex_per_con;
-select round((@v3_rwlock_instances - @v2_rwlock_instances) / 10)
- into @rwlock_per_con;
-select round((@v3_cond_instances - @v2_cond_instances) / 10)
- into @cond_per_con;
-select round((@v3_file_instances - @v2_file_instances) / 10)
- into @file_per_con;
-
---connection con1
-
-lock table test.t1 write, test.t2 write, test.t3 write, test.t4 write,
-test.t5 write, test.t6 write, test.t7 write, test.t8 write, test.t9 write,
-test.t10 write;
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con2
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con3
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con4
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con5
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con6
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con7
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con8
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con9
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
---connection con10
-
---send
-select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
- from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
-
-connection default;
-
-select count(*) from performance_schema.mutex_instances
- into @v4_mutex_instances;
-
-select count(*) from performance_schema.rwlock_instances
- into @v4_rwlock_instances;
-
-select count(*) from performance_schema.cond_instances
- into @v4_cond_instances;
-
-select count(*) from performance_schema.file_instances
- into @v4_file_instances;
-
-select count(name), name from performance_schema.mutex_instances
- group by name;
-
-select count(name), name from performance_schema.rwlock_instances
- group by name;
-
-select count(name), name from performance_schema.cond_instances
- group by name;
-
-select count(event_name), event_name from performance_schema.file_instances
- group by event_name;
-
-select @v4_mutex_instances, @v3_mutex_instances;
-select @v4_rwlock_instances, @v3_rwlock_instances;
-select @v4_cond_instances, @v3_cond_instances;
-select @v4_file_instances, @v3_file_instances;
-
-select round((@v4_mutex_instances - @v3_mutex_instances) / 10)
- into @mutex_per_handle;
-select round((@v4_rwlock_instances - @v3_rwlock_instances) / 10)
- into @rwlock_per_handle;
-select round((@v4_cond_instances - @v3_cond_instances) / 10)
- into @cond_per_handle;
-select round((@v4_file_instances - @v3_file_instances) / 10)
- into @file_per_handle;
-
---connection con1
---reap
-
-unlock tables;
-
---connection con2
---reap
-
---connection con3
---reap
-
---connection con4
---reap
-
---connection con5
---reap
-
---connection con6
---reap
-
---connection con7
---reap
-
---connection con8
---reap
-
---connection con9
---reap
-
---connection con10
---reap
-
---disconnect con1
---disconnect con2
---disconnect con3
---disconnect con4
---disconnect con5
---disconnect con6
---disconnect con7
---disconnect con8
---disconnect con9
---disconnect con10
-
---connection default
-
-drop table test.t1;
-drop table test.t2;
-drop table test.t3;
-drop table test.t4;
-drop table test.t5;
-drop table test.t6;
-drop table test.t7;
-drop table test.t8;
-drop table test.t9;
-drop table test.t10;
-
---enable_result_log
-
-#
-# This test must have *_lost = 0,
-# otherwise the measurement is just wrong.
-#
-
-show status like "performance_schema%";
-
-#
-# Expecting 2:
-# - wait/synch/mutex/sql/MDL_wait::LOCK_wait_status
-# - wait/synch/mutex/sql/TABLE_SHARE::LOCK_ha_data
-# plus mutexes used inside the storage engine
-# This is very storage engine dependent
-# For innodb:
-# - wait/synch/mutex/innodb/autoinc_mutex
-# - wait/synch/mutex/innodb/os_mutex
-# Note that depending on the platform,
-# and the version of the compiler used,
-# code in the server may use either native platform atomics
-# or a mutex.
-# Note also that in DEBUG builds, code uses more mutexes.
-# Because of all these parameters,
-# this test is disabled, as predicting an exact number is difficult.
-#
-# commented: select @mutex_per_share <= 5;
-
-#
-# Expecting 1:
-# - wait/synch/rwlock/sql/MDL_lock::rwlock
-# plus rwlocks used inside the storage engine
-# This is very storage engine dependent
-#
-select @rwlock_per_share <= 3;
-
-#
-# Expecting 0:
-#
-select @cond_per_share;
-
-#
-# Expecting 1:
-# - wait/io/file/sql/FRM
-# plus files used inside the storage engine
-# This is very storage engine dependent
-#
-select @file_per_share <= 3;
-
-#
-# Expecting 3:
-# - wait/synch/mutex/mysys/my_thread_var::mutex
-# - wait/synch/mutex/mysys/THR_LOCK::mutex
-# - wait/synch/mutex/sql/THD::LOCK_thd_data
-#
-select @mutex_per_con;
-
-#
-# Expecting 1:
-# - wait/synch/rwlock/sql/MDL_context::LOCK_waiting_for
-#
-select @rwlock_per_con;
-
-#
-# Expecting 2:
-# - wait/synch/cond/mysys/my_thread_var::suspend
-# - wait/synch/cond/sql/MDL_context::COND_wait_status
-#
-select @cond_per_con;
-
-#
-# Expecting 0:
-#
-select @file_per_con;
-
-#
-# Expecting 0:
-#
-select @mutex_per_handle;
-
-#
-# Expecting 0:
-#
-select @rwlock_per_handle;
-
-#
-# Expecting 0:
-#
-select @cond_per_handle;
-
-#
-# Expecting 0:
-#
-select @file_per_handle;
-
-#
-# IMPORTANT NOTE:
-# when any measurement here changes, the heuristics
-# in storage/perfschema/pfs_autosize.cc need to be updated.
-# Note that this in turns will lead to different estimations for automated
-# sizing, and imply to update the results for sizing_*.
-#
-
-# commented: (@mutex_per_share <= 5)
-# Mutexes are not instrumented by default,
-# not enforcing mutex estimates
-
-select if(
- (@rwlock_per_share <= 3)
- AND (@cond_per_share = 0)
- AND (@file_per_share <= 3)
- AND (@mutex_per_con = 3)
- AND (@rwlock_per_con = 1)
- AND (@cond_per_con = 2)
- AND (@file_per_con = 0)
- AND (@mutex_per_handle = 0)
- AND (@rwlock_per_handle = 0)
- AND (@cond_per_handle = 0)
- AND (@file_per_handle = 0),
- "OK: heuristics are up to date",
- "FAILED: heuristics need to be updated")
- as status;
-
diff --git a/mysql-test/suite/perfschema/t/sizing_high.cnf b/mysql-test/suite/perfschema/t/sizing_high.cnf
deleted file mode 100644
index 8445ff60928..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_high.cnf
+++ /dev/null
@@ -1,56 +0,0 @@
-
-!include include/default_mysqld_autosize.cnf
-
-[mysqld.1]
-
-# WARNING about open_files_limit and ulimit -n
-#
-# mysqld checks how many files can be opened on the machine,
-# and this is by definition very:
-# - os dependent, see OS_FILE_LIMIT, HAVE_GETRLIMIT
-# - configuration dependent, for each machine (ulimit -n), see
-# my_set_max_open_files() in mysys/my_file.c,
-# see getrlimit(RLIMIT_NOFILE)
-#
-# Based on the this, the server tunes _down_ max_connections and
-# table_cache_size to match the open_files_limit found,
-# which significantly interfere with this test.
-#
-# Solution: use a big table definition cache,
-# but small values for max_connection and table_open_cache,
-# to stay within open_files_limit of 1024.
-#
-# This is the best test we can do that has a chance to pass on all
-# platforms, while still providing code coverage.
-
-table_definition_cache=5000
-table_open_cache=400
-max_connections=200
-open_files_limit=1024
-
-# 10+max_connections+table_cache_size*2 = 10 + 200 + 400*2 = 1010
-# max_connections*5 = 200*5 = 1000
-
-# Automated sizing for everything
-
-loose-performance-schema-accounts-size=-1
-loose-performance-schema-digests-size=-1
-loose-performance-schema-hosts-size=-1
-loose-performance-schema-users-size=-1
-
-loose-performance-schema-events-waits-history-size=-1
-loose-performance-schema-events-waits-history-long-size=-1
-loose-performance-schema-events-stages-history-size=-1
-loose-performance-schema-events-stages-history-long-size=-1
-loose-performance-schema-events-statements-history-size=-1
-loose-performance-schema-events-statements-history-long-size=-1
-
-loose-performance-schema-max-mutex-instances=-1
-loose-performance-schema-max-rwlock-instances=-1
-loose-performance-schema-max-cond-instances=-1
-loose-performance-schema-max-file-instances=-1
-loose-performance-schema-max-socket-instances=-1
-loose-performance-schema-max-thread-instances=-1
-loose-performance-schema-max-table-instances=-1
-loose-performance-schema-max-table-handles=-1
-
diff --git a/mysql-test/suite/perfschema/t/sizing_high.test b/mysql-test/suite/perfschema/t/sizing_high.test
deleted file mode 100644
index 4d02d41aecd..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_high.test
+++ /dev/null
@@ -1,9 +0,0 @@
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
---source include/have_64bit.inc
---source include/not_valgrind.inc
---source ../include/have_aligned_memory.inc
-
---source ../include/sizing_auto.inc
-
diff --git a/mysql-test/suite/perfschema/t/sizing_low.cnf b/mysql-test/suite/perfschema/t/sizing_low.cnf
deleted file mode 100644
index 54c881830cf..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_low.cnf
+++ /dev/null
@@ -1,33 +0,0 @@
-
-!include include/default_mysqld_autosize.cnf
-
-[mysqld.1]
-
-table_definition_cache=400
-table_open_cache=100
-max_connections=50
-open_files_limit=1024
-
-# Automated sizing for everything
-
-loose-performance-schema-accounts-size=-1
-loose-performance-schema-digests-size=-1
-loose-performance-schema-hosts-size=-1
-loose-performance-schema-users-size=-1
-
-loose-performance-schema-events-waits-history-size=-1
-loose-performance-schema-events-waits-history-long-size=-1
-loose-performance-schema-events-stages-history-size=-1
-loose-performance-schema-events-stages-history-long-size=-1
-loose-performance-schema-events-statements-history-size=-1
-loose-performance-schema-events-statements-history-long-size=-1
-
-loose-performance-schema-max-mutex-instances=-1
-loose-performance-schema-max-rwlock-instances=-1
-loose-performance-schema-max-cond-instances=-1
-loose-performance-schema-max-file-instances=-1
-loose-performance-schema-max-socket-instances=-1
-loose-performance-schema-max-thread-instances=-1
-loose-performance-schema-max-table-instances=-1
-loose-performance-schema-max-table-handles=-1
-
diff --git a/mysql-test/suite/perfschema/t/sizing_low.test b/mysql-test/suite/perfschema/t/sizing_low.test
deleted file mode 100644
index 56446fd6973..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_low.test
+++ /dev/null
@@ -1,10 +0,0 @@
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
---source include/have_64bit.inc
---source include/not_valgrind.inc
---source ../include/have_aligned_memory.inc
-
---source ../include/sizing_auto.inc
-
-CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit.");
diff --git a/mysql-test/suite/perfschema/t/sizing_med.cnf b/mysql-test/suite/perfschema/t/sizing_med.cnf
deleted file mode 100644
index 8aff531ea69..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_med.cnf
+++ /dev/null
@@ -1,33 +0,0 @@
-
-!include include/default_mysqld_autosize.cnf
-
-[mysqld.1]
-
-table_definition_cache=401
-table_open_cache=401
-max_connections=152
-open_files_limit=1024
-
-# Automated sizing for everything
-
-loose-performance-schema-accounts-size=-1
-loose-performance-schema-digests-size=-1
-loose-performance-schema-hosts-size=-1
-loose-performance-schema-users-size=-1
-
-loose-performance-schema-events-waits-history-size=-1
-loose-performance-schema-events-waits-history-long-size=-1
-loose-performance-schema-events-stages-history-size=-1
-loose-performance-schema-events-stages-history-long-size=-1
-loose-performance-schema-events-statements-history-size=-1
-loose-performance-schema-events-statements-history-long-size=-1
-
-loose-performance-schema-max-mutex-instances=-1
-loose-performance-schema-max-rwlock-instances=-1
-loose-performance-schema-max-cond-instances=-1
-loose-performance-schema-max-file-instances=-1
-loose-performance-schema-max-socket-instances=-1
-loose-performance-schema-max-thread-instances=-1
-loose-performance-schema-max-table-instances=-1
-loose-performance-schema-max-table-handles=-1
-
diff --git a/mysql-test/suite/perfschema/t/sizing_med.test b/mysql-test/suite/perfschema/t/sizing_med.test
deleted file mode 100644
index 4d02d41aecd..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_med.test
+++ /dev/null
@@ -1,9 +0,0 @@
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
---source include/have_64bit.inc
---source include/not_valgrind.inc
---source ../include/have_aligned_memory.inc
-
---source ../include/sizing_auto.inc
-
diff --git a/mysql-test/suite/perfschema/t/sizing_off.cnf b/mysql-test/suite/perfschema/t/sizing_off.cnf
deleted file mode 100644
index 24ca58bbb0b..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_off.cnf
+++ /dev/null
@@ -1,38 +0,0 @@
-
-!include include/default_mysqld_autosize.cnf
-
-[mysqld.1]
-
-# Default values used in the server, out of the box
-table_definition_cache=400
-table_open_cache=400
-max_connections=151
-open_files_limit=1024
-
-# Disable the performacne schema.
-# Sizing does not occur then
-loose-skip-performance-schema
-
-# Automated sizing for everything
-
-loose-performance-schema-accounts-size=-1
-loose-performance-schema-digests-size=-1
-loose-performance-schema-hosts-size=-1
-loose-performance-schema-users-size=-1
-
-loose-performance-schema-events-waits-history-size=-1
-loose-performance-schema-events-waits-history-long-size=-1
-loose-performance-schema-events-stages-history-size=-1
-loose-performance-schema-events-stages-history-long-size=-1
-loose-performance-schema-events-statements-history-size=-1
-loose-performance-schema-events-statements-history-long-size=-1
-
-loose-performance-schema-max-mutex-instances=-1
-loose-performance-schema-max-rwlock-instances=-1
-loose-performance-schema-max-cond-instances=-1
-loose-performance-schema-max-file-instances=-1
-loose-performance-schema-max-socket-instances=-1
-loose-performance-schema-max-thread-instances=-1
-loose-performance-schema-max-table-instances=-1
-loose-performance-schema-max-table-handles=-1
-
diff --git a/mysql-test/suite/perfschema/t/sizing_off.test b/mysql-test/suite/perfschema/t/sizing_off.test
deleted file mode 100644
index 32729918bd1..00000000000
--- a/mysql-test/suite/perfschema/t/sizing_off.test
+++ /dev/null
@@ -1,8 +0,0 @@
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
-show variables where
- `Variable_name` != "performance_schema_max_statement_classes" and
- `Variable_name` like "performance_schema%";
-show status like "performance_schema%";
diff --git a/mysql-test/suite/perfschema/t/socket_summary_by_event_name_func.test b/mysql-test/suite/perfschema/t/socket_summary_by_event_name_func.test
index c6860eb3213..5fe60a01e62 100644
--- a/mysql-test/suite/perfschema/t/socket_summary_by_event_name_func.test
+++ b/mysql-test/suite/perfschema/t/socket_summary_by_event_name_func.test
@@ -28,6 +28,8 @@
# prepared statement.
--source include/no_protocol.inc
+#--source include/turn_off_only_full_group_by.inc
+
# Set this to enable debugging output
let $my_socket_debug_dbug= 0;
@@ -329,5 +331,7 @@ if (`SELECT @tables_match = 0`)
--connection default
DROP DATABASE mysqltest;
+#--source include/restore_sql_mode_after_turn_off_only_full_group_by.inc
+
exit;
diff --git a/mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test b/mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test
index 42bcb3e4d70..fc848922667 100644
--- a/mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test
+++ b/mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test
@@ -30,6 +30,7 @@
# Embedded server does not supprt the performance_schema.
--source include/not_embedded.inc
--source include/not_windows.inc
+--source include/no_valgrind_without_big.inc
--source include/have_perfschema.inc
# The values in the performance_schema tables depend on how much communication
@@ -38,8 +39,6 @@
# prepared statement.
--source include/no_protocol.inc
-set global session_track_schema=FALSE;
-
#===================================
# Set IP address defaults with respect to IPV6 support
#
@@ -1464,9 +1463,11 @@ if(`SELECT COUNT(*) $part`)
# 4 6706392 85 3 15509472 117 2 34851168 Connect (con*,localhost,root012345,,mysqltest,,)
# 4 10543632 89 3 10578744 117 2 39460872 Connect (con*,localhost,root0123456789,,mysqltest,,)
---echo # 4.6.1 The SUM_OF_BYTES_WRITE value is the same for all Connects.
+--echo # 4.6.1 The SUM_OF_BYTES_WRITE value depends on length of database
+--echo # since the database name is written in OK packet.
+--echo # Hence the value 2.
#========================================================================
-let $my_rules= COUNT(DISTINCT SUM_NUMBER_OF_BYTES_WRITE) = 1;
+let $my_rules= COUNT(DISTINCT SUM_NUMBER_OF_BYTES_WRITE) = 2;
let $part=
FROM mysqltest.socket_summary_by_instance_detail
WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin
@@ -1710,5 +1711,3 @@ DROP SCHEMA mysqlsupertest;
--source include/wait_until_disconnected.inc
--connection default
--enable_query_log
-
-set global session_track_schema=DEFAULT;
diff --git a/mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test b/mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test
index 0ecb51af203..2c6a375b688 100644
--- a/mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test
+++ b/mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test
@@ -495,7 +495,10 @@ let $connect_user= root;
--echo # length of user name = 10 character
--echo # length of default db = 9 character
#========================================================================
+SET @orig_sql_mode= @@sql_mode;
+SET sql_mode= (SELECT replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
GRANT ALL PRIVILEGES ON *.* TO 'root012345'@'localhost';
+SET sql_mode= @orig_sql_mode;
let $connect_host= localhost;
let $connect_db= mysqltest;
let $connect_user= root012345;
@@ -506,7 +509,10 @@ DROP USER 'root012345'@'localhost';
--echo # length of user name = 14 character
--echo # length of default db = 9 character
#========================================================================
+SET @orig_sql_mode= @@sql_mode;
+SET sql_mode= (SELECT replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
GRANT ALL PRIVILEGES ON *.* to 'root0123456789'@'localhost';
+SET sql_mode= @orig_sql_mode;
let $connect_host= localhost;
let $connect_db= mysqltest;
let $connect_user= root0123456789;
@@ -1473,9 +1479,11 @@ if(`SELECT COUNT(*) $part`)
# 4 6706392 85 3 15509472 117 2 34851168 Connect (con*,localhost,root012345,,mysqltest,,)
# 4 10543632 89 3 10578744 117 2 39460872 Connect (con*,localhost,root0123456789,,mysqltest,,)
---echo # 4.6.1 The SUM_OF_BYTES_WRITE value is the same for all Connects.
+--echo # 4.6.1 The SUM_OF_BYTES_WRITE value depends on length of database
+--echo # since the database name is written in OK packet.
+--echo # Hence the value 2.
#========================================================================
-let $my_rules= COUNT(DISTINCT SUM_NUMBER_OF_BYTES_WRITE) = 1;
+let $my_rules= COUNT(DISTINCT SUM_NUMBER_OF_BYTES_WRITE) = 2;
let $part=
FROM mysqltest.socket_summary_by_instance_detail
WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin
diff --git a/mysql-test/suite/perfschema/t/start_server_disable_transactions-master.opt b/mysql-test/suite/perfschema/t/start_server_disable_transactions-master.opt
new file mode 100644
index 00000000000..20f93f92f52
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_disable_transactions-master.opt
@@ -0,0 +1 @@
+--loose-performance-schema-instrument='transaction=OFF'
diff --git a/mysql-test/suite/perfschema/t/start_server_disable_transactions.test b/mysql-test/suite/perfschema/t/start_server_disable_transactions.test
new file mode 100644
index 00000000000..723dd1027c9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_disable_transactions.test
@@ -0,0 +1,28 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no enabled statements instruments
+select * from performance_schema.setup_instruments
+ where name in ('transaction') and enabled='YES';
+
+# Expect no statement statistics collected
+
+select * from performance_schema.events_transactions_summary_global_by_event_name
+ where count_star > 0;
+
+select * from performance_schema.events_transactions_summary_by_thread_by_event_name
+ where count_star > 0;
+
+select * from performance_schema.events_transactions_summary_by_user_by_event_name
+ where count_star > 0;
+
+select * from performance_schema.events_transactions_summary_by_host_by_event_name
+ where count_star > 0;
+
+select * from performance_schema.events_transactions_summary_by_account_by_event_name
+ where count_star > 0;
+
diff --git a/mysql-test/suite/perfschema/t/start_server_innodb.test b/mysql-test/suite/perfschema/t/start_server_innodb.test
index 68a164a0bc1..f190482b7d5 100644
--- a/mysql-test/suite/perfschema/t/start_server_innodb.test
+++ b/mysql-test/suite/perfschema/t/start_server_innodb.test
@@ -8,4 +8,4 @@
# Expecting nothing lost with default parameters
-show status like "performance_schema%";
+show global status like "performance_schema%";
diff --git a/mysql-test/suite/perfschema/t/start_server_low_digest_sql_length-master.opt b/mysql-test/suite/perfschema/t/start_server_low_digest_sql_length-master.opt
new file mode 100644
index 00000000000..e6483c360f9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_low_digest_sql_length-master.opt
@@ -0,0 +1,3 @@
+--thread_stack=655360
+--max_digest_length=10
+--loose-performance_schema_max_sql_text_length=10
diff --git a/mysql-test/suite/perfschema/t/start_server_low_digest_sql_length.test b/mysql-test/suite/perfschema/t/start_server_low_digest_sql_length.test
new file mode 100644
index 00000000000..ba7f06dc7b9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_low_digest_sql_length.test
@@ -0,0 +1,22 @@
+# -----------------------------------------------------------------------
+# Tests for the performance schema statement Digests.
+# -----------------------------------------------------------------------
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+USE performance_schema;
+truncate table events_statements_history_long;
+
+# -----------------------------------------------------------------------
+# Test to show how the digest behaves with low value of
+# - performance_schema_max_digest_length
+# - performance_schema_max_sql_text_length
+# -----------------------------------------------------------------------
+SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
+
+--echo ####################################
+--echo # QUERYING PS STATEMENT DIGEST
+--echo ####################################
+SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long;
diff --git a/mysql-test/suite/perfschema/t/start_server_low_index-master.opt b/mysql-test/suite/perfschema/t/start_server_low_index-master.opt
new file mode 100644
index 00000000000..29cbfa631c3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_low_index-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_index_stat=34
diff --git a/mysql-test/suite/perfschema/t/start_server_low_index.test b/mysql-test/suite/perfschema/t/start_server_low_index.test
new file mode 100644
index 00000000000..18004e1993c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_low_index.test
@@ -0,0 +1,181 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_valgrind.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+
+# NOTE : Index stats are manifested during table creation. To force a low index
+# condition, performance_schema_max_index_stat must be set to the number of
+# all system table indexes, plus 1.
+
+#############################
+# Setup database and tables.
+#############################
+--disable_warnings
+drop table if exists db1.t1;
+drop database if exists db1;
+--enable_warnings
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default',
+ unique key uidx(a));
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+
+#####################################################
+# Run few queries on Performance Schema stats tables.
+#####################################################
+# There should be 3 entries in following table. 2 for insert and 1 for select.
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Stats for 2 indexes (full scan, uidx)
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+flush tables;
+
+# Stats for full scan lost
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Stats for only 1 index, uidx
+# Stats for full scan lost
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+# Expect INDEX_STAT lost, we have room for 1 out of 2
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+
+# While at it, check that FLUSH STATUS Resets the lost counter
+FLUSH STATUS;
+
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+--enable_warnings
+
+
+create table db1.t2 (a int, b char(10) default 'default',
+ unique key uidx(a));
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('3', 'abc');
+insert into db1.t1 values('4', 'abc');
+select * from db1.t1 where a='1';
+
+insert into db1.t2 values('1', 'abc');
+insert into db1.t2 values('2', 'abc');
+select * from db1.t2 where a='1';
+
+#####################################################
+# Run few queries on Performance Schema stats tables.
+#####################################################
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+flush tables;
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+# Expect INDEX_STAT lost
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+--enable_warnings
+
+FLUSH STATUS;
+
+
+#####################################################################################
+# Update setup_objects to DISABLE TABLE and check index lost stats after flush tables
+#####################################################################################
+
+update performance_schema.setup_objects set ENABLED='NO' where OBJECT_TYPE='TABLE';
+
+
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('5', 'abc');
+insert into db1.t1 values('6', 'abc');
+select * from db1.t1 where a='1';
+
+insert into db1.t2 values('3', 'abc');
+insert into db1.t2 values('4', 'abc');
+select * from db1.t2 where a='1';
+
+# Empty, objects are disabled
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Empty, objects are disabled
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+flush tables;
+
+# Empty, objects are disabled
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Empty, objects are disabled
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME
+ from performance_schema.table_io_waits_summary_by_index_usage
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME;
+
+# Do not expect lost counter in INDEX_STAT
+--disable_warnings
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+--enable_warnings
+
+###########
+# Cleanup.
+###########
+drop database db1;
+
+update performance_schema.setup_objects set ENABLED='YES'
+ where OBJECT_TYPE='TABLE' and OBJECT_SCHEMA="%";
diff --git a/mysql-test/suite/perfschema/t/start_server_low_table_lock-master.opt b/mysql-test/suite/perfschema/t/start_server_low_table_lock-master.opt
new file mode 100644
index 00000000000..d687f8d04b5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_low_table_lock-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_table_lock_stat=1
diff --git a/mysql-test/suite/perfschema/t/start_server_low_table_lock.test b/mysql-test/suite/perfschema/t/start_server_low_table_lock.test
new file mode 100644
index 00000000000..8f35eb64e2a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_low_table_lock.test
@@ -0,0 +1,130 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+#############################
+# Setup database and tables.
+#############################
+--disable_warnings
+drop table if exists db1.t1;
+drop database if exists db1;
+--enable_warnings
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default');
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+
+#####################################################
+# Run few queries on Performance Schema stats tables.
+#####################################################
+# There should be 3 entries in following table. 2 for insert and 1 for select.
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+flush tables;
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Expect no TABLE_LOCK_STAT lost, we have room for 1 table lock for db1.t1
+--disable_warnings
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+--enable_warnings
+
+create table db1.t2 (a int, b char(10) default 'default',
+ unique key uidx(a));
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('3', 'abc');
+insert into db1.t1 values('4', 'abc');
+select * from db1.t1 where a='1';
+
+insert into db1.t2 values('1', 'abc');
+insert into db1.t2 values('2', 'abc');
+select * from db1.t2 where a='1';
+
+#####################################################
+# Run few queries on Performance Schema stats tables.
+#####################################################
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+flush tables;
+
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Expect TABLE_LOCK_STAT lost, we can not keep stats for db1.t2
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+--enable_warnings
+
+flush status;
+
+
+#######################################
+# Update setup_objects to DISABLE TABLE
+#######################################
+
+update performance_schema.setup_objects set ENABLED='NO'
+ where OBJECT_TYPE='TABLE' and OBJECT_SCHEMA="%";
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('5', 'abc');
+insert into db1.t1 values('6', 'abc');
+select * from db1.t1 where a='1';
+
+insert into db1.t2 values('3', 'abc');
+insert into db1.t2 values('4', 'abc');
+select * from db1.t2 where a='1';
+
+# Empty, objects are disabled
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+flush tables;
+
+# Empty, objects are disabled
+select COUNT_STAR, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME
+ from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1'
+ order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME;
+
+# Do not expect lost counter in TABLE_LOCK_STAT
+--disable_warnings
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+--enable_warnings
+
+###########
+# Cleanup.
+###########
+drop database db1;
+
+update performance_schema.setup_objects set ENABLED='YES'
+ where OBJECT_TYPE='TABLE' and OBJECT_SCHEMA="%";
diff --git a/mysql-test/suite/perfschema/t/start_server_no_account.test b/mysql-test/suite/perfschema/t/start_server_no_account.test
index b9b0c858dfb..563fdbaa1f0 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_account.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_account.test
@@ -6,11 +6,13 @@
--source ../include/start_server_common.inc
# Expect no records
-show variables like "performance_schema_accounts_size";
+show global variables like "performance_schema_accounts_size";
select count(*) from performance_schema.accounts;
# We lost all the data
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_ACCOUNTS_LOST';
+--enable_warnings
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
index 31578f80238..8a5cf0f5797 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_cond_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_cond_class.test
@@ -6,18 +6,20 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_cond_classes";
+show global 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
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_COND_CLASSES_LOST';
+--enable_warnings
# Expect no instances
select count(*) from performance_schema.cond_instances;
# Expect no instances lost
-show status like "performance_schema_cond_instances_lost";
+show global status like "performance_schema_cond_instances_lost";
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
index 03b9b16ef4e..8168ef1024d 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_cond_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_cond_inst.test
@@ -6,21 +6,23 @@
--source ../include/start_server_common.inc
# Expect classes
-show variables like "performance_schema_max_cond_classes";
+show global 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";
+show global status like "performance_schema_cond_classes_lost";
# Expect no instances
-show variables like "performance_schema_max_cond_instances";
+show global variables like "performance_schema_max_cond_instances";
select count(*) from performance_schema.cond_instances;
# Expect instances lost
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_COND_INSTANCES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_digests.test b/mysql-test/suite/perfschema/t/start_server_no_digests.test
index dbbce662256..605ea1f31ab 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_digests.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_digests.test
@@ -24,7 +24,7 @@ SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_AFFECTED, SUM_WARNINGS,
# Expect no digest
-SHOW VARIABLES LIKE "performance_schema_digests_size";
+SHOW GLOBAL VARIABLES LIKE "performance_schema_digests_size";
SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_digest;
# Cleanup for Digest
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
index b2c97ccde1e..74ed465a0d8 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_file_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_file_class.test
@@ -6,18 +6,20 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_file_classes";
+show global 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
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_FILE_CLASSES_LOST';
+--enable_warnings
# Expect no instances
select count(*) from performance_schema.file_instances;
# Expect no instances lost
-show status like "performance_schema_file_instances_lost";
+show global status like "performance_schema_file_instances_lost";
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
index d8a7402a948..715fe656cc2 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_file_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_file_inst.test
@@ -6,21 +6,23 @@
--source ../include/start_server_common.inc
# Expect classes
-show variables like "performance_schema_max_file_classes";
+show global 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";
+show global status like "performance_schema_file_classes_lost";
# Expect no instances
-show variables like "performance_schema_max_file_instances";
+show global variables like "performance_schema_max_file_instances";
select count(*) from performance_schema.file_instances;
# Expect instances lost
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_FILE_INSTANCES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_host.test b/mysql-test/suite/perfschema/t/start_server_no_host.test
index e0d3d4b1f0f..5f9dd7067cc 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_host.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_host.test
@@ -6,11 +6,13 @@
--source ../include/start_server_common.inc
# Expect no records
-show variables like "performance_schema_hosts_size";
+show global variables like "performance_schema_hosts_size";
select count(*) from performance_schema.hosts;
# We lost all the data
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_HOSTS_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_index-master.opt b/mysql-test/suite/perfschema/t/start_server_no_index-master.opt
new file mode 100644
index 00000000000..38bbb9efed2
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_index-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_index_stat=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_index.test b/mysql-test/suite/perfschema/t/start_server_no_index.test
new file mode 100644
index 00000000000..8c636cc6163
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_index.test
@@ -0,0 +1,64 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+#############################
+# Setup database and tables.
+#############################
+--disable_warnings
+drop table if exists db1.t1;
+drop database if exists db1;
+--enable_warnings
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default',
+ unique key uidx(a));
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+
+#####################################################
+# Run few queries on Performance Schema stats tables.
+#####################################################
+# There should be 3 entries in following table. 2 for insert and 1 for select.
+# This is because lock stats are still in the table handles
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+# There should be 1 entry in following table. Thats is for select.
+# This is because lock stats are still in the table handles
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_index_usage
+ where INDEX_NAME!='NULL';
+
+# Now force aggregation by closing table handles
+FLUSH TABLES;
+
+# Stats are now missing
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_table
+ where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+
+# Stats are now missing
+select COUNT_STAR from performance_schema.table_io_waits_summary_by_index_usage
+ where INDEX_NAME!='NULL';
+
+# Expect INDEX_STAT lost
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+
+# While at it, check that FLUSH STATUS Resets the lost counter
+FLUSH STATUS;
+
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_INDEX_STAT_LOST';
+--enable_warnings
+
+###########
+# Cleanup.
+###########
+drop database db1;
diff --git a/mysql-test/suite/perfschema/t/start_server_no_mdl-master.opt b/mysql-test/suite/perfschema/t/start_server_no_mdl-master.opt
new file mode 100644
index 00000000000..93a55af2f9d
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_mdl-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_metadata_locks=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_mdl.test b/mysql-test/suite/perfschema/t/start_server_no_mdl.test
new file mode 100644
index 00000000000..c3d1ca7d791
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_mdl.test
@@ -0,0 +1,23 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+select count(*) from performance_schema.metadata_locks;
+
+# Expect metadata locks lost
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_METADATA_LOCK_LOST';
+--enable_warnings
+
+# While at it, check that flush status resets the lost counter
+FLUSH STATUS;
+
+--disable_warnings
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_METADATA_LOCK_LOST';
+--enable_warnings
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_memory_class-master.opt b/mysql-test/suite/perfschema/t/start_server_no_memory_class-master.opt
new file mode 100644
index 00000000000..9ff2f77a19e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_memory_class-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_memory_classes=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_memory_class.test b/mysql-test/suite/perfschema/t/start_server_no_memory_class.test
new file mode 100644
index 00000000000..e14e5f39d7f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_memory_class.test
@@ -0,0 +1,26 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no classes
+show global variables like "performance_schema_max_memory_classes";
+
+# Expect builtin memory classes
+select name from performance_schema.setup_instruments
+ where name like "memory/performance_schema/%"
+ order by name;
+
+# Expect no memory classes
+select count(*) from performance_schema.setup_instruments
+ where name like "memory/%"
+ and name not like "memory/performance_schema/%";
+
+# We lost all the classes
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_MEMORY_CLASSES_LOST';
+--enable_warnings
+
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
index 43798ecf01f..918d79e9417 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_mutex_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_mutex_class.test
@@ -6,18 +6,20 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_mutex_classes";
+show global 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
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_MUTEX_CLASSES_LOST';
+--enable_warnings
# Expect no instances
select count(*) from performance_schema.mutex_instances;
# Expect no instances lost
-show status like "performance_schema_mutex_instances_lost";
+show global status like "performance_schema_mutex_instances_lost";
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
index bffb8218937..106d5df0307 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test
@@ -6,21 +6,23 @@
--source ../include/start_server_common.inc
# Expect classes
-show variables like "performance_schema_max_mutex_classes";
+show global 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";
+show global status like "performance_schema_mutex_classes_lost";
# Expect no instances
-show variables like "performance_schema_max_mutex_instances";
+show global variables like "performance_schema_max_mutex_instances";
select count(*) from performance_schema.mutex_instances;
# Expect instances lost
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_MUTEX_INSTANCES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances-master.opt b/mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances-master.opt
new file mode 100644
index 00000000000..5a9501cb6e7
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_prepared_statements_instances=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances.test b/mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances.test
new file mode 100644
index 00000000000..840b3afdbf3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_prepared_stmts_instances.test
@@ -0,0 +1,43 @@
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+--source ../include/start_server_common.inc
+
+CREATE DATABASE db;
+USE db;
+
+# Expect no history
+
+show global variables like "performance_schema_max_prepared_statements_instances";
+select count(*) from performance_schema.prepared_statements_instances;
+
+# Valid operation, edge case
+
+truncate table performance_schema.prepared_statements_instances;
+
+# Prepare statements
+--source suite/perfschema/include/prepared_stmts_setup.inc
+
+# check the lost status
+show global status like "%performance_schema_prepared_statements_lost%";
+
+# Execute statements
+--source suite/perfschema/include/prepared_stmts_execution.inc
+
+# check the lost status
+show global status like "%performance_schema_prepared_statements_lost%";
+
+# deallocate prepared statements
+--source suite/perfschema/include/prepared_stmts_deallocation.inc
+
+# check the lost status
+show global status like "%performance_schema_prepared_statements_lost%";
+
+# Flush status now
+flush status;
+
+# status after flush. expect 0.
+show global status like "%performance_schema_prepared_statements_lost%";
+
+DROP DATABASE db;
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
index 3c4f32137cc..e876faabed6 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test
@@ -6,18 +6,20 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_rwlock_classes";
+show global 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
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_RWLOCK_CLASSES_LOST';
+--enable_warnings
# Expect no instances
select count(*) from performance_schema.rwlock_instances;
# Expect no instances lost
-show status like "performance_schema_rwlock_instances_lost";
+show global status like "performance_schema_rwlock_instances_lost";
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
index 68cb75ea37e..ace773a6dac 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test
@@ -6,21 +6,23 @@
--source ../include/start_server_common.inc
# Expect classes
-show variables like "performance_schema_max_rwlock_classes";
+show global 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";
+show global status like "performance_schema_rwlock_classes_lost";
# Expect no instances
-show variables like "performance_schema_max_rwlock_instances";
+show global variables like "performance_schema_max_rwlock_instances";
select count(*) from performance_schema.rwlock_instances;
# Expect instances lost
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_RWLOCK_INSTANCES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_setup_actors.test b/mysql-test/suite/perfschema/t/start_server_no_setup_actors.test
index d1433053df8..970f500815d 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_setup_actors.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_setup_actors.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no setup_actors
-show variables like "performance_schema_setup_actors_size";
+show global variables like "performance_schema_setup_actors_size";
# Expect no setup_actors
select count(*) from performance_schema.setup_actors;
diff --git a/mysql-test/suite/perfschema/t/start_server_no_setup_objects.test b/mysql-test/suite/perfschema/t/start_server_no_setup_objects.test
index d46805e5b25..039e963e8d6 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_setup_objects.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_setup_objects.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no setup_objects
-show variables like "performance_schema_setup_objects_size";
+show global variables like "performance_schema_setup_objects_size";
# Expect no setup_objects
select count(*) from performance_schema.setup_objects;
diff --git a/mysql-test/suite/perfschema/t/start_server_no_socket_class.test b/mysql-test/suite/perfschema/t/start_server_no_socket_class.test
index ec1a2495413..a956a63ec0d 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_socket_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_socket_class.test
@@ -6,18 +6,20 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_socket_classes";
+show global variables like "performance_schema_max_socket_classes";
select count(*) from performance_schema.setup_instruments
where name like "wait/io/socket/%";
# We lost all the classes
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_SOCKET_CLASSES_LOST';
+--enable_warnings
# Expect no instances
select count(*) from performance_schema.socket_instances;
# Expect no instances lost
-show status like "performance_schema_socket_instances_lost";
+show global status like "performance_schema_socket_instances_lost";
diff --git a/mysql-test/suite/perfschema/t/start_server_no_socket_inst.test b/mysql-test/suite/perfschema/t/start_server_no_socket_inst.test
index 752a1666550..0202869dd9d 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_socket_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_socket_inst.test
@@ -6,21 +6,23 @@
--source ../include/start_server_common.inc
# Expect classes
-show variables like "performance_schema_max_socket_classes";
+show global variables like "performance_schema_max_socket_classes";
select count(*) > 0 from performance_schema.setup_instruments
where name like "wait/io/socket/%";
# Expect no class lost
-show status like "performance_schema_socket_classes_lost";
+show global status like "performance_schema_socket_classes_lost";
# Expect no instances
-show variables like "performance_schema_max_socket_instances";
+show global variables like "performance_schema_max_socket_instances";
select count(*) from performance_schema.socket_instances;
# Expect instances lost
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_SOCKET_INSTANCES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_stage_class.test b/mysql-test/suite/perfschema/t/start_server_no_stage_class.test
index 23d22ac5431..d0a9d8acb63 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_stage_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_stage_class.test
@@ -6,14 +6,16 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_stage_classes";
+show global variables like "performance_schema_max_stage_classes";
select count(*) from performance_schema.setup_instruments
where name like "stage/%";
# We lost all the classes
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_STAGE_CLASSES_LOST';
+--enable_warnings
# Expect no stages
select count(*) from performance_schema.events_stages_current;
diff --git a/mysql-test/suite/perfschema/t/start_server_no_stages_history.test b/mysql-test/suite/perfschema/t/start_server_no_stages_history.test
index 1f5df187646..fca9b5f6cfd 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_stages_history.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_stages_history.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no history
-show variables like "performance_schema_events_stages_history_size";
+show global variables like "performance_schema_events_stages_history_size";
select count(*) from performance_schema.events_stages_history;
# Valid operation, edge case
diff --git a/mysql-test/suite/perfschema/t/start_server_no_stages_history_long.test b/mysql-test/suite/perfschema/t/start_server_no_stages_history_long.test
index 84c227790c9..282e396ac00 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_stages_history_long.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_stages_history_long.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no history long
-show variables like "performance_schema_events_stages_history_long_size";
+show global variables like "performance_schema_events_stages_history_long_size";
select count(*) from performance_schema.events_stages_history_long;
# Valid operation, edge case
diff --git a/mysql-test/suite/perfschema/t/start_server_no_statement_class.test b/mysql-test/suite/perfschema/t/start_server_no_statement_class.test
index 71deb85680a..fa80d328484 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_statement_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_statement_class.test
@@ -6,14 +6,16 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_statement_classes";
+show global variables like "performance_schema_max_statement_classes";
select count(*) from performance_schema.setup_instruments
where name like "statement/%";
# We lost all the classes
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_STATEMENT_CLASSES_LOST';
+--enable_warnings
# Expect no statements
select count(*) from performance_schema.events_statements_current;
diff --git a/mysql-test/suite/perfschema/t/start_server_no_statements_history.test b/mysql-test/suite/perfschema/t/start_server_no_statements_history.test
index 625e0bb3cd3..e87a59dd676 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_statements_history.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_statements_history.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no history
-show variables like "performance_schema_events_statements_history_size";
+show global variables like "performance_schema_events_statements_history_size";
select count(*) from performance_schema.events_statements_history;
# Valid operation, edge case
diff --git a/mysql-test/suite/perfschema/t/start_server_no_statements_history_long.test b/mysql-test/suite/perfschema/t/start_server_no_statements_history_long.test
index a8d551cbed0..c14df52a24f 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_statements_history_long.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_statements_history_long.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no history long
-show variables like "performance_schema_events_statements_history_long_size";
+show global variables like "performance_schema_events_statements_history_long_size";
select count(*) from performance_schema.events_statements_history_long;
# Valid operation, edge case
diff --git a/mysql-test/suite/perfschema/t/start_server_no_table_hdl.test b/mysql-test/suite/perfschema/t/start_server_no_table_hdl.test
index 80553f11866..87c4173ccb6 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_table_hdl.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_table_hdl.test
@@ -6,10 +6,10 @@
--source ../include/start_server_common.inc
# Expect instances
-show variables like "performance_schema_max_table_instances";
+show global variables like "performance_schema_max_table_instances";
# Expect no handles
-show variables like "performance_schema_max_table_handles";
+show global variables like "performance_schema_max_table_handles";
# Create an instrumented table
--disable_warnings
@@ -22,9 +22,11 @@ select * from test.instrument_me;
drop table test.instrument_me;
# Expect no instances lost
-show variables like "performance_schema_max_table_instances";
+show global variables like "performance_schema_max_table_instances";
# We lost all the handles
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_TABLE_HANDLES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_table_inst-master.opt b/mysql-test/suite/perfschema/t/start_server_no_table_inst-master.opt
index 50abd1264f5..57145166385 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_table_inst-master.opt
+++ b/mysql-test/suite/perfschema/t/start_server_no_table_inst-master.opt
@@ -1,2 +1,4 @@
--loose-enable-performance-schema
--loose-performance_schema_max_table_instances=0
+--loose-performance_schema_max_index_stat=0
+--loose-performance_schema_max_table_lock_stat=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_table_inst.test b/mysql-test/suite/perfschema/t/start_server_no_table_inst.test
index bd6ad54325e..ec6674efb37 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_table_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_table_inst.test
@@ -6,10 +6,10 @@
--source ../include/start_server_common.inc
# Expect no instances
-show variables like "performance_schema_max_table_instances";
+show global variables like "performance_schema_max_table_instances";
# Expect handles
-show variables like "performance_schema_max_table_handles";
+show global variables like "performance_schema_max_table_handles";
# Create an instrumented table
--disable_warnings
@@ -22,9 +22,11 @@ select * from test.instrument_me;
drop table test.instrument_me;
# We lost all the instances
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_TABLE_INSTANCES_LOST';
+--enable_warnings
# Expect no handle lost
-show status like "performance_schema_table_handles_lost";
+show global status like "performance_schema_table_handles_lost";
diff --git a/mysql-test/suite/perfschema/t/start_server_no_table_lock-master.opt b/mysql-test/suite/perfschema/t/start_server_no_table_lock-master.opt
new file mode 100644
index 00000000000..2fe2a5245c8
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_table_lock-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_max_table_lock_stat=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_table_lock.test b/mysql-test/suite/perfschema/t/start_server_no_table_lock.test
new file mode 100644
index 00000000000..c80639a5799
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_table_lock.test
@@ -0,0 +1,54 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+#############################
+# Setup database and tables.
+#############################
+--disable_warnings
+drop table if exists db1.t1;
+drop database if exists db1;
+--enable_warnings
+create database db1;
+create table db1.t1 (a int, b char(10) default 'default');
+
+#######################
+# Execute few queries.
+#######################
+insert into db1.t1 values('1', 'abc');
+insert into db1.t1 values('2', 'abc');
+select * from db1.t1 where a='1';
+
+#####################################################
+# Run few queries on Performance Schema stats tables.
+#####################################################
+# There should be 3 entries in following table. 2 for insert and 1 for select.
+# This is because lock stats are still in the table handles
+select COUNT_STAR from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+
+# Now force aggregation by closing table handles
+FLUSH TABLES;
+
+select COUNT_STAR from performance_schema.table_lock_waits_summary_by_table
+ where OBJECT_SCHEMA='db1' and OBJECT_NAME='t1';
+
+# Expect TABLE_LOCK_STAT lost
+--disable_warnings
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+
+# While at it, check that FLUSH STATUS Resets the lost counter
+FLUSH STATUS;
+
+select variable_value from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_TABLE_LOCK_STAT_LOST';
+--enable_warnings
+
+###########
+# Cleanup.
+###########
+drop database db1;
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
index e37faeacf53..7909eb11fed 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_thread_class.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_thread_class.test
@@ -6,18 +6,20 @@
--source ../include/start_server_common.inc
# Expect no classes
-show variables like "performance_schema_max_thread_classes";
+show global variables like "performance_schema_max_thread_classes";
select count(*) from performance_schema.setup_instruments
where name like "thread/%";
# We lost all the classes
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_THREAD_CLASSES_LOST';
+--enable_warnings
# Expect no instances
select count(*) from performance_schema.threads;
# Expect no instances lost
-show status like "performance_schema_thread_instances_lost";
+show global status like "performance_schema_thread_instances_lost";
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
index c27de1d4027..f1e221cc74e 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_thread_inst.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_thread_inst.test
@@ -6,22 +6,24 @@
--source ../include/start_server_common.inc
# Expect classes
-show variables like "performance_schema_max_thread_classes";
+show global 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";
+show global status like "performance_schema_thread_classes_lost";
# Expect no instances
-show variables like "performance_schema_max_thread_instances";
+show global variables like "performance_schema_max_thread_instances";
select count(*) from performance_schema.threads;
# Expect instances lost
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_THREAD_INSTANCES_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_transactions_history-master.opt b/mysql-test/suite/perfschema/t/start_server_no_transactions_history-master.opt
new file mode 100644
index 00000000000..76ffd3787bb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_transactions_history-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_events_transactions_history_size=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_transactions_history.test b/mysql-test/suite/perfschema/t/start_server_no_transactions_history.test
new file mode 100644
index 00000000000..266af484c7b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_transactions_history.test
@@ -0,0 +1,14 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no history
+show global variables like "performance_schema_events_transactions_history_size";
+select count(*) from performance_schema.events_transactions_history;
+
+# Valid operation, edge case
+truncate table performance_schema.events_transactions_history;
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_transactions_history_long-master.opt b/mysql-test/suite/perfschema/t/start_server_no_transactions_history_long-master.opt
new file mode 100644
index 00000000000..60d148e8079
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_transactions_history_long-master.opt
@@ -0,0 +1,2 @@
+--loose-enable-performance-schema
+--loose-performance_schema_events_transactions_history_long_size=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_transactions_history_long.test b/mysql-test/suite/perfschema/t/start_server_no_transactions_history_long.test
new file mode 100644
index 00000000000..83f80b528e6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_transactions_history_long.test
@@ -0,0 +1,14 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no history long
+show global variables like "performance_schema_events_transactions_history_long_size";
+select count(*) from performance_schema.events_transactions_history_long;
+
+# Valid operation, edge case
+truncate table performance_schema.events_transactions_history_long;
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_user.test b/mysql-test/suite/perfschema/t/start_server_no_user.test
index 549b90a5851..2b1b9fed5c7 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_user.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_user.test
@@ -6,11 +6,13 @@
--source ../include/start_server_common.inc
# Expect no records
-show variables like "performance_schema_users_size";
+show global variables like "performance_schema_users_size";
select count(*) from performance_schema.users;
# We lost all the data
+--disable_warnings
select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_USERS_LOST';
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_no_waits_history.test b/mysql-test/suite/perfschema/t/start_server_no_waits_history.test
index 2ee7dba2526..3eb561770b7 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_waits_history.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_waits_history.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no history
-show variables like "performance_schema_events_waits_history_size";
+show global variables like "performance_schema_events_waits_history_size";
select count(*) from performance_schema.events_waits_history;
# Valid operation, edge case
diff --git a/mysql-test/suite/perfschema/t/start_server_no_waits_history_long.test b/mysql-test/suite/perfschema/t/start_server_no_waits_history_long.test
index e393304a94d..b22b1e7ef05 100644
--- a/mysql-test/suite/perfschema/t/start_server_no_waits_history_long.test
+++ b/mysql-test/suite/perfschema/t/start_server_no_waits_history_long.test
@@ -6,7 +6,7 @@
--source ../include/start_server_common.inc
# Expect no history long
-show variables like "performance_schema_events_waits_history_long_size";
+show global variables like "performance_schema_events_waits_history_long_size";
select count(*) from performance_schema.events_waits_history_long;
# Valid operation, edge case
diff --git a/mysql-test/suite/perfschema/t/start_server_nothing-master.opt b/mysql-test/suite/perfschema/t/start_server_nothing-master.opt
index afd804c1bd0..aa7d019af5d 100644
--- a/mysql-test/suite/perfschema/t/start_server_nothing-master.opt
+++ b/mysql-test/suite/perfschema/t/start_server_nothing-master.opt
@@ -9,6 +9,7 @@
--loose-performance_schema_max_file_classes=0
--loose-performance_schema_max_thread_classes=0
--loose-performance_schema_max_socket_classes=0
+--loose-performance_schema_max_memory_classes=0
--loose-performance_schema_max_mutex_instances=0
--loose-performance_schema_max_rwlock_instances=0
@@ -20,6 +21,8 @@
--loose-performance_schema_max_table_instances=0
--loose-performance_schema_max_file_handles=0
--loose-performance_schema_max_table_handles=0
+--loose-performance_schema_max_index_stat=0
+--loose-performance_schema_max_table_lock_stat=0
--loose-performance_schema_setup_actors_size=0
--loose-performance_schema_setup_objects_size=0
@@ -37,3 +40,8 @@
--loose-performance_schema_session_connect_attrs_size=0
+--loose-performance_schema_digests_size=0
+--loose-performance_schema_max_metadata_locks=0
+
+--loose-performance_schema_max_program_instances=0
+--loose-performance_schema_max_statement_stack=1
diff --git a/mysql-test/suite/perfschema/t/start_server_nothing.test b/mysql-test/suite/perfschema/t/start_server_nothing.test
index c337ef604f6..957a289473b 100644
--- a/mysql-test/suite/perfschema/t/start_server_nothing.test
+++ b/mysql-test/suite/perfschema/t/start_server_nothing.test
@@ -5,10 +5,11 @@
--source ../include/start_server_common.inc
-show variables like "performance_schema%";
+show global variables like "performance_schema%";
# Not empty
-select * from performance_schema.setup_instruments;
+select * from performance_schema.setup_instruments
+ order by name;
select TIMER_NAME from performance_schema.performance_timers;
select * from performance_schema.setup_consumers;
select NAME from performance_schema.setup_timers;
@@ -44,17 +45,18 @@ 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.session_account_connect_attrs;
-select * from performance_schema.session_connect_attrs;
-select * from performance_schema.socket_instances;
-select * from performance_schema.socket_summary_by_instance;
-select * from performance_schema.socket_summary_by_event_name;
select * from performance_schema.hosts;
+select * from performance_schema.metadata_locks;
select * from performance_schema.mutex_instances;
select * from performance_schema.objects_summary_global_by_type;
select * from performance_schema.rwlock_instances;
+select * from performance_schema.session_account_connect_attrs;
+select * from performance_schema.session_connect_attrs;
select * from performance_schema.setup_actors;
select * from performance_schema.setup_objects;
+select * from performance_schema.socket_instances;
+select * from performance_schema.socket_summary_by_event_name;
+select * from performance_schema.socket_summary_by_instance;
+select * from performance_schema.table_handles;
select * from performance_schema.threads;
select * from performance_schema.users;
-
diff --git a/mysql-test/suite/perfschema/t/start_server_off.test b/mysql-test/suite/perfschema/t/start_server_off.test
index 400303e05d2..6fdc02acf9b 100644
--- a/mysql-test/suite/perfschema/t/start_server_off.test
+++ b/mysql-test/suite/perfschema/t/start_server_off.test
@@ -5,6 +5,9 @@
--source ../include/start_server_common.inc
+select * from information_schema.engines
+ where engine = "PERFORMANCE_SCHEMA";
+
# Expecting all off / zero
show status like "performance_schema%";
show variables like "performance_schema";
@@ -27,7 +30,7 @@ select * from performance_schema.setup_timers;
insert into performance_schema.setup_objects values ('TABLE', 'myschema', 'myobject', 'YES', 'YES');
--error ER_WRONG_PERFSCHEMA_USAGE
-insert into performance_schema.setup_actors values ('myhost', 'mysuser', 'myrole');
+insert into performance_schema.setup_actors values ('myhost', 'mysuser', 'myrole', 'YES', 'YES');
# Expect SELECT, UPDATE, DELETE and TRUNCATE to affect 0 rows, but with
# no error because the target row(s) will not be found
@@ -45,3 +48,9 @@ truncate performance_schema.events_statements_history_long;
truncate performance_schema.events_waits_history_long;
truncate performance_schema.setup_objects;
truncate performance_schema.setup_actors;
+
+--disable_warnings
+# Expect that status variables are still accessible
+show global status like "performance_schema%";
+show session status like "performance_schema%";
+--enable_warnings
diff --git a/mysql-test/suite/perfschema/t/start_server_on.test b/mysql-test/suite/perfschema/t/start_server_on.test
index 18789e9d16a..dabef20efe3 100644
--- a/mysql-test/suite/perfschema/t/start_server_on.test
+++ b/mysql-test/suite/perfschema/t/start_server_on.test
@@ -7,4 +7,4 @@
# Expecting nothing lost with default parameters
-show status like "performance_schema%";
+show global status like "performance_schema%";
diff --git a/mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length-master.opt b/mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length-master.opt
new file mode 100644
index 00000000000..5ee2230e539
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length-master.opt
@@ -0,0 +1,3 @@
+--thread_stack=655360
+--max_digest_length=0
+--loose-performance_schema_max_sql_text_length=0
diff --git a/mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length.test b/mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length.test
new file mode 100644
index 00000000000..4d5d5ce7859
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_zero_digest_sql_length.test
@@ -0,0 +1,20 @@
+# -----------------------------------------------------------------------
+# Tests for the performance schema statement Digests.
+# -----------------------------------------------------------------------
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+USE performance_schema;
+truncate table events_statements_history_long;
+
+# -----------------------------------------------------------------------
+# Test to show how the digest behaves with low value of max_digest_length
+# -----------------------------------------------------------------------
+SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
+
+--echo ####################################
+--echo # QUERYING PS STATEMENT DIGEST
+--echo ####################################
+SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long;
diff --git a/mysql-test/suite/perfschema/t/statement_digest.test b/mysql-test/suite/perfschema/t/statement_digest.test
index 59486ad61d8..724f9192955 100644
--- a/mysql-test/suite/perfschema/t/statement_digest.test
+++ b/mysql-test/suite/perfschema/t/statement_digest.test
@@ -5,6 +5,7 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
+SET sql_mode='NO_ENGINE_SUBSTITUTION';
# Initial Setup for Digest
--source ../include/digest_setup.inc
@@ -21,3 +22,4 @@ SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_AFFECTED, SUM_WARNINGS,
# Cleanup for Digest
--source ../include/digest_cleanup.inc
+SET sql_mode=default;
diff --git a/mysql-test/suite/perfschema/t/statement_digest_long_query.test b/mysql-test/suite/perfschema/t/statement_digest_long_query.test
index 7a080f7a29f..efa33800b58 100644
--- a/mysql-test/suite/perfschema/t/statement_digest_long_query.test
+++ b/mysql-test/suite/perfschema/t/statement_digest_long_query.test
@@ -4,18 +4,26 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
+# Test requires: sp-protocol/ps-protocol/view-protocol/cursor-protocol disabled
--source include/no_protocol.inc
+# Thread stack overrun on solaris
+let $have_solaris = `select convert(@@version_compile_os using latin1) LIKE ("solaris%")`;
+if ($have_solaris)
+{
+ skip Test requires: 'not_solaris';
+}
USE performance_schema;
truncate table events_statements_summary_by_digest;
# -----------------------------------------------------------------------
# Test to show how the digest behaves with long queries, when the token
-# stream is truncated (digest text should end with "...")
+# stream is truncated. digest text is calculated based on value of
+# performance_schema_max_digest_length.
# NOTE: For this test case to run, we need to start mysql server
# with bigger stack using "--thread_stack=#" option.
# -----------------------------------------------------------------------
-SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
+SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1;
--echo ####################################
--echo # QUERYING PS STATEMENT DIGEST
diff --git a/mysql-test/suite/perfschema/t/statement_program_concurrency-master.opt b/mysql-test/suite/perfschema/t/statement_program_concurrency-master.opt
new file mode 100644
index 00000000000..8c0dedeeb17
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_concurrency-master.opt
@@ -0,0 +1 @@
+--innodb_lock_wait_timeout=1 --thread_stack=655360
diff --git a/mysql-test/suite/perfschema/t/statement_program_concurrency.test b/mysql-test/suite/perfschema/t/statement_program_concurrency.test
new file mode 100644
index 00000000000..75261254c00
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_concurrency.test
@@ -0,0 +1,130 @@
+#----------------------------------------------------------
+# Concurrency check for instrumentation of stored programs
+#----------------------------------------------------------
+
+
+--source include/big_test.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history;
+
+--echo # concurrency check through multi connections
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+CREATE DATABASE db1;
+CREATE DATABASE db2;
+CREATE DATABASE db3;
+
+# connection 1
+connect (con1,localhost,root,,db1);
+
+USE db1;
+
+CREATE TABLE t1(
+ i INT NOT NULL
+);
+
+LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t1;
+
+DELIMITER |;
+CREATE PROCEDURE proc()
+BEGIN
+ INSERT INTO t1 SELECT * FROM t1;
+END|
+DELIMITER ;|
+
+--send CALL proc();
+
+# connection 2
+connect (con2,localhost,root,,db2);
+
+USE db2;
+
+CREATE TABLE t2(
+ i INT NOT NULL
+);
+
+LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t2;
+DELIMITER |;
+CREATE FUNCTION addition(x INT, y INT) RETURNS INT
+BEGIN
+ INSERT INTO t2 SELECT * FROM t2;
+ RETURN x+y;
+END|
+DELIMITER ;|
+
+--send SELECT addition(1234,9876);
+
+# connection 3
+connect (con3,localhost,root,,db3);
+
+USE db3;
+
+CREATE TABLE t(
+ i INT NOT NULL,
+ j INT
+);
+
+CREATE TABLE t3(
+ i INT NOT NULL
+);
+
+LOAD DATA INFILE '../../std_data/wl5766_data.txt' INTO TABLE t3;
+INSERT INTO t VALUES ( 10,1000 );
+CREATE TRIGGER trg AFTER INSERT ON t FOR EACH ROW
+ INSERT INTO t3 SELECT * FROM t3;
+
+--send INSERT INTO t VALUES ( 20,2000);
+
+connection con1;
+--reap;
+
+connection con2;
+--reap;
+
+connection con3;
+--reap;
+
+connection default;
+--source include/wait_until_connected_again.inc
+
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='db1' OR OBJECT_SCHEMA='db2' OR OBJECT_SCHEMA='db3'
+ ORDER BY OBJECT_SCHEMA, OBJECT_NAME;
+
+SELECT EVENT_NAME, SQL_TEXT, CURRENT_SCHEMA, OBJECT_TYPE, OBJECT_SCHEMA,
+ OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL FROM
+ performance_schema.events_statements_history WHERE CURRENT_SCHEMA='db1'
+ OR CURRENT_SCHEMA='db2' OR CURRENT_SCHEMA='db3'
+ ORDER BY CURRENT_SCHEMA, OBJECT_NAME;
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history;
+
+--echo # Clean-up
+
+DROP PROCEDURE db1.proc;
+DROP FUNCTION db2.addition;
+DROP TRIGGER db3.trg;
+
+DROP TABLE db1.t1;
+DROP TABLE db2.t2;
+DROP TABLE db3.t3;
+DROP TABLE db3.t;
+
+DROP DATABASE db1;
+DROP DATABASE db2;
+DROP DATABASE db3;
+
+disconnect con1;
+disconnect con2;
+disconnect con3;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/suite/perfschema/t/statement_program_lost_inst-master.opt b/mysql-test/suite/perfschema/t/statement_program_lost_inst-master.opt
new file mode 100644
index 00000000000..699c91930ae
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_lost_inst-master.opt
@@ -0,0 +1,3 @@
+--loose-performance_schema_max_program_instances=7
+--loose-performance_schema_max_statement_stack=2
+--thread_stack=655360
diff --git a/mysql-test/suite/perfschema/t/statement_program_lost_inst.test b/mysql-test/suite/perfschema/t/statement_program_lost_inst.test
new file mode 100644
index 00000000000..023180b9d2b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_lost_inst.test
@@ -0,0 +1,72 @@
+#-------------------------------------------------------------
+# Tests for PERFORMANCE_SCHEMA stored programs instrumentation
+#-------------------------------------------------------------
+
+#
+# Test case to show the behaviour of stored program instrumentation
+# when values of the system variables performance_schema_max_program_instances &
+# performance_schema_max_statement_stack are less than the statistics collected.
+# The status of the lost instrumentation is shown through the status variables
+# performance_schema_program_lost & performance_schema_nested_statement_lost
+#
+
+# Restarting the server at the begining of the test.
+# This is to avoid the instrumentation of extra SPs called by MTR
+# These additional stored programs which will be added might cause
+# result content mismatch failure.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
+--exec echo "wait" > $restart_file
+--shutdown_server
+--source include/wait_until_disconnected.inc
+--exec echo "restart:--performance_schema_max_program_instances=7 --performance_schema_max_statement_stack=2 --thread_stack=655360">$restart_file
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+--source ../include/start_server_common.inc
+
+# Values of variables server variables
+show global variables like "performance_schema_max_program_instances";
+show global variables like "performance_schema_max_statement_stack";
+
+--echo #####################
+--echo # Setup
+--echo #####################
+--source suite/perfschema/include/program_nested_setup.inc
+
+# Truncate summary table
+TRUNCATE performance_schema.events_statements_summary_by_program;
+SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA FROM
+performance_schema.events_statements_summary_by_program
+WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+# Flush status now
+Flush status;
+show global status like "%performance_schema_program_lost%";
+show global status like "%performance_schema_nested_statement_lost%";
+
+--echo #####################
+--echo # Executing Queries
+--echo #####################
+--source suite/perfschema/include/program_nested_execution.inc
+
+--echo ###########################################
+--echo # Quering PS statement summary table #
+--echo ###########################################
+
+SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+
+# Now check the lost status
+show global status like "%performance_schema_program_lost%";
+show global status like "%performance_schema_nested_statement_lost%";
+
+--echo #####################
+--echo # Cleanup
+--echo #####################
+--source suite/perfschema/include/program_nested_cleanup.inc
+
+
diff --git a/mysql-test/suite/perfschema/t/statement_program_nested-master.opt b/mysql-test/suite/perfschema/t/statement_program_nested-master.opt
new file mode 100644
index 00000000000..3f9d7900961
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_nested-master.opt
@@ -0,0 +1 @@
+--thread_stack=655360
diff --git a/mysql-test/suite/perfschema/t/statement_program_nested.test b/mysql-test/suite/perfschema/t/statement_program_nested.test
new file mode 100644
index 00000000000..e6649704bbf
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_nested.test
@@ -0,0 +1,73 @@
+# -----------------------------------------------------------------------
+# Tests for the performance schema nested stored program instrumentation.
+# -----------------------------------------------------------------------
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--echo #################################################
+--echo # Quering PS statement summary and history_long #
+--echo #################################################
+
+--source suite/perfschema/include/program_nested_setup.inc
+--source suite/perfschema/include/program_nested_execution.inc
+
+SELECT EVENT_NAME, SQL_TEXT, CURRENT_SCHEMA, OBJECT_TYPE, OBJECT_SCHEMA,
+ OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL
+ FROM performance_schema.events_statements_history_long WHERE
+ CURRENT_SCHEMA='nested_sp' ORDER BY
+ OBJECT_NAME,NESTING_EVENT_LEVEL,SQL_TEXT,EVENT_NAME;
+
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+
+--echo # clean-up
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+# After truncate the statictics collected will are reset
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+
+--source suite/perfschema/include/program_nested_cleanup.inc
+
+# After clean-up the stored programs are removed from PS tables
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
+
+
+# Check the intrumentation of stored programs
+# when statement/sp/% instruments not timed
+
+--source suite/perfschema/include/program_nested_setup.inc
+
+update performance_schema.setup_instruments set enabled='YES', timed='NO'
+ where name like "statement/sp/%" order by name;
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--source suite/perfschema/include/program_nested_execution.inc
+
+# check instrumentation
+
+SELECT EVENT_NAME, TIMER_START, TIMER_END, TIMER_WAIT FROM
+ performance_schema.events_statements_history_long WHERE
+ CURRENT_SCHEMA='nested_sp' AND EVENT_NAME like "statement/sp/%";
+
+# clean-up
+
+# Restore the setup
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name like "statement/sp/%" order by name;
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--source suite/perfschema/include/program_nested_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/statement_program_nesting_event_check-master.opt b/mysql-test/suite/perfschema/t/statement_program_nesting_event_check-master.opt
new file mode 100644
index 00000000000..3f9d7900961
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_nesting_event_check-master.opt
@@ -0,0 +1 @@
+--thread_stack=655360
diff --git a/mysql-test/suite/perfschema/t/statement_program_nesting_event_check.test b/mysql-test/suite/perfschema/t/statement_program_nesting_event_check.test
new file mode 100644
index 00000000000..28ad9c76401
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_nesting_event_check.test
@@ -0,0 +1,44 @@
+#-------------------------------------------------------------
+# Tests for PERFORMANCE_SCHEMA stored programs instrumentation
+#-------------------------------------------------------------
+
+# Test to check the values populated in NESTING_EVENT_TYPE
+# columns of events_statements_current/history/history_long PS tables.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--echo #----------------------------
+--echo # Non-nested Stored programs.
+--echo #----------------------------
+--source suite/perfschema/include/program_setup.inc
+--source suite/perfschema/include/program_execution.inc
+
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL
+ FROM performance_schema.events_statements_history_long
+ WHERE CURRENT_SCHEMA='stored_programs' AND
+ (SQL_TEXT not like '%count(*) = 1%' OR SQL_TEXT IS NULL)
+ ORDER BY OBJECT_NAME,NESTING_EVENT_LEVEL,SQL_TEXT;
+
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+# Clean-up
+--source suite/perfschema/include/program_cleanup.inc
+
+--echo #------------------------
+--echo # Nested stored programs.
+--echo #------------------------
+--source suite/perfschema/include/program_nested_setup.inc
+--source suite/perfschema/include/program_nested_execution.inc
+
+SELECT EVENT_NAME, SQL_TEXT, OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL
+ FROM performance_schema.events_statements_history_long
+ WHERE CURRENT_SCHEMA='nested_sp'
+ ORDER BY OBJECT_NAME, NESTING_EVENT_LEVEL, SQL_TEXT, EVENT_NAME;
+
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+# Clean-up
+--source suite/perfschema/include/program_nested_cleanup.inc
diff --git a/mysql-test/suite/perfschema/t/statement_program_non_nested-master.opt b/mysql-test/suite/perfschema/t/statement_program_non_nested-master.opt
new file mode 100644
index 00000000000..3f9d7900961
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_non_nested-master.opt
@@ -0,0 +1 @@
+--thread_stack=655360
diff --git a/mysql-test/suite/perfschema/t/statement_program_non_nested.test b/mysql-test/suite/perfschema/t/statement_program_non_nested.test
new file mode 100644
index 00000000000..2a6b26364ed
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/statement_program_non_nested.test
@@ -0,0 +1,144 @@
+# -----------------------------------------------------------------------
+# Tests for the performance schema stored program instrumentation.
+# -----------------------------------------------------------------------
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--echo ################################################
+--echo # Quering PS statement summary and history_long#
+--echo ################################################
+
+--source suite/perfschema/include/program_setup.inc
+--source suite/perfschema/include/program_execution.inc
+
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME;
+
+SELECT EVENT_NAME, SQL_TEXT, CURRENT_SCHEMA, OBJECT_TYPE, OBJECT_SCHEMA,
+ OBJECT_NAME, NESTING_EVENT_TYPE, NESTING_EVENT_LEVEL FROM
+ performance_schema.events_statements_history_long WHERE
+ CURRENT_SCHEMA='stored_programs' AND
+ (SQL_TEXT not like '%count(*) = 1%' OR SQL_TEXT IS NULL)
+ ORDER BY OBJECT_NAME, NESTING_EVENT_LEVEL, SQL_TEXT;
+
+
+--echo # clean -up
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+# After truncate the statictics collected will are reset
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME;
+
+--source suite/perfschema/include/program_cleanup.inc
+
+# After clean-up the stored programs are removed from PS tables
+
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='stored_programs' ORDER BY OBJECT_NAME;
+
+# Check the intrumentation of stored programs
+# when statement/sp/% instruments not timed
+
+--source suite/perfschema/include/program_setup.inc
+
+update performance_schema.setup_instruments set enabled='YES', timed='NO'
+ where name like "statement/sp/%" order by name;
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--source suite/perfschema/include/program_execution.inc
+
+# check instrumentation
+
+SELECT EVENT_NAME, TIMER_START, TIMER_END, TIMER_WAIT FROM
+ performance_schema.events_statements_history_long WHERE
+ CURRENT_SCHEMA='stored_programs' AND EVENT_NAME like "statement/sp/%";
+
+# clean-up
+
+# Restore the setup
+update performance_schema.setup_instruments set enabled='YES', timed='YES'
+ where name like "statement/sp/%" order by name;
+
+TRUNCATE TABLE performance_schema.events_statements_summary_by_program;
+TRUNCATE TABLE performance_schema.events_statements_history_long;
+
+--source suite/perfschema/include/program_cleanup.inc
+
+#----------------------------------------------------------------
+# The statistics of a stored program are not collected
+# if its execution fails
+#----------------------------------------------------------------
+
+--echo # set-up
+CREATE DATABASE sp;
+USE sp;
+
+CREATE TABLE t1(
+ a INT,
+ b INT
+);
+
+--echo # let the creation of the following stored programs fail
+--error 1064
+CREATE PROCEDURE fail1(IN a INT OUT x CHAR(16))
+ SET a=1;
+
+--error 1064
+CREATE FUNCTION fail2(a INT , b INT) RETURNS INT
+ x=SELECT COUNT(*) FROM t;
+
+--error 1064
+CREATE EVENT fail3 SCHEDULE EVERY MICROSECOND DO
+ DROP TABLE t;
+
+--echo # the below query on PS table doesn't show any rows
+--echo # as the creation of stored programs failed
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='sp';
+
+--echo # create few stored programs
+DELIMITER |;
+CREATE PROCEDURE p(x1 INT, x2 INT)
+BEGIN
+ INSERT INTO t1 VALUES (x1, x2);
+END|
+DELIMITER ;|
+
+CREATE FUNCTION f(y1 INT, y2 INT) RETURNS INT
+ RETURN y1+y2;
+
+CREATE TRIGGER trg AFTER INSERT ON t1 FOR EACH ROW
+ SET @neg=-1;
+
+--echo # execute the created stored programs such that they fail.
+--error 1318
+CALL p(7);
+--error 1318
+SELECT f("add",1,3);
+--error 1064
+INSERT INTO t1;
+
+--echo # the below query on PS table doesn't expose any statistics as
+--echo # execution of the created stored porgrams failed.
+SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_STATEMENTS
+ FROM performance_schema.events_statements_summary_by_program
+ WHERE OBJECT_SCHEMA='sp';
+
+--echo #clean-up
+DROP PROCEDURE p;
+DROP FUNCTION f;
+DROP TRIGGER trg;
+DROP TABLE t1;
+DROP DATABASE sp;
diff --git a/mysql-test/suite/perfschema/t/status_reprepare.test b/mysql-test/suite/perfschema/t/status_reprepare.test
new file mode 100644
index 00000000000..94a8f120633
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/status_reprepare.test
@@ -0,0 +1,61 @@
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/no_protocol.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--echo
+--echo ================================================================================
+--echo SETUP
+--echo ================================================================================
+
+# Create a new connection, to get clean statistics
+connect(con1, localhost, root,,);
+
+# Create a table
+CREATE TABLE test.t1 (c1 INT);
+
+#prepare a statement
+PREPARE stmt1 FROM "SELECT c1 FROM test.t1";
+
+#execute prepared statement;
+EXECUTE stmt1;
+
+# Check status from SHOW STATUS
+SHOW SESSION STATUS LIKE "%com_stmt_%prepare%";
+
+#check the statistics
+SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME LIKE "%com_stmt%";
+
+SELECT VARIABLE_VALUE INTO @count_global_reprepare_before
+ FROM performance_schema.global_status
+ WHERE VARIABLE_NAME LIKE "Com_stmt_reprepare";
+
+# Alter table to make server reprepare the statement
+ALTER TABLE test.t1 ADD COLUMN c2 INTEGER;
+
+#execute prepared statement;
+EXECUTE stmt1;
+
+# Check status from SHOW STATUS
+SHOW SESSION STATUS LIKE "%com_stmt_%prepare%";
+
+#check the statistics
+SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME LIKE "%com_stmt%";
+
+SELECT VARIABLE_VALUE INTO @count_global_reprepare_after
+ FROM performance_schema.global_status
+ WHERE VARIABLE_NAME LIKE "Com_stmt_reprepare";
+
+# Should increment by 1
+SELECT @count_global_reprepare_after - @count_global_reprepare_before;
+
+--echo
+--echo ================================================================================
+--echo CLEANUP
+--echo ================================================================================
+
+DROP TABLE test.t1;
+
+--disconnect con1
+--connection default
diff --git a/mysql-test/suite/perfschema/t/sxlock_func.test b/mysql-test/suite/perfschema/t/sxlock_func.test
new file mode 100644
index 00000000000..7c7e8fc6189
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/sxlock_func.test
@@ -0,0 +1,80 @@
+# Performance schema tests, for SX-lock
+# Note that only Innodb provides instrumented SX-locks,
+# so this test depends largely on the innodb instrumentation.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/have_innodb.inc
+
+UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
+
+UPDATE performance_schema.setup_instruments SET enabled = 'YES'
+WHERE name like 'wait/synch/sxlock/%';
+
+TRUNCATE TABLE performance_schema.events_waits_history_long;
+TRUNCATE TABLE performance_schema.events_waits_history;
+TRUNCATE TABLE performance_schema.events_waits_current;
+
+# Check some SX-locks classes are instrumented
+# (exclude instruments that depend on compiling options)
+select name from performance_schema.setup_instruments
+ where name like "wait/synch/sxlock/%"
+ and name not in
+ ("wait/synch/sxlock/innodb/buf_block_lock",
+ "wait/synch/sxlock/innodb/buf_block_debug_latch")
+ order by name;
+
+# Check some SX-locks instances are instrumented
+select name from performance_schema.rwlock_instances
+ where name in
+ (
+ 'wait/synch/sxlock/innodb/btr_search_latch',
+ 'wait/synch/sxlock/innodb/checkpoint_lock',
+ 'wait/synch/sxlock/innodb/dict_operation_lock',
+ 'wait/synch/sxlock/innodb/trx_i_s_cache_lock',
+ 'wait/synch/sxlock/innodb/trx_purge_latch'
+ )
+ order by name;
+
+# Some Innodb payload, to produce data
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1(a int) engine=innodb;
+begin;
+insert into t1 values (1), (2), (3);
+insert into t1 values (1), (2), (3);
+insert into t1 values (1), (2), (3);
+commit;
+drop table t1;
+
+# Make sure some shared_lock operations have been executed
+
+select operation from performance_schema.events_waits_history_long
+ where event_name like "wait/synch/sxlock/%"
+ and operation = "shared_lock" limit 1;
+
+# Make sure some exclusive_lock operations have been executed
+
+select operation from performance_schema.events_waits_history_long
+ where event_name like "wait/synch/sxlock/%"
+ and operation = "exclusive_lock" limit 1;
+
+# The following operations are not verified in this test:
+# - shared_exclusive_lock
+# - try_shared_lock
+# - try_shared_exclusive_lock
+# - try_exclusive_lock
+# because to observe them:
+# - there must be an actual code path using the operation
+# (this affects try operations, which are not all used)
+# - there must be a repeatable scenario to trigger the
+# code path, to use as payload in the test script
+
+# Cleanup
+
+
+UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
+
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_2t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_2t.test
index c64838b206b..9205e2b9232 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_2t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_2t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_3t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_3t.test
index 7a0676c6006..60db987b9df 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_3t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_2u_3t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_2t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_2t.test
index fb9f896eeca..1bac2d52014 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_2t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_2t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_3t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_3t.test
index eb9b7b4faa8..4909defee60 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_3t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_global_4u_3t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_2t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_2t.test
index 5d1f36228e8..7721599ba5d 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_2t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_2t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_3t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_3t.test
index b1e4043f12f..ef1e196a151 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_3t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_2u_3t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# hist by default
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_2t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_2t.test
index 53992612fc2..ad34cd9f44f 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_2t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_2t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_3t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_3t.test
index 05306d74d8b..078a6d9e245 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_3t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_hist_4u_3t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_2t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_2t.test
index 4376b49eb3c..a155619e9aa 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_2t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_2t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_3t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_3t.test
index d1412b148da..c48d39f5eb7 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_3t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_2u_3t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_2t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_2t.test
index 46ab5ce3b01..ff69d164f64 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_2t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_2t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_3t.test b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_3t.test
index 9ee66735961..3ee77d05700 100644
--- a/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_3t.test
+++ b/mysql-test/suite/perfschema/t/table_lock_aggregate_thread_4u_3t.test
@@ -1,5 +1,8 @@
# Tests for the performance schema
+# Use MyISAM as InnoDB SE no longer uses THR_LOCK locks.
+#--source include/force_myisam_default.inc
+
--source ../include/table_aggregate_setup.inc
# table lock
diff --git a/mysql-test/suite/perfschema/t/table_name.test b/mysql-test/suite/perfschema/t/table_name.test
index 5fb8ccd0f7f..e80185e8b87 100644
--- a/mysql-test/suite/perfschema/t/table_name.test
+++ b/mysql-test/suite/perfschema/t/table_name.test
@@ -34,7 +34,8 @@ INSERT INTO `sql_1` VALUES(1,'one');
--sorted_result
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo # Drop the tables, verify that the table objects are removed.
--echo
@@ -43,7 +44,8 @@ DROP TABLE `sql_1`;
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo #
@@ -59,7 +61,8 @@ INSERT INTO sql_temp2_innodb VALUES(1,'one');
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo # Drop the tables, verify that the table objects are not created.
--echo
@@ -68,7 +71,8 @@ DROP TABLE sql_temp2_innodb;
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo #
@@ -86,7 +90,8 @@ INSERT INTO `#sql_temp3_innodb` VALUES(1,'one');
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo # Drop the temporary tables.
--echo
@@ -97,7 +102,8 @@ DROP TABLE `#sql_temp3_innodb`;
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo #
@@ -114,7 +120,8 @@ INSERT INTO `#sql_temp4_myisam` VALUES(1,'one');
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo # Truncate the MyISAM temporary tables, forcing them to be recreated as non-temporary.
--echo
@@ -125,7 +132,8 @@ TRUNCATE TABLE `#sql_temp4_myisam`;
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo # Drop the recreated MyISAM tables;
--echo
@@ -136,7 +144,8 @@ DROP TABLE `#sql_temp4_myisam`;
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo #
@@ -152,7 +161,8 @@ ALTER TABLE t1 ADD COLUMN (b int);
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
--echo
--echo # Drop the MyISAM table
--echo
@@ -163,4 +173,5 @@ DROP TABLE t1;
--echo
SELECT object_type, object_schema, object_name
FROM performance_schema.objects_summary_global_by_type
-WHERE object_schema="test";
+WHERE object_schema="test"
+ORDER BY object_name;
diff --git a/mysql-test/suite/perfschema/t/table_schema.test b/mysql-test/suite/perfschema/t/table_schema.test
index f903419bd78..ce53c088c51 100644
--- a/mysql-test/suite/perfschema/t/table_schema.test
+++ b/mysql-test/suite/perfschema/t/table_schema.test
@@ -16,9 +16,9 @@ select * from information_schema.columns where table_schema="performance_schema"
# Count the number of NUMBER_OF_BYTES columns.
-select count(*) from information_schema.columns
+select count(*) into @count_byte_columns from information_schema.columns
where table_schema="performance_schema" and data_type = "bigint"
- and column_name like "%number_of_bytes" into @count_byte_columns;
+ and column_name like "%number_of_bytes";
# Confirm that at least one column was found.
@@ -26,10 +26,10 @@ select @count_byte_columns > 0;
# Confirm that all NUMBER_OF_BYTES columns are BIGINT signed.
-select count(*) from information_schema.columns
+select count(*) into @count_byte_signed from information_schema.columns
where table_schema="performance_schema" and data_type="bigint"
and column_name like "%number_of_bytes"
- and column_type not like "%unsigned" into @count_byte_signed;
+ and column_type not like "%unsigned";
select (@count_byte_columns - @count_byte_signed) = 0;
@@ -38,9 +38,9 @@ select (@count_byte_columns - @count_byte_signed) = 0;
#
# Count the number of OBJECT_INSTANCE_BEGIN columns.
-select count(*) from information_schema.columns
+select count(*) into @count_object_columns from information_schema.columns
where table_schema="performance_schema" and data_type = "bigint"
- and column_name like "%object_instance_begin" into @count_object_columns;
+ and column_name like "%object_instance_begin";
# Confirm that at least one column was found.
@@ -48,10 +48,10 @@ select @count_object_columns > 0;
# Confirm that all OBJECT_INSTANCE_BEGIN columns are BIGINT unsigned.
-select count(*) from information_schema.columns
+select count(*) into @count_object_unsigned from information_schema.columns
where table_schema="performance_schema" and data_type="bigint"
and column_name like "%object_instance_begin"
- and column_type like "%unsigned" into @count_object_unsigned;
+ and column_type like "%unsigned";
select (@count_object_columns - @count_object_unsigned) = 0;
diff --git a/mysql-test/suite/perfschema/t/thread_cache.test b/mysql-test/suite/perfschema/t/thread_cache.test
index 4ebadfde9fb..90823988f8c 100644
--- a/mysql-test/suite/perfschema/t/thread_cache.test
+++ b/mysql-test/suite/perfschema/t/thread_cache.test
@@ -2,6 +2,7 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
+--source include/not_threadpool.inc
#
# Important note:
@@ -17,7 +18,7 @@ SET @saved_thread_cache_size = @@global.thread_cache_size;
set global thread_cache_size = 0;
-show variables like "thread_cache_size";
+show global variables like "thread_cache_size";
connect (con1, localhost, root, , );
@@ -91,7 +92,7 @@ select @thread_id_increment;
set global thread_cache_size = 100;
-show variables like "thread_cache_size";
+show global variables like "thread_cache_size";
connect (con1, localhost, root, , );
@@ -169,5 +170,5 @@ select @thread_id_increment;
set global thread_cache_size = @saved_thread_cache_size;
-show status like "performance_schema_thread%";
+show global status like "performance_schema_thread%";
diff --git a/mysql-test/suite/perfschema/t/thread_misc-master.opt b/mysql-test/suite/perfschema/t/thread_misc-master.opt
new file mode 100644
index 00000000000..34586f1fed5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/thread_misc-master.opt
@@ -0,0 +1 @@
+--loose-performance-schema-consumer-thread-instrumentation=0
diff --git a/mysql-test/suite/perfschema/t/thread_misc.test b/mysql-test/suite/perfschema/t/thread_misc.test
new file mode 100644
index 00000000000..4f5fa4f0ac1
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/thread_misc.test
@@ -0,0 +1,11 @@
+
+# Bug#22118669 - ASSERTION `PFS_FILE != __NULL' FAILED
+
+# Cause a temporary file to be instrumented,
+# while there are no per thread statistics collected.
+
+--disable_result_log
+select * from information_schema.columns ORDER BY table_name;
+--enable_result_log
+
+
diff --git a/mysql-test/suite/perfschema/t/threads_history.test b/mysql-test/suite/perfschema/t/threads_history.test
new file mode 100644
index 00000000000..f42dd6d0ab4
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/threads_history.test
@@ -0,0 +1,727 @@
+# Check the impact of changes done in HISTORY column in
+# performance_schema.setup_actors.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/no_protocol.inc
+
+# Presence of the query cache changes query stages,
+# causing noise in the test output
+#--source include/have_query_cache_disabled.inc
+
+create user user1@localhost;
+create user user2@localhost;
+create user user3@localhost;
+create user user4@localhost;
+
+grant ALL on *.* to user1@localhost;
+grant ALL on *.* to user2@localhost;
+grant ALL on *.* to user3@localhost;
+grant ALL on *.* to user4@localhost;
+
+flush privileges;
+
+select * from performance_schema.setup_consumers;
+
+--echo # Switch to (con1, localhost, user1, , )
+connect (con1, localhost, user1, , );
+
+update performance_schema.threads
+ set INSTRUMENTED='YES', HISTORY='YES'
+ where PROCESSLIST_ID = connection_id();
+
+let $con1_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to (con2, localhost, user2, , )
+connect (con2, localhost, user2, , );
+
+update performance_schema.threads
+ set INSTRUMENTED='YES', HISTORY='NO'
+ where PROCESSLIST_ID = connection_id();
+
+let $con2_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to (con3, localhost, user3, , )
+connect (con3, localhost, user3, , );
+
+update performance_schema.threads
+ set INSTRUMENTED='NO', HISTORY='YES'
+ where PROCESSLIST_ID = connection_id();
+
+let $con3_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to (con4, localhost, user4, , )
+connect (con4, localhost, user4, , );
+
+update performance_schema.threads
+ set INSTRUMENTED='NO', HISTORY='NO'
+ where PROCESSLIST_ID = connection_id();
+
+let $con4_thread_id= `select THREAD_ID from performance_schema.threads
+ where PROCESSLIST_ID = connection_id()`;
+
+--echo # Switch to connection default
+--connection default
+
+truncate table performance_schema.events_transactions_current;
+truncate table performance_schema.events_transactions_history;
+truncate table performance_schema.events_transactions_history_long;
+truncate table performance_schema.events_statements_current;
+truncate table performance_schema.events_statements_history;
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_current;
+truncate table performance_schema.events_stages_history;
+truncate table performance_schema.events_stages_history_long;
+truncate table performance_schema.events_waits_current;
+truncate table performance_schema.events_waits_history;
+truncate table performance_schema.events_waits_history_long;
+
+--echo # Switch to connection con1
+--connection con1
+
+XA START 'XA_CON1', 'XA_BQUAL', 12;
+select "Hi from con1";
+XA END 'XA_CON1', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON1', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON1', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con2
+--connection con2
+
+XA START 'XA_CON2', 'XA_BQUAL', 12;
+select "Hi from con2";
+XA END 'XA_CON2', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON2', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON2', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con3
+--connection con3
+
+XA START 'XA_CON3', 'XA_BQUAL', 12;
+select "Hi from con3";
+XA END 'XA_CON3', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON3', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON3', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con4
+--connection con4
+
+XA START 'XA_CON4', 'XA_BQUAL', 12;
+select "Hi from con4";
+XA END 'XA_CON4', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON4', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON4', 'XA_BQUAL', 12;
+
+--connection default
+
+--disable_query_log
+
+echo "=========================== Transactions user 1";
+
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_current
+ where THREAD_ID = $con1_thread_id;
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_history
+ where THREAD_ID = $con1_thread_id;
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Transactions user 2";
+
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_current
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Transactions user 3";
+
+eval select count(*) from performance_schema.events_transactions_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Transactions user 4";
+
+eval select count(*) from performance_schema.events_transactions_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Statements user 1";
+
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_history
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_history_long
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+
+echo "=========================== Statements user 2";
+
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Statements user 3";
+
+eval select count(*) from performance_schema.events_statements_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Statements user 4";
+
+eval select count(*) from performance_schema.events_statements_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Stages user 1";
+
+eval select EVENT_NAME from performance_schema.events_stages_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME from performance_schema.events_stages_history
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME from performance_schema.events_stages_history_long
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+
+echo "=========================== Stages user 2";
+
+eval select EVENT_NAME from performance_schema.events_stages_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Stages user 3";
+
+eval select count(*) from performance_schema.events_stages_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Stages user 4";
+
+eval select count(*) from performance_schema.events_stages_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Waits user 1";
+
+eval select EVENT_NAME from performance_schema.events_waits_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select (count(*) > 5) as has_waits from performance_schema.events_waits_history
+ where THREAD_ID = $con1_thread_id;
+eval select (count(*) > 15) as has_waits from performance_schema.events_waits_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Waits user 2";
+
+eval select EVENT_NAME from performance_schema.events_waits_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Waits user 3";
+
+eval select count(*) from performance_schema.events_waits_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Waits user 4";
+
+eval select count(*) from performance_schema.events_waits_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con4_thread_id;
+
+--enable_query_log
+
+--echo # Switch to connection default, disable consumers
+--connection default
+
+update performance_schema.setup_consumers
+ set enabled='NO' where name like "%history%";
+
+select * from performance_schema.setup_consumers;
+
+truncate table performance_schema.events_transactions_current;
+truncate table performance_schema.events_transactions_history;
+truncate table performance_schema.events_transactions_history_long;
+truncate table performance_schema.events_statements_current;
+truncate table performance_schema.events_statements_history;
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_current;
+truncate table performance_schema.events_stages_history;
+truncate table performance_schema.events_stages_history_long;
+truncate table performance_schema.events_waits_current;
+truncate table performance_schema.events_waits_history;
+truncate table performance_schema.events_waits_history_long;
+
+--echo # Switch to connection con1
+--connection con1
+
+XA START 'XA_CON1', 'XA_BQUAL', 12;
+select "Hi from con1";
+XA END 'XA_CON1', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON1', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON1', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con2
+--connection con2
+
+XA START 'XA_CON2', 'XA_BQUAL', 12;
+select "Hi from con2";
+XA END 'XA_CON2', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON2', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON2', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con3
+--connection con3
+
+XA START 'XA_CON3', 'XA_BQUAL', 12;
+select "Hi from con3";
+XA END 'XA_CON3', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON3', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON3', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con4
+--connection con4
+
+XA START 'XA_CON4', 'XA_BQUAL', 12;
+select "Hi from con4";
+XA END 'XA_CON4', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON4', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON4', 'XA_BQUAL', 12;
+
+--connection default
+
+--disable_query_log
+
+echo "=========================== Transactions user 1";
+
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_current
+ where THREAD_ID = $con1_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con1_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Transactions user 2";
+
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_current
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Transactions user 3";
+
+eval select count(*) from performance_schema.events_transactions_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Transactions user 4";
+
+eval select count(*) from performance_schema.events_transactions_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Statements user 1";
+
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con1_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Statements user 2";
+
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Statements user 3";
+
+eval select count(*) from performance_schema.events_statements_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Statements user 4";
+
+eval select count(*) from performance_schema.events_statements_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Stages user 1";
+
+eval select EVENT_NAME from performance_schema.events_stages_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con1_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Stages user 2";
+
+eval select EVENT_NAME from performance_schema.events_stages_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Stages user 3";
+
+eval select count(*) from performance_schema.events_stages_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Stages user 4";
+
+eval select count(*) from performance_schema.events_stages_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Waits user 1";
+
+eval select EVENT_NAME from performance_schema.events_waits_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) as has_waits from performance_schema.events_waits_history
+ where THREAD_ID = $con1_thread_id;
+eval select count(*) as has_waits from performance_schema.events_waits_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Waits user 2";
+
+eval select EVENT_NAME from performance_schema.events_waits_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Waits user 3";
+
+eval select count(*) from performance_schema.events_waits_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Waits user 4";
+
+eval select count(*) from performance_schema.events_waits_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con4_thread_id;
+
+--enable_query_log
+
+--echo # Switch to connection default, enable consumers
+--connection default
+
+update performance_schema.setup_consumers
+ set enabled='YES' where name like "%history%";
+
+select * from performance_schema.setup_consumers;
+
+truncate table performance_schema.events_transactions_current;
+truncate table performance_schema.events_transactions_history;
+truncate table performance_schema.events_transactions_history_long;
+truncate table performance_schema.events_statements_current;
+truncate table performance_schema.events_statements_history;
+truncate table performance_schema.events_statements_history_long;
+truncate table performance_schema.events_stages_current;
+truncate table performance_schema.events_stages_history;
+truncate table performance_schema.events_stages_history_long;
+truncate table performance_schema.events_waits_current;
+truncate table performance_schema.events_waits_history;
+truncate table performance_schema.events_waits_history_long;
+
+--echo # Switch to connection con1
+--connection con1
+
+XA START 'XA_CON1', 'XA_BQUAL', 12;
+select "Hi from con1";
+XA END 'XA_CON1', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON1', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON1', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con2
+--connection con2
+
+XA START 'XA_CON2', 'XA_BQUAL', 12;
+select "Hi from con2";
+XA END 'XA_CON2', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON2', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON2', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con3
+--connection con3
+
+XA START 'XA_CON3', 'XA_BQUAL', 12;
+select "Hi from con3";
+XA END 'XA_CON3', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON3', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON3', 'XA_BQUAL', 12;
+
+--echo # Switch to connection con4
+--connection con4
+
+XA START 'XA_CON4', 'XA_BQUAL', 12;
+select "Hi from con4";
+XA END 'XA_CON4', 'XA_BQUAL', 12;
+XA PREPARE 'XA_CON4', 'XA_BQUAL', 12;
+XA COMMIT 'XA_CON4', 'XA_BQUAL', 12;
+
+--connection default
+
+--disable_query_log
+
+echo "=========================== Transactions user 1";
+
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_current
+ where THREAD_ID = $con1_thread_id;
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_history
+ where THREAD_ID = $con1_thread_id;
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Transactions user 2";
+
+eval select XID_FORMAT_ID, XID_GTRID, XID_BQUAL from performance_schema.events_transactions_current
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Transactions user 3";
+
+eval select count(*) from performance_schema.events_transactions_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Transactions user 4";
+
+eval select count(*) from performance_schema.events_transactions_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_transactions_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_transactions_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Statements user 1";
+
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_history
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_history_long
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+
+echo "=========================== Statements user 2";
+
+eval select EVENT_NAME, SQL_TEXT from performance_schema.events_statements_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Statements user 3";
+
+eval select count(*) from performance_schema.events_statements_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Statements user 4";
+
+eval select count(*) from performance_schema.events_statements_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_statements_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_statements_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Stages user 1";
+
+eval select EVENT_NAME from performance_schema.events_stages_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME from performance_schema.events_stages_history
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select EVENT_NAME from performance_schema.events_stages_history_long
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+
+echo "=========================== Stages user 2";
+
+eval select EVENT_NAME from performance_schema.events_stages_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Stages user 3";
+
+eval select count(*) from performance_schema.events_stages_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Stages user 4";
+
+eval select count(*) from performance_schema.events_stages_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_stages_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_stages_history_long
+ where THREAD_ID = $con4_thread_id;
+
+echo "=========================== Waits user 1";
+
+eval select EVENT_NAME from performance_schema.events_waits_current
+ where THREAD_ID = $con1_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select (count(*) > 5) as has_waits from performance_schema.events_waits_history
+ where THREAD_ID = $con1_thread_id;
+eval select (count(*) > 15) as has_waits from performance_schema.events_waits_history_long
+ where THREAD_ID = $con1_thread_id;
+
+echo "=========================== Waits user 2";
+
+eval select EVENT_NAME from performance_schema.events_waits_current
+ where THREAD_ID = $con2_thread_id
+ order by THREAD_ID, EVENT_ID;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con2_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con2_thread_id;
+
+echo "=========================== Waits user 3";
+
+eval select count(*) from performance_schema.events_waits_current
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con3_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con3_thread_id;
+
+echo "=========================== Waits user 4";
+
+eval select count(*) from performance_schema.events_waits_current
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_waits_history
+ where THREAD_ID = $con4_thread_id;
+eval select count(*) from performance_schema.events_waits_history_long
+ where THREAD_ID = $con4_thread_id;
+
+--enable_query_log
+
+--echo # Switch to connection default
+--connection default
+
+revoke all privileges, grant option from user1@localhost;
+revoke all privileges, grant option from user2@localhost;
+revoke all privileges, grant option from user3@localhost;
+revoke all privileges, grant option from user4@localhost;
+drop user user1@localhost;
+drop user user2@localhost;
+drop user user3@localhost;
+drop user user4@localhost;
+flush privileges;
+
+truncate table performance_schema.setup_actors;
+
+insert into performance_schema.setup_actors
+values ('%', '%', '%', 'YES', 'YES');
+
+select * from performance_schema.setup_actors;
+
diff --git a/mysql-test/suite/perfschema/t/threads_innodb.test b/mysql-test/suite/perfschema/t/threads_innodb.test
index 66bceab724a..366c3b82ce8 100644
--- a/mysql-test/suite/perfschema/t/threads_innodb.test
+++ b/mysql-test/suite/perfschema/t/threads_innodb.test
@@ -7,6 +7,8 @@
--source include/have_innodb.inc
--source include/have_perfschema.inc
+#--source include/turn_off_only_full_group_by.inc
+
# There are several InnoDB io_handler_threads servicing for read IO, write IO etc.
# The number of these threads is at least for some types configurable.
# We suppress here duplicates rows with the goal to avoid that the test fails
@@ -18,3 +20,4 @@ FROM performance_schema.threads
WHERE name LIKE 'thread/innodb/%'
GROUP BY name;
+#--source include/restore_sql_mode_after_turn_off_only_full_group_by.inc
diff --git a/mysql-test/suite/perfschema/t/threads_insert_delayed.test b/mysql-test/suite/perfschema/t/threads_insert_delayed.test
deleted file mode 100644
index a9f3edc6cfe..00000000000
--- a/mysql-test/suite/perfschema/t/threads_insert_delayed.test
+++ /dev/null
@@ -1,40 +0,0 @@
-
-# Tests for special content of performance_schema.threads
-#
-# The feature INSERT DELAYED (supported by MyISAM,MEMORY,ARCHIVE,BLACKHOLE)
-# causes that a "delayed_insert" thread shows up as soon as the first
-# INSERT DELAYED was issued.
-
---source include/not_embedded.inc
---source include/have_perfschema.inc
-
---disable_warnings
-DROP TABLE IF EXISTS t1;
-DROP TEMPORARY TABLE IF EXISTS t2;
---enable_warnings
-CREATE TABLE t1 (f1 BIGINT) ENGINE = MyISAM;
-CREATE TEMPORARY TABLE t2 AS
-SELECT thread_id FROM performance_schema.threads WHERE 1 = 2;
-
-# Reveal that the delayed_insert thread does not exist.
-# Note(mleich): This expectation is probably not all time true.
-SELECT COUNT(*) = 0 AS expect_1 FROM performance_schema.threads
-WHERE name = 'thread/sql/delayed_insert';
-
-INSERT INTO t2 SELECT thread_id
-FROM performance_schema.threads;
-
-let $wait_condition= SELECT COUNT(*) = 1 AS expect_0 FROM performance_schema.threads
-WHERE name = 'thread/sql/delayed_insert';
-INSERT DELAYED INTO t1 SET f1 = SLEEP(3);
---source include/wait_condition.inc
-
-# Expect to get
-# thread/sql/delayed_insert FOREGROUND YES root localhost
-SELECT name, type, instrumented, processlist_user, processlist_host
-FROM performance_schema.threads
-WHERE thread_id NOT IN (SELECT thread_id FROM t2);
-
-DROP TABLE t1;
-DROP TEMPORARY TABLE t2;
-
diff --git a/mysql-test/suite/perfschema/t/threads_mysql_freebsd.test b/mysql-test/suite/perfschema/t/threads_mysql_freebsd.test
new file mode 100644
index 00000000000..a075263629e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/threads_mysql_freebsd.test
@@ -0,0 +1,22 @@
+
+# Tests for special content of performance_schema.threads
+#
+# Show MySQL server related content in performance_schema.threads
+
+--source include/freebsd.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# Every thread should be bound to an operating system thread
+# (this test is not using the thread_pool)
+
+# Note that this test will fail:
+# - on platforms where my_thread_os_id() is not supported,
+# which is not the case on FreeBSD
+# - if some code in the server does not assign a THREAD_OS_ID
+# to an instrumented thread, in which case this is a bug
+# in the component instrumentation.
+
+SELECT THREAD_ID, NAME, THREAD_OS_ID from performance_schema.threads
+ WHERE THREAD_OS_ID is NULL;
+
diff --git a/mysql-test/suite/perfschema/t/threads_mysql_linux.test b/mysql-test/suite/perfschema/t/threads_mysql_linux.test
new file mode 100644
index 00000000000..d56fe73d0c9
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/threads_mysql_linux.test
@@ -0,0 +1,22 @@
+
+# Tests for special content of performance_schema.threads
+#
+# Show MySQL server related content in performance_schema.threads
+
+--source include/linux.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# Every thread should be bound to an operating system thread
+# (this test is not using the thread_pool)
+
+# Note that this test will fail:
+# - on platforms where my_thread_os_id() is not supported,
+# which is not the case on linux
+# - if some code in the server does not assign a THREAD_OS_ID
+# to an instrumented thread, in which case this is a bug
+# in the component instrumentation.
+
+SELECT THREAD_ID, NAME, THREAD_OS_ID from performance_schema.threads
+ WHERE THREAD_OS_ID is NULL;
+
diff --git a/mysql-test/suite/perfschema/t/threads_mysql_windows.test b/mysql-test/suite/perfschema/t/threads_mysql_windows.test
new file mode 100644
index 00000000000..f7c1145fa5e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/threads_mysql_windows.test
@@ -0,0 +1,22 @@
+
+# Tests for special content of performance_schema.threads
+#
+# Show MySQL server related content in performance_schema.threads
+
+--source include/windows.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# Every thread should be bound to an operating system thread
+# (this test is not using the thread_pool)
+
+# Note that this test will fail:
+# - on platforms where my_thread_os_id() is not supported,
+# which is not the case on windows
+# - if some code in the server does not assign a THREAD_OS_ID
+# to an instrumented thread, in which case this is a bug
+# in the component instrumentation.
+
+SELECT THREAD_ID, NAME, THREAD_OS_ID from performance_schema.threads
+ WHERE THREAD_OS_ID is NULL;
+
diff --git a/mysql-test/suite/perfschema/t/transaction-master.opt b/mysql-test/suite/perfschema/t/transaction-master.opt
new file mode 100644
index 00000000000..c720b9a1edb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/transaction-master.opt
@@ -0,0 +1,4 @@
+--loose-gtid-mode=on
+--loose-enforce-gtid-consistency
+--log-bin
+--log-slave-updates
diff --git a/mysql-test/suite/perfschema/t/transaction.test b/mysql-test/suite/perfschema/t/transaction.test
new file mode 100644
index 00000000000..99ddc1eca46
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/transaction.test
@@ -0,0 +1,734 @@
+############# suite/perfschema/t/transaction.test ####################
+# #
+# Test processing of transaction events by the Performance Schema, #
+# including explicit/implicit transactions, access modes, isolation #
+# levels, statement counts and state transitions. #
+# #
+# #
+######################################################################
+
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/have_innodb.inc
+--source include/no_protocol.inc
+--disable_query_log
+--source ../include/transaction_setup.inc
+--enable_query_log
+set global binlog_format=ROW;
+
+--echo
+--echo ========================================================================
+--echo STEP 1 - SETUP
+--echo ========================================================================
+
+--echo
+--echo # Control thread
+--echo
+--connection default
+SET SESSION AUTOCOMMIT= 1;
+eval $get_thread_id;
+let $default_thread_id= `SELECT @my_thread_id`;
+
+--echo
+--echo # Connection 1
+--echo
+connect(con1, localhost, root,,);
+--disable_query_log
+eval $get_thread_id;
+let $con1_thread_id= `SELECT @my_thread_id`;
+--enable_query_log
+SET SESSION AUTOCOMMIT= 0;
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE;
+
+--disable_parsing
+--echo
+--echo # Connection 2
+--echo
+connect(con2, localhost, root,,);
+--disable_query_log
+eval $get_thread_id;
+let $con2_thread_id= `SELECT @my_thread_id`;
+--enable_query_log
+SET SESSION AUTOCOMMIT= 0;
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE;
+--enable_parsing
+
+--connection default
+--disable_query_log
+eval SET @con1_thread_id= $con1_thread_id;
+#eval SET @con2_thread_id= $con2_thread_id;
+--enable_query_log
+
+--echo
+--echo # Create test tables, one transactional and one non-transactional
+--echo
+--connection default
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS nt1;
+--enable_warnings
+CREATE TABLE t1 (s1 int, s2 varchar(64)) ENGINE=INNODB;
+CREATE TABLE nt1 (s1 int, s2 varchar(64)) ENGINE=MYISAM;
+
+--echo
+--echo # Disable all events from the control thread
+--echo
+--disable_query_log
+UPDATE performance_schema.threads
+ SET instrumented='NO' WHERE processlist_id = CONNECTION_ID();
+--enable_query_log
+
+--echo
+--echo # Clear transaction tables
+--echo
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 2 - BASIC TRANSACTION
+--echo ========================================================================
+--echo
+--connection con1
+SELECT @@global.tx_isolation;
+SELECT @@global.autocommit;
+SELECT @@global.binlog_format;
+SELECT @@tx_isolation;
+SELECT @@autocommit;
+SELECT @@binlog_format;
+
+--echo
+--echo # STEP 2.1 - START/COMMIT
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (101, 'COMMITTED');
+COMMIT;
+
+--echo
+--echo # STEP 2.2 - ROLLBACK
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (102, 'ROLLED BACK');
+ROLLBACK;
+
+--echo
+--echo ## Expect 1 committed and 1 rolled back transaction
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo # STEP 2.3 - COMMIT AND CHAIN
+--echo
+--connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (103, 'COMMIT AND CHAIN');
+COMMIT AND CHAIN;
+INSERT INTO t1 VALUES (104, 'COMMIT AND CHAIN');
+COMMIT;
+
+--echo
+--echo ## Expect 2 committed transactions
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 2);
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 3 - ISOLATION LEVEL
+--echo ========================================================================
+--echo
+--echo connection con1
+--connection con1
+SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+START TRANSACTION;
+INSERT INTO t1 VALUES (301, 'SERIALIZABLE');
+COMMIT;
+
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
+START TRANSACTION;
+INSERT INTO t1 VALUES (302, 'REPEATABLE READ');
+COMMIT;
+
+## NOTE - InnoDB requires binlog_format = ROW for READ COMMITTED/UNCOMMITTED
+SELECT @@binlog_format INTO @binlog_save;
+SET SESSION BINLOG_FORMAT=ROW;
+SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
+START TRANSACTION;
+INSERT INTO t1 VALUES (303, 'READ COMMITTED');
+COMMIT;
+
+SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+START TRANSACTION;
+INSERT INTO t1 VALUES (304, 'READ UNCOMMITTED');
+COMMIT;
+
+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
+SET binlog_format= @binlog_save;
+
+--echo
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'SERIALIZABLE', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'READ COMMITTED', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'READ UNCOMMITTED', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 4 - ACCESS MODE
+--echo ========================================================================
+--echo #
+--echo # STEP 4.1 - READ ONLY, TIMING ENABLED
+--echo #
+--echo
+--echo connection con1
+--connection con1
+SET SESSION TRANSACTION READ WRITE;
+START TRANSACTION;
+INSERT INTO t1 VALUES (410, 'READ ONLY');
+INSERT INTO t1 VALUES (411, 'READ ONLY');
+INSERT INTO t1 VALUES (412, 'READ ONLY');
+INSERT INTO t1 VALUES (413, 'READ ONLY');
+COMMIT;
+
+SET SESSION TRANSACTION READ ONLY;
+START TRANSACTION;
+SELECT * FROM t1 ORDER BY s1;
+COMMIT;
+
+--echo
+--echo ## Expect 1 read only, committed transaction in events_transactions_history
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ ONLY', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo #
+--echo # STEP 4.2 - READ ONLY, TIMING DISABLED
+--echo #
+--echo
+--echo ## Disable timing stats for 'transaction'
+UPDATE performance_schema.setup_instruments SET timed = 'NO' WHERE name = 'transaction';
+--echo
+TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;
+
+--echo connection con1
+--connection con1
+START TRANSACTION;
+SELECT * FROM t1 ORDER BY s1;
+COMMIT;
+--echo
+SET SESSION TRANSACTION READ WRITE;
+
+--connection default
+--echo
+--echo ## Expect 1 event, 0 stats
+SELECT * FROM performance_schema.events_transactions_summary_global_by_event_name;
+--echo
+--echo ## Restore setup_instruments
+UPDATE performance_schema.setup_instruments SET enabled = 'YES' WHERE name = 'transaction';
+
+--echo
+--echo ========================================================================
+--echo # STEP 5 - IMPLICIT START
+--echo ========================================================================
+--echo # When AUTOCOMMIT is disabled, the first statement following a committed
+--echo # transaction marks the start of a new transaction. Subsequent statements will
+--echo # be part of the transaction until it is committed.
+--echo
+--connection con1
+SET SESSION AUTOCOMMIT = 0;
+INSERT INTO t1 VALUES (501, 'IMPLICIT START');
+
+--echo
+--echo ## Expect 1 active transaction in events_transactions_current
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+--connection con1
+INSERT INTO t1 VALUES (502, 'IMPLICIT START');
+COMMIT;
+
+--echo
+--echo ## Expect one committed transaction in events_transactions_current and history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 6 - IMPLICIT COMMIT (DDL, ETC)
+--echo ========================================================================
+--echo # Transactions are implicitly ended by DDL statements, locking statements
+--echo # and server administration commands.
+--echo
+--connection con1
+SET SESSION AUTOCOMMIT = 0;
+INSERT INTO t1 VALUES (601, 'IMPLICIT COMMIT');
+
+--echo
+--echo ## Expect one active transaction in events_transactions_current, zero events in history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', 'NO', 0, 0, 0, 0);
+
+--connection con1
+INSERT INTO t1 VALUES (602, 'IMPLICIT COMMIT');
+
+--echo ## Issue a DDL statement to force a commmit
+CREATE TABLE t2 (s1 INT, s2 VARCHAR(64)) ENGINE=INNODB;
+
+--echo
+--echo ## Expect 0 active transactions, 1 committed transaction
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 0);
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+DROP TABLE test.t2;
+
+--echo
+--echo ========================================================================
+--echo STEP 7 - XA TRANSACTIONS
+--echo ========================================================================
+--echo #
+--echo # STEP 7.1 - XA START
+--echo #
+--connection con1
+XA START 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+--echo
+--echo ## Expect 1 active XA transaction, state ACTIVE
+--connection default
+
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'ACTIVE', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+--echo
+--echo # STEP 7.2 - XA END
+--echo
+--connection con1
+INSERT INTO t1 VALUES (701, 'XA');
+XA END 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+--echo
+--echo ## Expect 1 active XA transaction, state IDLE
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'IDLE', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+--echo
+--echo #
+--echo # STEP 7.3 - XA PREPARE
+--echo #
+--connection con1
+XA PREPARE 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+--echo
+--echo ## Expect 1 active XA transaction, state PREPARED
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'PREPARED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+--echo
+--echo #
+--echo # STEP 7.4 - XA COMMIT
+--echo #
+--connection con1
+XA COMMIT 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;
+
+--echo
+--echo ## Expect 1 committed XA transaction, state COMMITTED in current and history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+CALL clear_transaction_tables();
+
+--echo
+--echo #
+--echo # STEP 7.5 - XA ROLLBACK
+--echo #
+--connection con1
+XA START 'XA_CON1_002';
+INSERT INTO t1 VALUES (702, 'XA');
+XA END 'XA_CON1_002';
+XA PREPARE 'XA_CON1_002';
+
+--echo
+--echo ## Expect 1 active XA transaction, state PREPARED
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, 'XA_CON1_002', '', 'PREPARED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+--connection con1
+XA ROLLBACK 'XA_CON1_002';
+
+--echo
+--echo ## Expect 1 XA transaction, state ROLLBACK ONLY in current and history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, 'XA_CON1_002', '', 'ROLLBACK ONLY', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, 'XA_CON1_002', '', 'ROLLBACK ONLY', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+SELECT * FROM performance_schema.events_transactions_current ORDER BY event_id;
+
+--echo #
+--echo # STEP 7.6 - XA TRANSACTION - LONG GTRID AND BQUAL
+--echo #
+--connection con1
+XA START 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+INSERT INTO t1 VALUES (703, 'XA LONG');
+XA END 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+XA PREPARE 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+XA COMMIT 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
+
+--echo
+--echo ## Expect 1 committed XA transaction, state COMMITTED in current and history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', 'BQUAL_6789012345678901234567890123456789012345678901234567890123', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', 'BQUAL_6789012345678901234567890123456789012345678901234567890123', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo #
+--echo # STEP 7.7 - XA TRANSACTION - LONG GTRID AND BINARY BQUAL
+--echo #
+--connection con1
+XA START 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+INSERT INTO t1 VALUES (704, 'XA LONG/BINARY');
+XA END 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+XA PREPARE 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+XA COMMIT 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
+--echo
+--echo ## Expect 1 committed XA transaction, state COMMITTED in current and history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', '0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', '0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 8 - TRANSACTIONAL AND NON-TRANSACTIONAL TABLES
+--echo ========================================================================
+--echo
+--echo ## MariaDB bug: MDEV-6012? MDEV-14436?
+set @mariadb_bug=1;
+
+## Statements that work with non-transactional engines have no effect on the
+## transaction state of the connection. For implicit transactions,
+## the transaction event begins with the first statement that uses a
+## transactional engine. This means that statements operating exclusively on
+## non-transactional tables will be ignored, even following START TRANSACTION.
+
+--connection con1
+SET SESSION AUTOCOMMIT = 0;
+SELECT * FROM performance_schema.events_transactions_current ORDER BY event_id;
+
+--echo
+--echo #
+--echo # STEP 8.1 - UPDATE NON-TRANSACTIONAL TABLE
+--echo #
+INSERT INTO nt1 VALUES (801, 'NON-TRANSACTIONAL');
+
+--echo
+--echo ## Expect 0 transactions in events_transactions_current
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, @mariadb_bug);
+
+--connection con1
+COMMIT;
+
+--echo
+--echo ## Expect 0 transactions in events_transactions_history
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, @mariadb_bug);
+
+--echo
+--echo #
+--echo # STEP 8.2 - UPDATE TRANSACTIONAL AND NON-TRANSACTIONAL TABLES
+--echo #
+--echo
+--echo ## First non-transactional...
+--echo
+--connection con1
+INSERT INTO nt1 VALUES (802, 'NON-TRANSACTIONAL');
+
+--echo
+--echo ## Expect 0 transactions in events_transactions_current
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, @mariadb_bug);
+
+--echo
+--echo ## Now transactional. Transaction should be started.
+--connection con1
+INSERT INTO t1 VALUES (802, 'TRANSACTIONAL');
+
+--echo
+--echo ## Expect 1 transaction in events_transactions_current
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+## Commit
+--echo
+--connection con1
+COMMIT;
+
+--echo
+--echo ## Expect 1 committed transaction in events_transactions_current and history
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1+@mariadb_bug);
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 9 - SAVEPOINTS
+--echo ========================================================================
+--echo #
+--echo # STEP 9.1 - SAVEPOINT 1
+--echo #
+--connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (901, 'SAVEPOINT');
+SAVEPOINT SVP001;
+
+--echo
+--echo ## Expect 1 active transaction with 1 savepoint
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 1, 0, 0, 1);
+
+--echo
+--echo #
+--echo # STEP 9.2 - SAVEPOINTS 2 and 3
+--echo #
+--connection con1
+INSERT INTO t1 VALUES (902, 'SAVEPOINT');
+SAVEPOINT SVP002;
+INSERT INTO t1 VALUES (903, 'SAVEPOINT');
+SAVEPOINT SVP003;
+INSERT INTO t1 VALUES (904, 'SAVEPOINT');
+SELECT COUNT(*) FROM t1 WHERE s1 > 900;
+
+--echo
+--echo #
+--echo # STEP 9.3 - ROLLBACK TO SAVEPOINT 2
+--echo #
+--connection con1
+ROLLBACK TO SVP002;
+
+--echo
+--echo ## Expect 1 active transaction with 3 savepoints, 1 rollback to savepoint
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 0, 1);
+
+--echo
+--echo #
+--echo # STEP 9.4 - RELEASE SAVEPOINT 1
+--echo #
+--connection con1
+RELEASE SAVEPOINT SVP001;
+
+--echo
+--echo ## Expect 1 active transaction with 3 savepoints, 1 rollback to savepoint, 1 release savepoint
+--connection default
+CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 1, 1);
+
+--echo #
+--echo # STEP 9.5 - COMMIT
+--echo #
+--connection con1
+COMMIT;
+
+--echo
+--echo ## Expect 1 committed transaction with 3 savepoints, 1 rollback to savepoint, 1 release savepoint
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 1, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo ========================================================================
+--echo # STEP 10 - GTIDs
+--echo ========================================================================
+--echo GTIDs are tested in transaction_gtid.test.
+
+--echo
+--echo ========================================================================
+--echo # STEP 11 - MISCELLANY
+--echo ========================================================================
+--echo #
+--echo # STEP 11.1 - TRUNCATE DURING ACTIVE TRANSACTION
+--echo #
+--echo
+--echo # Verify that truncating events_transactions_current during an active transaction
+--echo # does not leave an orphaned transaction event, and that the row index to
+--echo # events_transactions_history is reset to 0.
+--echo
+--connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (1110, 'INSERT 1110');
+--connection default
+TRUNCATE performance_schema.events_transactions_current;
+--connection con1
+--echo
+COMMIT;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (1111, 'INSERT 1111');
+COMMIT;
+
+--echo
+--echo ## Expect 1 transaction for connection 1
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', '', '', '', 0, 0, 0, 1);
+CALL clear_transaction_tables();
+
+--echo
+--echo #
+--echo # STEP 11.2 - DISABLE THREAD INSTRUMENTATION
+--echo #
+--connection default
+UPDATE performance_schema.setup_consumers
+ SET enabled = 'NO'
+ WHERE name = 'thread_instrumentation';
+--echo
+TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;
+
+--connection con1
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (1120, 'INSERT 1120');
+COMMIT;
+
+--connection default
+--echo
+--echo ## Expect 1 event with non-zero summary stats
+--replace_column 3 sum_timer_wait 4 min_timer_wait 5 avg_timer_wait
+SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, COUNT_READ_WRITE
+ FROM performance_schema.events_transactions_summary_global_by_event_name
+ WHERE count_star = 1 and sum_timer_wait != 0;
+
+--echo
+--echo ## Disable timing stats for 'transaction'
+UPDATE performance_schema.setup_instruments SET timed = 'NO' WHERE name = 'transaction';
+--echo
+TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;
+
+--connection default
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (1121, 'INSERT 1121');
+COMMIT;
+
+--connection default
+--echo
+--echo ## Expect 1 event, 0 stats
+SELECT * FROM performance_schema.events_transactions_summary_global_by_event_name;
+
+--echo
+--echo ## Restore setup_consumers and setup_instruments
+UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'thread_instrumentation';
+UPDATE performance_schema.setup_instruments SET enabled = 'YES' WHERE name = 'transaction';
+--echo
+DELETE FROM t1;
+CALL clear_history();
+
+--echo
+--echo #
+--echo # STEP 11.3 - STATEMENT ROLLBACK - AUTOCOMMIT OFF - BINLOG FORMAT 'STATEMENT'
+--echo #
+--connection con1
+SET SESSION binlog_format = STATEMENT;
+SET SESSION AUTOCOMMIT = 0;
+
+# A transaction with a rolled back statement should not show as rolled back.
+#
+# Force a statement rollback by attempting to update a transactional table
+# and a non-replicatable table with binlog_format = STATEMENT.
+
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (1130, 'INSERT 1130');
+--echo
+--echo ## Expect binlog statement mode error
+--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
+UPDATE t1, performance_schema.setup_instruments pfs
+ SET t1.s1 = 1, pfs.timed = 'NO';
+--echo
+COMMIT;
+--echo
+SET SESSION AUTOCOMMIT = 1;
+
+--echo
+--echo ## Expect 1 committed transaction
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', '', '', 'NO', 0, 0, 0, 1);
+--echo
+DELETE FROM t1;
+CALL clear_history();
+
+--echo
+--echo #
+--echo # STEP 11.4 - STATEMENT ROLLBACK - AUTOCOMMIT ON - BINLOG FORMAT 'STATEMENT'
+--echo #
+--connection con1
+SET SESSION binlog_format = STATEMENT;
+SET SESSION AUTOCOMMIT = 1;
+
+# A rolled back autocommit statement should be recorded as a rolled back transaction
+#
+# Force a statement rollback by attempting to update a transactional table
+# and a non-replicatable table with binlog_format = STATEMENT.
+--echo
+--echo ## Expect binlog statement mode error
+--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
+UPDATE t1, performance_schema.setup_instruments pfs
+ SET t1.s1 = 1, pfs.timed = 'NO';
+
+--echo
+--echo ## Expect 1 rolled back transaction
+--connection default
+CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, '', '', '', '', '', '', 'YES', 0, 0, 0, 1);
+CALL clear_history();
+
+--disable_parsing
+# TODO: Add wait timer
+--echo
+--echo #
+--echo # STEP 11.5 - DROPPED CONNECTION DURING TRANSACTION
+--echo #
+--connection con2
+START TRANSACTION;
+INSERT INTO t1 VALUES (1150, 'DROP CONNECTION');
+--echo
+--echo ## Expect 1 active transaction for connection 2
+--connection default
+CALL transaction_verifier(0, @con2_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
+
+--echo
+--echo ## Drop connection
+--connection con2
+--disconnect con2
+--source include/wait_until_disconnected.inc
+--connection default
+
+--echo
+--echo ## Expect 0 transactions for connection 2
+CALL transaction_verifier(0, @con2_thread_id, '', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);
+CALL transaction_verifier(1, @con2_thread_id, '', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);
+CALL clear_transaction_tables();
+
+--enable_parsing
+
+--echo
+--echo ========================================================================
+--echo # CLEAN UP
+--echo ========================================================================
+--echo
+
+--disconnect con1
+##--disconnect con2
+
+--connection default
+DROP TABLE t1;
+DROP TABLE nt1;
+
+--source ../include/transaction_cleanup.inc
+set global binlog_format=default;
diff --git a/mysql-test/suite/perfschema/t/transaction_gtid.test b/mysql-test/suite/perfschema/t/transaction_gtid.test
new file mode 100644
index 00000000000..450d799880d
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/transaction_gtid.test
@@ -0,0 +1,194 @@
+# ==== Purpose ====
+#
+# Verify that the GTID column of
+# performance_schema.events_transactions_current and
+# performance_schema.events_transactions_history has the correct
+# value, during different parts of the transaction life cycle.
+#
+# There are several cases:
+#
+# - When GTID_MODE=ON, a GTID of the form UUID:NUMBER is generated.
+# When GTID_MODE=OFF, transactions have the special GTID
+# "ANONYMOUS".
+#
+# - On a master, the GTID is generated during the transaction commit;
+# prior to that it is "AUTOMATIC". On a slave, the GTID is specified
+# (using SET GTID_NEXT) prior to executing the transaction.
+#
+# ==== Implementation ====
+#
+# Execute a transaction like:
+# BEGIN;
+# INSERT;
+# COMMIT;
+# On a different connection, check the GTID columns of the tables
+# between each statement.
+#
+# Transactions to be checked are executed on connection
+# 'default'. Auxiliary statements to read or truncate the tables are
+# executed on connection 'server_1'.
+#
+# Also execute a ROLLBACK transaction.
+#
+# Execute the transaction in these two cases:
+# - GTID_MODE=ON,
+# - GTID_MODE=OFF.
+#
+# Execute the transaction in these two cases:
+# - GTID_NEXT='UUID:NUMBER'/'ANONYMOUS' (when GTID_MODE=ON/OFF)
+# - GTID_NEXT='AUTOMATIC'.
+#
+# Due to implementation details, there is a window in time at the
+# beginning of the transaction when the GTID has not been copied from
+# the server to the performance_schema internal structures. During
+# this window, the GTID should be AUTOMATIC even if GTID_NEXT is set
+# to 'UUID:NUMBER' or 'ANONYMOUS'. To verify this, we use a debug
+# sync point during the execution of the BEGIN statement.
+#
+# ==== References ====
+#
+# WL#7592: GTIDS: generate Gtid_log_event and Previous_gtids_log_event always
+# - The current behavior was specified and the test was introduced in
+# this worklog.
+
+--source include/have_debug_sync.inc
+--source include/not_gtid_enabled.inc
+--let $rpl_topology= none
+--let $rpl_server_count= 1
+--source include/rpl_init.inc
+
+--echo ==== Configure ====
+
+--connection default
+
+SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON;
+
+--let $thread_id= `SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID()`
+--let $server_uuid= `SELECT @@GLOBAL.SERVER_UUID`
+
+CREATE TABLE t1 (a INT);
+
+# These are parameters to include/execute_at_sync_point.inc,
+# which will remain the same each time the script is invoked.
+--let $statement_connection= default
+--let $auxiliary_connection= server_1
+--let $auxiliary_file= suite/perfschema/include/show_transaction_gtid.inc
+--let $quiet= 1
+
+--echo ==== Test ====
+
+--let $n= 1
+while ($n <= 4) {
+ if ($n == 1) {
+ --echo ---- Case 1: Specify ANONYMOUS prior to transaction ----
+ --let $gtid= ANONYMOUS
+ }
+ if ($n == 2) {
+ --echo ---- Case 2: Generate ANONYMOUS at commit ----
+ --let $gtid= AUTOMATIC
+ }
+ if ($n == 3) {
+ --let $rpl_gtid_mode= ON
+ --source include/rpl_set_gtid_mode.inc
+ --echo ---- Case 3: Specify GTID prior to transaction ----
+ --let $gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1
+ }
+ if ($n == 4) {
+ --echo ---- Case 4: Generate GTID at commit ----
+ --let $gtid= AUTOMATIC
+ }
+
+ # Execute a transaction, show the GTID column of the tables
+ # after ROLLBACK.
+
+ --echo * BEGIN ... ROLLBACK
+ --source ../include/reset_transaction_gtid.inc
+
+ --source ../include/show_transaction_gtid.inc
+ eval SET SESSION GTID_NEXT = '$gtid';
+ BEGIN;
+ eval INSERT INTO t1 VALUES ($n);
+ ROLLBACK;
+ --source ../include/show_transaction_gtid.inc
+
+ # Same transaction as above, but with a commit. Show the GTID column
+ # of the tables between each statement, as well as in the middle of
+ # the BEGIN statement.
+
+ --echo * BEGIN ... COMMIT
+ --source ../include/reset_transaction_gtid.inc
+
+ --source ../include/show_transaction_gtid.inc
+ eval SET SESSION GTID_NEXT = '$gtid';
+ --source ../include/show_transaction_gtid.inc
+ --let $statement= BEGIN
+ --let $sync_point= after_set_transaction_psi_before_set_transaction_gtid
+ --source include/execute_at_sync_point.inc
+ --source ../include/show_transaction_gtid.inc
+ eval INSERT INTO t1 VALUES ($n);
+ --source ../include/show_transaction_gtid.inc
+ COMMIT;
+ --source ../include/show_transaction_gtid.inc
+
+ # A transaction executed with AUTOCOMMIT=OFF and no BEGIN. Show the
+ # GTID column between each statement, as well as in the middle of
+ # the first DML statement.
+
+ --echo * AUTOCOMMIT = OFF
+ SET @@SESSION.AUTOCOMMIT = 0;
+ --source ../include/reset_transaction_gtid.inc
+
+ --source ../include/show_transaction_gtid.inc
+ eval SET SESSION GTID_NEXT = '$gtid';
+ --source ../include/show_transaction_gtid.inc
+ --let $statement= INSERT INTO t1 VALUES ($n)
+ --let $sync_point= begin_decide_logging_format
+ --source include/execute_at_sync_point.inc
+ --source ../include/show_transaction_gtid.inc
+ COMMIT;
+ --source ../include/show_transaction_gtid.inc
+
+ # A single-statement transaction executed with AUTOCOMMIT=ON and no
+ # BEGIN. Show the GTID column before and after, as well as in the
+ # middle of the statement.
+
+ --echo * AUTOCOMMIT = ON
+ SET @@SESSION.AUTOCOMMIT = 1;
+ --source ../include/reset_transaction_gtid.inc
+
+ --source ../include/show_transaction_gtid.inc
+ eval SET SESSION GTID_NEXT = '$gtid';
+ --source ../include/show_transaction_gtid.inc
+ --let $statement= INSERT INTO t1 VALUES ($n)
+ --let $sync_point= begin_decide_logging_format
+ --source include/execute_at_sync_point.inc
+ --source ../include/show_transaction_gtid.inc
+
+ # Disabled because DDL is not inserted into the tables
+ if (0) {
+ # An implicitly committing statement (DDL), no BEGIN.
+ --echo * implicit commit (DDL)
+ --source ../include/reset_transaction_gtid.inc
+
+ --source ../include/show_transaction_gtid.inc
+ eval SET SESSION GTID_NEXT = '$gtid';
+ --source ../include/show_transaction_gtid.inc
+ --let $statement= CREATE TABLE t_$n (a INT)
+ --let $sync_point= begin_decide_logging_format
+ --source include/execute_at_sync_point.inc
+ --source ../include/show_transaction_gtid.inc
+ }
+
+ --inc $n
+}
+
+--echo ==== Clean up ====
+
+DROP TABLE t1;
+# DROP TABLE t_1, t_2, t_3, t_4;
+
+--let $rpl_gtid_mode= OFF
+--source include/rpl_set_gtid_mode.inc
+SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF;
+
+--source include/rpl_end.inc
diff --git a/mysql-test/suite/perfschema/t/transaction_nested_events-master.opt b/mysql-test/suite/perfschema/t/transaction_nested_events-master.opt
new file mode 100644
index 00000000000..d68f0498edf
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/transaction_nested_events-master.opt
@@ -0,0 +1,19 @@
+--event-scheduler
+--query_cache_size=0
+--loose-performance_schema_events_statements_history_size=20
+--loose-performance_schema_events_statements_history_long_size=50
+--loose-performance_schema_events_transactions_history_long_size=50
+--loose-performance_schema_max_thread_instances=30
+
+--loose-performance-schema-consumer-events-stages-current=OFF
+--loose-performance-schema-consumer-events-stages-history=OFF
+--loose-performance-schema-consumer-events-stages-history-long=OFF
+--loose-performance-schema-consumer-events-statements-current=ON
+--loose-performance-schema-consumer-events-statements-history=ON
+--loose-performance-schema-consumer-events-statements-history-long=ON
+--loose-performance-schema-consumer-events-transactions-current=ON
+--loose-performance-schema-consumer-events-transactions-history=ON
+--loose-performance-schema-consumer-events-transactions-history-long=ON
+--loose-performance-schema-consumer-events-waits-current=OFF
+--loose-performance-schema-consumer-events-waits-history=OFF
+--loose-performance-schema-consumer-events-waits-history-long=OFF
diff --git a/mysql-test/suite/perfschema/t/transaction_nested_events.test b/mysql-test/suite/perfschema/t/transaction_nested_events.test
new file mode 100644
index 00000000000..9d441b5d2c3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/transaction_nested_events.test
@@ -0,0 +1,387 @@
+########## suite/perfschema/t/transaction_nested_events.test #########
+# #
+# This test checks the following #
+# 1) nested events #
+# 2) various scenarios of stored program & transaction combinations #
+# #
+# #
+######################################################################
+
+--source include/have_perfschema.inc
+--source include/not_embedded.inc
+--source include/have_innodb.inc
+--source include/no_protocol.inc
+--source include/maybe_pool_of_threads.inc
+
+--disable_query_log
+--source ../include/transaction_setup.inc
+--enable_query_log
+
+--echo
+--echo #========================================================================
+--echo # STEP 1 - SETUP
+--echo #========================================================================
+
+--echo
+--echo ## Setup control thread
+--echo
+--connection default
+SET SESSION AUTOCOMMIT= 1;
+--disable_warnings
+USE test;
+DROP DATABASE IF EXISTS db;
+--enable_warnings
+--echo
+--echo ## Create test database, test tables, one transactional and one non-transactional
+CREATE DATABASE db;
+CREATE TABLE db.t1 (s1 int, s2 varchar(64)) ENGINE=INNODB;
+CREATE TABLE db.nt1 (s1 int, s2 varchar(64)) ENGINE=MYISAM;
+
+--echo
+--echo ## Setup connection 1
+connect(con1, localhost, root,,);
+USE db;
+SET SESSION AUTOCOMMIT = 1;
+eval $get_thread_id;
+let $con1_thread_id= `SELECT @my_thread_id`;
+
+--connection default
+--disable_query_log
+eval SET @con1_thread_id= $con1_thread_id;
+--enable_query_log
+
+--echo
+--echo ## Disable events from the control (default) connection
+UPDATE performance_schema.threads SET instrumented = 'NO' WHERE processlist_id = CONNECTION_ID();
+
+# Use this to select events from all threads
+eval SET @all_threads= 0;
+
+--echo
+--echo ## Enable only transaction and statement instruments
+UPDATE performance_schema.setup_instruments SET enabled='NO', timed='NO';
+UPDATE performance_schema.setup_instruments SET enabled='YES'
+ WHERE name LIKE ('statement/%') OR name = 'transaction';
+
+--echo
+--echo ## Clear statement and transaction history
+CALL test.clear_history();
+
+--echo
+--echo #========================================================================
+--echo # STEP 2 - BASIC TRANSACTION
+--echo #========================================================================
+--echo #
+--echo # STEP 2.1 - IMPLICIT
+--echo #
+--connection con1
+INSERT INTO t1 VALUES (210, "INSERT 210");
+INSERT INTO t1 VALUES (211, "INSERT 211");
+INSERT INTO t1 VALUES (212, "INSERT 212");
+UPDATE t1 SET s1 = s1 + 1 WHERE s1 = 212;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo #
+--echo # STEP 2.2 - EXPLICIT
+--echo #
+--connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (220, "INSERT 220"), (221, "INSERT 221");
+UPDATE t1 SET s2 = "UPDATE 221" WHERE s1 = 221;
+COMMIT;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo #========================================================================
+--echo # STEP 3 - TRANSACTIONS AND STORED PROCEDURES
+--echo #========================================================================
+--echo #
+--echo # STEP 3.1 - STORED PROCEDURE STARTED WITHIN TRANSACTION
+--echo #
+--connection con1
+CREATE PROCEDURE tp_update() UPDATE t1 SET s1 = s1 + 1;
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (310, "INSERT 310");
+INSERT INTO t1 VALUES (311, "INSERT 311");
+INSERT INTO t1 VALUES (312, "INSERT 312");
+INSERT INTO t1 VALUES (313, "INSERT 313");
+CALL tp_update();
+COMMIT;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo #
+--echo # STEP 3.2 - TRANSACTION STARTED WITHIN STORED PROCEDURE
+--echo #
+--connection con1
+CREATE PROCEDURE tp_start() START TRANSACTION;
+--echo
+CALL tp_start();
+INSERT INTO t1 VALUES (320, "INSERT 320"),(321, "INSERT 321");
+INSERT INTO t1 VALUES (322, "INSERT 322"),(323, "INSERT 323");
+UPDATE t1 SET s1 = s1 + 1 WHERE s1 > 320;
+--echo
+SELECT * FROM t1 ORDER BY s1;
+COMMIT;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo #
+--echo # STEP 3.3 - TRANSACTION ENDED WITHIN STORED PROCEDURE
+--echo #
+--connection con1
+CREATE PROCEDURE tp_rollback() ROLLBACK;
+CREATE PROCEDURE tp_commit() COMMIT;
+
+--echo
+--echo ## COMMIT within stored procedure
+START TRANSACTION;
+INSERT INTO t1 VALUES (330, "INSERT 330"),(331, "INSERT 331");
+INSERT INTO t1 VALUES (332, "INSERT 332"),(333, "INSERT 333");
+DELETE FROM t1 WHERE s1 > 331;
+CALL tp_commit();
+--echo
+SELECT * FROM t1 ORDER BY s1;
+
+--echo
+--echo ## ROLLBACK within stored procedure
+START TRANSACTION;
+UPDATE t1 SET s1 = s1*2 WHERE s1 > 331;
+CALL tp_rollback();
+--echo
+SELECT * FROM t1 ORDER BY s1;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo #========================================================================
+--echo # STEP 4 - TRANSACTIONS AND STORED FUNCTIONS
+--echo #========================================================================
+--echo
+--echo #
+--echo # STEP 4.1 - FUNCTION WITHIN A TRANSACTION
+--echo #
+--connection con1
+DELIMITER |;
+CREATE FUNCTION fn_add(x INT, y INT) RETURNS INT
+BEGIN
+ INSERT INTO t1 VALUES (x, "INSERT x"),(y, "INSERT y");
+RETURN x+y;
+END |
+DELIMITER ;|
+
+--echo
+--echo ## Clear history
+--connection default
+CALL test.clear_history();
+--connection con1
+
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (410, "INSERT 410");
+INSERT INTO t1 VALUES (411, "INSERT 411");
+INSERT INTO t1 VALUES (412, "INSERT 412");
+DELETE FROM t1 WHERE s1 > 410;
+--echo
+SELECT * FROM t1 ORDER BY s1;
+--echo
+SELECT fn_add(413, 414);
+COMMIT;
+--echo
+SELECT * FROM t1 ORDER BY s1;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--connection con1
+--echo
+--echo ## Again, but this time with a rollback
+--echo
+START TRANSACTION;
+SELECT fn_add(415, 416);
+--echo
+ROLLBACK;
+--echo
+SELECT * FROM t1 ORDER BY s1;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo #
+--echo # STEP 4.2 - TRANSACTION CANNOT BE STARTED OR ENDED WITHIN FUNCTION
+--echo #
+--connection con1
+DELIMITER |;
+--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
+CREATE FUNCTION fn_err1() RETURNS VARCHAR(10) BEGIN START TRANSACTION ; RETURN 'invalid' ; END|
+DELIMITER ;|
+
+--echo
+--echo ## Expect 0 transactions
+--connection default
+SELECT COUNT(*) FROM performance_schema.events_transactions_history;
+--connection con1
+
+--echo
+--echo ## Expect stored function does not exist
+--echo
+--error ER_SP_DOES_NOT_EXIST
+SELECT fn_err1();
+
+--echo
+--echo ## Expect 0 transactions
+--connection default
+SELECT COUNT(*) FROM performance_schema.events_transactions_history;
+--connection con1
+
+--echo
+DELIMITER |;
+--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
+CREATE FUNCTION fn_err2() RETURNS VARCHAR(10) BEGIN COMMIT; RETURN 'invalid' ; END|
+DELIMITER ;|
+
+--echo
+--echo ## Expect stored function does not exist
+--echo
+START TRANSACTION;
+DELETE FROM t1 WHERE s1 > 320;
+--error ER_SP_DOES_NOT_EXIST
+SELECT fn_err2();
+
+--echo
+--echo ## Expect 0 transactions
+--connection default
+SELECT COUNT(*) FROM performance_schema.events_transactions_history;
+
+--echo
+--echo ## Clear transaction and statement tables
+CALL test.clear_history();
+
+--echo #========================================================================
+--echo # STEP 5 - TRANSACTIONS AND TRIGGERS
+--echo #========================================================================
+--echo
+--echo #
+--echo # STEP 5.1 - FORCE STATEMENT ROLLBACK FROM TRIGGER
+--echo #
+--connection con1
+--echo ## Create a trigger to force statement rollback
+--echo
+DELIMITER |;
+CREATE TRIGGER trigger_before_update BEFORE UPDATE ON t1
+FOR EACH ROW
+BEGIN
+ IF OLD.s1 >= 505 THEN
+ SIGNAL sqlstate '45001' SET message_text = "FORCE ERROR";
+ END IF;
+END;|
+DELIMITER ;|
+
+--echo
+--echo ## Clear history
+--connection default
+CALL test.clear_history();
+--connection con1
+
+--echo
+--echo ## Insert multiple rows, then update. Trigger will force rollback the
+--echo ## UPDATE statement, but the transaction should not roll back.
+--echo
+START TRANSACTION;
+INSERT INTO t1 VALUES (500, "INSERT 500");
+INSERT INTO t1 VALUES (501, "INSERT 501");
+INSERT INTO t1 VALUES (502, "INSERT 502");
+INSERT INTO t1 VALUES (503, "INSERT 503");
+INSERT INTO t1 VALUES (504, "INSERT 504");
+INSERT INTO t1 VALUES (505, "INSERT 505");
+--echo
+SELECT * FROM t1 ORDER BY s1;
+--echo
+--echo ## Expect error when UPDATE hits record 505
+--echo
+--error ER_SIGNAL_EXCEPTION
+UPDATE t1 SET s1 = s1 * 2 WHERE s1 >= 500;
+--echo
+--echo ## Verify that INSERT succeeded, UPDATE failed and transaction did not rollback
+--echo
+SELECT * FROM t1 ORDER BY s1;
+COMMIT;
+--echo
+DROP TRIGGER trigger_before_update;
+
+## Verify and reset
+--source ../include/transaction_nested_events_verifier.inc
+
+--echo # TODO: Detect statement events from scheduled event
+--disable_parsing
+--echo #========================================================================
+--echo # STEP 6 - SCHEDULED EVENTS
+--echo #========================================================================
+--connection con1
+
+# Check that the event_scheduler is really running
+#--source include/running_event_scheduler.inc
+
+--echo
+--echo ## Create a one-time event that will insert, update, commit and rollback.
+--echo
+DELIMITER |;
+CREATE EVENT trx_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND DO
+BEGIN
+ START TRANSACTION;
+ INSERT INTO t1 VALUES (600, "INSERT 600");
+ INSERT INTO t1 VALUES (601, "INSERT 601");
+ INSERT INTO t1 VALUES (602, "INSERT 602");
+ COMMIT;
+ START TRANSACTION;
+ UPDATE t1 SET s1 = s1 + 1, s2 = 'THIS SHOULD NOT BE HERE';
+ ROLLBACK;
+ START TRANSACTION;
+ INSERT INTO t1 VALUES (699, "INSERT 699");
+ COMMIT;
+END;|
+DELIMITER ;|
+
+--echo
+--echo ## Clear history
+--connection default
+CALL test.clear_history();
+--connection con1
+--echo
+--echo ## Wait a few seconds for scheduled event to execute and finish.
+# Check based on the expected content in t1.
+let $wait_condition= SELECT COUNT(*) = 4 FROM t1;
+--source include/wait_condition.inc
+--echo
+--echo ## Confirm that the scheduled event completed and the content of t1 is right.
+--echo
+SELECT * FROM t1 ORDER BY s1;
+--echo
+--echo ## Verify and reset
+--echo
+eval SET @all_threads= 1;
+--source ../include/transaction_nested_events_verifier.inc
+eval SET @all_threads= 0;
+
+--enable_parsing
+
+--echo #=======================================================================
+--echo # Cleanup
+--echo #=======================================================================
+--connection con1
+--disconnect con1
+--source include/wait_until_disconnected.inc
+--connection default
+DROP DATABASE db;
+UPDATE performance_schema.setup_instruments SET enabled='YES', timed='YES';
+
+--source ../include/transaction_cleanup.inc
+
+
+
diff --git a/mysql-test/suite/perfschema/t/user_var_func.test b/mysql-test/suite/perfschema/t/user_var_func.test
new file mode 100644
index 00000000000..3c9ea4f3cf3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/user_var_func.test
@@ -0,0 +1,101 @@
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+set @v1a="Hello";
+set @v2a="World";
+set @v3a=65;
+set @v4a=NULL;
+
+select @v1a, @v2a, @v3a, @v4a, @v_unknown;
+
+select VARIABLE_NAME, VARIABLE_VALUE
+ from performance_schema.user_variables_by_thread
+ order by VARIABLE_NAME;
+
+connect(con1, localhost, root,,);
+
+set @v1b="Salut";
+set @v2b="La compagnie";
+set @v3b=12;
+set @v4b=NULL;
+
+select @v1b, @v2b, @v3b, @v4b, @v_unknown;
+
+select VARIABLE_NAME, VARIABLE_VALUE
+ from performance_schema.user_variables_by_thread
+ order by VARIABLE_NAME;
+
+--connection default
+--disconnect con1
+
+# Wait till all disconnects are completed
+let $count_sessions= 1;
+--source include/wait_until_count_sessions.inc
+
+select VARIABLE_NAME, VARIABLE_VALUE
+ from performance_schema.user_variables_by_thread
+ order by VARIABLE_NAME;
+
+# Make sure large values are not truncated
+set @blob_under_16_bits=repeat("a", 65000);
+set @blob_under_24_bits=repeat("a", 1000000);
+
+# Not testable because of limitation on max_allowed_packet
+# set @blob_under_32_bits=repeat("a", 20000000);
+
+select length(@blob_under_16_bits);
+select length(@blob_under_24_bits);
+# select length(@blob_under_32_bits);
+
+select variable_name, length(variable_value)
+ from performance_schema.user_variables_by_thread
+ where VARIABLE_NAME like "blob%"
+ order by VARIABLE_NAME;
+
+
+# Check the behaviour with procedures if the values passed inside procedures gets reflected in the table performance_schema.user_variables_by_thread.
+
+set @a=10;
+
+DELIMITER |;
+CREATE procedure test_user_val
+(IN input INT,OUT output INT)
+BEGIN
+ SELECT input + input
+ INTO output;
+END|
+DELIMITER ;|
+
+CALL test_user_val(@a , @total);
+select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.user_variables_by_thread
+where variable_name in ('a','total') order by VARIABLE_NAME;
+
+
+# Checking behaviour around triggers if the values in performance_schema.user_variables_by_thread are updated from within trigger
+
+create table t1 (c1 int);
+
+DELIMITER |;
+CREATE TRIGGER test_uvar_trigger
+ AFTER INSERT ON t1
+ FOR EACH ROW BEGIN
+ set @a=@a+@a;
+END|
+DELIMITER ;|
+
+insert into t1 values(1);
+select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.user_variables_by_thread
+where variable_name ='a' order by VARIABLE_NAME;
+
+insert into t1 values(1);
+select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.user_variables_by_thread
+where variable_name ='a' order by VARIABLE_NAME;
+
+drop table t1;
+drop procedure test_user_val;
+#drop TRIGGER test_uvar_trigger;
+
+
+
+
diff --git a/mysql-test/suite/perfschema/t/view_table_io.test b/mysql-test/suite/perfschema/t/view_table_io.test
index 703f5414ba4..f5b017dc8ad 100644
--- a/mysql-test/suite/perfschema/t/view_table_io.test
+++ b/mysql-test/suite/perfschema/t/view_table_io.test
@@ -3,6 +3,9 @@
# base table used within the view shows up whereas
# the view itself never shows up.
+## To skip the test with QC enabled till BUG#14830950 is fixed.
+#-- source include/have_QC_Disabled.inc
+
--source include/not_embedded.inc
--source include/have_perfschema.inc
--source ../include/table_io_setup_helper.inc
diff --git a/mysql-test/suite/perfschema_stress/t/modify.test b/mysql-test/suite/perfschema_stress/t/modify.test
index f89b72f49bd..ee0ce0f30ef 100644
--- a/mysql-test/suite/perfschema_stress/t/modify.test
+++ b/mysql-test/suite/perfschema_stress/t/modify.test
@@ -1,3 +1,8 @@
+# The include statement below is a temp one for tests that are yet to
+#be ported to run with InnoDB,
+#but needs to be kept for tests that would need MyISAM in future.
+--source include/force_myisam_default.inc
+
--source include/not_embedded.inc
--source suite/perfschema_stress/include/settings.inc
diff --git a/mysql-test/suite/perfschema_stress/t/read.test b/mysql-test/suite/perfschema_stress/t/read.test
index 829c03985ed..c963adeb604 100644
--- a/mysql-test/suite/perfschema_stress/t/read.test
+++ b/mysql-test/suite/perfschema_stress/t/read.test
@@ -1,3 +1,8 @@
+# The include statement below is a temp one for tests that are yet to
+#be ported to run with InnoDB,
+#but needs to be kept for tests that would need MyISAM in future.
+--source include/force_myisam_default.inc
+
--source include/not_embedded.inc
--source include/have_perfschema.inc
diff --git a/mysql-test/suite/perfschema_stress/t/setup.test b/mysql-test/suite/perfschema_stress/t/setup.test
index 15247862e26..4e0828fafbf 100644
--- a/mysql-test/suite/perfschema_stress/t/setup.test
+++ b/mysql-test/suite/perfschema_stress/t/setup.test
@@ -1,3 +1,8 @@
+# The include statement below is a temp one for tests that are yet to
+#be ported to run with InnoDB,
+#but needs to be kept for tests that would need MyISAM in future.
+--source include/force_myisam_default.inc
+
if (`SELECT VERSION() LIKE '%embedded%'`)
{
--skip This test cannot run with the embedded server.
diff --git a/mysql-test/suite/perfschema_stress/t/work.test b/mysql-test/suite/perfschema_stress/t/work.test
index 17ddb411c7c..d3d9593b95d 100644
--- a/mysql-test/suite/perfschema_stress/t/work.test
+++ b/mysql-test/suite/perfschema_stress/t/work.test
@@ -1,3 +1,8 @@
+# The include statement below is a temp one for tests that are yet to
+#be ported to run with InnoDB,
+#but needs to be kept for tests that would need MyISAM in future.
+--source include/force_myisam_default.inc
+
--source include/not_embedded.inc
--source suite/perfschema_stress/include/settings.inc
diff --git a/mysql-test/suite/plugins/r/multiauth.result b/mysql-test/suite/plugins/r/multiauth.result
index 4b9a603867c..6ec30ac44d1 100644
--- a/mysql-test/suite/plugins/r/multiauth.result
+++ b/mysql-test/suite/plugins/r/multiauth.result
@@ -106,6 +106,7 @@ select json_detailed(priv) from mysql.global_priv where user='mysqltest1';
json_detailed(priv)
{
"access": 0,
+ "version_id": VERSION_ID,
"plugin": "mysql_native_password",
"authentication_string": "*7D8C3DF236D9163B6C274A9D47704BC496988460",
"auth_or":
diff --git a/mysql-test/suite/plugins/t/multiauth.test b/mysql-test/suite/plugins/t/multiauth.test
index ffd4851c20d..d6d3fc587cd 100644
--- a/mysql-test/suite/plugins/t/multiauth.test
+++ b/mysql-test/suite/plugins/t/multiauth.test
@@ -1,3 +1,7 @@
+let $REGEX_VERSION_ID=/$mysql_get_server_version/VERSION_ID/;
+let $REGEX_PASSWORD_LAST_CHANGED=/password_last_changed": [0-9]*/password_last_changed": #/;
+let $REGEX_GLOBAL_PRIV=$REGEX_PASSWORD_LAST_CHANGED $REGEX_VERSION_ID;
+
#
# MDEV-11340 Allow multiple alternative authentication methods for the same user
#
@@ -130,7 +134,7 @@ drop user mysqltest1;
#
create user mysqltest1 identified via ed25519 as password("good") OR unix_socket OR mysql_native_password as password("works");
show grants for mysqltest1;
---replace_regex /password_last_changed": [0-9]*/password_last_changed": #/
+--replace_regex $REGEX_GLOBAL_PRIV
select json_detailed(priv) from mysql.global_priv where user='mysqltest1';
select password,plugin,authentication_string from mysql.user where user='mysqltest1';
flush privileges;
diff --git a/mysql-test/suite/roles/admin.result b/mysql-test/suite/roles/admin.result
index a7841fd3b57..2ecbfae4516 100644
--- a/mysql-test/suite/roles/admin.result
+++ b/mysql-test/suite/roles/admin.result
@@ -8,9 +8,9 @@ create role role3 with admin role1;
create role role4 with admin root@localhost;
connect c1, localhost, foo,,;
create role role5 with admin root@localhost;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
create role role5 with admin role3;
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
create role role5 with admin foo@localhost;
connection default;
call mtr.add_suppression("Invalid roles_mapping table entry user:'foo@bar', rolename:'role6'");
diff --git a/mysql-test/suite/roles/definer.result b/mysql-test/suite/roles/definer.result
index 30911265436..ecfa8113220 100644
--- a/mysql-test/suite/roles/definer.result
+++ b/mysql-test/suite/roles/definer.result
@@ -666,7 +666,7 @@ CREATE DEFINER='r1' PROCEDURE user1_proc2() SQL SECURITY INVOKER
BEGIN
SELECT NOW(), VERSION();
END;//
-ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
set role r1;
CREATE DEFINER='r1' PROCEDURE user1_proc2() SQL SECURITY INVOKER
BEGIN
diff --git a/mysql-test/suite/rpl/include/rpl_stm_relay_ign_space.inc b/mysql-test/suite/rpl/include/rpl_stm_relay_ign_space.inc
index 41339f539f8..654a5d47cb9 100644
--- a/mysql-test/suite/rpl/include/rpl_stm_relay_ign_space.inc
+++ b/mysql-test/suite/rpl/include/rpl_stm_relay_ign_space.inc
@@ -41,7 +41,7 @@ INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# wait for the SQL thread to sleep
--let $show_statement= SHOW PROCESSLIST
--let $field= State
---let $condition= = 'Slave has read all relay log; waiting for the slave I/O thread to update it'
+--let $condition= = 'Slave has read all relay log; waiting for more updates'
--source include/wait_show_condition.inc
# now the io thread has set rli->ignore_space_limit
diff --git a/mysql-test/suite/rpl/r/rpl_row_triggers.result b/mysql-test/suite/rpl/r/rpl_row_triggers.result
index ad78c33e2b9..07a66d13bcf 100644
--- a/mysql-test/suite/rpl/r/rpl_row_triggers.result
+++ b/mysql-test/suite/rpl/r/rpl_row_triggers.result
@@ -338,4 +338,136 @@ connection master;
set binlog_row_image = @binlog_row_image.saved;
drop table t1;
connection slave;
+#
+# enterprise 10.4 tests start
+#
+#
+# MENT-607 : Make slave_run_triggers_for_rbr enforce triggers to run
+# on slave, even when there are triggers on the master
+#
+# Triggers on slave WILL work (with ENFORCE) if master has some
+connection master;
+CREATE TABLE t1 (C1 CHAR(1) primary key, C2 CHAR(1)) engine=innodb;
+SELECT * FROM t1;
+C1 C2
+create trigger t1_dummy before delete on t1 for each row
+set @dummy= 1;
+connection slave;
+connection slave;
+SET @old_slave_exec_mode= @@global.slave_exec_mode;
+SET @old_slave_run_triggers_for_rbr= @@global.slave_run_triggers_for_rbr;
+SET @@global.slave_exec_mode= IDEMPOTENT;
+SET @@global.slave_run_triggers_for_rbr= ENFORCE;
+SELECT * FROM t1;
+C1 C2
+create table t2 (id char(2) primary key, cnt int, o char(1), n char(1));
+insert into t2 values
+('u0', 0, ' ', ' '),('u1', 0, ' ', ' '),
+('d0', 0, ' ', ' '),('d1', 0, ' ', ' '),
+('i0', 0, ' ', ' '),('i1', 0, ' ', ' ');
+create trigger t1_cnt_b before update on t1 for each row
+update t2 set cnt=cnt+1, o=old.C1, n=new.C1 where id = 'u0';
+create trigger t1_cnt_ib before insert on t1 for each row
+update t2 set cnt=cnt+1, n=new.C1, o=' ' where id = 'i0';
+create trigger t1_cnt_a after update on t1 for each row
+update t2 set cnt=cnt+1, o=old.C1, n=new.C1 where id = 'u1';
+create trigger t1_cnt_da after delete on t1 for each row
+update t2 set cnt=cnt+1, o=old.C1, n=' ' where id = 'd1';
+create trigger t1_cnt_ia after insert on t1 for each row
+update t2 set cnt=cnt+1, n=new.C1, o=' ' where id = 'i1';
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 0
+i0 0
+i1 0
+u0 0
+u1 0
+connection master;
+# INSERT triggers test
+insert into t1 values ('a','b');
+connection slave;
+connection slave;
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 0
+i0 1 a
+i1 1 a
+u0 0
+u1 0
+connection master;
+# UPDATE triggers test
+update t1 set C1= 'd';
+connection slave;
+connection slave;
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 0
+i0 1 a
+i1 1 a
+u0 1 a d
+u1 1 a d
+connection master;
+# DELETE triggers test
+delete from t1 where C1='d';
+connection slave;
+connection slave;
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 1 d
+i0 1 a
+i1 1 a
+u0 1 a d
+u1 1 a d
+# INSERT triggers which cause also UPDATE test (insert duplicate row)
+insert into t1 values ('0','1');
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 1 d
+i0 2 0
+i1 2 0
+u0 1 a d
+u1 1 a d
+connection master;
+insert into t1 values ('0','1');
+connection slave;
+connection slave;
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 2 0
+i0 3 0
+i1 3 0
+u0 1 a d
+u1 1 a d
+# INSERT triggers which cause also DELETE test
+# (insert duplicate row in table referenced by foreign key)
+insert into t1 values ('1','1');
+connection master;
+CREATE TABLE t3 (C1 CHAR(1) primary key, FOREIGN KEY (C1) REFERENCES t1(C1) ) engine=innodb;
+insert into t1 values ('1','1');
+connection slave;
+connection slave;
+SELECT * FROM t2 order by id;
+id cnt o n
+d0 0
+d1 3 1
+i0 5 1
+i1 5 1
+u0 1 a d
+u1 1 a d
+connection master;
+drop table t3,t1;
+connection slave;
+connection slave;
+SET @@global.slave_exec_mode= @old_slave_exec_mode;
+SET @@global.slave_run_triggers_for_rbr= @old_slave_run_triggers_for_rbr;
+drop table t2;
+#
+# enterprise 10.4 tests end
+#
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_row_triggers.test b/mysql-test/suite/rpl/t/rpl_row_triggers.test
index d5f29b9207d..68002dbe7e2 100644
--- a/mysql-test/suite/rpl/t/rpl_row_triggers.test
+++ b/mysql-test/suite/rpl/t/rpl_row_triggers.test
@@ -323,4 +323,120 @@ drop table t1;
--sync_slave_with_master
+--echo #
+--echo # enterprise 10.4 tests start
+--echo #
+
+--echo #
+--echo # MENT-607 : Make slave_run_triggers_for_rbr enforce triggers to run
+--echo # on slave, even when there are triggers on the master
+--echo #
+
+--echo # Triggers on slave WILL work (with ENFORCE) if master has some
+
+connection master;
+CREATE TABLE t1 (C1 CHAR(1) primary key, C2 CHAR(1)) engine=innodb;
+SELECT * FROM t1;
+
+create trigger t1_dummy before delete on t1 for each row
+ set @dummy= 1;
+
+sync_slave_with_master;
+
+connection slave;
+SET @old_slave_exec_mode= @@global.slave_exec_mode;
+SET @old_slave_run_triggers_for_rbr= @@global.slave_run_triggers_for_rbr;
+SET @@global.slave_exec_mode= IDEMPOTENT;
+SET @@global.slave_run_triggers_for_rbr= ENFORCE;
+SELECT * FROM t1;
+create table t2 (id char(2) primary key, cnt int, o char(1), n char(1));
+insert into t2 values
+ ('u0', 0, ' ', ' '),('u1', 0, ' ', ' '),
+ ('d0', 0, ' ', ' '),('d1', 0, ' ', ' '),
+ ('i0', 0, ' ', ' '),('i1', 0, ' ', ' ');
+create trigger t1_cnt_b before update on t1 for each row
+ update t2 set cnt=cnt+1, o=old.C1, n=new.C1 where id = 'u0';
+create trigger t1_cnt_ib before insert on t1 for each row
+ update t2 set cnt=cnt+1, n=new.C1, o=' ' where id = 'i0';
+create trigger t1_cnt_a after update on t1 for each row
+ update t2 set cnt=cnt+1, o=old.C1, n=new.C1 where id = 'u1';
+create trigger t1_cnt_da after delete on t1 for each row
+ update t2 set cnt=cnt+1, o=old.C1, n=' ' where id = 'd1';
+create trigger t1_cnt_ia after insert on t1 for each row
+ update t2 set cnt=cnt+1, n=new.C1, o=' ' where id = 'i1';
+SELECT * FROM t2 order by id;
+
+connection master;
+--echo # INSERT triggers test
+insert into t1 values ('a','b');
+
+sync_slave_with_master;
+
+connection slave;
+SELECT * FROM t2 order by id;
+
+connection master;
+
+--echo # UPDATE triggers test
+update t1 set C1= 'd';
+
+sync_slave_with_master;
+
+connection slave;
+SELECT * FROM t2 order by id;
+
+connection master;
+--echo # DELETE triggers test
+delete from t1 where C1='d';
+
+sync_slave_with_master;
+
+connection slave;
+SELECT * FROM t2 order by id;
+
+--echo # INSERT triggers which cause also UPDATE test (insert duplicate row)
+insert into t1 values ('0','1');
+
+SELECT * FROM t2 order by id;
+
+connection master;
+
+insert into t1 values ('0','1');
+
+sync_slave_with_master;
+
+connection slave;
+SELECT * FROM t2 order by id;
+
+
+--echo # INSERT triggers which cause also DELETE test
+--echo # (insert duplicate row in table referenced by foreign key)
+insert into t1 values ('1','1');
+
+connection master;
+
+CREATE TABLE t3 (C1 CHAR(1) primary key, FOREIGN KEY (C1) REFERENCES t1(C1) ) engine=innodb;
+
+insert into t1 values ('1','1');
+
+sync_slave_with_master;
+
+connection slave;
+SELECT * FROM t2 order by id;
+
+connection master;
+
+drop table t3,t1;
+
+sync_slave_with_master;
+
+connection slave;
+SET @@global.slave_exec_mode= @old_slave_exec_mode;
+SET @@global.slave_run_triggers_for_rbr= @old_slave_run_triggers_for_rbr;
+drop table t2;
+
+--echo #
+--echo # enterprise 10.4 tests end
+--echo #
+
--source include/rpl_end.inc
diff --git a/mysql-test/suite/sql_sequence/rebuild.result b/mysql-test/suite/sql_sequence/rebuild.result
index e5407ef69f3..6348d1775ab 100644
--- a/mysql-test/suite/sql_sequence/rebuild.result
+++ b/mysql-test/suite/sql_sequence/rebuild.result
@@ -5,157 +5,14 @@ CREATE SEQUENCE s1 ENGINE=InnoDB;
ALTER TABLE s1 FORCE;
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
CREATE TABLE t2 (b VARCHAR(64)) ENGINE=MyISAM;
-CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS;
+CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test';
INSERT INTO t1 VALUES (1);
select * from t1;
a
1
select * from t2;
b
-ALL_PLUGINS
-APPLICABLE_ROLES
-CHARACTER_SETS
-CHECK_CONSTRAINTS
-CLIENT_STATISTICS
-COLLATIONS
-COLLATION_CHARACTER_SET_APPLICABILITY
-COLUMNS
-COLUMN_PRIVILEGES
-ENABLED_ROLES
-ENGINES
-EVENTS
-FILES
-GEOMETRY_COLUMNS
-GLOBAL_STATUS
-GLOBAL_VARIABLES
-INDEX_STATISTICS
-INNODB_BUFFER_PAGE
-INNODB_BUFFER_PAGE_LRU
-INNODB_BUFFER_POOL_STATS
-INNODB_CMPMEM
-INNODB_CMP_PER_INDEX
-INNODB_LOCKS
-INNODB_LOCK_WAITS
-INNODB_METRICS
-INNODB_SYS_COLUMNS
-INNODB_SYS_FIELDS
-INNODB_SYS_FOREIGN
-INNODB_SYS_FOREIGN_COLS
-INNODB_SYS_INDEXES
-INNODB_SYS_TABLES
-INNODB_SYS_VIRTUAL
-INNODB_TRX
-KEY_CACHES
-KEY_COLUMN_USAGE
-OPTIMIZER_TRACE
-PARAMETERS
-PARTITIONS
-PLUGINS
-PROCESSLIST
-PROFILING
-REFERENTIAL_CONSTRAINTS
-ROUTINES
-SCHEMATA
-SCHEMA_PRIVILEGES
-SESSION_STATUS
-SESSION_VARIABLES
-SPATIAL_REF_SYS
-STATISTICS
-SYSTEM_VARIABLES
-TABLES
-TABLESPACES
-TABLE_CONSTRAINTS
-TABLE_PRIVILEGES
-TABLE_STATISTICS
-TRIGGERS
-USER_PRIVILEGES
-USER_STATISTICS
-VIEWS
-accounts
-column_stats
-columns_priv
-cond_instances
-db
-event
-events_stages_current
-events_stages_history
-events_stages_history_long
-events_stages_summary_by_account_by_event_name
-events_stages_summary_by_host_by_event_name
-events_stages_summary_by_thread_by_event_name
-events_stages_summary_by_user_by_event_name
-events_stages_summary_global_by_event_name
-events_statements_current
-events_statements_history
-events_statements_history_long
-events_statements_summary_by_account_by_event_name
-events_statements_summary_by_digest
-events_statements_summary_by_host_by_event_name
-events_statements_summary_by_thread_by_event_name
-events_statements_summary_by_user_by_event_name
-events_statements_summary_global_by_event_name
-events_waits_current
-events_waits_history
-events_waits_history_long
-events_waits_summary_by_account_by_event_name
-events_waits_summary_by_host_by_event_name
-events_waits_summary_by_instance
-events_waits_summary_by_thread_by_event_name
-events_waits_summary_by_user_by_event_name
-events_waits_summary_global_by_event_name
-file_instances
-file_summary_by_event_name
-file_summary_by_instance
-func
-general_log
-global_priv
-global_suppressions
-gtid_slave_pos
-help_category
-help_keyword
-help_relation
-help_topic
-host_cache
-hosts
-index_stats
-innodb_index_stats
-innodb_table_stats
-mutex_instances
-objects_summary_global_by_type
-performance_timers
-plugin
-proc
-procs_priv
-proxies_priv
-roles_mapping
-rwlock_instances
s1
-servers
-session_account_connect_attrs
-session_connect_attrs
-setup_actors
-setup_consumers
-setup_instruments
-setup_objects
-setup_timers
-slow_log
-socket_instances
-socket_summary_by_event_name
-socket_summary_by_instance
t1
t2
-table_io_waits_summary_by_index_usage
-table_io_waits_summary_by_table
-table_lock_waits_summary_by_table
-table_stats
-tables_priv
-test_suppressions
-threads
-time_zone
-time_zone_leap_second
-time_zone_name
-time_zone_transition
-time_zone_transition_type
-transaction_registry
-users
DROP TABLE t1, t2, s1;
diff --git a/mysql-test/suite/sql_sequence/rebuild.test b/mysql-test/suite/sql_sequence/rebuild.test
index 7c00e0be7cc..7163a79e884 100644
--- a/mysql-test/suite/sql_sequence/rebuild.test
+++ b/mysql-test/suite/sql_sequence/rebuild.test
@@ -8,7 +8,7 @@ CREATE SEQUENCE s1 ENGINE=InnoDB;
ALTER TABLE s1 FORCE;
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
CREATE TABLE t2 (b VARCHAR(64)) ENGINE=MyISAM;
-CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS;
+CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test';
INSERT INTO t1 VALUES (1);
--sorted_result
select * from t1;
diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result
index 5a8734a9446..6020098acb9 100644
--- a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result
@@ -4,60 +4,74 @@ SET @start_global_value = @@global.innodb_background_scrub_data_check_interval;
#
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-3600
+0
set global innodb_background_scrub_data_check_interval=10;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-10
+0
set global innodb_background_scrub_data_check_interval=DEFAULT;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-3600
+0
set global innodb_background_scrub_data_check_interval=20;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-20
+0
set global innodb_background_scrub_data_check_interval=DEFAULT;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-3600
+0
#
# exists as global only
#
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-3600
+0
select @@session.innodb_background_scrub_data_check_interval;
ERROR HY000: Variable 'innodb_background_scrub_data_check_interval' is a GLOBAL variable
show global variables like 'innodb_background_scrub_data_check_interval';
Variable_name Value
-innodb_background_scrub_data_check_interval 3600
+innodb_background_scrub_data_check_interval 0
show session variables like 'innodb_background_scrub_data_check_interval';
Variable_name Value
-innodb_background_scrub_data_check_interval 3600
+innodb_background_scrub_data_check_interval 0
select * from information_schema.global_variables
where variable_name='innodb_background_scrub_data_check_interval';
VARIABLE_NAME VARIABLE_VALUE
-INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL 3600
+INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL 0
select * from information_schema.session_variables
where variable_name='innodb_background_scrub_data_check_interval';
VARIABLE_NAME VARIABLE_VALUE
-INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL 3600
+INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL 0
#
# show that it's writable
#
set global innodb_background_scrub_data_check_interval=10;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-10
+0
set global innodb_background_scrub_data_check_interval=20;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-20
+0
set global innodb_background_scrub_data_check_interval=1;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_check_interval;
@@global.innodb_background_scrub_data_check_interval
-1
+0
set session innodb_background_scrub_data_check_interval=1;
ERROR HY000: Variable 'innodb_background_scrub_data_check_interval' is a GLOBAL variable and should be set with SET GLOBAL
#
@@ -70,3 +84,5 @@ ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_c
set global innodb_background_scrub_data_check_interval="foo";
ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_check_interval'
SET @@global.innodb_background_scrub_data_check_interval = @start_global_value;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.
diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result
index 7a1fd978bd2..cf78f063adc 100644
--- a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result
@@ -25,17 +25,23 @@ INNODB_BACKGROUND_SCRUB_DATA_COMPRESSED OFF
# show that it's writable
#
set global innodb_background_scrub_data_compressed=ON;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_compressed is deprecated and has no effect.
select @@global.innodb_background_scrub_data_compressed;
@@global.innodb_background_scrub_data_compressed
-1
+0
set global innodb_background_scrub_data_compressed=OFF;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_compressed is deprecated and has no effect.
select @@global.innodb_background_scrub_data_compressed;
@@global.innodb_background_scrub_data_compressed
0
set global innodb_background_scrub_data_compressed=1;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_compressed is deprecated and has no effect.
select @@global.innodb_background_scrub_data_compressed;
@@global.innodb_background_scrub_data_compressed
-1
+0
set session innodb_background_scrub_data_compressed=1;
ERROR HY000: Variable 'innodb_background_scrub_data_compressed' is a GLOBAL variable and should be set with SET GLOBAL
#
@@ -48,3 +54,5 @@ ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_c
set global innodb_background_scrub_data_compressed="foo";
ERROR 42000: Variable 'innodb_background_scrub_data_compressed' can't be set to the value of 'foo'
SET @@global.innodb_background_scrub_data_compressed = @start_global_value;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_compressed is deprecated and has no effect.
diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result
index 49bbc8cd34a..338736c385e 100644
--- a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result
@@ -4,38 +4,44 @@ SET @start_global_value = @@global.innodb_background_scrub_data_interval;
#
select @@global.innodb_background_scrub_data_interval;
@@global.innodb_background_scrub_data_interval
-604800
+0
select @@session.innodb_background_scrub_data_interval;
ERROR HY000: Variable 'innodb_background_scrub_data_interval' is a GLOBAL variable
show global variables like 'innodb_background_scrub_data_interval';
Variable_name Value
-innodb_background_scrub_data_interval 604800
+innodb_background_scrub_data_interval 0
show session variables like 'innodb_background_scrub_data_interval';
Variable_name Value
-innodb_background_scrub_data_interval 604800
+innodb_background_scrub_data_interval 0
select * from information_schema.global_variables
where variable_name='innodb_background_scrub_data_interval';
VARIABLE_NAME VARIABLE_VALUE
-INNODB_BACKGROUND_SCRUB_DATA_INTERVAL 604800
+INNODB_BACKGROUND_SCRUB_DATA_INTERVAL 0
select * from information_schema.session_variables
where variable_name='innodb_background_scrub_data_interval';
VARIABLE_NAME VARIABLE_VALUE
-INNODB_BACKGROUND_SCRUB_DATA_INTERVAL 604800
+INNODB_BACKGROUND_SCRUB_DATA_INTERVAL 0
#
# show that it's writable
#
set global innodb_background_scrub_data_interval=100;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_interval;
@@global.innodb_background_scrub_data_interval
-100
+0
set global innodb_background_scrub_data_interval=200;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_interval;
@@global.innodb_background_scrub_data_interval
-200
+0
set global innodb_background_scrub_data_interval=300;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_interval is deprecated and has no effect.
select @@global.innodb_background_scrub_data_interval;
@@global.innodb_background_scrub_data_interval
-300
+0
set session innodb_background_scrub_data_interval=400;
ERROR HY000: Variable 'innodb_background_scrub_data_interval' is a GLOBAL variable and should be set with SET GLOBAL
#
@@ -48,3 +54,5 @@ ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_i
set global innodb_background_scrub_data_interval="foo";
ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_interval'
SET @@global.innodb_background_scrub_data_interval = @start_global_value;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_interval is deprecated and has no effect.
diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result
index c85bde6493f..93337b838f9 100644
--- a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result
@@ -25,17 +25,23 @@ INNODB_BACKGROUND_SCRUB_DATA_UNCOMPRESSED OFF
# show that it's writable
#
set global innodb_background_scrub_data_uncompressed=ON;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_uncompressed is deprecated and has no effect.
select @@global.innodb_background_scrub_data_uncompressed;
@@global.innodb_background_scrub_data_uncompressed
-1
+0
set global innodb_background_scrub_data_uncompressed=OFF;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_uncompressed is deprecated and has no effect.
select @@global.innodb_background_scrub_data_uncompressed;
@@global.innodb_background_scrub_data_uncompressed
0
set global innodb_background_scrub_data_uncompressed=1;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_uncompressed is deprecated and has no effect.
select @@global.innodb_background_scrub_data_uncompressed;
@@global.innodb_background_scrub_data_uncompressed
-1
+0
set session innodb_background_scrub_data_uncompressed=1;
ERROR HY000: Variable 'innodb_background_scrub_data_uncompressed' is a GLOBAL variable and should be set with SET GLOBAL
#
@@ -48,3 +54,5 @@ ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_u
set global innodb_background_scrub_data_uncompressed="foo";
ERROR 42000: Variable 'innodb_background_scrub_data_uncompressed' can't be set to the value of 'foo'
SET @@global.innodb_background_scrub_data_uncompressed = @start_global_value;
+Warnings:
+Warning 138 The parameter innodb_background_scrub_data_uncompressed is deprecated and has no effect.
diff --git a/mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result b/mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result
deleted file mode 100644
index eced486ad70..00000000000
--- a/mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result
+++ /dev/null
@@ -1,50 +0,0 @@
-SET @start_global_value = @@global.innodb_debug_force_scrubbing;
-#
-# exists as global only
-#
-select @@global.innodb_debug_force_scrubbing;
-@@global.innodb_debug_force_scrubbing
-0
-select @@session.innodb_debug_force_scrubbing;
-ERROR HY000: Variable 'innodb_debug_force_scrubbing' is a GLOBAL variable
-show global variables like 'innodb_debug_force_scrubbing';
-Variable_name Value
-innodb_debug_force_scrubbing OFF
-show session variables like 'innodb_debug_force_scrubbing';
-Variable_name Value
-innodb_debug_force_scrubbing OFF
-select * from information_schema.global_variables
-where variable_name='innodb_debug_force_scrubbing';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_DEBUG_FORCE_SCRUBBING OFF
-select * from information_schema.session_variables
-where variable_name='innodb_debug_force_scrubbing';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_DEBUG_FORCE_SCRUBBING OFF
-#
-# show that it's writable
-#
-set global innodb_debug_force_scrubbing=ON;
-select @@global.innodb_debug_force_scrubbing;
-@@global.innodb_debug_force_scrubbing
-1
-set global innodb_debug_force_scrubbing=OFF;
-select @@global.innodb_debug_force_scrubbing;
-@@global.innodb_debug_force_scrubbing
-0
-set global innodb_debug_force_scrubbing=1;
-select @@global.innodb_debug_force_scrubbing;
-@@global.innodb_debug_force_scrubbing
-1
-set session innodb_debug_force_scrubbing=1;
-ERROR HY000: Variable 'innodb_debug_force_scrubbing' is a GLOBAL variable and should be set with SET GLOBAL
-#
-# incorrect types
-#
-set global innodb_debug_force_scrubbing=1.1;
-ERROR 42000: Incorrect argument type to variable 'innodb_debug_force_scrubbing'
-set global innodb_debug_force_scrubbing=1e1;
-ERROR 42000: Incorrect argument type to variable 'innodb_debug_force_scrubbing'
-set global innodb_debug_force_scrubbing="foo";
-ERROR 42000: Variable 'innodb_debug_force_scrubbing' can't be set to the value of 'foo'
-SET @@global.innodb_debug_force_scrubbing = @start_global_value;
diff --git a/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result b/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result
index e51dab0718a..c9b46cc0c95 100644
--- a/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result
@@ -3,12 +3,16 @@ SELECT @@GLOBAL.innodb_scrub_log_speed;
256
200 Expected
SET @@GLOBAL.innodb_scrub_log_speed=100;
+Warnings:
+Warning 138 The parameter innodb_scrub_log_speed is deprecated and has no effect.
1 Expected
SELECT @@GLOBAL.innodb_scrub_log_speed;
@@GLOBAL.innodb_scrub_log_speed
-100
+256
100 Expected
SET @@GLOBAL.innodb_scrub_log_speed=DEFAULT;
+Warnings:
+Warning 138 The parameter innodb_scrub_log_speed is deprecated and has no effect.
1 Expected
SELECT @@GLOBAL.innodb_scrub_log_speed;
@@GLOBAL.innodb_scrub_log_speed
diff --git a/mysql-test/suite/sys_vars/r/local_infile_func.result b/mysql-test/suite/sys_vars/r/local_infile_func.result
index 1c116090f88..9b41f715d11 100644
--- a/mysql-test/suite/sys_vars/r/local_infile_func.result
+++ b/mysql-test/suite/sys_vars/r/local_infile_func.result
@@ -29,7 +29,7 @@ DROP TABLE IF EXISTS t1;
create table t1(a int);
LOAD DATA LOCAL INFILE
'MYSQLTEST_VARDIR/std_data/numbers.txt' INTO TABLE test.t1;
-ERROR 42000: The used command is not allowed with this MariaDB version
+ERROR HY000: The used command is not allowed because the MariaDB server or client has disabled the local infile capability
SELECT count(*) from t1;
count(*)
0
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff
index 5db39278d9a..1771ee10832 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff
@@ -416,15 +416,6 @@
VARIABLE_COMMENT Dictates rate at which UNDO records are purged. Value N means purge rollback segment(s) on every Nth iteration of purge invocation
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 128
-@@ -1585,7 +1585,7 @@
- SESSION_VALUE NULL
- DEFAULT_VALUE 4
- VARIABLE_SCOPE GLOBAL
--VARIABLE_TYPE BIGINT UNSIGNED
-+VARIABLE_TYPE INT UNSIGNED
- VARIABLE_COMMENT Purge threads can be from 1 to 32. Default is 4.
- NUMERIC_MIN_VALUE 1
- NUMERIC_MAX_VALUE 32
@@ -1609,7 +1609,7 @@
SESSION_VALUE NULL
DEFAULT_VALUE 56
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
index dcdafc8196d..0872b29b283 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
@@ -107,12 +107,12 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL
SESSION_VALUE NULL
-DEFAULT_VALUE 3600
+DEFAULT_VALUE 0
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE INT UNSIGNED
-VARIABLE_COMMENT check if spaces needs scrubbing every innodb_background_scrub_data_check_interval seconds
-NUMERIC_MIN_VALUE 1
-NUMERIC_MAX_VALUE 4294967295
+VARIABLE_COMMENT Deprecated parameter with no effect.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 0
NUMERIC_BLOCK_SIZE 0
ENUM_VALUE_LIST NULL
READ_ONLY NO
@@ -122,21 +122,21 @@ SESSION_VALUE NULL
DEFAULT_VALUE OFF
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
-VARIABLE_COMMENT Enable scrubbing of compressed data by background threads (same as encryption_threads)
+VARIABLE_COMMENT Deprecated parameter with no effect.
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
-COMMAND_LINE_ARGUMENT REQUIRED
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_BACKGROUND_SCRUB_DATA_INTERVAL
SESSION_VALUE NULL
-DEFAULT_VALUE 604800
+DEFAULT_VALUE 0
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE INT UNSIGNED
-VARIABLE_COMMENT scrub spaces that were last scrubbed longer than innodb_background_scrub_data_interval seconds ago
-NUMERIC_MIN_VALUE 1
-NUMERIC_MAX_VALUE 4294967295
+VARIABLE_COMMENT Deprecated parameter with no effect.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 0
NUMERIC_BLOCK_SIZE 0
ENUM_VALUE_LIST NULL
READ_ONLY NO
@@ -146,13 +146,13 @@ SESSION_VALUE NULL
DEFAULT_VALUE OFF
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
-VARIABLE_COMMENT Enable scrubbing of uncompressed data by background threads (same as encryption_threads)
+VARIABLE_COMMENT Deprecated parameter with no effect.
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
-COMMAND_LINE_ARGUMENT REQUIRED
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_BUFFER_POOL_CHUNK_SIZE
SESSION_VALUE NULL
DEFAULT_VALUE 134217728
@@ -513,18 +513,6 @@ NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
COMMAND_LINE_ARGUMENT NONE
-VARIABLE_NAME INNODB_DEBUG_FORCE_SCRUBBING
-SESSION_VALUE NULL
-DEFAULT_VALUE OFF
-VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BOOLEAN
-VARIABLE_COMMENT Perform extra scrubbing to increase test exposure
-NUMERIC_MIN_VALUE NULL
-NUMERIC_MAX_VALUE NULL
-NUMERIC_BLOCK_SIZE NULL
-ENUM_VALUE_LIST OFF,ON
-READ_ONLY NO
-COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME INNODB_DEFAULT_ENCRYPTION_KEY_ID
SESSION_VALUE 1
DEFAULT_VALUE 1
@@ -710,7 +698,7 @@ SESSION_VALUE NULL
DEFAULT_VALUE 0
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE INT UNSIGNED
-VARIABLE_COMMENT Number of threads performing background key rotation and scrubbing
+VARIABLE_COMMENT Number of threads performing background key rotation
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
NUMERIC_BLOCK_SIZE 0
@@ -1585,8 +1573,8 @@ VARIABLE_NAME INNODB_PURGE_THREADS
SESSION_VALUE NULL
DEFAULT_VALUE 4
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
-VARIABLE_COMMENT Purge threads can be from 1 to 32. Default is 4.
+VARIABLE_TYPE INT UNSIGNED
+VARIABLE_COMMENT Number of tasks for purging transaction history
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 32
NUMERIC_BLOCK_SIZE 0
@@ -1682,7 +1670,7 @@ SESSION_VALUE NULL
DEFAULT_VALUE OFF
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
-VARIABLE_COMMENT Enable background redo log scrubbing
+VARIABLE_COMMENT Deprecated parameter with no effect.
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
@@ -1694,7 +1682,7 @@ SESSION_VALUE NULL
DEFAULT_VALUE 256
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
-VARIABLE_COMMENT Background redo log scrubbing speed in bytes/sec
+VARIABLE_COMMENT Deprecated parameter with no effect.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 50000
NUMERIC_BLOCK_SIZE 0
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff
index 6d9466e0602..bd7224348bd 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff
@@ -1,5 +1,5 @@
---- suite/sys_vars/r/sysvars_server_embedded.result 2020-02-13 13:02:28.604373957 +0200
-+++ suite/sys_vars/r/sysvars_server_embedded,32bit.reject 2020-02-13 13:19:05.596616949 +0200
+--- mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
++++ mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
@@ -35,7 +35,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_BLOCK_SIZE
@@ -817,6 +817,24 @@
NUMERIC_MAX_VALUE 1024
@@ -2375,7 +2375,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2385,7 +2385,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1024
+@@ -2395,7 +2395,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT
@@ -824,7 +842,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2385,7 +2385,7 @@
+@@ -2405,7 +2405,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -833,7 +851,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2395,7 +2395,7 @@
+@@ -2415,7 +2415,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -842,7 +860,7 @@
VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2405,7 +2405,7 @@
+@@ -2425,7 +2425,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -851,7 +869,7 @@
VARIABLE_COMMENT Maximum number of condition instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2415,7 +2415,7 @@
+@@ -2435,7 +2435,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -860,7 +878,7 @@
VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2425,7 +2425,7 @@
+@@ -2445,7 +2445,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH
VARIABLE_SCOPE GLOBAL
@@ -869,7 +887,7 @@
VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2435,7 +2435,7 @@
+@@ -2455,7 +2455,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -878,7 +896,7 @@
VARIABLE_COMMENT Maximum number of file instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2445,7 +2445,7 @@
+@@ -2465,7 +2465,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -887,7 +905,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented files.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2455,7 +2455,7 @@
+@@ -2475,7 +2475,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -896,7 +914,34 @@
VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2465,7 +2465,7 @@
+@@ -2485,7 +2485,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2495,7 +2495,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT UNSIGNED
++VARIABLE_TYPE INT UNSIGNED
+ VARIABLE_COMMENT Maximum number of memory pool instruments.
+ NUMERIC_MIN_VALUE 0
+ NUMERIC_MAX_VALUE 1024
+@@ -2505,7 +2505,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 104857600
+@@ -2515,7 +2515,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -905,7 +950,7 @@
VARIABLE_COMMENT Maximum number of mutex instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2475,7 +2475,7 @@
+@@ -2525,7 +2525,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -914,7 +959,25 @@
VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2485,7 +2485,7 @@
+@@ -2535,7 +2535,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2545,7 +2545,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2555,7 +2555,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -923,7 +986,7 @@
VARIABLE_COMMENT Maximum number of rwlock instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2495,7 +2495,7 @@
+@@ -2565,7 +2565,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -932,7 +995,7 @@
VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2505,7 +2505,7 @@
+@@ -2575,7 +2575,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -941,7 +1004,7 @@
VARIABLE_COMMENT Maximum number of socket instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2515,7 +2515,7 @@
+@@ -2585,7 +2585,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -950,7 +1013,16 @@
VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2525,7 +2525,7 @@
+@@ -2595,7 +2595,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum length of displayed sql text.
+ NUMERIC_MIN_VALUE 0
+ NUMERIC_MAX_VALUE 1048576
+@@ -2605,7 +2605,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -959,7 +1031,7 @@
VARIABLE_COMMENT Maximum number of stage instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2535,7 +2535,7 @@
+@@ -2615,7 +2615,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -968,7 +1040,16 @@
VARIABLE_COMMENT Maximum number of statement instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2545,7 +2545,7 @@
+@@ -2625,7 +2625,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT UNSIGNED
++VARIABLE_TYPE INT UNSIGNED
+ VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
+ NUMERIC_MIN_VALUE 1
+ NUMERIC_MAX_VALUE 256
+@@ -2635,7 +2635,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -977,7 +1058,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2555,7 +2555,7 @@
+@@ -2645,7 +2645,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -986,7 +1067,16 @@
VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2565,7 +2565,7 @@
+@@ -2655,7 +2655,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2665,7 +2665,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -995,7 +1085,7 @@
VARIABLE_COMMENT Maximum number of thread instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2575,7 +2575,7 @@
+@@ -2675,7 +2675,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1004,7 +1094,7 @@
VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2585,7 +2585,7 @@
+@@ -2685,7 +2685,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1013,25 +1103,25 @@
VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2595,7 +2595,7 @@
+@@ -2695,7 +2695,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL
--VARIABLE_TYPE BIGINT UNSIGNED
-+VARIABLE_TYPE INT UNSIGNED
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS.
- NUMERIC_MIN_VALUE 0
+ NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2605,7 +2605,7 @@
+@@ -2705,7 +2705,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL
--VARIABLE_TYPE BIGINT UNSIGNED
-+VARIABLE_TYPE INT UNSIGNED
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS.
- NUMERIC_MIN_VALUE 0
+ NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2615,7 +2615,7 @@
+@@ -2715,7 +2715,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1040,7 +1130,7 @@
VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2665,7 +2665,7 @@
+@@ -2765,7 +2765,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PRELOAD_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1049,7 +1139,7 @@
VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -2685,7 +2685,7 @@
+@@ -2785,7 +2785,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME PROFILING_HISTORY_SIZE
VARIABLE_SCOPE SESSION
@@ -1058,7 +1148,7 @@
VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 100
-@@ -2695,7 +2695,7 @@
+@@ -2795,7 +2795,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PROGRESS_REPORT_TIME
VARIABLE_SCOPE SESSION
@@ -1067,7 +1157,7 @@
VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2755,7 +2755,7 @@
+@@ -2855,7 +2855,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE
VARIABLE_SCOPE SESSION
@@ -1076,7 +1166,7 @@
VARIABLE_COMMENT Allocation block size for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -2765,7 +2765,7 @@
+@@ -2865,7 +2865,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -1085,7 +1175,7 @@
VARIABLE_COMMENT Don't cache results that are bigger than this
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2775,7 +2775,7 @@
+@@ -2875,7 +2875,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT
VARIABLE_SCOPE GLOBAL
@@ -1094,7 +1184,7 @@
VARIABLE_COMMENT The minimum size for blocks allocated by the query cache
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2788,7 +2788,7 @@
+@@ -2888,7 +2888,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The memory allocated to store results from old queries
NUMERIC_MIN_VALUE 0
@@ -1103,7 +1193,7 @@
NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2825,7 +2825,7 @@
+@@ -2925,7 +2925,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME QUERY_PREALLOC_SIZE
VARIABLE_SCOPE SESSION
@@ -1112,7 +1202,7 @@
VARIABLE_COMMENT Persistent buffer for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -2838,7 +2838,7 @@
+@@ -2938,7 +2938,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1121,7 +1211,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2848,14 +2848,14 @@
+@@ -2948,14 +2948,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1138,7 +1228,7 @@
VARIABLE_COMMENT Allocation block size for storing ranges during optimization
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 4294967295
-@@ -2865,7 +2865,7 @@
+@@ -2965,7 +2965,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME READ_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1147,7 +1237,7 @@
VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value
NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647
-@@ -2885,7 +2885,7 @@
+@@ -2985,7 +2985,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME READ_RND_BUFFER_SIZE
VARIABLE_SCOPE SESSION
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
index 92eb224e95c..593891425c3 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
@@ -2373,6 +2373,26 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1024
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT
@@ -2463,6 +2483,36 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT Maximum number of memory pool instruments.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 1024
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 104857600
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2483,6 +2533,26 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2523,6 +2593,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum length of displayed sql text.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2543,6 +2623,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
+NUMERIC_MIN_VALUE 1
+NUMERIC_MAX_VALUE 256
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT
@@ -2563,6 +2653,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2595,9 +2695,9 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE BIGINT
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS.
-NUMERIC_MIN_VALUE 0
+NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
@@ -2605,9 +2705,9 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE BIGINT
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS.
-NUMERIC_MIN_VALUE 0
+NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
index daf5a5a1bad..66ca924dea0 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
@@ -1,5 +1,5 @@
---- suite/sys_vars/r/sysvars_server_notembedded.result 2020-02-13 13:02:28.604373957 +0200
-+++ suite/sys_vars/r/sysvars_server_notembedded.reject 2020-02-13 13:12:51.778369858 +0200
+--- mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
++++ mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.result~
@@ -35,7 +35,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_BLOCK_SIZE
@@ -817,6 +817,24 @@
NUMERIC_MAX_VALUE 1024
@@ -2535,7 +2535,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2545,7 +2545,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1024
+@@ -2555,7 +2555,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT
@@ -824,7 +842,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2545,7 +2545,7 @@
+@@ -2565,7 +2565,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -833,7 +851,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2555,7 +2555,7 @@
+@@ -2575,7 +2575,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -842,7 +860,7 @@
VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2565,7 +2565,7 @@
+@@ -2585,7 +2585,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -851,7 +869,7 @@
VARIABLE_COMMENT Maximum number of condition instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2575,7 +2575,7 @@
+@@ -2595,7 +2595,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -860,7 +878,7 @@
VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2585,7 +2585,7 @@
+@@ -2605,7 +2605,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH
VARIABLE_SCOPE GLOBAL
@@ -869,7 +887,7 @@
VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2595,7 +2595,7 @@
+@@ -2615,7 +2615,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -878,7 +896,7 @@
VARIABLE_COMMENT Maximum number of file instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2605,7 +2605,7 @@
+@@ -2625,7 +2625,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -887,7 +905,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented files.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2615,7 +2615,7 @@
+@@ -2635,7 +2635,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -896,7 +914,34 @@
VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2625,7 +2625,7 @@
+@@ -2645,7 +2645,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2655,7 +2655,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT UNSIGNED
++VARIABLE_TYPE INT UNSIGNED
+ VARIABLE_COMMENT Maximum number of memory pool instruments.
+ NUMERIC_MIN_VALUE 0
+ NUMERIC_MAX_VALUE 1024
+@@ -2665,7 +2665,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 104857600
+@@ -2675,7 +2675,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -905,7 +950,7 @@
VARIABLE_COMMENT Maximum number of mutex instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2635,7 +2635,7 @@
+@@ -2685,7 +2685,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -914,7 +959,25 @@
VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2645,7 +2645,7 @@
+@@ -2695,7 +2695,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2705,7 +2705,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2715,7 +2715,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -923,7 +986,7 @@
VARIABLE_COMMENT Maximum number of rwlock instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2655,7 +2655,7 @@
+@@ -2725,7 +2725,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -932,7 +995,7 @@
VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2665,7 +2665,7 @@
+@@ -2735,7 +2735,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -941,7 +1004,7 @@
VARIABLE_COMMENT Maximum number of socket instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2675,7 +2675,7 @@
+@@ -2745,7 +2745,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -950,7 +1013,16 @@
VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2685,7 +2685,7 @@
+@@ -2755,7 +2755,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum length of displayed sql text.
+ NUMERIC_MIN_VALUE 0
+ NUMERIC_MAX_VALUE 1048576
+@@ -2765,7 +2765,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -959,7 +1031,7 @@
VARIABLE_COMMENT Maximum number of stage instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2695,7 +2695,7 @@
+@@ -2775,7 +2775,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -968,7 +1040,16 @@
VARIABLE_COMMENT Maximum number of statement instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2705,7 +2705,7 @@
+@@ -2785,7 +2785,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT UNSIGNED
++VARIABLE_TYPE INT UNSIGNED
+ VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
+ NUMERIC_MIN_VALUE 1
+ NUMERIC_MAX_VALUE 256
+@@ -2795,7 +2795,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -977,7 +1058,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2715,7 +2715,7 @@
+@@ -2805,7 +2805,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -986,7 +1067,16 @@
VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2725,7 +2725,7 @@
+@@ -2815,7 +2815,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
+ VARIABLE_SCOPE GLOBAL
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
+ VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+ NUMERIC_MIN_VALUE -1
+ NUMERIC_MAX_VALUE 1048576
+@@ -2825,7 +2825,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -995,7 +1085,7 @@
VARIABLE_COMMENT Maximum number of thread instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2735,7 +2735,7 @@
+@@ -2835,7 +2835,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1004,7 +1094,7 @@
VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2745,7 +2745,7 @@
+@@ -2845,7 +2845,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1013,25 +1103,25 @@
VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2755,7 +2755,7 @@
+@@ -2855,7 +2855,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL
--VARIABLE_TYPE BIGINT UNSIGNED
-+VARIABLE_TYPE INT UNSIGNED
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS.
- NUMERIC_MIN_VALUE 0
+ NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2765,7 +2765,7 @@
+@@ -2865,7 +2865,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL
--VARIABLE_TYPE BIGINT UNSIGNED
-+VARIABLE_TYPE INT UNSIGNED
+-VARIABLE_TYPE BIGINT
++VARIABLE_TYPE INT
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS.
- NUMERIC_MIN_VALUE 0
+ NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2775,7 +2775,7 @@
+@@ -2875,7 +2875,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1040,7 +1130,7 @@
VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2825,7 +2825,7 @@
+@@ -2925,7 +2925,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PRELOAD_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1049,7 +1139,7 @@
VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -2845,7 +2845,7 @@
+@@ -2945,7 +2945,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME PROFILING_HISTORY_SIZE
VARIABLE_SCOPE SESSION
@@ -1058,7 +1148,7 @@
VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 100
-@@ -2855,7 +2855,7 @@
+@@ -2955,7 +2955,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PROGRESS_REPORT_TIME
VARIABLE_SCOPE SESSION
@@ -1067,7 +1157,7 @@
VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2915,7 +2915,7 @@
+@@ -3015,7 +3015,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE
VARIABLE_SCOPE SESSION
@@ -1076,7 +1166,7 @@
VARIABLE_COMMENT Allocation block size for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -2925,7 +2925,7 @@
+@@ -3025,7 +3025,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -1085,7 +1175,7 @@
VARIABLE_COMMENT Don't cache results that are bigger than this
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2935,7 +2935,7 @@
+@@ -3035,7 +3035,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT
VARIABLE_SCOPE GLOBAL
@@ -1094,7 +1184,7 @@
VARIABLE_COMMENT The minimum size for blocks allocated by the query cache
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2948,7 +2948,7 @@
+@@ -3048,7 +3048,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The memory allocated to store results from old queries
NUMERIC_MIN_VALUE 0
@@ -1103,7 +1193,7 @@
NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2985,7 +2985,7 @@
+@@ -3085,7 +3085,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME QUERY_PREALLOC_SIZE
VARIABLE_SCOPE SESSION
@@ -1112,7 +1202,7 @@
VARIABLE_COMMENT Persistent buffer for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -2998,7 +2998,7 @@
+@@ -3098,7 +3098,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1121,7 +1211,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3008,14 +3008,14 @@
+@@ -3108,14 +3108,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1138,7 +1228,7 @@
VARIABLE_COMMENT Allocation block size for storing ranges during optimization
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 4294967295
-@@ -3028,14 +3028,14 @@
+@@ -3128,14 +3128,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Maximum speed(KB/s) to read binlog from master (0 = no limit)
NUMERIC_MIN_VALUE 0
@@ -1155,7 +1245,7 @@
VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value
NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647
-@@ -3055,7 +3055,7 @@
+@@ -3155,7 +3155,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME READ_RND_BUFFER_SIZE
VARIABLE_SCOPE SESSION
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
index 17a9978614a..483da8a82e7 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
@@ -2533,6 +2533,26 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1024
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT
@@ -2623,6 +2643,36 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT Maximum number of memory pool instruments.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 1024
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 104857600
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2643,6 +2693,26 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2683,6 +2753,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum length of displayed sql text.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2703,6 +2783,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
+NUMERIC_MIN_VALUE 1
+NUMERIC_MAX_VALUE 256
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT
@@ -2723,6 +2813,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT
+VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
+NUMERIC_MIN_VALUE -1
+NUMERIC_MAX_VALUE 1048576
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2755,9 +2855,9 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE BIGINT
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS.
-NUMERIC_MIN_VALUE 0
+NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
@@ -2765,9 +2865,9 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE BIGINT
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS.
-NUMERIC_MIN_VALUE 0
+NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
@@ -3626,11 +3726,11 @@ COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_RUN_TRIGGERS_FOR_RBR
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE ENUM
-VARIABLE_COMMENT Modes for how triggers in row-base replication on slave side will be executed. Legal values are NO (default), YES and LOGGING. NO means that trigger for RBR will not be running on slave. YES and LOGGING means that triggers will be running on slave, if there was not triggers running on the master for the statement. LOGGING also means results of that the executed triggers work will be written to the binlog.
+VARIABLE_COMMENT Modes for how triggers in row-base replication on slave side will be executed. Legal values are NO (default), YES, LOGGING and ENFORCE. NO means that trigger for RBR will not be running on slave. YES and LOGGING means that triggers will be running on slave, if there was not triggers running on the master for the statement. LOGGING also means results of that the executed triggers work will be written to the binlog. ENFORCE means that triggers will always be run on the slave, even if there are triggers on the master. ENFORCE implies LOGGING.
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
-ENUM_VALUE_LIST NO,YES,LOGGING
+ENUM_VALUE_LIST NO,YES,LOGGING,ENFORCE
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_SKIP_ERRORS
diff --git a/mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test b/mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test
deleted file mode 100644
index cc00f0f6f3d..00000000000
--- a/mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# bool global
---source include/have_innodb.inc
---source include/have_debug.inc
-
-SET @start_global_value = @@global.innodb_debug_force_scrubbing;
-
---echo #
---echo # exists as global only
---echo #
-select @@global.innodb_debug_force_scrubbing;
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-select @@session.innodb_debug_force_scrubbing;
-show global variables like 'innodb_debug_force_scrubbing';
-show session variables like 'innodb_debug_force_scrubbing';
-select * from information_schema.global_variables
-where variable_name='innodb_debug_force_scrubbing';
-select * from information_schema.session_variables
-where variable_name='innodb_debug_force_scrubbing';
-
---echo #
---echo # show that it's writable
---echo #
-set global innodb_debug_force_scrubbing=ON;
-select @@global.innodb_debug_force_scrubbing;
-set global innodb_debug_force_scrubbing=OFF;
-select @@global.innodb_debug_force_scrubbing;
-set global innodb_debug_force_scrubbing=1;
-select @@global.innodb_debug_force_scrubbing;
---error ER_GLOBAL_VARIABLE
-set session innodb_debug_force_scrubbing=1;
-
---echo #
---echo # incorrect types
---echo #
---error ER_WRONG_TYPE_FOR_VAR
-set global innodb_debug_force_scrubbing=1.1;
---error ER_WRONG_TYPE_FOR_VAR
-set global innodb_debug_force_scrubbing=1e1;
---error ER_WRONG_VALUE_FOR_VAR
-set global innodb_debug_force_scrubbing="foo";
-
-SET @@global.innodb_debug_force_scrubbing = @start_global_value;
diff --git a/mysql-test/suite/sys_vars/t/local_infile_func.test b/mysql-test/suite/sys_vars/t/local_infile_func.test
index 99bb9c65715..be26fb5bff9 100644
--- a/mysql-test/suite/sys_vars/t/local_infile_func.test
+++ b/mysql-test/suite/sys_vars/t/local_infile_func.test
@@ -74,7 +74,7 @@ DROP TABLE IF EXISTS t1;
create table t1(a int);
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
---Error ER_NOT_ALLOWED_COMMAND
+--Error ER_LOAD_INFILE_CAPABILITY_DISABLED
eval LOAD DATA LOCAL INFILE
'$MYSQLTEST_VARDIR/std_data/numbers.txt' INTO TABLE test.t1;
diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp
index d33cbcf2694..5f4ca8bc421 100644
--- a/mysql-test/valgrind.supp
+++ b/mysql-test/valgrind.supp
@@ -657,182 +657,6 @@
#
-# Some problem inside glibc on Ubuntu 9.04, x86 (but not amd64):
-#
-# ==5985== 19 bytes in 1 blocks are still reachable in loss record 1 of 6
-# ==5985== at 0x7AF3FDE: malloc (vg_replace_malloc.c:207)
-# ... 11,12, or 13 functions w/o symbols ...
-# ==5985== by 0x8717185: nptl_pthread_exit_hack_handler (my_thr_init.c:55)
-#
-# Since valgrind 3.3.0 doesn't support '...' multi-function pattern, using
-# multiple suppressions:
-#
-{
- Mem loss inside nptl_pthread_exit_hack_handler
- Memcheck:Leak
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:nptl_pthread_exit_hack_handler
-}
-
-{
- Mem loss inside nptl_pthread_exit_hack_handler
- Memcheck:Leak
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:nptl_pthread_exit_hack_handler
-}
-
-{
- Mem loss inside nptl_pthread_exit_hack_handler
- Memcheck:Leak
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:*
- fun:nptl_pthread_exit_hack_handler
-}
-
-#
-# BUG#45630
-# Suppress valgrind failures within nptl_pthread_exit_hack_handler on Ubuntu 9.04, x86 (but not amd64)
-#
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 1
- Memcheck:Leak
- fun:malloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
- fun:clone
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 2
- Memcheck:Leak
- fun:malloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
- fun:clone
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 3
- Memcheck:Leak
- fun:calloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
- fun:clone
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 4
- Memcheck:Leak
- fun:malloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 5
- Memcheck:Leak
- fun:calloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
-}
-
-#
# Problem with glibc and gethostbyaddr_r
#
@@ -846,113 +670,6 @@
fun: gethostbyaddr_r
}
-# suppressions for glibc 2.6.1 64 bit
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 6
- Memcheck:Leak
- fun:malloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 7
- Memcheck:Leak
- fun:malloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
- fun:clone
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 8
- Memcheck:Leak
- fun:calloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
- fun:start_thread
- fun:clone
-}
-
-{
- Mem loss within nptl_pthread_exit_hack_handler 8
- Memcheck:Leak
- fun:calloc
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
-}
-
-{
- Invalid read within nptl_pthread_exit_hack_handler
- Memcheck:Addr8
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- obj:*/ld-*.so
- obj:*/libc-*.so
- fun:__libc_dlopen_mode
- fun:pthread_cancel_init
- fun:_Unwind_ForcedUnwind
- fun:__pthread_unwind
- fun:pthread_exit
- fun:nptl_pthread_exit_hack_handler
-}
-
{
memory "leak" in backtrace() of glibc 2.9 (not present in 2.13)
Memcheck:Leak
diff --git a/mysys/array.c b/mysys/array.c
index 07abc460de7..1d1d9dd1c64 100644
--- a/mysys/array.c
+++ b/mysys/array.c
@@ -40,9 +40,9 @@
FALSE Ok
*/
-my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,
- void *init_buffer, uint init_alloc,
- uint alloc_increment, myf my_flags)
+my_bool init_dynamic_array2(PSI_memory_key psi_key, DYNAMIC_ARRAY *array,
+ uint element_size, void *init_buffer,
+ uint init_alloc, uint alloc_increment, myf my_flags)
{
DBUG_ENTER("init_dynamic_array2");
if (!alloc_increment)
@@ -55,6 +55,7 @@ my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,
array->max_element=init_alloc;
array->alloc_increment=alloc_increment;
array->size_of_element=element_size;
+ array->m_psi_key= psi_key;
array->malloc_flags= my_flags;
DBUG_ASSERT((my_flags & MY_INIT_BUFFER_USED) == 0);
if ((array->buffer= init_buffer))
@@ -67,7 +68,7 @@ my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,
should not throw an error
*/
if (init_alloc &&
- !(array->buffer= (uchar*) my_malloc(element_size*init_alloc,
+ !(array->buffer= (uchar*) my_malloc(psi_key, element_size*init_alloc,
MYF(my_flags))))
array->max_element=0;
DBUG_RETURN(FALSE);
@@ -133,7 +134,8 @@ void *alloc_dynamic(DYNAMIC_ARRAY *array)
In this scenario, the buffer is statically preallocated,
so we have to create an all-new malloc since we overflowed
*/
- if (!(new_ptr= (char *) my_malloc((array->max_element+
+ if (!(new_ptr= (char *) my_malloc(array->m_psi_key,
+ (array->max_element+
array->alloc_increment) *
array->size_of_element,
MYF(array->malloc_flags | MY_WME))))
@@ -143,8 +145,8 @@ void *alloc_dynamic(DYNAMIC_ARRAY *array)
array->malloc_flags&= ~MY_INIT_BUFFER_USED;
}
else if (!(new_ptr=(char*)
- my_realloc(array->buffer,(array->max_element+
- array->alloc_increment)*
+ my_realloc(array->m_psi_key, array->buffer,
+ (array->max_element+ array->alloc_increment) *
array->size_of_element,
MYF(MY_WME | MY_ALLOW_ZERO_PTR |
array->malloc_flags))))
@@ -241,7 +243,7 @@ my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements)
In this senerio, the buffer is statically preallocated,
so we have to create an all-new malloc since we overflowed
*/
- if (!(new_ptr= (uchar *) my_malloc(size *
+ if (!(new_ptr= (uchar *) my_malloc(array->m_psi_key, size *
array->size_of_element,
MYF(array->malloc_flags | MY_WME))))
DBUG_RETURN(0);
@@ -249,7 +251,8 @@ my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements)
array->elements * array->size_of_element);
array->malloc_flags&= ~MY_INIT_BUFFER_USED;
}
- else if (!(new_ptr= (uchar*) my_realloc(array->buffer,size*
+ else if (!(new_ptr= (uchar*) my_realloc(array->m_psi_key,
+ array->buffer,size *
array->size_of_element,
MYF(MY_WME | MY_ALLOW_ZERO_PTR |
array->malloc_flags))))
@@ -362,8 +365,8 @@ void freeze_size(DYNAMIC_ARRAY *array)
elements= MY_MAX(array->elements, 1);
if (array->buffer && array->max_element > elements)
{
- array->buffer=(uchar*) my_realloc(array->buffer,
- elements*array->size_of_element,
+ array->buffer=(uchar*) my_realloc(array->m_psi_key, array->buffer,
+ elements * array->size_of_element,
MYF(MY_WME | array->malloc_flags));
array->max_element= elements;
}
diff --git a/mysys/charset.c b/mysys/charset.c
index 9c61fa85481..5e999c8435d 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -463,12 +463,12 @@ my_once_alloc_c(size_t size)
static void *
my_malloc_c(size_t size)
-{ return my_malloc(size, MYF(MY_WME)); }
+{ return my_malloc(key_memory_charset_loader, size, MYF(MY_WME)); }
static void *
my_realloc_c(void *old, size_t size)
-{ return my_realloc(old, size, MYF(MY_WME|MY_ALLOW_ZERO_PTR)); }
+{ return my_realloc(key_memory_charset_loader, old, size, MYF(MY_WME|MY_ALLOW_ZERO_PTR)); }
/**
@@ -506,7 +506,7 @@ my_read_charset_file(MY_CHARSET_LOADER *loader,
if (!my_stat(filename, &stat_info, MYF(myflags)) ||
((len= (uint)stat_info.st_size) > MY_MAX_ALLOWED_BUF) ||
- !(buf= (uchar*) my_malloc(len,myflags)))
+ !(buf= (uchar*) my_malloc(key_memory_charset_loader,len,myflags)))
return TRUE;
if ((fd= mysql_file_open(key_file_charset, filename, O_RDONLY, myflags)) < 0)
diff --git a/mysys/file_logger.c b/mysys/file_logger.c
index 71394be7afc..eb5579fb8a9 100644
--- a/mysys/file_logger.c
+++ b/mysys/file_logger.c
@@ -84,7 +84,8 @@ LOGGER_HANDLE *logger_open(const char *path,
return 0;
}
- if (!(l_perm= (LOGGER_HANDLE *) my_malloc(sizeof(LOGGER_HANDLE), MYF(0))))
+ if (!(l_perm= (LOGGER_HANDLE *) my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(LOGGER_HANDLE), MYF(0))))
{
my_close(new_log.file, MYF(0));
new_log.file= -1;
diff --git a/mysys/get_password.c b/mysys/get_password.c
index e20800f4213..2a5ddc9a4d7 100644
--- a/mysys/get_password.c
+++ b/mysys/get_password.c
@@ -90,7 +90,7 @@ char *get_tty_password(const char *opt_message)
pos--; /* Allow dummy space at end */
*pos=0;
_cputs("\n");
- DBUG_RETURN(my_strdup(to,MYF(MY_FAE)));
+ DBUG_RETURN(my_strdup(PSI_INSTRUMENT_ME, to,MYF(MY_FAE)));
}
#else
@@ -201,7 +201,7 @@ char *get_tty_password(const char *opt_message)
fputc('\n',stderr);
#endif /* HAVE_GETPASS */
- DBUG_RETURN(my_strdup(buff,MYF(MY_FAE)));
+ DBUG_RETURN(my_strdup(PSI_INSTRUMENT_ME, buff, MYF(MY_FAE)));
}
#endif /*__WIN__*/
diff --git a/mysys/hash.c b/mysys/hash.c
index 2d3077013d8..347e0cfda8a 100644
--- a/mysys/hash.c
+++ b/mysys/hash.c
@@ -76,14 +76,14 @@ my_hash_value_type my_hash_sort(CHARSET_INFO *cs, const uchar *key,
@retval 1 failure
*/
my_bool
-my_hash_init2(HASH *hash, uint growth_size, CHARSET_INFO *charset,
- ulong size, size_t key_offset, size_t key_length,
- my_hash_get_key get_key,
+my_hash_init2(PSI_memory_key psi_key, HASH *hash, uint growth_size,
+ CHARSET_INFO *charset, ulong size, size_t key_offset,
+ size_t key_length, my_hash_get_key get_key,
my_hash_function hash_function,
void (*free_element)(void*), uint flags)
{
my_bool res;
- DBUG_ENTER("my_hash_init");
+ DBUG_ENTER("my_hash_init2");
DBUG_PRINT("enter",("hash:%p size: %u", hash, (uint) size));
hash->records=0;
@@ -95,7 +95,7 @@ my_hash_init2(HASH *hash, uint growth_size, CHARSET_INFO *charset,
hash->free=free_element;
hash->flags=flags;
hash->charset=charset;
- res= init_dynamic_array2(&hash->array, sizeof(HASH_LINK), NULL, size,
+ res= init_dynamic_array2(psi_key, &hash->array, sizeof(HASH_LINK), NULL, size,
growth_size, MYF((flags & HASH_THREAD_SPECIFIC ?
MY_THREAD_SPECIFIC : 0)));
DBUG_RETURN(res);
@@ -889,7 +889,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
DBUG_PUSH("d:t:O,/tmp/test_hash.trace");
printf("my_hash_init\n");
- if (my_hash_init2(&hash_test, 100, &my_charset_bin, 20,
+ if (my_hash_init2(PSI_INSTRUMENT_ME, &hash_test, 100, &my_charset_bin, 20,
0, 0, (my_hash_get_key) test_get_key, 0, 0, HASH_UNIQUE))
{
fprintf(stderr, "hash init failed\n");
diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c
index b98684556c3..86464b3eaeb 100644
--- a/mysys/lf_alloc-pin.c
+++ b/mysys/lf_alloc-pin.c
@@ -99,8 +99,7 @@
between THD's (LF_PINS::stack_ends_here being a primary reason
for this limitation).
*/
-#include <my_global.h>
-#include <my_sys.h>
+#include "mysys_priv.h"
#include <lf.h>
/*
@@ -500,7 +499,8 @@ void *lf_alloc_new(LF_PINS *pins)
} while (node != allocator->top && LF_BACKOFF());
if (!node)
{
- node= (void *)my_malloc(allocator->element_size, MYF(MY_WME));
+ node= (void *)my_malloc(key_memory_lf_node, allocator->element_size,
+ MYF(MY_WME));
if (allocator->constructor)
allocator->constructor(node);
#ifdef MY_LF_EXTRA_DEBUG
diff --git a/mysys/lf_dynarray.c b/mysys/lf_dynarray.c
index be23690c70b..6a4ea3d3d96 100644
--- a/mysys/lf_dynarray.c
+++ b/mysys/lf_dynarray.c
@@ -35,9 +35,8 @@
Actually, it's wait-free, not lock-free ;-)
*/
-#include <my_global.h>
+#include "mysys_priv.h"
#include <m_string.h>
-#include <my_sys.h>
#include <lf.h>
void lf_dynarray_init(LF_DYNARRAY *array, uint element_size)
@@ -106,8 +105,8 @@ void *lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx)
{
if (!(ptr= *ptr_ptr))
{
- void *alloc= my_malloc(LF_DYNARRAY_LEVEL_LENGTH * sizeof(void *),
- MYF(MY_WME|MY_ZEROFILL));
+ void *alloc= my_malloc(key_memory_lf_dynarray, LF_DYNARRAY_LEVEL_LENGTH *
+ sizeof(void *), MYF(MY_WME|MY_ZEROFILL));
if (unlikely(!alloc))
return(NULL);
if (my_atomic_casptr(ptr_ptr, &ptr, alloc))
@@ -121,9 +120,10 @@ void *lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx)
if (!(ptr= *ptr_ptr))
{
uchar *alloc, *data;
- alloc= my_malloc(LF_DYNARRAY_LEVEL_LENGTH * array->size_of_element +
- MY_MAX(array->size_of_element, sizeof(void *)),
- MYF(MY_WME|MY_ZEROFILL));
+ alloc= my_malloc(key_memory_lf_dynarray,
+ LF_DYNARRAY_LEVEL_LENGTH * array->size_of_element +
+ MY_MAX(array->size_of_element, sizeof(void *)),
+ MYF(MY_WME|MY_ZEROFILL));
if (unlikely(!alloc))
return(NULL);
/* reserve the space for free() address */
diff --git a/mysys/lf_hash.c b/mysys/lf_hash.c
index 73b9f874598..6a1e69f529f 100644
--- a/mysys/lf_hash.c
+++ b/mysys/lf_hash.c
@@ -22,9 +22,8 @@
for non-unique hash, count only _distinct_ values
(but how to do it in lf_hash_delete ?)
*/
-#include <my_global.h>
+#include "mysys_priv.h"
#include <m_string.h>
-#include <my_sys.h>
#include <mysys_err.h>
#include <my_bit.h>
#include <lf.h>
@@ -543,7 +542,8 @@ static int initialize_bucket(LF_HASH *hash, LF_SLIST * volatile *node,
uint bucket, LF_PINS *pins)
{
uint parent= my_clear_highest_bit(bucket);
- LF_SLIST *dummy= (LF_SLIST *)my_malloc(sizeof(LF_SLIST), MYF(MY_WME));
+ LF_SLIST *dummy= (LF_SLIST *)my_malloc(key_memory_lf_slist,
+ sizeof(LF_SLIST), MYF(MY_WME));
LF_SLIST **tmp= 0, *cur;
LF_SLIST * volatile *el= lf_dynarray_lvalue(&hash->array, parent);
if (unlikely(!el || !dummy))
diff --git a/mysys/list.c b/mysys/list.c
index 10dfd7ec6ef..1770b201dd4 100644
--- a/mysys/list.c
+++ b/mysys/list.c
@@ -70,7 +70,7 @@ void list_free(LIST *root, uint free_data)
LIST *list_cons(void *data, LIST *list)
{
- LIST *new_charset=(LIST*) my_malloc(sizeof(LIST),MYF(MY_FAE));
+ LIST *new_charset=(LIST*) my_malloc(key_memory_LIST, sizeof(LIST),MYF(MY_FAE));
if (!new_charset)
return 0;
new_charset->data=data;
diff --git a/mysys/ma_dyncol.c b/mysys/ma_dyncol.c
index 0085c375aa1..b3d3777d922 100644
--- a/mysys/ma_dyncol.c
+++ b/mysys/ma_dyncol.c
@@ -2417,8 +2417,8 @@ dynamic_column_list(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_uint)
str->length)
return ER_DYNCOL_FORMAT;
- if (my_init_dynamic_array(array_of_uint, sizeof(uint), header.column_count,
- 0, MYF(0)))
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, array_of_uint,
+ sizeof(uint), header.column_count, 0, MYF(0)))
return ER_DYNCOL_RESOURCE;
for (i= 0, read= header.header;
@@ -2463,7 +2463,7 @@ mariadb_dyncol_list_num(DYNAMIC_COLUMN *str, uint *count, uint **nums)
str->length)
return ER_DYNCOL_FORMAT;
- if (!((*nums)= my_malloc(sizeof(uint) * header.column_count, MYF(0))))
+ if (!((*nums)= my_malloc(PSI_INSTRUMENT_ME, sizeof(uint) * header.column_count, MYF(0))))
return ER_DYNCOL_RESOURCE;
for (i= 0, read= header.header;
@@ -2510,12 +2510,17 @@ mariadb_dyncol_list_named(DYNAMIC_COLUMN *str, uint *count, LEX_STRING **names)
str->length)
return ER_DYNCOL_FORMAT;
- if (header.format == dyncol_fmt_num)
- *names= my_malloc(sizeof(LEX_STRING) * header.column_count +
- DYNCOL_NUM_CHAR * header.column_count, MYF(0));
- else
- *names= my_malloc(sizeof(LEX_STRING) * header.column_count +
- header.nmpool_size + header.column_count, MYF(0));
+ {
+ size_t size;
+ if (header.format == dyncol_fmt_num)
+ size= DYNCOL_NUM_CHAR * header.column_count;
+ else
+ size= header.nmpool_size + header.column_count;
+
+ *names= my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(LEX_STRING) * header.column_count + size, MYF(0));
+ }
+
if (!(*names))
return ER_DYNCOL_RESOURCE;
pool= ((char *)(*names)) + sizeof(LEX_STRING) * header.column_count;
@@ -3327,7 +3332,8 @@ dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
if (IN_PLACE_PLAN > add_column_count)
plan= in_place_plan;
else if (!(alloc_plan= plan=
- my_malloc(sizeof(PLAN) * (add_column_count + 1), MYF(0))))
+ my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(PLAN) * (add_column_count + 1), MYF(0))))
return ER_DYNCOL_RESOURCE;
not_null= add_column_count;
@@ -3923,12 +3929,10 @@ mariadb_dyncol_val_str(DYNAMIC_STRING *str, DYNAMIC_COLUMN_VALUE *val,
&dummy_errors);
return ER_DYNCOL_OK;
}
- if ((alloc= (char *)my_malloc(bufflen, MYF(0))))
+ if ((alloc= (char *)my_malloc(PSI_INSTRUMENT_ME, bufflen, MYF(0))))
{
- len= my_convert(alloc, bufflen, cs,
- from, (uint32)len,
- val->x.string.charset,
- &dummy_errors);
+ len= my_convert(alloc, bufflen, cs, from, (uint32)len,
+ val->x.string.charset, &dummy_errors);
from= alloc;
}
else
@@ -4300,16 +4304,19 @@ mariadb_dyncol_unpack(DYNAMIC_COLUMN *str,
str->length)
return ER_DYNCOL_FORMAT;
- *vals= my_malloc(sizeof(DYNAMIC_COLUMN_VALUE)* header.column_count, MYF(0));
+ *vals= my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(DYNAMIC_COLUMN_VALUE)* header.column_count, MYF(0));
if (header.format == dyncol_fmt_num)
{
- *names= my_malloc(sizeof(LEX_STRING) * header.column_count +
+ *names= my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(LEX_STRING) * header.column_count +
DYNCOL_NUM_CHAR * header.column_count, MYF(0));
nm= (char *)((*names) + header.column_count);
}
else
{
- *names= my_malloc(sizeof(LEX_STRING) * header.column_count, MYF(0));
+ *names= my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(LEX_STRING) * header.column_count, MYF(0));
nm= 0;
}
if (!(*vals) || !(*names))
diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c
index 54b89007b4c..b3aa494a58c 100644
--- a/mysys/mf_iocache.c
+++ b/mysys/mf_iocache.c
@@ -55,6 +55,9 @@ TODO:
static void my_aiowait(my_aio_result *result);
#endif
#include <errno.h>
+#include "mysql/psi/mysql_file.h"
+
+PSI_file_key key_file_io_cache;
#define lock_append_buffer(info) \
mysql_mutex_lock(&(info)->append_buffer_lock)
@@ -131,7 +134,7 @@ init_functions(IO_CACHE* info)
Initialize an IO_CACHE object
SYNOPSOS
- init_io_cache()
+ init_io_cache_ext()
info cache handler to initialize
file File that should be associated to to the handler
If == -1 then real_open_cached_file()
@@ -144,20 +147,22 @@ init_functions(IO_CACHE* info)
cache_myflags Bitmap of different flags
MY_WME | MY_FAE | MY_NABP | MY_FNABP |
MY_DONT_CHECK_FILESIZE
+ file_key Instrumented file key for temporary cache file
RETURN
0 ok
# error
*/
-int init_io_cache(IO_CACHE *info, File file, size_t cachesize,
- enum cache_type type, my_off_t seek_offset,
- my_bool use_async_io, myf cache_myflags)
+int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize,
+ enum cache_type type, my_off_t seek_offset,
+ pbool use_async_io, myf cache_myflags,
+ PSI_file_key file_key)
{
size_t min_cache;
my_off_t pos;
my_off_t end_of_file= ~(my_off_t) 0;
- DBUG_ENTER("init_io_cache");
+ DBUG_ENTER("init_io_cache_ext");
DBUG_PRINT("enter",("cache:%p type: %d pos: %llu",
info, (int) type, (ulonglong) seek_offset));
@@ -244,7 +249,7 @@ int init_io_cache(IO_CACHE *info, File file, size_t cachesize,
if (cachesize == min_cache)
flags|= (myf) MY_WME;
- if ((info->buffer= (uchar*) my_malloc(buffer_block, flags)) != 0)
+ if ((info->buffer= (uchar*) my_malloc(key_memory_IO_CACHE, buffer_block, flags)) != 0)
{
if (type == SEQ_READ_APPEND)
info->write_buffer= info->buffer + cachesize;
@@ -260,7 +265,7 @@ int init_io_cache(IO_CACHE *info, File file, size_t cachesize,
}
}
- DBUG_PRINT("info",("init_io_cache: cachesize = %lu", (ulong) cachesize));
+ DBUG_PRINT("info",("init_io_cache_ext: cachesize = %lu", (ulong) cachesize));
info->read_length=info->buffer_length=cachesize;
info->myflags=cache_myflags & ~(MY_NABP | MY_FNABP);
info->request_pos= info->read_pos= info->write_pos = info->buffer;
@@ -301,9 +306,15 @@ int init_io_cache(IO_CACHE *info, File file, size_t cachesize,
info->inited=info->aio_result.pending=0;
#endif
DBUG_RETURN(0);
-} /* init_io_cache */
-
+}
+int init_io_cache(IO_CACHE *info, File file, size_t cachesize,
+ enum cache_type type, my_off_t seek_offset,
+ my_bool use_async_io, myf cache_myflags)
+{
+ return init_io_cache_ext(info, file, cachesize, type, seek_offset,
+ use_async_io, cache_myflags, key_file_io_cache);
+}
/*
Initialize the slave IO_CACHE to read the same file (and data)
@@ -324,7 +335,7 @@ int init_slave_io_cache(IO_CACHE *master, IO_CACHE *slave)
DBUG_ASSERT(!master->share);
DBUG_ASSERT(master->alloced_buffer);
- if (!(slave_buf= (uchar*)my_malloc(master->buffer_length, MYF(0))))
+ if (!(slave_buf= (uchar*)my_malloc(PSI_INSTRUMENT_ME, master->buffer_length, MYF(0))))
{
return 1;
}
diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c
index 07dd8f3e1ef..94b720b1006 100644
--- a/mysys/mf_keycache.c
+++ b/mysys/mf_keycache.c
@@ -554,7 +554,7 @@ int init_simple_key_cache(SIMPLE_KEY_CACHE_CB *keycache,
Allocate memory for blocks, hash_links and hash entries;
For each block 2 hash links are allocated
*/
- if (my_multi_malloc_large(MYF(MY_ZEROFILL),
+ if (my_multi_malloc_large(key_memory_KEY_CACHE, MYF(MY_ZEROFILL),
&keycache->block_root,
(ulonglong) (blocks * sizeof(BLOCK_LINK)),
&keycache->hash_root,
@@ -3949,8 +3949,8 @@ static int flush_key_blocks_int(SIMPLE_KEY_CACHE_CB *keycache,
changed blocks appear while we need to wait for something.
*/
if ((count > FLUSH_CACHE) &&
- !(cache= (BLOCK_LINK**) my_malloc(sizeof(BLOCK_LINK*)*count,
- MYF(0))))
+ !(cache= (BLOCK_LINK**) my_malloc(key_memory_KEY_CACHE,
+ sizeof(BLOCK_LINK*)*count, MYF(0))))
cache= cache_buff;
/*
After a restart there could be more changed blocks than now.
@@ -5113,7 +5113,8 @@ int init_partitioned_key_cache(PARTITIONED_KEY_CACHE_CB *keycache,
else
{
if(!(partition_ptr=
- (SIMPLE_KEY_CACHE_CB **) my_malloc(sizeof(SIMPLE_KEY_CACHE_CB *) *
+ (SIMPLE_KEY_CACHE_CB **) my_malloc(key_memory_KEY_CACHE,
+ sizeof(SIMPLE_KEY_CACHE_CB *) *
partitions, MYF(MY_WME))))
DBUG_RETURN(-1);
bzero(partition_ptr, sizeof(SIMPLE_KEY_CACHE_CB *) * partitions);
@@ -5131,7 +5132,8 @@ int init_partitioned_key_cache(PARTITIONED_KEY_CACHE_CB *keycache,
else
{
if (!(partition=
- (SIMPLE_KEY_CACHE_CB *) my_malloc(sizeof(SIMPLE_KEY_CACHE_CB),
+ (SIMPLE_KEY_CACHE_CB *) my_malloc(key_memory_KEY_CACHE,
+ sizeof(SIMPLE_KEY_CACHE_CB),
MYF(MY_WME))))
continue;
partition->key_cache_inited= 0;
@@ -5909,7 +5911,8 @@ int init_key_cache_internal(KEY_CACHE *keycache, uint key_cache_block_size,
{
if (partitions == 0)
{
- if (!(keycache_cb= (void *) my_malloc(sizeof(SIMPLE_KEY_CACHE_CB),
+ if (!(keycache_cb= (void *) my_malloc(key_memory_KEY_CACHE,
+ sizeof(SIMPLE_KEY_CACHE_CB),
MYF(0))))
return 0;
((SIMPLE_KEY_CACHE_CB *) keycache_cb)->key_cache_inited= 0;
@@ -5918,7 +5921,8 @@ int init_key_cache_internal(KEY_CACHE *keycache, uint key_cache_block_size,
}
else
{
- if (!(keycache_cb= (void *) my_malloc(sizeof(PARTITIONED_KEY_CACHE_CB),
+ if (!(keycache_cb= (void *) my_malloc(key_memory_KEY_CACHE,
+ sizeof(PARTITIONED_KEY_CACHE_CB),
MYF(0))))
return 0;
((PARTITIONED_KEY_CACHE_CB *) keycache_cb)->key_cache_inited= 0;
diff --git a/mysys/mf_sort.c b/mysys/mf_sort.c
index 3cbad020cb1..24e875b813e 100644
--- a/mysys/mf_sort.c
+++ b/mysys/mf_sort.c
@@ -24,7 +24,8 @@ void my_string_ptr_sort(uchar *base, uint items, size_t size)
uchar **ptr=0;
if (radixsort_is_appliccable(items, size) &&
- (ptr= (uchar**) my_malloc(items*sizeof(char*),MYF(0))))
+ (ptr= (uchar**) my_malloc(PSI_NOT_INSTRUMENTED,
+ items * sizeof(char*),MYF(0))))
{
radixsort_for_str_ptr((uchar**) base,items,size,ptr);
my_free(ptr);
diff --git a/mysys/mf_tempdir.c b/mysys/mf_tempdir.c
index 39de3570fad..d09b307c4c7 100644
--- a/mysys/mf_tempdir.c
+++ b/mysys/mf_tempdir.c
@@ -30,7 +30,8 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist)
DBUG_PRINT("enter", ("pathlist: %s", pathlist ? pathlist : "NULL"));
mysql_mutex_init(key_TMPDIR_mutex, &tmpdir->mutex, MY_MUTEX_INIT_FAST);
- if (my_init_dynamic_array(&tmpdir->full_list, sizeof(char*), 1, 5, MYF(0)))
+ if (my_init_dynamic_array(key_memory_MY_TMPDIR_full_list, &tmpdir->full_list,
+ sizeof(char*), 1, 5, MYF(0)))
goto err;
if (!pathlist || !pathlist[0])
{
@@ -51,7 +52,7 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist)
end=strcend(pathlist, DELIM);
strmake(buff, pathlist, (uint) (end-pathlist));
length= cleanup_dirname(buff, buff);
- if (!(copy= my_strndup(buff, length, MYF(MY_WME))) ||
+ if (!(copy= my_strndup(key_memory_MY_TMPDIR_full_list, buff, length, MYF(MY_WME))) ||
insert_dynamic(&tmpdir->full_list, (uchar*) &copy))
DBUG_RETURN(TRUE);
pathlist=end+1;
diff --git a/mysys/mulalloc.c b/mysys/mulalloc.c
index 26f8253bc87..357f9315f2b 100644
--- a/mysys/mulalloc.c
+++ b/mysys/mulalloc.c
@@ -32,7 +32,7 @@
NULL
*/
-void* my_multi_malloc(myf myFlags, ...)
+void* my_multi_malloc(PSI_memory_key key, myf myFlags, ...)
{
va_list args;
char **ptr,*start,*res;
@@ -48,7 +48,7 @@ void* my_multi_malloc(myf myFlags, ...)
}
va_end(args);
- if (!(start=(char *) my_malloc(tot_length,myFlags)))
+ if (!(start=(char *) my_malloc(key, tot_length,myFlags)))
DBUG_RETURN(0); /* purecov: inspected */
va_start(args,myFlags);
@@ -76,7 +76,7 @@ void* my_multi_malloc(myf myFlags, ...)
NULL
*/
-void *my_multi_malloc_large(myf myFlags, ...)
+void *my_multi_malloc_large(PSI_memory_key key, myf myFlags, ...)
{
va_list args;
char **ptr,*start,*res;
@@ -92,7 +92,7 @@ void *my_multi_malloc_large(myf myFlags, ...)
}
va_end(args);
- if (!(start=(char *) my_malloc((size_t) tot_length, myFlags)))
+ if (!(start=(char *) my_malloc(key, (size_t) tot_length, myFlags)))
DBUG_RETURN(0); /* purecov: inspected */
va_start(args,myFlags);
diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c
index 79e4ba9d563..f5537885227 100644
--- a/mysys/my_alloc.c
+++ b/mysys/my_alloc.c
@@ -54,35 +54,32 @@
Because of this, we store in MY_THREAD_SPECIFIC as bit 1 in block_size
*/
-void init_alloc_root(MEM_ROOT *mem_root, const char *name, size_t block_size,
+void init_alloc_root(PSI_memory_key key, MEM_ROOT *mem_root, size_t block_size,
size_t pre_alloc_size __attribute__((unused)),
myf my_flags)
{
DBUG_ENTER("init_alloc_root");
- DBUG_PRINT("enter",("root: %p name: %s prealloc: %zu", mem_root,
- name, pre_alloc_size));
+ DBUG_PRINT("enter",("root: %p prealloc: %zu", mem_root, pre_alloc_size));
mem_root->free= mem_root->used= mem_root->pre_alloc= 0;
mem_root->min_malloc= 32;
mem_root->block_size= (block_size - ALLOC_ROOT_MIN_BLOCK_SIZE) & ~1;
- if (MY_TEST(my_flags & MY_THREAD_SPECIFIC))
+ if (my_flags & MY_THREAD_SPECIFIC)
mem_root->block_size|= 1;
mem_root->error_handler= 0;
mem_root->block_num= 4; /* We shift this with >>2 */
mem_root->first_block_usage= 0;
- mem_root->total_alloc= 0;
- mem_root->name= name;
+ mem_root->m_psi_key= key;
#if !(defined(HAVE_valgrind) && defined(EXTRA_DEBUG))
if (pre_alloc_size)
{
+ size_t size= pre_alloc_size + ALIGN_SIZE(sizeof(USED_MEM));
if ((mem_root->free= mem_root->pre_alloc=
- (USED_MEM*) my_malloc(pre_alloc_size + ALIGN_SIZE(sizeof(USED_MEM)),
- MYF(my_flags))))
+ (USED_MEM*) my_malloc(key, size, MYF(my_flags))))
{
- mem_root->free->size= pre_alloc_size+ALIGN_SIZE(sizeof(USED_MEM));
- mem_root->total_alloc= pre_alloc_size+ALIGN_SIZE(sizeof(USED_MEM));
+ mem_root->free->size= size;
mem_root->free->left= pre_alloc_size;
mem_root->free->next= 0;
TRASH_MEM(mem_root->free);
@@ -141,19 +138,17 @@ void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size,
{
/* remove block from the list and free it */
*prev= mem->next;
- mem_root->total_alloc-= mem->size;
my_free(mem);
}
else
prev= &mem->next;
}
/* Allocate new prealloc block and add it to the end of free list */
- if ((mem= (USED_MEM *) my_malloc(size,
+ if ((mem= (USED_MEM *) my_malloc(mem_root->m_psi_key, size,
MYF(MALLOC_FLAG(mem_root->
block_size)))))
{
mem->size= size;
- mem_root->total_alloc+= size;
mem->left= pre_alloc_size;
mem->next= *prev;
*prev= mem_root->pre_alloc= mem;
@@ -178,7 +173,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
#if defined(HAVE_valgrind) && defined(EXTRA_DEBUG)
reg1 USED_MEM *next;
DBUG_ENTER("alloc_root");
- DBUG_PRINT("enter",("root: %p name: %s", mem_root, mem_root->name));
+ DBUG_PRINT("enter",("root: %p name: %s", mem_root, root_name(mem_root)));
DBUG_ASSERT(alloc_root_inited(mem_root));
@@ -191,7 +186,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
});
length+=ALIGN_SIZE(sizeof(USED_MEM));
- if (!(next = (USED_MEM*) my_malloc(length,
+ if (!(next = (USED_MEM*) my_malloc(mem_root->m_psi_key, length,
MYF(MY_WME | ME_FATAL |
MALLOC_FLAG(mem_root->block_size)))))
{
@@ -203,10 +198,8 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
next->left= 0;
next->size= length;
mem_root->used= next;
- mem_root->total_alloc+= length;
- DBUG_PRINT("exit",("ptr: %p", (((char*) next)+
- ALIGN_SIZE(sizeof(USED_MEM)))));
- DBUG_RETURN((uchar*) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM))));
+ DBUG_PRINT("exit",("ptr: %p", (((char*)next)+ALIGN_SIZE(sizeof(USED_MEM)))));
+ DBUG_RETURN((((uchar*) next)+ALIGN_SIZE(sizeof(USED_MEM))));
#else
size_t get_size, block_size;
uchar* point;
@@ -214,7 +207,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
reg2 USED_MEM **prev;
size_t original_length = length;
DBUG_ENTER("alloc_root");
- DBUG_PRINT("enter",("root: %p name: %s", mem_root, mem_root->name));
+ DBUG_PRINT("enter",("root: %p name: %s", mem_root, root_name(mem_root)));
DBUG_ASSERT(alloc_root_inited(mem_root));
DBUG_EXECUTE_IF("simulate_out_of_memory",
@@ -247,7 +240,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
get_size= length+ALIGN_SIZE(sizeof(USED_MEM));
get_size= MY_MAX(get_size, block_size);
- if (!(next = (USED_MEM*) my_malloc(get_size,
+ if (!(next = (USED_MEM*) my_malloc(mem_root->m_psi_key, get_size,
MYF(MY_WME | ME_FATAL |
MALLOC_FLAG(mem_root->
block_size)))))
@@ -257,7 +250,6 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
DBUG_RETURN((void*) 0); /* purecov: inspected */
}
mem_root->block_num++;
- mem_root->total_alloc+= get_size;
next->next= *prev;
next->size= get_size;
next->left= get_size-ALIGN_SIZE(sizeof(USED_MEM));
@@ -394,7 +386,7 @@ void free_root(MEM_ROOT *root, myf MyFlags)
{
reg1 USED_MEM *next,*old;
DBUG_ENTER("free_root");
- DBUG_PRINT("enter",("root: %p name: %s flags: %u", root, root->name,
+ DBUG_PRINT("enter",("root: %p name: %s flags: %u", root, root_name(root),
(uint) MyFlags));
#if !(defined(HAVE_valgrind) && defined(EXTRA_DEBUG))
@@ -415,19 +407,13 @@ void free_root(MEM_ROOT *root, myf MyFlags)
{
old=next; next= next->next ;
if (old != root->pre_alloc)
- {
- root->total_alloc-= old->size;
my_free(old);
- }
}
for (next=root->free ; next ;)
{
old=next; next= next->next;
if (old != root->pre_alloc)
- {
- root->total_alloc-= old->size;
my_free(old);
- }
}
root->used=root->free=0;
if (root->pre_alloc)
diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c
index 8059b909788..b671d87a933 100644
--- a/mysys/my_bitmap.c
+++ b/mysys/my_bitmap.c
@@ -173,7 +173,8 @@ my_bool my_bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,
size_in_bytes= ALIGN_SIZE(size_in_bytes);
extra= sizeof(mysql_mutex_t);
}
- if (!(buf= (my_bitmap_map*) my_malloc(size_in_bytes+extra, MYF(MY_WME))))
+ if (!(buf= (my_bitmap_map*) my_malloc(key_memory_MY_BITMAP_bitmap,
+ size_in_bytes+extra, MYF(MY_WME))))
DBUG_RETURN(1);
if (thread_safe)
{
diff --git a/mysys/my_compress.c b/mysys/my_compress.c
index 7cd85d57dd8..11603e7ba24 100644
--- a/mysys/my_compress.c
+++ b/mysys/my_compress.c
@@ -15,7 +15,7 @@
/* Written by Sinisa Milivojevic <sinisa@mysql.com> */
-#include <my_global.h>
+#include <mysys_priv.h>
#ifdef HAVE_COMPRESS
#include <my_sys.h>
#ifndef SCO
@@ -84,7 +84,8 @@ my_bool my_compress(uchar *packet, size_t *len, size_t *complen)
void *my_az_allocator(void *dummy __attribute__((unused)), unsigned int items,
unsigned int size)
{
- return my_malloc((size_t)items*(size_t)size, IF_VALGRIND(MY_ZEROFILL, MYF(0)));
+ return my_malloc(key_memory_my_compress_alloc, (size_t)items*(size_t)size,
+ IF_VALGRIND(MY_ZEROFILL, MYF(0)));
}
void my_az_free(void *dummy __attribute__((unused)), void *address)
@@ -133,8 +134,9 @@ uchar *my_compress_alloc(const uchar *packet, size_t *len, size_t *complen)
int res;
*complen= *len * 120 / 100 + 12;
- if (!(compbuf= (uchar *) my_malloc(*complen, MYF(MY_WME))))
- return 0; /* Not enough memory */
+ if (!(compbuf= (uchar *) my_malloc(key_memory_my_compress_alloc,
+ *complen, MYF(MY_WME))))
+ return 0;
res= my_compress_buffer(compbuf, complen, packet, *len);
@@ -180,7 +182,8 @@ my_bool my_uncompress(uchar *packet, size_t len, size_t *complen)
if (*complen) /* If compressed */
{
- uchar *compbuf= (uchar *) my_malloc(*complen,MYF(MY_WME));
+ uchar *compbuf= (uchar *) my_malloc(key_memory_my_compress_alloc,
+ *complen,MYF(MY_WME));
int error;
if (!compbuf)
DBUG_RETURN(1); /* Not enough memory */
diff --git a/mysys/my_default.c b/mysys/my_default.c
index 30c76c7f5ed..b78de1d9f61 100644
--- a/mysys/my_default.c
+++ b/mysys/my_default.c
@@ -410,13 +410,14 @@ int my_load_defaults(const char *conf_file, const char **groups, int *argc,
const char **dirs;
DBUG_ENTER("my_load_defaults");
- init_alloc_root(&alloc, "my_load_defaults", 512, 0, MYF(0));
+ init_alloc_root(key_memory_defaults, &alloc, 512, 0, MYF(0));
if ((dirs= init_default_directories(&alloc)) == NULL)
goto err;
args_used= get_defaults_options(*argv);
- if (my_init_dynamic_array(&args, sizeof(char*), 128, 64, MYF(0)))
+ if (my_init_dynamic_array(key_memory_defaults, &args, sizeof(char*), 128, 64,
+ MYF(0)))
goto err;
insert_dynamic(&args, *argv);/* Name MUST be set, even by embedded library */
@@ -879,7 +880,7 @@ void my_print_default_files(const char *conf_file)
{
const char **dirs;
MEM_ROOT alloc;
- init_alloc_root(&alloc, "my_print_defaults", 512, 0, MYF(0));
+ init_alloc_root(key_memory_defaults, &alloc, 512, 0, MYF(0));
if ((dirs= init_default_directories(&alloc)) == NULL)
{
diff --git a/mysys/my_error.c b/mysys/my_error.c
index cb1fbfe1c04..4c3cd1435ac 100644
--- a/mysys/my_error.c
+++ b/mysys/my_error.c
@@ -224,7 +224,8 @@ int my_error_register(const char** (*get_errmsgs)(int error), uint first,
struct my_err_head **search_meh_pp;
/* Allocate a new header structure. */
- if (! (meh_p= (struct my_err_head*) my_malloc(sizeof(struct my_err_head),
+ if (! (meh_p= (struct my_err_head*) my_malloc(key_memory_my_err_head,
+ sizeof(struct my_err_head),
MYF(MY_WME))))
return 1;
meh_p->get_errmsgs= get_errmsgs;
diff --git a/mysys/my_file.c b/mysys/my_file.c
index 17b2493962a..c2b358f5e1e 100644
--- a/mysys/my_file.c
+++ b/mysys/my_file.c
@@ -102,7 +102,8 @@ uint my_set_max_open_files(uint files)
if (files <= MY_NFILE)
DBUG_RETURN(files);
- if (!(tmp= (struct st_my_file_info*) my_malloc(sizeof(*tmp) * files,
+ if (!(tmp= (struct st_my_file_info*) my_malloc(key_memory_my_file_info,
+ sizeof(*tmp) * files,
MYF(MY_WME))))
DBUG_RETURN(MY_NFILE);
diff --git a/mysys/my_fopen.c b/mysys/my_fopen.c
index ea13dfb6ee4..e7a94da5040 100644
--- a/mysys/my_fopen.c
+++ b/mysys/my_fopen.c
@@ -64,7 +64,7 @@ FILE *my_fopen(const char *filename, int flags, myf MyFlags)
statistic_increment(my_stream_opened,&THR_LOCK_open);
DBUG_RETURN(fd); /* safeguard */
}
- my_file_info[filedesc].name= (char*) my_strdup(filename,MyFlags);
+ my_file_info[filedesc].name= my_strdup(key_memory_my_file_info, filename, MyFlags);
statistic_increment(my_stream_opened, &THR_LOCK_open);
statistic_increment(my_file_total_opened, &THR_LOCK_open);
my_file_info[filedesc].type= STREAM_BY_FOPEN;
@@ -226,9 +226,10 @@ FILE *my_fdopen(File Filedes, const char *name, int Flags, myf MyFlags)
}
else
{
- my_file_info[Filedes].name= my_strdup(name,MyFlags);
+ my_file_info[Filedes].name= my_strdup(key_memory_my_file_info,
+ name, MyFlags);
}
- my_file_info[Filedes].type = STREAM_BY_FDOPEN;
+ my_file_info[Filedes].type= STREAM_BY_FDOPEN;
}
}
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c
index 9ebf63bf6ef..5576c8b5d5d 100644
--- a/mysys/my_getopt.c
+++ b/mysys/my_getopt.c
@@ -15,11 +15,10 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
-#include <my_global.h>
+#include <mysys_priv.h>
#include <my_default.h>
#include <m_string.h>
#include <stdlib.h>
-#include <my_sys.h>
#include <mysys_err.h>
#include <my_getopt.h>
#include <errno.h>
@@ -754,7 +753,8 @@ static int setval(const struct my_option *opts, void *value, char *argument,
break;
case GET_STR_ALLOC:
my_free(*((char**) value));
- if (!(*((char**) value)= my_strdup(argument == enabled_my_option ? "" :
+ if (!(*((char**) value)= my_strdup(key_memory_defaults,
+ argument == enabled_my_option ? "" :
argument, MYF(MY_WME))))
{
res= EXIT_OUT_OF_MEMORY;
@@ -1343,7 +1343,7 @@ static void init_one_value(const struct my_option *option, void *variable,
{
char **pstr= (char **) variable;
my_free(*pstr);
- *pstr= my_strdup((char*) (intptr) value, MYF(MY_WME));
+ *pstr= my_strdup(key_memory_defaults, (char*) (intptr) value, MYF(MY_WME));
}
break;
default: /* dummy default to avoid compiler warnings */
diff --git a/mysys/my_lib.c b/mysys/my_lib.c
index 8715c4a3333..32fb35fd65b 100644
--- a/mysys/my_lib.c
+++ b/mysys/my_lib.c
@@ -124,16 +124,17 @@ MY_DIR *my_dir(const char *path, myf MyFlags)
if (!(dirp= opendir(tmp_path)))
goto error;
- if (!(dirh= my_malloc(sizeof(*dirh), MyFlags | MY_ZEROFILL)))
+ if (!(dirh= my_malloc(key_memory_MY_DIR, sizeof(*dirh),
+ MYF(MyFlags | MY_ZEROFILL))))
goto error;
- if (my_init_dynamic_array(&dirh->array, sizeof(FILEINFO),
+ if (my_init_dynamic_array(key_memory_MY_DIR, &dirh->array, sizeof(FILEINFO),
ENTRIES_START_SIZE, ENTRIES_INCREMENT,
MYF(MyFlags)))
goto error;
- init_alloc_root(&dirh->root, "dir", NAMES_START_SIZE, NAMES_START_SIZE,
- MYF(MyFlags));
+ init_alloc_root(key_memory_MY_DIR, &dirh->root, NAMES_START_SIZE,
+ NAMES_START_SIZE, MYF(MyFlags));
dp= (struct dirent*) dirent_tmp;
@@ -227,15 +228,15 @@ MY_DIR *my_dir(const char *path, myf MyFlags)
tmp_file[2]='*';
tmp_file[3]='\0';
- if (!(dirh= my_malloc(sizeof(*dirh), MyFlags | MY_ZEROFILL)))
+ if (!(dirh= my_malloc(PSI_INSTRUMENT_ME, sizeof(*dirh), MyFlags | MY_ZEROFILL)))
goto error;
- if (my_init_dynamic_array(&dirh->array, sizeof(FILEINFO),
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &dirh->array, sizeof(FILEINFO),
ENTRIES_START_SIZE, ENTRIES_INCREMENT,
MYF(MyFlags)))
goto error;
- init_alloc_root(&dirh->root, "dir", NAMES_START_SIZE, NAMES_START_SIZE,
+ init_alloc_root(PSI_INSTRUMENT_ME, &dirh->root, NAMES_START_SIZE, NAMES_START_SIZE,
MYF(MyFlags));
if ((handle=_findfirst(tmp_path,&find)) == -1L)
@@ -341,7 +342,8 @@ MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags)
stat_area, my_flags));
if ((m_used= (stat_area == NULL)))
- if (!(stat_area= (MY_STAT *) my_malloc(sizeof(MY_STAT), my_flags)))
+ if (!(stat_area= (MY_STAT *) my_malloc(key_memory_MY_STAT, sizeof(MY_STAT),
+ my_flags)))
goto error;
#ifndef _WIN32
if (! stat((char *) path, (struct stat *) stat_area) )
diff --git a/mysys/my_likely.c b/mysys/my_likely.c
index c6fca5b7146..2ae587be18d 100644
--- a/mysys/my_likely.c
+++ b/mysys/my_likely.c
@@ -48,10 +48,9 @@ HASH likely_hash;
void init_my_likely()
{
/* Allocate big enough to avoid malloc calls */
- my_hash_init2(&likely_hash, 10000, &my_charset_bin,
- 1024, 0, 0,
- (my_hash_get_key) get_likely_key, 0,
- free, HASH_UNIQUE);
+ my_hash_init2(PSI_NOT_INSTRUMENTED, &likely_hash, 10000, &my_charset_bin,
+ 1024, 0, 0, (my_hash_get_key) get_likely_key, 0, free,
+ HASH_UNIQUE);
likely_inited= 1;
pthread_mutex_init(&likely_mutex, MY_MUTEX_INIT_FAST);
}
diff --git a/mysys/my_malloc.c b/mysys/my_malloc.c
index d54270a7f20..33880f023a9 100644
--- a/mysys/my_malloc.c
+++ b/mysys/my_malloc.c
@@ -19,35 +19,17 @@
#include "mysys_err.h"
#include <m_string.h>
-/* If we have our own safemalloc (for debugging) */
-#if defined(SAFEMALLOC)
-#define MALLOC_SIZE_AND_FLAG(p,b) sf_malloc_usable_size(p,b)
-#define MALLOC_PREFIX_SIZE 0
-#define MALLOC_STORE_SIZE(a,b,c,d)
-#define MALLOC_FIX_POINTER_FOR_FREE(a) a
-#else
-/*
- * We use double as prefix size as this guarantees the correct
- * alignment on all platforms and will optimize things for
- * memcpy(), memcmp() etc.
- */
-#define MALLOC_PREFIX_SIZE (sizeof(double))
-#define MALLOC_SIZE(p) (*(size_t*) ((char*)(p) - MALLOC_PREFIX_SIZE))
-#define MALLOC_STORE_SIZE(p, type_of_p, size, flag) \
-{\
- *(size_t*) p= (size) | (flag); \
- (p)= (type_of_p) (((char*) (p)) + MALLOC_PREFIX_SIZE); \
-}
-static inline size_t malloc_size_and_flag(void *p, my_bool *is_thread_specific)
+struct my_memory_header
{
- size_t size= MALLOC_SIZE(p);
- *is_thread_specific= (size & 1);
- return size & ~ (ulonglong) 1;
-}
-#define MALLOC_SIZE_AND_FLAG(p,b) malloc_size_and_flag(p, b);
-#define MALLOC_FIX_POINTER_FOR_FREE(p) (((char*) (p)) - MALLOC_PREFIX_SIZE)
-#endif /* SAFEMALLOC */
+ PSI_thread *m_owner;
+ size_t m_size;
+ PSI_memory_key m_key;
+};
+typedef struct my_memory_header my_memory_header;
+#define HEADER_SIZE 24
+#define USER_TO_HEADER(P) ((my_memory_header*)((char *)(P) - HEADER_SIZE))
+#define HEADER_TO_USER(P) ((char*)(P) + HEADER_SIZE)
/**
Inform application that memory usage has changed
@@ -82,12 +64,13 @@ void set_malloc_size_cb(MALLOC_SIZE_CB func)
@return A pointer to the allocated memory block, or NULL on failure.
*/
-void *my_malloc(size_t size, myf my_flags)
+void *my_malloc(PSI_memory_key key, size_t size, myf my_flags)
{
- void* point;
+ my_memory_header *mh;
+ void *point;
DBUG_ENTER("my_malloc");
- DBUG_PRINT("my",("size: %lu my_flags: %lu", (ulong) size, my_flags));
- compile_time_assert(sizeof(size_t) <= sizeof(double));
+ DBUG_PRINT("my",("size: %zu flags: %lu", size, my_flags));
+ compile_time_assert(sizeof(my_memory_header) <= HEADER_SIZE);
if (!(my_flags & (MY_WME | MY_FAE)))
my_flags|= my_global_flags;
@@ -96,11 +79,15 @@ void *my_malloc(size_t size, myf my_flags)
if (!size)
size=1;
- /* We have to align size to be able to store markers in it */
+ /* We have to align size as we store MY_THREAD_SPECIFIC flag in the LSB */
size= ALIGN_SIZE(size);
- point= sf_malloc(size + MALLOC_PREFIX_SIZE, my_flags);
- if (point == NULL)
+ if (DBUG_EVALUATE_IF("simulate_out_of_memory", 1, 0))
+ mh= NULL;
+ else
+ mh= (my_memory_header*) sf_malloc(size + HEADER_SIZE, my_flags);
+
+ if (mh == NULL)
{
my_errno=errno;
if (my_flags & MY_FAE)
@@ -109,22 +96,19 @@ void *my_malloc(size_t size, myf my_flags)
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_ERROR_LOG+ME_FATAL),size);
if (my_flags & MY_FAE)
abort();
+ point= NULL;
}
else
{
- MALLOC_STORE_SIZE(point, void*, size,
- MY_TEST(my_flags & MY_THREAD_SPECIFIC));
- update_malloc_size(size + MALLOC_PREFIX_SIZE,
- MY_TEST(my_flags & MY_THREAD_SPECIFIC));
- TRASH_ALLOC(point, size);
- DBUG_EXECUTE_IF("simulate_out_of_memory",
- {
- /* my_free() handles memory accounting */
- my_free(point);
- point= NULL;
- });
+ int flag= MY_TEST(my_flags & MY_THREAD_SPECIFIC);
+ mh->m_size= size | flag;
+ mh->m_key= PSI_CALL_memory_alloc(key, size, & mh->m_owner);
+ update_malloc_size(size + HEADER_SIZE, flag);
+ point= HEADER_TO_USER(mh);
if (my_flags & MY_ZEROFILL)
bzero(point, size);
+ else
+ TRASH_ALLOC(point, size);
}
DBUG_PRINT("exit",("ptr: %p", point));
DBUG_RETURN(point);
@@ -134,62 +118,57 @@ void *my_malloc(size_t size, myf my_flags)
/**
@brief wrapper around realloc()
- @param oldpoint pointer to currently allocated area
+ @param old_point pointer to currently allocated area
@param size new size requested, must be >0
@param my_flags flags
@note if size==0 realloc() may return NULL; my_realloc() treats this as an
error which is not the intention of realloc()
*/
-void *my_realloc(void *oldpoint, size_t size, myf my_flags)
+void *my_realloc(PSI_memory_key key, void *old_point, size_t size, myf my_flags)
{
+ my_memory_header *old_mh, *mh;
void *point;
size_t old_size;
my_bool old_flags;
DBUG_ENTER("my_realloc");
- DBUG_PRINT("my",("ptr: %p size: %lu my_flags: %lu", oldpoint,
- (ulong) size, my_flags));
+ DBUG_PRINT("my",("ptr: %p size: %zu flags: %lu", old_point, size, my_flags));
DBUG_ASSERT(size > 0);
- if (!oldpoint && (my_flags & MY_ALLOW_ZERO_PTR))
- DBUG_RETURN(my_malloc(size, my_flags));
+ if (!old_point && (my_flags & MY_ALLOW_ZERO_PTR))
+ DBUG_RETURN(my_malloc(key, size, my_flags));
+
+ old_mh= USER_TO_HEADER(old_point);
+ old_size= old_mh->m_size & ~1;
+ old_flags= old_mh->m_size & 1;
+
+ DBUG_ASSERT(old_mh->m_key == key || old_mh->m_key == PSI_NOT_INSTRUMENTED);
+ DBUG_ASSERT(old_flags == MY_TEST(my_flags & MY_THREAD_SPECIFIC));
size= ALIGN_SIZE(size);
- old_size= MALLOC_SIZE_AND_FLAG(oldpoint, &old_flags);
- /*
- Test that the new and old area are the same, if not MY_THREAD_MOVE is
- given
- */
- DBUG_ASSERT((MY_TEST(my_flags & MY_THREAD_SPECIFIC) == old_flags) ||
- (my_flags & MY_THREAD_MOVE));
- if ((point= sf_realloc(MALLOC_FIX_POINTER_FOR_FREE(oldpoint),
- size + MALLOC_PREFIX_SIZE, my_flags)) == NULL)
+ mh= sf_realloc(old_mh, size + HEADER_SIZE, my_flags);
+
+ if (mh == NULL)
{
+ if (size < old_size)
+ DBUG_RETURN(old_point);
+ my_errno=errno;
if (my_flags & MY_FREE_ON_ERROR)
{
/* my_free will take care of size accounting */
- my_free(oldpoint);
- oldpoint= 0;
+ my_free(old_point);
+ old_point= 0;
}
- if (my_flags & MY_HOLD_ON_ERROR)
- DBUG_RETURN(oldpoint);
- my_errno=errno;
if (my_flags & (MY_FAE+MY_WME))
my_error(EE_OUTOFMEMORY, MYF(ME_BELL + ME_FATAL), size);
+ point= NULL;
}
else
{
- MALLOC_STORE_SIZE(point, void*, size,
- MY_TEST(my_flags & MY_THREAD_SPECIFIC));
- if (MY_TEST(my_flags & MY_THREAD_SPECIFIC) != old_flags)
- {
- /* memory moved between system and thread specific */
- update_malloc_size(-(longlong) old_size - MALLOC_PREFIX_SIZE, old_flags);
- update_malloc_size((longlong) size + MALLOC_PREFIX_SIZE,
- MY_TEST(my_flags & MY_THREAD_SPECIFIC));
- }
- else
- update_malloc_size((longlong)size - (longlong)old_size, old_flags);
+ mh->m_size= size | old_flags;
+ mh->m_key= PSI_CALL_memory_realloc(key, old_size, size, & mh->m_owner);
+ update_malloc_size((longlong)size - (longlong)old_size, old_flags);
+ point= HEADER_TO_USER(mh);
}
DBUG_PRINT("exit",("ptr: %p", point));
@@ -204,56 +183,63 @@ void *my_realloc(void *oldpoint, size_t size, myf my_flags)
*/
void my_free(void *ptr)
{
+ my_memory_header *mh;
+ size_t old_size;
+ my_bool old_flags;
DBUG_ENTER("my_free");
DBUG_PRINT("my",("ptr: %p", ptr));
- if (ptr)
- {
- size_t old_size;
- my_bool old_flags;
- old_size= MALLOC_SIZE_AND_FLAG(ptr, &old_flags);
- update_malloc_size(- (longlong) old_size - MALLOC_PREFIX_SIZE, old_flags);
+
+ if (ptr == NULL)
+ DBUG_VOID_RETURN;
+
+ mh= USER_TO_HEADER(ptr);
+ old_size= mh->m_size & ~1;
+ old_flags= mh->m_size & 1;
+ PSI_CALL_memory_free(mh->m_key, old_size, mh->m_owner);
+
+ update_malloc_size(- (longlong) old_size - HEADER_SIZE, old_flags);
+
#ifndef SAFEMALLOC
- /*
- Trash memory if not safemalloc. We don't have to do this if safemalloc
- is used as safemalloc will also do trashing
- */
- TRASH_FREE(ptr, old_size);
+ /*
+ Trash memory if not safemalloc. We don't have to do this if safemalloc
+ is used as safemalloc will also do trashing
+ */
+ TRASH_FREE(ptr, old_size);
#endif
- sf_free(MALLOC_FIX_POINTER_FOR_FREE(ptr));
- }
+ sf_free(mh);
DBUG_VOID_RETURN;
}
-void *my_memdup(const void *from, size_t length, myf my_flags)
+void *my_memdup(PSI_memory_key key, const void *from, size_t length, myf my_flags)
{
void *ptr;
DBUG_ENTER("my_memdup");
- if ((ptr= my_malloc(length,my_flags)) != 0)
+ if ((ptr= my_malloc(key, length,my_flags)) != 0)
memcpy(ptr, from, length);
DBUG_RETURN(ptr);
}
-char *my_strdup(const char *from, myf my_flags)
+char *my_strdup(PSI_memory_key key, const char *from, myf my_flags)
{
char *ptr;
size_t length= strlen(from)+1;
DBUG_ENTER("my_strdup");
- if ((ptr= (char*) my_malloc(length, my_flags)))
+ if ((ptr= (char*) my_malloc(key, length, my_flags)))
memcpy(ptr, from, length);
DBUG_RETURN(ptr);
}
-char *my_strndup(const char *from, size_t length, myf my_flags)
+char *my_strndup(PSI_memory_key key, const char *from, size_t length, myf my_flags)
{
char *ptr;
DBUG_ENTER("my_strndup");
- if ((ptr= (char*) my_malloc(length+1, my_flags)))
+ if ((ptr= (char*) my_malloc(key, length+1, my_flags)))
{
memcpy(ptr, from, length);
ptr[length]= 0;
diff --git a/mysys/my_open.c b/mysys/my_open.c
index 04324d13d71..a6cbffa0806 100644
--- a/mysys/my_open.c
+++ b/mysys/my_open.c
@@ -136,7 +136,7 @@ File my_register_filename(File fd, const char *FileName, enum file_type
thread_safe_increment32(&my_file_opened);
if ((uint) fd >= my_file_limit)
DBUG_RETURN(fd);
- my_file_info[fd].name = (char*) my_strdup(FileName, MyFlags);
+ my_file_info[fd].name = my_strdup(key_memory_my_file_info, FileName, MyFlags);
statistic_increment(my_file_total_opened,&THR_LOCK_open);
my_file_info[fd].type = type_of_file;
DBUG_PRINT("exit",("fd: %d",fd));
diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c
index ac6d3f87de3..c1567f2cd03 100644
--- a/mysys/my_pthread.c
+++ b/mysys/my_pthread.c
@@ -29,8 +29,6 @@
#define SCHED_POLICY SCHED_OTHER
#endif
-uint thd_lib_detected= 0;
-
/*
Some functions for RTS threads, AIX, Siemens Unix and UnixWare 7
(and DEC OSF/1 3.2 too)
diff --git a/mysys/my_safehash.c b/mysys/my_safehash.c
index 7555f73fb30..7d37b707c3a 100644
--- a/mysys/my_safehash.c
+++ b/mysys/my_safehash.c
@@ -100,8 +100,8 @@ my_bool safe_hash_init(SAFE_HASH *hash, uint elements,
uchar *default_value)
{
DBUG_ENTER("safe_hash_init");
- if (my_hash_init(&hash->hash, &my_charset_bin, elements,
- 0, 0, (my_hash_get_key) safe_hash_entry_get,
+ if (my_hash_init(key_memory_SAFE_HASH_ENTRY, &hash->hash, &my_charset_bin,
+ elements, 0, 0, (my_hash_get_key) safe_hash_entry_get,
(void (*)(void*)) safe_hash_entry_free, 0))
{
hash->default_value= 0;
@@ -224,7 +224,8 @@ my_bool safe_hash_set(SAFE_HASH *hash, const uchar *key, uint length,
}
else
{
- if (!(entry= (SAFE_HASH_ENTRY *) my_malloc(sizeof(*entry) + length,
+ if (!(entry= (SAFE_HASH_ENTRY *) my_malloc(key_memory_SAFE_HASH_ENTRY,
+ sizeof(*entry) + length,
MYF(MY_WME))))
{
error= 1;
diff --git a/mysys/my_static.c b/mysys/my_static.c
index 4bc0bae0c33..a18b7adef61 100644
--- a/mysys/my_static.c
+++ b/mysys/my_static.c
@@ -24,8 +24,38 @@
#include "my_alarm.h"
+PSI_memory_key key_memory_DYNAMIC_STRING;
+PSI_memory_key key_memory_IO_CACHE;
+PSI_memory_key key_memory_KEY_CACHE;
+PSI_memory_key key_memory_LIST;
+PSI_memory_key key_memory_MY_BITMAP_bitmap;
+PSI_memory_key key_memory_MY_DIR;
+PSI_memory_key key_memory_MY_STAT;
+PSI_memory_key key_memory_MY_TMPDIR_full_list;
+PSI_memory_key key_memory_QUEUE;
+PSI_memory_key key_memory_SAFE_HASH_ENTRY;
+PSI_memory_key key_memory_THD_ALARM;
+PSI_memory_key key_memory_TREE;
+PSI_memory_key key_memory_charset_file;
+PSI_memory_key key_memory_charset_loader;
+PSI_memory_key key_memory_defaults;
+PSI_memory_key key_memory_lf_dynarray;
+PSI_memory_key key_memory_lf_node;
+PSI_memory_key key_memory_lf_slist;
+PSI_memory_key key_memory_max_alloca;
+PSI_memory_key key_memory_my_compress_alloc;
+PSI_memory_key key_memory_my_err_head;
+PSI_memory_key key_memory_my_file_info;
+PSI_memory_key key_memory_pack_frm;
+
+#ifdef _WIN32
+PSI_memory_key key_memory_win_SECURITY_ATTRIBUTES;
+PSI_memory_key key_memory_win_PACL;
+PSI_memory_key key_memory_win_IP_ADAPTER_ADDRESSES;
+#endif /* _WIN32 */
+
/* from my_init */
-char * home_dir=0;
+char *home_dir=0;
char *mysql_data_home= (char*) ".";
const char *my_progname= NULL, *my_progname_short= NULL;
char curr_dir[FN_REFLEN]= {0},
diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c
index b298c7b1bd7..1f84809e50f 100644
--- a/mysys/my_thr_init.c
+++ b/mysys/my_thr_init.c
@@ -39,9 +39,6 @@ mysql_mutex_t LOCK_localtime_r;
static void install_sigabrt_handler();
#endif
-
-static uint get_thread_lib(void);
-
/** True if @c my_thread_global_init() has been called. */
static my_bool my_thread_global_init_done= 0;
/* True if THR_KEY_mysys is created */
@@ -96,7 +93,6 @@ static void my_thread_init_internal_mutex(void)
mysql_cond_init(key_THR_COND_threads, &THR_COND_threads, NULL);
}
-
void my_thread_destroy_internal_mutex(void)
{
mysql_mutex_destroy(&THR_LOCK_threads);
@@ -190,7 +186,6 @@ my_bool my_thread_global_init(void)
if (my_thread_init())
return 1;
- thd_lib_detected= get_thread_lib();
my_thread_init_common_mutex();
@@ -455,21 +450,6 @@ safe_mutex_t **my_thread_var_mutex_in_use()
return tmp ? &tmp->mutex_in_use : 0;
}
-static uint get_thread_lib(void)
-{
-#ifdef _CS_GNU_LIBPTHREAD_VERSION
- char buff[64];
-
- confstr(_CS_GNU_LIBPTHREAD_VERSION, buff, sizeof(buff));
-
- if (!strncasecmp(buff, "NPTL", 4))
- return THD_LIB_NPTL;
- if (!strncasecmp(buff, "linuxthreads", 12))
- return THD_LIB_LT;
-#endif
- return THD_LIB_OTHER;
-}
-
#ifdef _WIN32
/*
In Visual Studio 2005 and later, default SIGABRT handler will overwrite
diff --git a/mysys/my_windac.c b/mysys/my_windac.c
index 9a2686a44f4..d53f34f20e7 100644
--- a/mysys/my_windac.c
+++ b/mysys/my_windac.c
@@ -96,7 +96,7 @@ int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror,
}
GetTokenInformation(htoken, TokenUser, 0, 0, &owner_token_length);
- if (! my_multi_malloc(MYF(MY_WME),
+ if (! my_multi_malloc(MYF(MY_WME), PSI_INSTRUMENT_ME,
&sa, ALIGN_SIZE(sizeof(SECURITY_ATTRIBUTES)) +
sizeof(My_security_attr),
&sd, sizeof(SECURITY_DESCRIPTOR),
@@ -126,7 +126,7 @@ int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror,
GetLengthSid(everyone_sid) + GetLengthSid(owner_sid);
/* Create an ACL */
- if (! (dacl= (PACL) my_malloc(dacl_length, MYF(MY_ZEROFILL|MY_WME))))
+ if (! (dacl= (PACL) my_malloc(PSI_INSTRUMENT_ME, dacl_length, MYF(MY_ZEROFILL|MY_WME))))
{
*perror= "Failed to allocate memory for DACL";
goto error;
diff --git a/mysys/mysys_priv.h b/mysys/mysys_priv.h
index 0fa6a4c553f..240d66a3b51 100644
--- a/mysys/mysys_priv.h
+++ b/mysys/mysys_priv.h
@@ -64,6 +64,36 @@ extern PSI_rwlock_key key_SAFEHASH_mutex;
extern PSI_stage_info stage_waiting_for_table_level_lock;
+/* These keys are always defined. */
+
+extern PSI_memory_key key_memory_DYNAMIC_STRING;
+extern PSI_memory_key key_memory_IO_CACHE;
+extern PSI_memory_key key_memory_KEY_CACHE;
+extern PSI_memory_key key_memory_LIST;
+extern PSI_memory_key key_memory_MY_BITMAP_bitmap;
+extern PSI_memory_key key_memory_MY_DIR;
+extern PSI_memory_key key_memory_MY_STAT;
+extern PSI_memory_key key_memory_MY_TMPDIR_full_list;
+extern PSI_memory_key key_memory_QUEUE;
+extern PSI_memory_key key_memory_SAFE_HASH_ENTRY;
+extern PSI_memory_key key_memory_TREE;
+extern PSI_memory_key key_memory_charset_file;
+extern PSI_memory_key key_memory_charset_loader;
+extern PSI_memory_key key_memory_defaults;
+extern PSI_memory_key key_memory_lf_dynarray;
+extern PSI_memory_key key_memory_lf_node;
+extern PSI_memory_key key_memory_lf_slist;
+extern PSI_memory_key key_memory_my_compress_alloc;
+extern PSI_memory_key key_memory_my_err_head;
+extern PSI_memory_key key_memory_my_file_info;
+extern PSI_memory_key key_memory_pack_frm;
+
+#ifdef _WIN32
+extern PSI_memory_key key_memory_win_SECURITY_ATTRIBUTES;
+extern PSI_memory_key key_memory_win_PACL;
+extern PSI_memory_key key_memory_win_IP_ADAPTER_ADDRESSES;
+#endif
+
extern mysql_mutex_t THR_LOCK_malloc, THR_LOCK_open, THR_LOCK_keycache;
extern mysql_mutex_t THR_LOCK_lock, THR_LOCK_net;
extern mysql_mutex_t THR_LOCK_charset;
diff --git a/mysys/psi_noop.c b/mysys/psi_noop.c
index 9eec07a1cd8..09b839468ac 100644
--- a/mysys/psi_noop.c
+++ b/mysys/psi_noop.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, 2015, Oracle and/or its affiliates.
+/* Copyright (c) 2011, 2016, Oracle and/or its affiliates.
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
@@ -168,7 +168,8 @@ rebind_table_noop(PSI_table_share *share NNN,
return NULL;
}
-static void close_table_noop(PSI_table *table NNN)
+static void close_table_noop(struct TABLE_SHARE *share NNN,
+ PSI_table *table NNN)
{
return;
}
@@ -199,6 +200,16 @@ static void set_thread_id_noop(PSI_thread *thread NNN, ulonglong id NNN)
return;
}
+static void set_thread_THD_noop(PSI_thread *thread NNN, THD *thd NNN)
+{
+ return;
+}
+
+static void set_thread_os_id_noop(PSI_thread *thread NNN)
+{
+ return;
+}
+
static PSI_thread*
get_thread_noop(void NNN)
{
@@ -226,6 +237,11 @@ static void set_thread_command_noop(int command NNN)
return;
}
+static void set_connection_type_noop(opaque_vio_type conn_type NNN)
+{
+ return;
+}
+
static void set_thread_start_time_noop(time_t start_time NNN)
{
return;
@@ -373,7 +389,7 @@ static void end_cond_wait_noop(PSI_cond_locker* locker NNN, int rc NNN)
}
static struct PSI_table_locker*
-start_table_io_wait_noop(struct PSI_table_locker_state_v1 *state NNN,
+start_table_io_wait_noop(struct PSI_table_locker_state *state NNN,
struct PSI_table *table NNN,
enum PSI_table_io_operation op NNN,
uint index NNN,
@@ -382,13 +398,14 @@ start_table_io_wait_noop(struct PSI_table_locker_state_v1 *state NNN,
return NULL;
}
-static void end_table_io_wait_noop(PSI_table_locker* locker NNN)
+static void end_table_io_wait_noop(PSI_table_locker* locker NNN,
+ ulonglong numrows NNN)
{
return;
}
static struct PSI_table_locker*
-start_table_lock_wait_noop(struct PSI_table_locker_state_v1 *state NNN,
+start_table_lock_wait_noop(struct PSI_table_locker_state *state NNN,
struct PSI_table *table NNN,
enum PSI_table_lock_operation op NNN,
ulong flags NNN,
@@ -421,6 +438,12 @@ static void end_file_open_wait_and_bind_to_descriptor_noop
return;
}
+static void end_temp_file_open_wait_and_bind_to_descriptor_noop
+ (PSI_file_locker *locker NNN, File file NNN, const char *filaneme NNN)
+{
+ return;
+}
+
static void start_file_wait_noop(PSI_file_locker *locker NNN,
size_t count NNN,
const char *src_file NNN,
@@ -448,12 +471,27 @@ static void end_file_close_wait_noop(PSI_file_locker *locker NNN,
return;
}
-static void start_stage_noop(PSI_stage_key key NNN,
- const char *src_file NNN, int src_line NNN)
+static void end_file_rename_wait_noop(PSI_file_locker *locker NNN,
+ const char *old_name NNN,
+ const char *new_name NNN,
+ int result NNN)
{
return;
}
+static PSI_stage_progress*
+start_stage_noop(PSI_stage_key key NNN,
+ const char *src_file NNN, int src_line NNN)
+{
+ return NULL;
+}
+
+static PSI_stage_progress*
+get_current_stage_progress_noop(void)
+{
+ return NULL;
+}
+
static void end_stage_noop(void)
{
return;
@@ -462,7 +500,8 @@ static void end_stage_noop(void)
static PSI_statement_locker*
get_thread_statement_locker_noop(PSI_statement_locker_state *state NNN,
PSI_statement_key key NNN,
- const void *charset NNN)
+ const void *charset NNN,
+ PSI_sp_share *sp_share NNN)
{
return NULL;
}
@@ -587,6 +626,73 @@ static void end_statement_noop(PSI_statement_locker *locker NNN,
return;
}
+static PSI_transaction_locker*
+get_thread_transaction_locker_noop(PSI_transaction_locker_state *state NNN,
+ const void *xid NNN,
+ ulonglong trxid NNN,
+ int isolation_level NNN,
+ my_bool read_only NNN,
+ my_bool autocommit NNN)
+{
+ return NULL;
+}
+
+static void start_transaction_noop(PSI_transaction_locker *locker NNN,
+ const char *src_file NNN, uint src_line NNN)
+{
+ return;
+}
+
+static void set_transaction_xid_noop(PSI_transaction_locker *locker NNN,
+ const void *xid NNN,
+ int xa_state NNN)
+{
+ return;
+}
+
+static void set_transaction_xa_state_noop(PSI_transaction_locker *locker NNN,
+ int xa_state NNN)
+{
+ return;
+}
+
+static void set_transaction_gtid_noop(PSI_transaction_locker *locker NNN,
+ const void *sid NNN,
+ const void *gtid_spec NNN)
+{
+ return;
+}
+
+static void set_transaction_trxid_noop(PSI_transaction_locker *locker NNN,
+ const ulonglong *trxid NNN)
+{
+ return;
+}
+
+static void inc_transaction_savepoints_noop(PSI_transaction_locker *locker NNN,
+ ulong count NNN)
+{
+ return;
+}
+
+static void inc_transaction_rollback_to_savepoint_noop(PSI_transaction_locker *locker NNN,
+ ulong count NNN)
+{
+ return;
+}
+
+static void inc_transaction_release_savepoint_noop(PSI_transaction_locker *locker NNN,
+ ulong count NNN)
+{
+ return;
+}
+
+static void end_transaction_noop(PSI_transaction_locker *locker NNN,
+ my_bool commit NNN)
+{
+ return;
+}
+
static PSI_socket_locker*
start_socket_wait_noop(PSI_socket_locker_state *state NNN,
PSI_socket *socket NNN,
@@ -623,6 +729,39 @@ static void set_socket_thread_owner_noop(PSI_socket *socket NNN)
return;
}
+static PSI_prepared_stmt*
+create_prepare_stmt_noop(void *identity NNN, uint stmt_id NNN,
+ PSI_statement_locker *locker NNN,
+ const char *stmt_name NNN, size_t stmt_name_length NNN)
+{
+ return NULL;
+}
+
+static void
+execute_prepare_stmt_noop(PSI_statement_locker *locker NNN,
+ PSI_prepared_stmt *prepared_stmt NNN)
+{
+ return;
+}
+
+static void set_prepared_stmt_text_noop(PSI_prepared_stmt *prepared_stmt NNN,
+ const char *text NNN, uint text_len NNN)
+{
+ return;
+}
+
+void
+destroy_prepared_stmt_noop(PSI_prepared_stmt *prepared_stmt NNN)
+{
+ return;
+}
+
+void
+reprepare_prepared_stmt_noop(PSI_prepared_stmt *prepared_stmt NNN)
+{
+ return;
+}
+
static struct PSI_digest_locker*
digest_start_noop(PSI_statement_locker *locker NNN)
{
@@ -644,6 +783,112 @@ set_thread_connect_attrs_noop(const char *buffer NNN,
return 0;
}
+static PSI_sp_locker*
+pfs_start_sp_noop(PSI_sp_locker_state *state NNN, PSI_sp_share *sp_share NNN)
+{
+ return NULL;
+}
+
+static void pfs_end_sp_noop(PSI_sp_locker *locker NNN)
+{
+ return;
+}
+
+static void
+pfs_drop_sp_noop(uint object_type NNN,
+ const char *schema_name NNN, uint schema_name_length NNN,
+ const char *object_name NNN, uint object_name_length NNN)
+{
+ return;
+}
+
+static PSI_sp_share*
+pfs_get_sp_share_noop(uint object_type NNN,
+ const char *schema_name NNN, uint schema_name_length NNN,
+ const char *object_name NNN, uint object_name_length NNN)
+{
+ return NULL;
+}
+
+static void
+pfs_release_sp_share_noop(PSI_sp_share *sp_share NNN)
+{
+ return;
+}
+
+static void register_memory_noop(const char *category NNN,
+ PSI_memory_info *info NNN,
+ int count NNN)
+{
+ return;
+}
+
+static PSI_memory_key memory_alloc_noop(PSI_memory_key key NNN, size_t size NNN, struct PSI_thread ** owner NNN)
+{
+ *owner= NULL;
+ return PSI_NOT_INSTRUMENTED;
+}
+
+static PSI_memory_key memory_realloc_noop(PSI_memory_key key NNN, size_t old_size NNN, size_t new_size NNN, struct PSI_thread ** owner NNN)
+{
+ *owner= NULL;
+ return PSI_NOT_INSTRUMENTED;
+}
+
+static PSI_memory_key memory_claim_noop(PSI_memory_key key NNN, size_t size NNN, struct PSI_thread ** owner)
+{
+ *owner= NULL;
+ return PSI_NOT_INSTRUMENTED;
+}
+
+static void memory_free_noop(PSI_memory_key key NNN, size_t size NNN, struct PSI_thread * owner NNN)
+{
+ return;
+}
+
+static void unlock_table_noop(PSI_table *table NNN)
+{
+ return;
+}
+
+static PSI_metadata_lock *
+create_metadata_lock_noop(void *identity NNN,
+ const MDL_key *mdl_key NNN,
+ opaque_mdl_type mdl_type NNN,
+ opaque_mdl_duration mdl_duration NNN,
+ opaque_mdl_status mdl_status NNN,
+ const char *src_file NNN,
+ uint src_line NNN)
+{
+ return NULL;
+}
+
+static void
+set_metadata_lock_status_noop(PSI_metadata_lock* lock NNN,
+ opaque_mdl_status mdl_status NNN)
+{
+}
+
+static void
+destroy_metadata_lock_noop(PSI_metadata_lock* lock NNN)
+{
+}
+
+static PSI_metadata_locker *
+start_metadata_wait_noop(PSI_metadata_locker_state *state NNN,
+ PSI_metadata_lock *mdl NNN,
+ const char *src_file NNN,
+ uint src_line NNN)
+{
+ return NULL;
+}
+
+static void
+end_metadata_wait_noop(PSI_metadata_locker *locker NNN,
+ int rc NNN)
+{
+}
+
static PSI PSI_noop=
{
register_mutex_noop,
@@ -673,11 +918,14 @@ static PSI PSI_noop=
spawn_thread_noop,
new_thread_noop,
set_thread_id_noop,
+ set_thread_THD_noop,
+ set_thread_os_id_noop,
get_thread_noop,
set_thread_user_noop,
set_thread_user_host_noop,
set_thread_db_noop,
set_thread_command_noop,
+ set_connection_type_noop,
set_thread_start_time_noop,
set_thread_state_noop,
set_thread_info_noop,
@@ -708,11 +956,14 @@ static PSI PSI_noop=
start_file_open_wait_noop,
end_file_open_wait_noop,
end_file_open_wait_and_bind_to_descriptor_noop,
+ end_temp_file_open_wait_and_bind_to_descriptor_noop,
start_file_wait_noop,
end_file_wait_noop,
start_file_close_wait_noop,
end_file_close_wait_noop,
+ end_file_rename_wait_noop,
start_stage_noop,
+ get_current_stage_progress_noop,
end_stage_noop,
get_thread_statement_locker_noop,
refine_statement_noop,
@@ -735,14 +986,46 @@ static PSI PSI_noop=
set_statement_no_index_used_noop,
set_statement_no_good_index_used_noop,
end_statement_noop,
+ get_thread_transaction_locker_noop,
+ start_transaction_noop,
+ set_transaction_xid_noop,
+ set_transaction_xa_state_noop,
+ set_transaction_gtid_noop,
+ set_transaction_trxid_noop,
+ inc_transaction_savepoints_noop,
+ inc_transaction_rollback_to_savepoint_noop,
+ inc_transaction_release_savepoint_noop,
+ end_transaction_noop,
start_socket_wait_noop,
end_socket_wait_noop,
set_socket_state_noop,
set_socket_info_noop,
set_socket_thread_owner_noop,
+ create_prepare_stmt_noop,
+ destroy_prepared_stmt_noop,
+ reprepare_prepared_stmt_noop,
+ execute_prepare_stmt_noop,
+ set_prepared_stmt_text_noop,
digest_start_noop,
digest_end_noop,
- set_thread_connect_attrs_noop
+ set_thread_connect_attrs_noop,
+ pfs_start_sp_noop,
+ pfs_end_sp_noop,
+ pfs_drop_sp_noop,
+ pfs_get_sp_share_noop,
+ pfs_release_sp_share_noop,
+ register_memory_noop,
+ memory_alloc_noop,
+ memory_realloc_noop,
+ memory_claim_noop,
+ memory_free_noop,
+
+ unlock_table_noop,
+ create_metadata_lock_noop,
+ set_metadata_lock_status_noop,
+ destroy_metadata_lock_noop,
+ start_metadata_wait_noop,
+ end_metadata_wait_noop
};
/**
@@ -763,16 +1046,10 @@ struct PSI_bootstrap *PSI_hook= NULL;
PSI *PSI_server= & PSI_noop;
-/**
- Global performance schema flag.
- Indicate if the performance schema is enabled.
- This flag is set at startup, and never changes.
-*/
-my_bool pfs_enabled= FALSE;
-
void set_psi_server(PSI *psi)
{
PSI_server= psi;
}
C_MODE_END
+
diff --git a/mysys/queues.c b/mysys/queues.c
index 5d09ce2063f..aac70a4825d 100644
--- a/mysys/queues.c
+++ b/mysys/queues.c
@@ -76,7 +76,8 @@ int init_queue(QUEUE *queue, uint max_elements, uint offset_to_key,
{
DBUG_ENTER("init_queue");
- if ((queue->root= (uchar **) my_malloc((max_elements + 1) * sizeof(void*),
+ if ((queue->root= (uchar **) my_malloc(key_memory_QUEUE,
+ (max_elements + 1) * sizeof(void*),
MYF(MY_WME))) == 0)
DBUG_RETURN(1);
queue->elements= 0;
@@ -148,7 +149,7 @@ int resize_queue(QUEUE *queue, uint max_elements)
DBUG_ENTER("resize_queue");
if (queue->max_elements == max_elements)
DBUG_RETURN(0);
- if ((new_root= (uchar **) my_realloc((void *)queue->root,
+ if ((new_root= (uchar **) my_realloc(key_memory_QUEUE, (void *)queue->root,
(max_elements + 1)* sizeof(void*),
MYF(MY_WME))) == 0)
DBUG_RETURN(1);
diff --git a/mysys/stacktrace.c b/mysys/stacktrace.c
index 19dcdf11dd5..958ca506c59 100644
--- a/mysys/stacktrace.c
+++ b/mysys/stacktrace.c
@@ -438,8 +438,8 @@ void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack,
:"r"(pc));
#endif /* __alpha__ */
- /* We are 1 frame above signal frame with NPTL and 2 frames above with LT */
- sigreturn_frame_count = thd_lib_detected == THD_LIB_LT ? 2 : 1;
+ /* We are 1 frame above signal frame with NPTL */
+ sigreturn_frame_count = 1;
while (fp < (uchar**) stack_bottom)
{
diff --git a/mysys/string.c b/mysys/string.c
index 7c56b95af25..b346393d91e 100644
--- a/mysys/string.c
+++ b/mysys/string.c
@@ -36,7 +36,8 @@ my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str,
if (!init_alloc)
init_alloc=alloc_increment;
- if (!(str->str=(char*) my_malloc(init_alloc,MYF(MY_WME))))
+ if (!(str->str=(char*) my_malloc(key_memory_DYNAMIC_STRING,
+ init_alloc, MYF(MY_WME))))
DBUG_RETURN(TRUE);
str->length=length-1;
if (init_str)
@@ -58,7 +59,8 @@ my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str)
str->alloc_increment;
if (!str->max_length)
str->max_length=str->alloc_increment;
- if (!(str->str=(char*) my_realloc(str->str,str->max_length,MYF(MY_WME))))
+ if (!(str->str=(char*) my_realloc(key_memory_DYNAMIC_STRING,
+ str->str, str->max_length, MYF(MY_WME))))
DBUG_RETURN(TRUE);
}
if (init_str)
@@ -81,7 +83,8 @@ my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size)
{
str->max_length=((str->length + additional_size+str->alloc_increment-1)/
str->alloc_increment)*str->alloc_increment;
- if (!(str->str=(char*) my_realloc(str->str,str->max_length,MYF(MY_WME))))
+ if (!(str->str=(char*) my_realloc(key_memory_DYNAMIC_STRING, str->str,
+ str->max_length, MYF(MY_WME))))
DBUG_RETURN(TRUE);
}
DBUG_RETURN(FALSE);
@@ -104,7 +107,8 @@ my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
size_t new_length=(str->length+length+str->alloc_increment)/
str->alloc_increment;
new_length*=str->alloc_increment;
- if (!(new_ptr=(char*) my_realloc(str->str,new_length,MYF(MY_WME))))
+ if (!(new_ptr=(char*) my_realloc(key_memory_DYNAMIC_STRING, str->str,
+ new_length, MYF(MY_WME))))
DBUG_RETURN(TRUE);
str->str=new_ptr;
str->max_length=new_length;
diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index 553dc55bfc3..92a471075c6 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -95,16 +95,8 @@ void init_thr_alarm(uint max_alarms)
sigfillset(&full_signal_set); /* Neaded to block signals */
mysql_mutex_init(key_LOCK_alarm, &LOCK_alarm, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_alarm, &COND_alarm, NULL);
- if (thd_lib_detected == THD_LIB_LT)
- thr_client_alarm= SIGALRM;
- else
- thr_client_alarm= SIGUSR1;
-#ifndef USE_ALARM_THREAD
- if (thd_lib_detected != THD_LIB_LT)
-#endif
- {
- my_sigset(thr_client_alarm, thread_alarm);
- }
+ thr_client_alarm= SIGUSR1;
+ my_sigset(thr_client_alarm, thread_alarm);
sigemptyset(&s);
sigaddset(&s, THR_SERVER_ALARM);
alarm_thread=pthread_self();
@@ -121,11 +113,6 @@ void init_thr_alarm(uint max_alarms)
}
#elif defined(USE_ONE_SIGNAL_HAND)
pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */
- if (thd_lib_detected == THD_LIB_LT)
- {
- my_sigset(thr_client_alarm, process_alarm); /* Linuxthreads */
- pthread_sigmask(SIG_UNBLOCK, &s, NULL);
- }
#else
my_sigset(THR_SERVER_ALARM, process_alarm);
pthread_sigmask(SIG_UNBLOCK, &s, NULL);
@@ -198,7 +185,8 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
now= my_time(0);
if (!alarm_data)
{
- if (!(alarm_data=(ALARM*) my_malloc(sizeof(ALARM),MYF(MY_WME))))
+ if (!(alarm_data=(ALARM*) my_malloc(PSI_INSTRUMENT_ME, sizeof(ALARM),
+ MYF(MY_WME))))
goto abort_no_unlock;
alarm_data->malloced= 1;
}
@@ -286,18 +274,6 @@ sig_handler process_alarm(int sig __attribute__((unused)))
This must be first as we can't call DBUG inside an alarm for a normal thread
*/
- if (thd_lib_detected == THD_LIB_LT &&
- !pthread_equal(pthread_self(),alarm_thread))
- {
-#if defined(MAIN) && !defined(__bsdi__)
- printf("thread_alarm in process_alarm\n"); fflush(stdout);
-#endif
-#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY
- my_sigset(thr_client_alarm, process_alarm); /* int. thread system calls */
-#endif
- return;
- }
-
/*
We have to do do the handling of the alarm in a sub function,
because otherwise we would get problems with two threads calling
diff --git a/mysys/thr_mutex.c b/mysys/thr_mutex.c
index 568ed3ecb46..4f495048f63 100644
--- a/mysys/thr_mutex.c
+++ b/mysys/thr_mutex.c
@@ -156,7 +156,7 @@ static inline void remove_from_active_list(safe_mutex_t *mp)
static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t *mp)
{
- if (!my_multi_malloc(MY_FAE | MY_WME,
+ if (!my_multi_malloc(PSI_NOT_INSTRUMENTED, MY_FAE | MY_WME,
&mp->locked_mutex, sizeof(*mp->locked_mutex),
&mp->used_mutex, sizeof(*mp->used_mutex), NullS))
{
@@ -169,16 +169,12 @@ static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t *mp)
pthread_mutex_lock(&THR_LOCK_mutex);
mp->id= ++safe_mutex_id;
pthread_mutex_unlock(&THR_LOCK_mutex);
- my_hash_init2(mp->locked_mutex, 64, &my_charset_bin,
- 128,
- offsetof(safe_mutex_deadlock_t, id),
- sizeof(mp->id),
- 0, 0, 0, HASH_UNIQUE);
- my_hash_init2(mp->used_mutex, 64, &my_charset_bin,
- 128,
- offsetof(safe_mutex_t, id),
- sizeof(mp->id),
- 0, 0, 0, HASH_UNIQUE);
+ my_hash_init2(PSI_NOT_INSTRUMENTED, mp->locked_mutex, 64, &my_charset_bin, 128,
+ offsetof(safe_mutex_deadlock_t, id), sizeof(mp->id), 0, 0, 0,
+ HASH_UNIQUE);
+ my_hash_init2(PSI_NOT_INSTRUMENTED, mp->used_mutex, 64, &my_charset_bin, 128,
+ offsetof(safe_mutex_t, id), sizeof(mp->id), 0, 0, 0,
+ HASH_UNIQUE);
return 0;
}
@@ -341,7 +337,7 @@ int safe_mutex_lock(safe_mutex_t *mp, myf my_flags, const char *file,
safe_mutex_t *mutex;
/* Create object to store mutex info */
- if (!(deadlock= my_malloc(sizeof(*deadlock),
+ if (!(deadlock= my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*deadlock),
MYF(MY_ZEROFILL | MY_WME | MY_FAE))))
goto abort_loop;
deadlock->name= mp->name;
diff --git a/mysys/tree.c b/mysys/tree.c
index 8cae30e2d3e..cd44f779e6f 100644
--- a/mysys/tree.c
+++ b/mysys/tree.c
@@ -128,7 +128,7 @@ void init_tree(TREE *tree, size_t default_alloc_size, size_t memory_limit,
}
if (!(tree->with_delete= MY_TEST(my_flags & MY_TREE_WITH_DELETE)))
{
- init_alloc_root(&tree->mem_root, "tree", default_alloc_size, 0,
+ init_alloc_root(key_memory_TREE, &tree->mem_root, default_alloc_size, 0,
MYF(my_flags));
tree->mem_root.min_malloc= sizeof(TREE_ELEMENT)+tree->size_of_element;
}
@@ -275,7 +275,7 @@ TREE_ELEMENT *tree_insert(TREE *tree, void *key, uint key_size,
key_size+=tree->size_of_element;
if (tree->with_delete)
- element=(TREE_ELEMENT *) my_malloc(alloc_size,
+ element=(TREE_ELEMENT *) my_malloc(key_memory_TREE, alloc_size,
MYF(tree->my_flags | MY_WME));
else
element=(TREE_ELEMENT *) alloc_root(&tree->mem_root,alloc_size);
diff --git a/mysys/waiting_threads.c b/mysys/waiting_threads.c
index 4564059b31a..2a97c6133e8 100644
--- a/mysys/waiting_threads.c
+++ b/mysys/waiting_threads.c
@@ -394,7 +394,8 @@ static void wt_resource_create(uchar *arg)
bzero(rc, sizeof(*rc));
rc_rwlock_init(rc);
mysql_cond_init(key_WT_RESOURCE_cond, &rc->cond, 0);
- my_init_dynamic_array(&rc->owners, sizeof(WT_THD *), 0, 5, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &rc->owners,
+ sizeof(WT_THD *), 0, 5, MYF(0));
DBUG_VOID_RETURN;
}
@@ -507,7 +508,8 @@ void wt_thd_lazy_init(WT_THD *thd, const ulong *ds, const ulong *ts,
thd->deadlock_search_depth_long= dl;
thd->timeout_long= tl;
/* dynamic array is also initialized lazily - without memory allocations */
- my_init_dynamic_array(&thd->my_resources, sizeof(WT_RESOURCE *), 0, 5, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &thd->my_resources,
+ sizeof(WT_RESOURCE *), 0, 5, MYF(0));
#ifndef DBUG_OFF
thd->name= my_thread_name();
#endif
diff --git a/plugin/auth_socket/CMakeLists.txt b/plugin/auth_socket/CMakeLists.txt
index 5a59520a3e4..6f3d571ea43 100644
--- a/plugin/auth_socket/CMakeLists.txt
+++ b/plugin/auth_socket/CMakeLists.txt
@@ -57,12 +57,39 @@ IF (HAVE_XUCRED)
SET(ok 1)
ELSE()
+# illumos, is that you?
+CHECK_CXX_SOURCE_COMPILES(
+"#include <ucred.h>
+int main() {
+ ucred_t *cred = NULL;
+ getpeerucred(0, &cred);
+ }" HAVE_GETPEERUCRED)
+
+# Depending on the flags set in the compilation environment, illumos will have
+# either the POSIX.1c draft 6 or POSIX.1c final implementation of getpwuid_r()
+# Check that defining _POSIX_PTHREAD_SEMANTICS provides the final standard
+# version.
+
+CHECK_CXX_SOURCE_COMPILES(
+"#define _POSIX_PTHREAD_SEMANTICS
+#include <pwd.h>
+int main() {
+ getpwuid_r(0, NULL, NULL, 0, NULL);
+ }" HAVE_GETPWUID_POSIX_FINAL)
+
+IF (HAVE_GETPEERUCRED AND HAVE_GETPWUID_POSIX_FINAL)
+ ADD_DEFINITIONS(-DHAVE_GETPEERUCRED)
+ ADD_DEFINITIONS(-D_POSIX_PTHREAD_SEMANTICS)
+ SET(ok 1)
+ELSE()
+
# Who else? Anyone?
# C'mon, show your creativity, be different! ifdef's are fun, aren't they?
ENDIF()
ENDIF()
ENDIF()
+ENDIF()
IF(ok)
MYSQL_ADD_PLUGIN(auth_socket auth_socket.c DEFAULT)
diff --git a/plugin/auth_socket/auth_socket.c b/plugin/auth_socket/auth_socket.c
index 46eae517cb8..b10679a5cc2 100644
--- a/plugin/auth_socket/auth_socket.c
+++ b/plugin/auth_socket/auth_socket.c
@@ -47,6 +47,9 @@
#define uid cr_uid
#define ucred xucred
+#elif defined HAVE_GETPEERUCRED
+#include <ucred.h>
+
#else
#error impossible
#endif
@@ -64,10 +67,15 @@ static int socket_auth(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
{
unsigned char *pkt;
MYSQL_PLUGIN_VIO_INFO vio_info;
+#ifdef HAVE_GETPEERUCRED
+ ucred_t *cred = NULL;
+#else
struct ucred cred;
socklen_t cred_len= sizeof(cred);
+#endif
struct passwd pwd_buf, *pwd;
char buf[1024];
+ uid_t u;
/* no user name yet ? read the client handshake packet with the user name */
if (info->user_name == 0)
@@ -83,14 +91,23 @@ static int socket_auth(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
return CR_ERROR;
/* get the UID of the client process */
+#ifdef HAVE_GETPEERUCRED
+ if (getpeerucred(vio_info.socket, &cred) != 0)
+ return CR_ERROR;
+ u = ucred_geteuid(cred);
+ ucred_free(cred);
+#else
if (getsockopt(vio_info.socket, level, SO_PEERCRED, &cred, &cred_len))
return CR_ERROR;
if (cred_len != sizeof(cred))
return CR_ERROR;
+ u = cred.uid;
+#endif
+
/* and find the username for this uid */
- getpwuid_r(cred.uid, &pwd_buf, buf, sizeof(buf), &pwd);
+ getpwuid_r(u, &pwd_buf, buf, sizeof(buf), &pwd);
if (pwd == NULL)
return CR_ERROR;
diff --git a/plugin/daemon_example/daemon_example.cc b/plugin/daemon_example/daemon_example.cc
index 87f48a1fa69..50026e92be1 100644
--- a/plugin/daemon_example/daemon_example.cc
+++ b/plugin/daemon_example/daemon_example.cc
@@ -98,7 +98,7 @@ static int daemon_example_plugin_init(void *p __attribute__ ((unused)))
struct st_plugin_int *plugin= (struct st_plugin_int *)p;
con= (struct mysql_heartbeat_context *)
- my_malloc(sizeof(struct mysql_heartbeat_context), MYF(0));
+ my_malloc(PSI_NOT_INSTRUMENTED, sizeof(struct mysql_heartbeat_context), MYF(0));
fn_format(heartbeat_filename, "mysql-heartbeat", "", ".log",
MY_REPLACE_EXT | MY_UNPACK_FILENAME);
diff --git a/plugin/feedback/feedback.cc b/plugin/feedback/feedback.cc
index b0fbc1abcde..03cc4ab465a 100644
--- a/plugin/feedback/feedback.cc
+++ b/plugin/feedback/feedback.cc
@@ -280,7 +280,7 @@ static int init(void *p)
if (*s == ' ')
url_count++;
- urls= (Url **)my_malloc(url_count*sizeof(Url*), MYF(MY_WME));
+ urls= (Url **)my_malloc(PSI_INSTRUMENT_ME, url_count*sizeof(Url*), MYF(MY_WME));
if (!urls)
return 1;
diff --git a/plugin/feedback/url_base.cc b/plugin/feedback/url_base.cc
index 21661079c98..1ba21306bdf 100644
--- a/plugin/feedback/url_base.cc
+++ b/plugin/feedback/url_base.cc
@@ -27,7 +27,7 @@ Url* http_create(const char *url, size_t url_length);
*/
Url* Url::create(const char *url, size_t url_length)
{
- url= my_strndup(url, url_length, MYF(MY_WME));
+ url= my_strndup(PSI_INSTRUMENT_ME, url, url_length, MYF(MY_WME));
if (!url)
return NULL;
@@ -88,8 +88,8 @@ int Url::parse_proxy_server(const char *proxy_server, size_t proxy_length,
port->length= 2;
}
- host->str= my_strndup(host->str, host->length, MYF(MY_WME));
- port->str= my_strndup(port->str, port->length, MYF(MY_WME));
+ host->str= my_strndup(PSI_INSTRUMENT_ME, host->str, host->length, MYF(MY_WME));
+ port->str= my_strndup(PSI_INSTRUMENT_ME, port->str, port->length, MYF(MY_WME));
return 0;
}
diff --git a/plugin/feedback/url_http.cc b/plugin/feedback/url_http.cc
index db05adebdd2..98116dd04f1 100644
--- a/plugin/feedback/url_http.cc
+++ b/plugin/feedback/url_http.cc
@@ -143,9 +143,9 @@ Url* http_create(const char *url, size_t url_length)
if (!host.length || !port.length || path.str[0] != '/')
return NULL;
- host.str= my_strndup(host.str, host.length, MYF(MY_WME));
- port.str= my_strndup(port.str, port.length, MYF(MY_WME));
- path.str= my_strndup(path.str, path.length, MYF(MY_WME));
+ host.str= my_strndup(PSI_INSTRUMENT_ME, host.str, host.length, MYF(MY_WME));
+ port.str= my_strndup(PSI_INSTRUMENT_ME, port.str, port.length, MYF(MY_WME));
+ path.str= my_strndup(PSI_INSTRUMENT_ME, path.str, path.length, MYF(MY_WME));
if (!host.str || !port.str || !path.str)
{
diff --git a/plugin/handler_socket/handlersocket/database.cpp b/plugin/handler_socket/handlersocket/database.cpp
index 52ea8f2a8c4..001981e3baa 100644
--- a/plugin/handler_socket/handlersocket/database.cpp
+++ b/plugin/handler_socket/handlersocket/database.cpp
@@ -298,7 +298,7 @@ dbcontext::init_thread(const void *stack_bottom, volatile int& shutdown_flag)
thd->options |= OPTION_BIN_LOG;
#endif
safeFree((char*) thd->db.str);
- thd->db.str= my_strdup("handlersocket", MYF(0));
+ thd->db.str= my_strdup(PSI_NOT_INSTRUMENTED, "handlersocket", MYF(0));
thd->db.length= sizeof("handlersocket")-1;
}
thd->variables.option_bits |= OPTION_TABLE_LOCK;
@@ -1006,7 +1006,7 @@ dbcontext::cmd_open(dbcallback_i& cb, const cmd_open_args& arg)
LEX_CSTRING db_name= { arg.dbn, strlen(arg.dbn) };
LEX_CSTRING tbl_name= { arg.tbl, strlen(arg.tbl) };
tables.init_one_table(&db_name, &tbl_name, 0, lock_type);
- tables.mdl_request.init(MDL_key::TABLE, arg.dbn, arg.tbl,
+ MDL_REQUEST_INIT(&tables.mdl_request, MDL_key::TABLE, arg.dbn, arg.tbl,
for_write_flag ? MDL_SHARED_WRITE : MDL_SHARED_READ, MDL_TRANSACTION);
Open_table_context ot_act(thd, 0);
if (!open_table(thd, &tables, &ot_act)) {
diff --git a/plugin/server_audit/server_audit.c b/plugin/server_audit/server_audit.c
index 609cf0f1ac1..4ec58249d68 100644
--- a/plugin/server_audit/server_audit.c
+++ b/plugin/server_audit/server_audit.c
@@ -124,7 +124,7 @@ static char *default_home= (char *)".";
#define my_rename(A, B, C) loc_rename(A, B)
#define my_tell(A, B) loc_tell(A)
#define my_write(A, B, C, D) loc_write(A, B, C)
-#define my_malloc(A, B) malloc(A)
+#define my_malloc(A, B, C) malloc(B)
#define my_free(A) free(A)
#ifdef my_errno
#undef my_errno
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6.result b/plugin/type_inet/mysql-test/type_inet/type_inet6.result
index 3dbbbccb100..15c8dbf8ca9 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6.result
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6.result
@@ -40,12 +40,12 @@ CREATE TABLE t1 (a INET6);
INSERT INTO t1 VALUES ('::1');
SELECT * FROM t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def test t1 t1 a a 254 39 3 Y 160 0 8
+def test t1 t1 a a 254 (type=inet6) 39 3 Y 160 0 8
a
::1
SELECT CAST('::' AS INET6) AS a;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def a 254 39 2 N 33 0 8
+def a 254 (type=inet6) 39 2 N 33 0 8
a
::
DROP TABLE t1;
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.result
index 468e9fea41e..868b9902f5c 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.result
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.result
@@ -4,12 +4,36 @@ Catalog: `def`
Database: `test`
Table: `t1`
Org_table: `t1`
-Type: STRING
+Type: STRING (type=inet6)
Collation: latin1_swedish_ci (8)
Length: 39
Max_length: 0
Decimals: 0
Flags: UNSIGNED BINARY
+Field 2: `b`
+Catalog: `def`
+Database: ``
+Table: ``
+Org_table: ``
+Type: STRING (type=inet6)
+Collation: latin1_swedish_ci (8)
+Length: 39
+Max_length: 0
+Decimals: 0
+Flags: NOT_NULL UNSIGNED
+
+Field 3: `c`
+Catalog: `def`
+Database: ``
+Table: ``
+Org_table: ``
+Type: STRING (type=inet6)
+Collation: latin1_swedish_ci (8)
+Length: 39
+Max_length: 0
+Decimals: 0
+Flags: UNSIGNED
+
DROP TABLE t1;
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.test b/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.test
index 5e6ac6f3804..dfb300816d9 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.test
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mysql.test
@@ -2,5 +2,5 @@
-- source include/not_embedded.inc
CREATE TABLE t1 (a INET6);
---exec $MYSQL -t test --column-type-info -e "SELECT * FROM t1" 2>&1
+--exec $MYSQL -t test --column-type-info -e "SELECT a, CAST('::' AS INET6) AS b, COALESCE(a) AS c FROM t1" 2>&1
DROP TABLE t1;
diff --git a/plugin/type_inet/sql_type_inet.cc b/plugin/type_inet/sql_type_inet.cc
index 6803bdba434..29234aa4a56 100644
--- a/plugin/type_inet/sql_type_inet.cc
+++ b/plugin/type_inet/sql_type_inet.cc
@@ -705,6 +705,12 @@ public:
str.set_ascii(name.ptr(), name.length());
}
+ void make_send_field(Send_field *to) override
+ {
+ Field::make_send_field(to);
+ to->set_data_type_name(type_handler_inet6.name().lex_cstring());
+ }
+
bool validate_value_in_record(THD *thd, const uchar *record) const override
{
return false;
@@ -1355,9 +1361,9 @@ void Type_handler_inet6::Item_param_setup_conversion(THD *thd,
}
-void Type_handler_inet6::make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const
+void Type_handler_inet6::make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
{
DBUG_ASSERT(item->type_handler() == this);
NativeBufferInet6 tmp;
@@ -1377,10 +1383,33 @@ void Type_handler_inet6::make_sort_key(uchar *to, Item *item,
memcpy(to, tmp.ptr(), tmp.length());
}
+uint
+Type_handler_inet6::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ DBUG_ASSERT(item->type_handler() == this);
+ NativeBufferInet6 tmp;
+ item->val_native_result(current_thd, &tmp);
+ if (item->maybe_null)
+ {
+ if (item->null_value)
+ {
+ *to++=0;
+ return 0;
+ }
+ *to++= 1;
+ }
+ DBUG_ASSERT(!item->null_value);
+ DBUG_ASSERT(Inet6::binary_length() == tmp.length());
+ DBUG_ASSERT(Inet6::binary_length() == sort_field->length);
+ memcpy(to, tmp.ptr(), tmp.length());
+ return tmp.length();
+}
-void Type_handler_inet6::sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const
+void Type_handler_inet6::sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const
{
attr->length= Inet6::binary_length();
attr->suffix_length= 0;
diff --git a/plugin/type_inet/sql_type_inet.h b/plugin/type_inet/sql_type_inet.h
index b483ff94e8d..c8118a111e4 100644
--- a/plugin/type_inet/sql_type_inet.h
+++ b/plugin/type_inet/sql_type_inet.h
@@ -328,6 +328,11 @@ public:
{
return PROTOCOL_SEND_STRING;
}
+ bool Item_append_extended_type_info(Send_field_extended_metadata *to,
+ const Item *item) const override
+ {
+ return to->set_data_type_name(name().lex_cstring());
+ }
enum_field_types field_type() const override
{
@@ -513,10 +518,14 @@ public:
def->frm_unpack_basic(buffer);
return def->frm_unpack_charset(share, buffer);
}
- void make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field, Sort_param *param)
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param)
const override;
- void sortlength(THD *thd,
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ void sort_length(THD *thd,
const Type_std_attributes *item,
SORT_FIELD_ATTR *attr) const override;
uint32 max_display_length(const Item *item) const override
diff --git a/plugin/userstat/client_stats.cc b/plugin/userstat/client_stats.cc
index 2adeb23a385..72c71785606 100644
--- a/plugin/userstat/client_stats.cc
+++ b/plugin/userstat/client_stats.cc
@@ -78,7 +78,7 @@ static int send_user_stats(THD* thd, HASH *all_user_stats, TABLE *table)
static int client_stats_fill(THD* thd, TABLE_LIST* tables, COND* cond)
{
- if (check_global_access(thd, SUPER_ACL | PROCESS_ACL, true))
+ if (check_global_access(thd, PROCESS_ACL, true))
return 0;
return send_user_stats(thd, &global_client_stats, tables->table);
diff --git a/plugin/userstat/user_stats.cc b/plugin/userstat/user_stats.cc
index 50809e0442a..de3d4e12fb1 100644
--- a/plugin/userstat/user_stats.cc
+++ b/plugin/userstat/user_stats.cc
@@ -34,7 +34,7 @@ static ST_FIELD_INFO user_stats_fields[]=
static int user_stats_fill(THD* thd, TABLE_LIST* tables, COND* cond)
{
- if (check_global_access(thd, SUPER_ACL | PROCESS_ACL, true))
+ if (check_global_access(thd, PROCESS_ACL, true))
return 0;
return send_user_stats(thd, &global_user_stats, tables->table);
diff --git a/sql-common/client.c b/sql-common/client.c
index 98173224f76..ee3ec65a233 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -112,6 +112,52 @@ typedef enum {
#define native_password_plugin_name "mysql_native_password"
#define old_password_plugin_name "mysql_old_password"
+PSI_memory_key key_memory_mysql_options;
+PSI_memory_key key_memory_MYSQL_DATA;
+PSI_memory_key key_memory_MYSQL;
+PSI_memory_key key_memory_MYSQL_RES;
+PSI_memory_key key_memory_MYSQL_ROW;
+PSI_memory_key key_memory_MYSQL_state_change_info;
+PSI_memory_key key_memory_MYSQL_HANDSHAKE;
+
+#if defined (_WIN32) && !defined (EMBEDDED_LIBRARY)
+PSI_memory_key key_memory_create_shared_memory;
+#endif /* _WIN32 && ! EMBEDDED_LIBRARY */
+
+#ifdef HAVE_PSI_INTERFACE
+/*
+ This code is common to the client and server,
+ and also used in the server when server A connects to server B,
+ for example with replication.
+ Therefore, the code is also instrumented.
+*/
+
+static PSI_memory_info all_client_memory[]=
+{
+#if defined (_WIN32) && !defined (EMBEDDED_LIBRARY)
+ { &key_memory_create_shared_memory, "create_shared_memory", 0},
+#endif /* _WIN32 && ! EMBEDDED_LIBRARY */
+
+ { &key_memory_mysql_options, "mysql_options", 0},
+ { &key_memory_MYSQL_DATA, "MYSQL_DATA", 0},
+ { &key_memory_MYSQL, "MYSQL", 0},
+ { &key_memory_MYSQL_RES, "MYSQL_RES", 0},
+ { &key_memory_MYSQL_ROW, "MYSQL_ROW", 0},
+ { &key_memory_MYSQL_state_change_info, "MYSQL_STATE_CHANGE_INFO", 0},
+ { &key_memory_MYSQL_HANDSHAKE, "MYSQL_HANDSHAKE", 0}
+};
+
+void init_client_psi_keys(void)
+{
+ const char *category= "client";
+ int count;
+
+ count= array_elements(all_client_memory);
+ mysql_memory_register(category, all_client_memory, count);
+}
+
+#endif /* HAVE_PSI_INTERFACE */
+
uint mariadb_deinitialize_ssl= 1;
uint mysql_port=0;
char *mysql_unix_port= 0;
@@ -491,7 +537,7 @@ void free_old_query(MYSQL *mysql)
if (mysql->fields)
free_root(&mysql->field_alloc,MYF(0));
/* Assume rowlength < 8192 */
- init_alloc_root(&mysql->field_alloc, "fields", 8192, 0,
+ init_alloc_root(PSI_INSTRUMENT_ME, &mysql->field_alloc, 8192, 0,
MYF(mysql->options.use_thread_specific_memory ?
MY_THREAD_SPECIFIC : 0));
mysql->fields= 0;
@@ -753,6 +799,11 @@ enum option_id {
OPT_keep_this_one_last
};
+static char *opt_strdup(const char *from, myf my_flags)
+{
+ return my_strdup(key_memory_mysql_options, from, my_flags);
+}
+
static TYPELIB option_types={array_elements(default_options)-1,
"options",default_options, NULL};
@@ -762,12 +813,14 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd)
if (!options->init_commands)
{
- options->init_commands= (DYNAMIC_ARRAY*)my_malloc(sizeof(DYNAMIC_ARRAY),
+ options->init_commands= (DYNAMIC_ARRAY*)my_malloc(key_memory_mysql_options,
+ sizeof(DYNAMIC_ARRAY),
MYF(MY_WME));
- my_init_dynamic_array(options->init_commands,sizeof(char*),5, 5, MYF(0));
+ my_init_dynamic_array(key_memory_mysql_options, options->init_commands,
+ sizeof(char*),5, 5, MYF(0));
}
- if (!(tmp= my_strdup(cmd,MYF(MY_WME))) ||
+ if (!(tmp= opt_strdup(cmd,MYF(MY_WME))) ||
insert_dynamic(options->init_commands, &tmp))
{
my_free(tmp);
@@ -780,7 +833,8 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd)
#define ALLOCATE_EXTENSIONS(OPTS) \
(OPTS)->extension= (struct st_mysql_options_extention *) \
- my_malloc(sizeof(struct st_mysql_options_extention), \
+ my_malloc(key_memory_mysql_options, \
+ sizeof(struct st_mysql_options_extention), \
MYF(MY_WME | MY_ZEROFILL)) \
@@ -802,7 +856,7 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd)
} while (0)
#define EXTENSION_SET_STRING(OPTS, X, STR) \
- EXTENSION_SET_STRING_X(OPTS, X, STR, my_strdup)
+ EXTENSION_SET_STRING_X(OPTS, X, STR, opt_strdup)
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
@@ -816,7 +870,7 @@ static char *set_ssl_option_unpack_path(const char *arg, myf flags)
{
char buff[FN_REFLEN + 1];
unpack_filename(buff, (char *)arg);
- return my_strdup(buff, flags);
+ return opt_strdup(buff, flags);
}
#else
@@ -824,8 +878,8 @@ static char *set_ssl_option_unpack_path(const char *arg, myf flags)
#define EXTENSION_SET_SSL_STRING_X(OPTS, X, STR, dup) do { } while(0)
#endif /* defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) */
-#define SET_SSL_OPTION(OPTS, opt_var,arg) SET_SSL_OPTION_X(OPTS, opt_var, arg, my_strdup)
-#define EXTENSION_SET_SSL_STRING(OPTS, X, STR) EXTENSION_SET_SSL_STRING_X(OPTS, X, STR, my_strdup)
+#define SET_SSL_OPTION(OPTS, opt_var,arg) SET_SSL_OPTION_X(OPTS, opt_var, arg, opt_strdup)
+#define EXTENSION_SET_SSL_STRING(OPTS, X, STR) EXTENSION_SET_SSL_STRING_X(OPTS, X, STR, opt_strdup)
#define SET_SSL_PATH_OPTION(OPTS, opt_var,arg) SET_SSL_OPTION_X(OPTS, opt_var, arg, set_ssl_option_unpack_path)
#define EXTENSION_SET_SSL_PATH_STRING(OPTS, X, STR) EXTENSION_SET_SSL_STRING_X(OPTS, X, STR, set_ssl_option_unpack_path)
@@ -876,7 +930,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
if (opt_arg)
{
my_free(options->unix_socket);
- options->unix_socket=my_strdup(opt_arg,MYF(MY_WME));
+ options->unix_socket=opt_strdup(opt_arg,MYF(MY_WME));
}
break;
case OPT_compress:
@@ -887,7 +941,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
if (opt_arg)
{
my_free(options->password);
- options->password=my_strdup(opt_arg,MYF(MY_WME));
+ options->password=opt_strdup(opt_arg,MYF(MY_WME));
}
break;
case OPT_pipe:
@@ -902,7 +956,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
if (opt_arg)
{
my_free(options->user);
- options->user=my_strdup(opt_arg,MYF(MY_WME));
+ options->user=opt_strdup(opt_arg,MYF(MY_WME));
}
break;
case OPT_init_command:
@@ -912,14 +966,14 @@ void mysql_read_default_options(struct st_mysql_options *options,
if (opt_arg)
{
my_free(options->host);
- options->host=my_strdup(opt_arg,MYF(MY_WME));
+ options->host=opt_strdup(opt_arg,MYF(MY_WME));
}
break;
case OPT_database:
if (opt_arg)
{
my_free(options->db);
- options->db=my_strdup(opt_arg,MYF(MY_WME));
+ options->db=opt_strdup(opt_arg,MYF(MY_WME));
}
break;
case OPT_debug:
@@ -953,11 +1007,11 @@ void mysql_read_default_options(struct st_mysql_options *options,
break;
case OPT_character_sets_dir:
my_free(options->charset_dir);
- options->charset_dir = my_strdup(opt_arg, MYF(MY_WME));
+ options->charset_dir = opt_strdup(opt_arg, MYF(MY_WME));
break;
case OPT_default_character_set:
my_free(options->charset_name);
- options->charset_name = my_strdup(opt_arg, MYF(MY_WME));
+ options->charset_name = opt_strdup(opt_arg, MYF(MY_WME));
break;
case OPT_interactive_timeout:
options->client_flag|= CLIENT_INTERACTIVE;
@@ -1201,14 +1255,14 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
if ((pkt_len= cli_safe_read(mysql)) == packet_error)
DBUG_RETURN(0);
if (pkt_len == 0) DBUG_RETURN(0);
- if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
+ if (!(result=(MYSQL_DATA*) my_malloc(key_memory_MYSQL_DATA, sizeof(MYSQL_DATA),
MYF(MY_WME | MY_ZEROFILL))))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
DBUG_RETURN(0);
}
/* Assume rowlength < 8192 */
- init_alloc_root(&result->alloc, "result", 8192, 0,
+ init_alloc_root(key_memory_MYSQL_DATA, &result->alloc, 8192, 0,
MYF(mysql->options.use_thread_specific_memory ?
MY_THREAD_SPECIFIC : 0));
result->alloc.min_malloc=sizeof(MYSQL_ROWS);
@@ -1352,7 +1406,8 @@ mysql_init(MYSQL *mysql)
return 0;
if (!mysql)
{
- if (!(mysql=(MYSQL*) my_malloc(sizeof(*mysql),MYF(MY_WME | MY_ZEROFILL))))
+ if (!(mysql=(MYSQL*) my_malloc(key_memory_MYSQL,
+ sizeof(*mysql), MYF(MY_WME | MY_ZEROFILL))))
{
set_mysql_error(NULL, CR_OUT_OF_MEMORY, unknown_sqlstate);
return 0;
@@ -1664,7 +1719,7 @@ mysql_autodetect_character_set(MYSQL *mysql)
{
if (mysql->options.charset_name)
my_free(mysql->options.charset_name);
- if (!(mysql->options.charset_name= my_strdup(my_default_csname(),MYF(MY_WME))))
+ if (!(mysql->options.charset_name= opt_strdup(my_default_csname(),MYF(MY_WME))))
return 1;
return 0;
}
@@ -2191,7 +2246,7 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
if (mpvio->db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB))
{
end= strmake(end, mpvio->db, NAME_LEN) + 1;
- mysql->db= my_strdup(mpvio->db, MYF(MY_WME));
+ mysql->db= my_strdup(key_memory_MYSQL, mpvio->db, MYF(MY_WME));
}
if (mysql->server_capabilities & CLIENT_PLUGIN_AUTH)
@@ -2985,7 +3040,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
goto error;
/* Save connection information */
- if (!my_multi_malloc(MYF(0),
+ if (!my_multi_malloc(key_memory_MYSQL, MYF(0),
&mysql->host_info, (uint) strlen(host_info)+1,
&mysql->host, (uint) strlen(host)+1,
&mysql->unix_socket,unix_socket ?
@@ -2993,8 +3048,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
&mysql->server_version,
(uint) (server_version_end - (char*) net->read_pos + 1),
NullS) ||
- !(mysql->user=my_strdup(user,MYF(0))) ||
- !(mysql->passwd=my_strdup(passwd,MYF(0))))
+ !(mysql->user=my_strdup(key_memory_MYSQL, user,MYF(0))) ||
+ !(mysql->passwd=my_strdup(key_memory_MYSQL, passwd,MYF(0))))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
goto error;
@@ -3255,7 +3310,7 @@ mysql_select_db(MYSQL *mysql, const char *db)
(ulong) strlen(db),0)))
DBUG_RETURN(error);
my_free(mysql->db);
- mysql->db=my_strdup(db,MYF(MY_WME));
+ mysql->db=my_strdup(key_memory_MYSQL, db,MYF(MY_WME));
DBUG_RETURN(0);
}
@@ -3582,7 +3637,8 @@ MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql)
DBUG_RETURN(0);
}
mysql->status=MYSQL_STATUS_READY; /* server is ready */
- if (!(result=(MYSQL_RES*) my_malloc((uint) (sizeof(MYSQL_RES)+
+ if (!(result=(MYSQL_RES*) my_malloc(key_memory_MYSQL_RES,
+ (uint) (sizeof(MYSQL_RES)+
sizeof(ulong) *
mysql->field_count),
MYF(MY_WME | MY_ZEROFILL))))
@@ -3635,15 +3691,17 @@ static MYSQL_RES * cli_use_result(MYSQL *mysql)
set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
DBUG_RETURN(0);
}
- if (!(result=(MYSQL_RES*) my_malloc(sizeof(*result)+
+ if (!(result=(MYSQL_RES*) my_malloc(key_memory_MYSQL_RES,
+ sizeof(*result)+
sizeof(ulong)*mysql->field_count,
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(0);
result->lengths=(ulong*) (result+1);
result->methods= mysql->methods;
if (!(result->row=(MYSQL_ROW)
- my_malloc(sizeof(result->row[0])*(mysql->field_count+1), MYF(MY_WME))))
- { /* Ptrs: to one row */
+ my_malloc(key_memory_MYSQL_ROW,
+ sizeof(result->row[0])*(mysql->field_count+1), MYF(MY_WME))))
+ { /* Ptrs: to one row */
my_free(result);
DBUG_RETURN(0);
}
@@ -3773,19 +3831,19 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
break;
case MYSQL_READ_DEFAULT_FILE:
my_free(mysql->options.my_cnf_file);
- mysql->options.my_cnf_file=my_strdup(arg,MYF(MY_WME));
+ mysql->options.my_cnf_file= opt_strdup(arg,MYF(MY_WME));
break;
case MYSQL_READ_DEFAULT_GROUP:
my_free(mysql->options.my_cnf_group);
- mysql->options.my_cnf_group=my_strdup(arg,MYF(MY_WME));
+ mysql->options.my_cnf_group= opt_strdup(arg,MYF(MY_WME));
break;
case MYSQL_SET_CHARSET_DIR:
my_free(mysql->options.charset_dir);
- mysql->options.charset_dir=my_strdup(arg,MYF(MY_WME));
+ mysql->options.charset_dir= opt_strdup(arg,MYF(MY_WME));
break;
case MYSQL_SET_CHARSET_NAME:
my_free(mysql->options.charset_name);
- mysql->options.charset_name=my_strdup(arg,MYF(MY_WME));
+ mysql->options.charset_name= opt_strdup(arg,MYF(MY_WME));
break;
case MYSQL_OPT_PROTOCOL:
mysql->options.protocol= *(uint*) arg;
@@ -3797,7 +3855,7 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
break;
case MYSQL_SET_CLIENT_IP:
my_free(mysql->options.client_ip);
- mysql->options.client_ip= my_strdup(arg, MYF(MY_WME));
+ mysql->options.client_ip= opt_strdup(arg, MYF(MY_WME));
break;
case MYSQL_SECURE_AUTH:
mysql->options.secure_auth= *(my_bool *) arg;
@@ -3828,7 +3886,8 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
case MYSQL_PROGRESS_CALLBACK:
if (!mysql->options.extension)
mysql->options.extension= (struct st_mysql_options_extention *)
- my_malloc(sizeof(struct st_mysql_options_extention),
+ my_malloc(key_memory_mysql_options,
+ sizeof(struct st_mysql_options_extention),
MYF(MY_WME | MY_ZEROFILL));
if (mysql->options.extension)
mysql->options.extension->report_progress=
@@ -3848,7 +3907,7 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
my_free(ctxt);
}
if (!(ctxt= (struct mysql_async_context *)
- my_malloc(sizeof(*ctxt), MYF(MY_ZEROFILL))))
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(*ctxt), MYF(MY_ZEROFILL))))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
DBUG_RETURN(1);
@@ -3988,15 +4047,16 @@ mysql_options4(MYSQL *mysql,enum mysql_option option,
if (!my_hash_inited(&mysql->options.extension->connection_attributes))
{
- if (my_hash_init(&mysql->options.extension->connection_attributes,
- &my_charset_bin, 0, 0, 0, (my_hash_get_key) get_attr_key,
- my_free, HASH_UNIQUE))
+ if (my_hash_init(key_memory_mysql_options,
+ &mysql->options.extension->connection_attributes,
+ &my_charset_bin, 0, 0, 0, (my_hash_get_key)
+ get_attr_key, my_free, HASH_UNIQUE))
{
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
DBUG_RETURN(1);
}
}
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(key_memory_mysql_options, MYF(MY_WME),
&elt, 2 * sizeof(LEX_STRING),
&key, key_len + 1,
&value, value_len + 1,
diff --git a/sql-common/client_plugin.c b/sql-common/client_plugin.c
index af86b19f309..0a2e39f7daa 100644
--- a/sql-common/client_plugin.c
+++ b/sql-common/client_plugin.c
@@ -38,6 +38,36 @@
#include "errmsg.h"
#include <mysql/client_plugin.h>
+PSI_memory_key key_memory_root;
+PSI_memory_key key_memory_load_env_plugins;
+
+#ifdef HAVE_PSI_INTERFACE
+PSI_mutex_key key_mutex_LOCK_load_client_plugin;
+
+static PSI_mutex_info all_client_plugin_mutexes[]=
+{
+ {&key_mutex_LOCK_load_client_plugin, "LOCK_load_client_plugin", PSI_FLAG_GLOBAL}
+};
+
+static PSI_memory_info all_client_plugin_memory[]=
+{
+ {&key_memory_root, "root", PSI_FLAG_GLOBAL},
+ {&key_memory_load_env_plugins, "load_env_plugins", PSI_FLAG_GLOBAL}
+};
+
+static void init_client_plugin_psi_keys()
+{
+ const char* category= "sql";
+ int count;
+
+ count= array_elements(all_client_plugin_mutexes);
+ mysql_mutex_register(category, all_client_plugin_mutexes, count);
+
+ count= array_elements(all_client_plugin_memory);
+ mysql_memory_register(category, all_client_plugin_memory, count);
+}
+#endif /* HAVE_PSI_INTERFACE */
+
struct st_client_plugin_int {
struct st_client_plugin_int *next;
void *dlhandle;
@@ -209,7 +239,7 @@ static void load_env_plugins(MYSQL *mysql)
if (!s)
DBUG_VOID_RETURN;
- free_env= plugs= my_strdup(s, MYF(MY_WME));
+ free_env= plugs= my_strdup(key_memory_load_env_plugins, s, MYF(MY_WME));
do {
if ((s= strchr(plugs, ';')))
@@ -242,11 +272,16 @@ int mysql_client_plugin_init()
if (initialized)
DBUG_RETURN(0);
+#ifdef HAVE_PSI_INTERFACE
+ init_client_plugin_psi_keys();
+#endif /* HAVE_PSI_INTERFACE */
+
bzero(&mysql, sizeof(mysql)); /* dummy mysql for set_mysql_extended_error */
bzero(&unused, sizeof unused);
- mysql_mutex_init(0, &LOCK_load_client_plugin, MY_MUTEX_INIT_SLOW);
- init_alloc_root(&mem_root, "client_plugin", 128, 128, MYF(0));
+ mysql_mutex_init(key_mutex_LOCK_load_client_plugin,
+ &LOCK_load_client_plugin, MY_MUTEX_INIT_SLOW);
+ init_alloc_root(key_memory_root, &mem_root, 128, 128, MYF(0));
bzero(&plugin_list, sizeof(plugin_list));
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index da046d0ec3a..d0a3e8a437a 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -433,16 +433,9 @@ ADD_CUSTOM_TARGET(distclean
VERBATIM
)
-IF(INSTALL_LAYOUT STREQUAL "STANDALONE")
-
-# Copy db.opt into data/test/
-SET(DBOPT_FILE ${CMAKE_SOURCE_DIR}/support-files/db.opt )
-INSTALL(FILES ${DBOPT_FILE} DESTINATION data/test COMPONENT DataFiles)
-
-# Install initial database on windows
-IF(WIN32 AND TARGET mysqld AND NOT CMAKE_CROSSCOMPILING)
-
- IF(MSVC_IDE OR CMAKE_GENERATOR MATCHES "Xcode")
+# Install initial database (default on windows, optional target elsewhere)
+IF(TARGET mysqld AND NOT CMAKE_CROSSCOMPILING)
+ IF(GENERATOR_IS_MULTI_CONFIG)
SET (CONFIG_PARAM -DCONFIG=${CMAKE_CFG_INTDIR})
ENDIF()
MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/data)
@@ -461,15 +454,16 @@ IF(WIN32 AND TARGET mysqld AND NOT CMAKE_CROSSCOMPILING)
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/
DEPENDS mysqld
)
+ IF(WIN32)
+ SET(ALL_ON_WINDOWS ALL)
+ ELSE()
+ SET(ALL_ON_WINDOWS)
+ ENDIF()
ADD_CUSTOM_TARGET(initial_database
- ALL
+ ${ALL_ON_WINDOWS}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/initdb.dep
)
-ELSE()
- # Not windows or cross compiling, just install an empty directory
- INSTALL(FILES ${DUMMY_FILE} DESTINATION data/mysql COMPONENT DataFiles)
-ENDIF(WIN32 AND TARGET mysqld AND NOT CMAKE_CROSSCOMPILING)
-ENDIF(INSTALL_LAYOUT STREQUAL "STANDALONE")
+ENDIF()
IF(WIN32)
SET(my_bootstrap_sql ${CMAKE_CURRENT_BINARY_DIR}/my_bootstrap.sql)
diff --git a/sql/backup.cc b/sql/backup.cc
index 1a0341ad9a4..40791e27416 100644
--- a/sql/backup.cc
+++ b/sql/backup.cc
@@ -161,7 +161,8 @@ static bool backup_start(THD *thd)
DBUG_RETURN(1);
}
- mdl_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_START, MDL_EXPLICIT);
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::BACKUP, "", "", MDL_BACKUP_START,
+ MDL_EXPLICIT);
if (thd->mdl_context.acquire_lock(&mdl_request,
thd->variables.lock_wait_timeout))
DBUG_RETURN(1);
diff --git a/sql/bounded_queue.h b/sql/bounded_queue.h
index cd710d835aa..07ab6dbaab9 100644
--- a/sql/bounded_queue.h
+++ b/sql/bounded_queue.h
@@ -59,7 +59,8 @@ public:
*/
typedef uint (*keymaker_function)(Sort_param *param,
Key_type *to,
- Element_type *from);
+ Element_type *from,
+ bool packing_keys);
/**
Function for comparing two keys.
@@ -181,11 +182,12 @@ void Bounded_queue<Element_type, Key_type>::push(Element_type *element)
{
// Replace top element with new key, and re-order the queue.
Key_type **pq_top= reinterpret_cast<Key_type **>(queue_top(&m_queue));
- (void)(*m_keymaker)(m_sort_param, *pq_top, element);
+ (void)(*m_keymaker)(m_sort_param, *pq_top, element, false);
queue_replace_top(&m_queue);
} else {
// Insert new key into the queue.
- (*m_keymaker)(m_sort_param, m_sort_keys[m_queue.elements], element);
+ (*m_keymaker)(m_sort_param, m_sort_keys[m_queue.elements],
+ element, false);
queue_insert(&m_queue,
reinterpret_cast<uchar*>(&m_sort_keys[m_queue.elements]));
}
diff --git a/sql/create_options.cc b/sql/create_options.cc
index 817c4ba46e0..04469120db1 100644
--- a/sql/create_options.cc
+++ b/sql/create_options.cc
@@ -407,7 +407,7 @@ static bool resolve_sysvars(handlerton *hton, ha_create_table_option *rules)
return 1;
}
DBUG_ASSERT(str.length());
- opt->values= my_strndup(str.ptr(), str.length()-1, MYF(MY_WME));
+ opt->values= my_strndup(PSI_INSTRUMENT_ME, str.ptr(), str.length()-1, MYF(MY_WME));
if (!opt->values)
return 1;
break;
diff --git a/sql/datadict.cc b/sql/datadict.cc
index da8376d8b1a..5cfda166b2b 100644
--- a/sql/datadict.cc
+++ b/sql/datadict.cc
@@ -25,7 +25,7 @@ static int read_string(File file, uchar**to, size_t length)
DBUG_ENTER("read_string");
/* This can't use MY_THREAD_SPECIFIC as it's used on server start */
- if (!(*to= (uchar*) my_malloc(length+1,MYF(MY_WME))) ||
+ if (!(*to= (uchar*) my_malloc(PSI_INSTRUMENT_ME, length+1,MYF(MY_WME))) ||
mysql_file_read(file, *to, length, MYF(MY_NABP)))
{
my_free(*to);
diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc
index af541b1bb32..fdca2c47dbc 100644
--- a/sql/debug_sync.cc
+++ b/sql/debug_sync.cc
@@ -122,6 +122,25 @@ static void init_debug_sync_psi_keys(void)
/**
+ Set the THD::proc_info without instrumentation.
+ This method is private to DEBUG_SYNC,
+ and on purpose avoid any use of:
+ - the SHOW PROFILE instrumentation
+ - the PERFORMANCE_SCHEMA instrumentation
+ so that using DEBUG_SYNC() in the server code
+ does not cause the instrumentations to record
+ spurious data.
+*/
+static const char*
+debug_sync_thd_proc_info(THD *thd, const char* info)
+{
+ const char* old_proc_info= thd->proc_info;
+ thd->proc_info= info;
+ return old_proc_info;
+}
+
+
+/**
Initialize the debug sync facility at server start.
@return status
@@ -236,7 +255,8 @@ void debug_sync_init_thread(THD *thd)
if (opt_debug_sync_timeout)
{
thd->debug_sync_control= (st_debug_sync_control*)
- my_malloc(sizeof(st_debug_sync_control),
+ my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(st_debug_sync_control),
MYF(MY_WME | MY_ZEROFILL | MY_THREAD_SPECIFIC));
if (!thd->debug_sync_control)
{
@@ -657,7 +677,7 @@ static st_debug_sync_action *debug_sync_get_action(THD *thd,
if (ds_control->ds_active > ds_control->ds_allocated)
{
uint new_alloc= ds_control->ds_active + 3;
- void *new_action= my_realloc(ds_control->ds_action,
+ void *new_action= my_realloc(PSI_NOT_INSTRUMENTED, ds_control->ds_action,
new_alloc * sizeof(st_debug_sync_action),
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
if (!new_action)
@@ -1364,7 +1384,7 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
strxnmov(ds_control->ds_proc_info, sizeof(ds_control->ds_proc_info)-1,
"debug sync point: ", action->sync_point.c_ptr(), NullS);
old_proc_info= thd->proc_info;
- thd_proc_info(thd, ds_control->ds_proc_info);
+ debug_sync_thd_proc_info(thd, ds_control->ds_proc_info);
}
/*
@@ -1482,11 +1502,11 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
mysql_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex= old_mutex;
thd->mysys_var->current_cond= old_cond;
- thd_proc_info(thd, old_proc_info);
+ debug_sync_thd_proc_info(thd, old_proc_info);
mysql_mutex_unlock(&thd->mysys_var->mutex);
}
else
- thd_proc_info(thd, old_proc_info);
+ debug_sync_thd_proc_info(thd, old_proc_info);
}
else
{
diff --git a/sql/derror.cc b/sql/derror.cc
index 7a79833c26c..1c10bdfdd92 100644
--- a/sql/derror.cc
+++ b/sql/derror.cc
@@ -120,8 +120,9 @@ bool init_errmessage(void)
all_errors+= errors_per_range[i];
if (!(original_error_messages= (const char***)
- my_malloc((all_errors + MAX_ERROR_RANGES)* sizeof(void*),
- MYF(MY_ZEROFILL))))
+ my_malloc(PSI_NOT_INSTRUMENTED,
+ (all_errors + MAX_ERROR_RANGES)*sizeof(void*),
+ MYF(MY_ZEROFILL))))
DBUG_RETURN(TRUE);
errmsgs= (const char**)(original_error_messages + MAX_ERROR_RANGES);
@@ -315,7 +316,8 @@ bool read_texts(const char *file_name, const char *language,
DBUG_RETURN(1);
if (!(*data= (const char***)
- my_malloc((size_t) ((MAX_ERROR_RANGES+1) * sizeof(char**) +
+ my_malloc(key_memory_errmsgs,
+ (size_t) ((MAX_ERROR_RANGES+1) * sizeof(char**) +
MY_MAX(msg_file.text_length, msg_file.errors * 2)+
msg_file.errors * sizeof(char*)),
MYF(MY_WME))))
diff --git a/sql/discover.cc b/sql/discover.cc
index 3e41388ed51..e49a2a3b0c0 100644
--- a/sql/discover.cc
+++ b/sql/discover.cc
@@ -76,7 +76,8 @@ int readfrm(const char *name, const uchar **frmdata, size_t *len)
// Read whole frm file
error= 3;
- if (!(read_data= (uchar*)my_malloc(read_len, MYF(MY_WME))))
+ if (!(read_data= (uchar*)my_malloc(key_memory_frm_string, read_len,
+ MYF(MY_WME))))
goto err;
if (mysql_file_read(file, read_data, read_len, MYF(MY_NABP)))
{
diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc
index 5ea8300b7e4..bd457fba4fa 100644
--- a/sql/event_data_objects.cc
+++ b/sql/event_data_objects.cc
@@ -25,13 +25,13 @@
// date_add_interval,
// calc_time_diff
#include "tztime.h" // my_tz_find, my_tz_OFFSET0, struct Time_zone
-#include "sql_acl.h" // EVENT_ACL, SUPER_ACL
#include "sp.h" // load_charset, load_collation
#include "events.h"
#include "event_data_objects.h"
#include "event_db_repository.h"
#include "sp_head.h"
#include "sql_show.h" // append_definer, append_identifier
+#include "mysql/psi/mysql_sp.h"
#ifdef WITH_WSREP
#include "wsrep_trans_observer.h"
#endif /* WITH_WSREP */
@@ -40,6 +40,18 @@
@{
*/
+#ifdef HAVE_PSI_INTERFACE
+void init_scheduler_psi_keys()
+{
+ const char *category= "scheduler";
+
+ PSI_server->register_statement(category, & Event_queue_element_for_exec::psi_info, 1);
+}
+
+PSI_statement_info Event_queue_element_for_exec::psi_info=
+{ 0, "event", 0};
+#endif
+
/*************************************************************************/
/**
@@ -173,11 +185,13 @@ Event_creation_ctx::load_from_db(THD *thd,
*/
bool
-Event_queue_element_for_exec::init(const LEX_CSTRING *db, const LEX_CSTRING *n)
+Event_queue_element_for_exec::init(const LEX_CSTRING &db, const LEX_CSTRING &n)
{
- if (!(dbname.str= my_strndup(db->str, dbname.length= db->length, MYF(MY_WME))))
+ if (!(dbname.str= my_strndup(key_memory_Event_queue_element_for_exec_names,
+ db.str, dbname.length= db.length, MYF(MY_WME))))
return TRUE;
- if (!(name.str= my_strndup(n->str, name.length= n->length, MYF(MY_WME))))
+ if (!(name.str= my_strndup(key_memory_Event_queue_element_for_exec_names,
+ n.str, name.length= n.length, MYF(MY_WME))))
{
my_free(const_cast<char*>(dbname.str));
return TRUE;
@@ -211,7 +225,7 @@ Event_basic::Event_basic()
{
DBUG_ENTER("Event_basic::Event_basic");
/* init memory root */
- init_sql_alloc(&mem_root, "Event_basic", 256, 512, MYF(0));
+ init_sql_alloc(key_memory_event_basic_root, &mem_root, 256, 512, MYF(0));
dbname.str= name.str= NULL;
dbname.length= name.length= 0;
time_zone= NULL;
@@ -1425,15 +1439,23 @@ Event_job_data::execute(THD *thd, bool drop)
{
Parser_state parser_state;
+ sql_digest_state *parent_digest= thd->m_digest;
+ PSI_statement_locker *parent_locker= thd->m_statement_psi;
+ bool res;
+
if (parser_state.init(thd, thd->query(), thd->query_length()))
goto end;
- if (parse_sql(thd, & parser_state, creation_ctx))
+ thd->m_digest= NULL;
+ thd->m_statement_psi= NULL;
+ res= parse_sql(thd, & parser_state, creation_ctx);
+ thd->m_digest= parent_digest;
+ thd->m_statement_psi= parent_locker;
+
+ if (res)
{
- sql_print_error("Event Scheduler: "
- "%serror during compilation of %s.%s",
- thd->is_fatal_error ? "fatal " : "",
- (const char *) dbname.str, (const char *) name.str);
+ sql_print_error("Event Scheduler: %serror during compilation of %s.%s",
+ thd->is_fatal_error ? "fatal " : "", dbname.str, name.str);
goto end;
}
}
@@ -1456,6 +1478,9 @@ Event_job_data::execute(THD *thd, bool drop)
sphead->set_creation_ctx(creation_ctx);
sphead->optimize();
+ sphead->m_sp_share= MYSQL_GET_SP_SHARE(SP_TYPE_EVENT,
+ dbname.str, static_cast<uint>(dbname.length),
+ name.str, static_cast<uint>(name.length));
ret= sphead->execute_procedure(thd, &empty_item_list);
/*
There is no pre-locking and therefore there should be no
@@ -1492,7 +1517,7 @@ end:
*/
privilege_t saved_master_access(thd->security_ctx->master_access);
- thd->security_ctx->master_access |= SUPER_ACL;
+ thd->security_ctx->master_access |= PRIV_IGNORE_READ_ONLY;
bool save_tx_read_only= thd->tx_read_only;
thd->tx_read_only= false;
diff --git a/sql/event_data_objects.h b/sql/event_data_objects.h
index e5e3e4eb087..c20a8c31425 100644
--- a/sql/event_data_objects.h
+++ b/sql/event_data_objects.h
@@ -30,6 +30,8 @@ class THD;
class Time_zone;
struct TABLE;
+void init_scheduler_psi_keys(void);
+
class Event_queue_element_for_exec
{
public:
@@ -37,7 +39,7 @@ public:
~Event_queue_element_for_exec();
bool
- init(const LEX_CSTRING *dbname, const LEX_CSTRING *name);
+ init(const LEX_CSTRING &dbname, const LEX_CSTRING &name);
LEX_CSTRING dbname;
LEX_CSTRING name;
@@ -48,6 +50,15 @@ private:
/* Prevent use of these */
Event_queue_element_for_exec(const Event_queue_element_for_exec &);
void operator=(Event_queue_element_for_exec &);
+#ifdef HAVE_PSI_INTERFACE
+public:
+ PSI_statement_info* get_psi_info()
+ {
+ return & psi_info;
+ }
+
+ static PSI_statement_info psi_info;
+#endif
};
diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc
index 6783338ab10..af43d92dea7 100644
--- a/sql/event_db_repository.cc
+++ b/sql/event_db_repository.cc
@@ -24,7 +24,6 @@
#include "sql_db.h" // get_default_db_collation
#include "sql_time.h" // interval_type_to_name
#include "tztime.h" // struct Time_zone
-#include "sql_acl.h" // SUPER_ACL, MYSQL_DB_FIELD_COUNT, mysql_db_table_fields
#include "records.h" // init_read_record, end_read_record
#include "sp_head.h"
#include "event_data_objects.h"
@@ -1128,7 +1127,7 @@ update_timing_fields_for_event(THD *thd,
*/
save_binlog_format= thd->set_current_stmt_binlog_format_stmt();
- DBUG_ASSERT(thd->security_ctx->master_access & SUPER_ACL);
+ DBUG_ASSERT(thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY);
if (open_event_table(thd, TL_WRITE, &table))
goto end;
diff --git a/sql/event_queue.cc b/sql/event_queue.cc
index 6b3f5777df3..71d1d2c68ee 100644
--- a/sql/event_queue.cc
+++ b/sql/event_queue.cc
@@ -24,6 +24,7 @@
#include "tztime.h" // my_tz_find, my_tz_OFFSET0, struct Time_zone
#include "log.h" // sql_print_error
#include "sql_class.h" // struct THD
+#include "mysql/psi/mysql_sp.h"
/**
@addtogroup Event_Scheduler
@@ -351,6 +352,9 @@ Event_queue::drop_matching_events(THD *thd, const LEX_CSTRING *pattern,
is ok.
*/
queue_remove(&queue, i);
+ /* Drop statistics for this stored program from performance schema. */
+ MYSQL_DROP_SP(SP_TYPE_EVENT, et->dbname.str, static_cast<uint>(et->dbname.length),
+ et->name.str, static_cast<uint>(et->name.length));
delete et;
}
else
@@ -637,7 +641,7 @@ Event_queue::get_top_for_execution_if_time(THD *thd,
}
if (!(*event_name= new Event_queue_element_for_exec()) ||
- (*event_name)->init(&top->dbname, &top->name))
+ (*event_name)->init(top->dbname, top->name))
{
ret= TRUE;
break;
diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc
index 9a8869e2fb3..0e8e4826939 100644
--- a/sql/event_scheduler.cc
+++ b/sql/event_scheduler.cc
@@ -22,7 +22,7 @@
#include "event_queue.h"
#include "event_db_repository.h"
#include "sql_connect.h" // init_new_connection_handler_thread
-#include "sql_acl.h" // SUPER_ACL
+#include "sql_class.h"
/**
@addtogroup Event_Scheduler
@@ -291,6 +291,15 @@ Event_worker_thread::run(THD *thd, Event_queue_element_for_exec *event)
DBUG_ASSERT(thd->m_digest == NULL);
DBUG_ASSERT(thd->m_statement_psi == NULL);
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ PSI_statement_locker_state state;
+ thd->m_statement_psi= MYSQL_START_STATEMENT(& state,
+ event->get_psi_info()->m_key,
+ event->dbname.str,
+ event->dbname.length,
+ thd->charset(), NULL);
+#endif
+
thd->thread_stack= &my_stack; // remember where our stack is
res= post_init_event_thread(thd);
@@ -319,7 +328,10 @@ Event_worker_thread::run(THD *thd, Event_queue_element_for_exec *event)
job_data.definer.str,
job_data.dbname.str, job_data.name.str);
end:
- DBUG_ASSERT(thd->m_statement_psi == NULL);
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ MYSQL_END_STATEMENT(thd->m_statement_psi, thd->get_stmt_da());
+ thd->m_statement_psi= NULL;
+#endif
DBUG_ASSERT(thd->m_digest == NULL);
DBUG_PRINT("info", ("Done with Event %s.%s", event->dbname.str,
event->name.str));
@@ -405,13 +417,14 @@ Event_scheduler::start(int *err_no)
Same goes for transaction access mode. Set it to read-write for this thd.
*/
- new_thd->security_ctx->master_access |= SUPER_ACL;
+ new_thd->security_ctx->master_access |= PRIV_IGNORE_READ_ONLY;
new_thd->variables.tx_read_only= false;
new_thd->tx_read_only= false;
/* This should not be marked with MY_THREAD_SPECIFIC */
scheduler_param_value=
- (struct scheduler_param *)my_malloc(sizeof(struct scheduler_param), MYF(0));
+ (struct scheduler_param *)my_malloc(key_memory_Event_scheduler_scheduler_param,
+ sizeof(struct scheduler_param), MYF(0));
scheduler_param_value->thd= new_thd;
scheduler_param_value->scheduler= this;
diff --git a/sql/events.cc b/sql/events.cc
index 68e013adfae..3bed25e20c3 100644
--- a/sql/events.cc
+++ b/sql/events.cc
@@ -34,6 +34,7 @@
#include "sp_head.h" // for Stored_program_creation_ctx
#include "set_var.h"
#include "lock.h" // lock_object_name
+#include "mysql/psi/mysql_sp.h"
/**
@addtogroup Event_Scheduler
@@ -620,6 +621,9 @@ Events::drop_event(THD *thd, const LEX_CSTRING *dbname,
/* Binlog the drop event. */
DBUG_ASSERT(thd->query() && thd->query_length());
ret= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
+ /* Drop statistics for this stored program from performance schema. */
+ MYSQL_DROP_SP(SP_TYPE_EVENT,
+ dbname->str, static_cast<uint>(dbname->length), name->str, static_cast<uint>(name->length));
}
thd->restore_stmt_binlog_format(save_binlog_format);
@@ -832,13 +836,12 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */)
*/
if (thd->lex->sql_command == SQLCOM_SHOW_EVENTS)
{
- DBUG_ASSERT(thd->lex->first_select_lex()->db.str);
- if (!is_infoschema_db(&thd->lex->first_select_lex()->db) && // There is no events in I_S
- check_access(thd, EVENT_ACL, thd->lex->first_select_lex()->db.str,
- NULL, NULL, 0, 0))
+ LEX_CSTRING *lexdb= &thd->lex->first_select_lex()->db;
+ DBUG_ASSERT(lexdb);
+ if (!is_infoschema_db(lexdb) && !is_perfschema_db(lexdb) &&
+ check_access(thd, EVENT_ACL, lexdb->str, NULL, NULL, 0, 0))
DBUG_RETURN(1);
- db= normalize_db_name(thd->lex->first_select_lex()->db.str,
- db_tmp, sizeof(db_tmp));
+ db= normalize_db_name(lexdb->str, db_tmp, sizeof(db_tmp));
}
ret= db_repository->fill_schema_events(thd, tables, db);
@@ -1028,6 +1031,8 @@ PSI_stage_info stage_waiting_on_empty_queue= { 0, "Waiting on empty queue", 0};
PSI_stage_info stage_waiting_for_next_activation= { 0, "Waiting for next activation", 0};
PSI_stage_info stage_waiting_for_scheduler_to_stop= { 0, "Waiting for the scheduler to stop", 0};
+PSI_memory_key key_memory_event_basic_root;
+
#ifdef HAVE_PSI_INTERFACE
PSI_stage_info *all_events_stages[]=
{
@@ -1036,6 +1041,11 @@ PSI_stage_info *all_events_stages[]=
& stage_waiting_for_scheduler_to_stop
};
+static PSI_memory_info all_events_memory[]=
+{
+ { &key_memory_event_basic_root, "Event_basic::mem_root", PSI_FLAG_GLOBAL}
+};
+
static void init_events_psi_keys(void)
{
const char* category= "sql";
@@ -1053,6 +1063,10 @@ static void init_events_psi_keys(void)
count= array_elements(all_events_stages);
mysql_stage_register(category, all_events_stages, count);
+ count= array_elements(all_events_memory);
+ mysql_memory_register(category, all_events_memory, count);
+
+ init_scheduler_psi_keys();
}
#endif /* HAVE_PSI_INTERFACE */
@@ -1158,7 +1172,7 @@ Events::load_events_from_db(THD *thd)
*/
privilege_t saved_master_access(thd->security_ctx->master_access);
- thd->security_ctx->master_access |= SUPER_ACL;
+ thd->security_ctx->master_access |= PRIV_IGNORE_READ_ONLY;
bool save_tx_read_only= thd->tx_read_only;
thd->tx_read_only= false;
diff --git a/sql/events.h b/sql/events.h
index 9e1651c767a..2fb13d7c807 100644
--- a/sql/events.h
+++ b/sql/events.h
@@ -31,6 +31,8 @@ extern PSI_cond_key key_event_scheduler_COND_state;
extern PSI_thread_key key_thread_event_scheduler, key_thread_event_worker;
#endif /* HAVE_PSI_INTERFACE */
+extern PSI_memory_key key_memory_event_basic_root;
+
/* Always defined, for SHOW PROCESSLIST. */
extern PSI_stage_info stage_waiting_on_empty_queue;
extern PSI_stage_info stage_waiting_for_next_activation;
diff --git a/sql/field.cc b/sql/field.cc
index 1ce49b0bdfa..460c26fbfd2 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -1013,8 +1013,15 @@ CPP_UNNAMED_NS_END
Static help functions
*****************************************************************************/
+/*
+ @brief
+ Create a fixed size sort key part
+
+ @param buff buffer where values are written
+ @param length fixed size of the sort column
+*/
-void Field::make_sort_key(uchar *buff,uint length)
+void Field::make_sort_key_part(uchar *buff,uint length)
{
if (maybe_null())
{
@@ -1029,6 +1036,62 @@ void Field::make_sort_key(uchar *buff,uint length)
}
+/*
+ @brief
+ Create a packed sort key part
+
+ @param buff buffer where values are written
+ @param sort_field sort column structure
+
+ @retval
+ length of the bytes written, does not include the NULL bytes
+*/
+uint
+Field::make_packed_sort_key_part(uchar *buff,
+ const SORT_FIELD_ATTR *sort_field)
+{
+ if (maybe_null())
+ {
+ if (is_null())
+ {
+ *buff++= 0;
+ return 0; // For NULL values don't write any data
+ }
+ *buff++=1;
+ }
+ sort_string(buff, sort_field->original_length);
+ return sort_field->original_length;
+}
+
+
+uint
+Field_longstr::make_packed_sort_key_part(uchar *buff,
+ const SORT_FIELD_ATTR *sort_field)
+{
+ if (maybe_null())
+ {
+ if (is_null())
+ {
+ *buff++= 0;
+ return 0; // For NULL values don't write any data
+ }
+ *buff++=1;
+ }
+ uchar *end= pack_sort_string(buff, sort_field);
+ return static_cast<int>(end-buff);
+}
+
+
+uchar*
+Field_longstr::pack_sort_string(uchar *to, const SORT_FIELD_ATTR *sort_field)
+{
+ String buf;
+ val_str(&buf, &buf);
+ return to + sort_field->pack_sort_string(to, buf.lex_cstring(),
+ field_charset());
+}
+
+
/**
@brief
Determine the relative position of the field value in a numeric interval
@@ -5395,29 +5458,6 @@ static longlong read_native(const uchar *from, uint bytes)
}
#endif
-static void store_lowendian(ulonglong num, uchar *to, uint bytes)
-{
- switch(bytes) {
- case 1: *to= (uchar)num; break;
- case 2: int2store(to, num); break;
- case 3: int3store(to, num); break;
- case 4: int4store(to, num); break;
- case 8: int8store(to, num); break;
- default: DBUG_ASSERT(0);
- }
-}
-
-static longlong read_lowendian(const uchar *from, uint bytes)
-{
- switch(bytes) {
- case 1: return from[0];
- case 2: return uint2korr(from);
- case 3: return uint3korr(from);
- case 4: return uint4korr(from);
- case 8: return sint8korr(from);
- default: DBUG_ASSERT(0); return 0;
- }
-}
void Field_timestamp_hires::store_TIMEVAL(const timeval &tv)
{
@@ -7030,6 +7070,27 @@ Field_longstr::report_if_important_data(const char *pstr, const char *end,
}
+/*
+ This is JSON specific.
+ We should eventually add Field_json_varchar and Field_json_blob
+ and move make_send_field() to the new classes.
+*/
+void Field_longstr::make_send_field(Send_field *field)
+{
+ Field_str::make_send_field(field);
+ if (check_constraint)
+ {
+ /*
+ Append the format that is implicitly implied by the CHECK CONSTRAINT.
+ For example:
+ CREATE TABLE t1 (js longtext DEFAULT NULL CHECK (json_valid(a)));
+ SELECT j FROM t1;
+ will add "format=json" to the extended type info metadata for t1.js.
+ */
+ check_constraint->expr->set_format_by_check_constraint(field);
+ }
+}
+
/* Copy a string and fill with space */
int Field_string::store(const char *from, size_t length,CHARSET_INFO *cs)
@@ -8013,7 +8074,7 @@ int Field_longstr::compress(char *to, uint to_length,
max_length < length)
{
set_if_smaller(max_length, static_cast<ulonglong>(mbmaxlen()) * length + 1);
- if (!(buf= (char*) my_malloc(max_length, MYF(MY_WME))))
+ if (!(buf= (char*) my_malloc(PSI_INSTRUMENT_ME, max_length, MYF(MY_WME))))
{
*out_length= 0;
return -1;
@@ -8526,8 +8587,15 @@ Binlog_type_info Field_blob::binlog_type_info() const
uint32 Field_blob::sort_length() const
{
- return (uint32) (get_thd()->variables.max_sort_length +
- (field_charset() == &my_charset_bin ? 0 : packlength));
+ return packlength == 4 ?
+ UINT_MAX32 :
+ (uint32) field_length + sort_suffix_length();
+}
+
+
+uint32 Field_blob::sort_suffix_length() const
+{
+ return field_charset() == &my_charset_bin ? packlength : 0;
}
diff --git a/sql/field.h b/sql/field.h
index 4a8eec35b05..425f9f5292c 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -51,6 +51,8 @@ class Table_ident;
class SEL_ARG;
class RANGE_OPT_PARAM;
struct KEY_PART;
+struct SORT_FIELD;
+struct SORT_FIELD_ATTR;
enum enum_check_fields
{
@@ -1075,6 +1077,12 @@ public:
virtual uint32 data_length() { return pack_length(); }
virtual uint32 sort_length() const { return pack_length(); }
+ /*
+ sort_suffix_length() return the length bytes needed to store the length
+ for binary charset
+ */
+ virtual uint32 sort_suffix_length() const { return 0; }
+
/*
Get the number bytes occupied by the value in the field.
CHAR values are stripped of trailing spaces.
@@ -1410,7 +1418,18 @@ public:
return bytes;
}
- void make_sort_key(uchar *buff, uint length);
+ /*
+ Create mem-comparable sort key part for a sort key
+ */
+ void make_sort_key_part(uchar *buff, uint length);
+
+ /*
+ create a compact sort key which can be compared with a comparison
+ function. They are called packed sort keys
+ */
+ virtual uint make_packed_sort_key_part(uchar *buff,
+ const SORT_FIELD_ATTR *sort_field);
+
virtual void make_send_field(Send_field *);
virtual void sort_string(uchar *buff,uint length)=0;
virtual bool optimize_range(uint idx, uint part) const;
@@ -1527,7 +1546,7 @@ public:
{ return length;}
virtual uint max_packed_col_length(uint max_length)
{ return max_length;}
- virtual bool is_packable() { return false; }
+ virtual bool is_packable() const { return false; }
uint offset(const uchar *record) const
{
@@ -2120,11 +2139,12 @@ public:
{}
enum_conv_type rpl_conv_type_from(const Conv_source &source,
const Relay_log_info *rli,
- const Conv_param &param) const;
- int store_decimal(const my_decimal *d);
- uint32 max_data_length() const;
+ const Conv_param &param) const override;
+ int store_decimal(const my_decimal *d) override;
+ uint32 max_data_length() const override;
+ void make_send_field(Send_field *) override;
- bool is_varchar_and_in_write_set() const
+ bool is_varchar_and_in_write_set() const override
{
DBUG_ASSERT(table && table->write_set);
return bitmap_is_set(table->write_set, field_index);
@@ -2132,15 +2152,18 @@ public:
bool match_collation_to_optimize_range() const { return true; }
bool can_optimize_keypart_ref(const Item_bool_func *cond,
- const Item *item) const;
+ const Item *item) const override;
bool can_optimize_hash_join(const Item_bool_func *cond,
- const Item *item) const;
+ const Item *item) const override;
bool can_optimize_group_min_max(const Item_bool_func *cond,
- const Item *const_item) const;
+ const Item *const_item) const override;
bool can_optimize_range(const Item_bool_func *cond,
const Item *item,
- bool is_eq_func) const;
- bool is_packable() { return true; }
+ bool is_eq_func) const override;
+ bool is_packable() const override { return true; }
+ uint make_packed_sort_key_part(uchar *buff,
+ const SORT_FIELD_ATTR *sort_field)override;
+ uchar* pack_sort_string(uchar *to, const SORT_FIELD_ATTR *sort_field);
};
/* base class for float and double and decimal (old one) */
@@ -4042,8 +4065,11 @@ public:
uint32 key_length() const override { return (uint32) field_length; }
uint32 sort_length() const override
{
- return (uint32) field_length + (field_charset() == &my_charset_bin ?
- length_bytes : 0);
+ return (uint32) field_length + sort_suffix_length();
+ }
+ virtual uint32 sort_suffix_length() const override
+ {
+ return (field_charset() == &my_charset_bin ? length_bytes : 0);
}
Copy_func *get_copy_func(const Field *from) const override;
bool memcpy_field_possible(const Field *from) const override;
@@ -4187,6 +4213,30 @@ static inline longlong read_bigendian(const uchar *from, uint bytes)
}
}
+static inline void store_lowendian(ulonglong num, uchar *to, uint bytes)
+{
+ switch(bytes) {
+ case 1: *to= (uchar)num; break;
+ case 2: int2store(to, num); break;
+ case 3: int3store(to, num); break;
+ case 4: int4store(to, num); break;
+ case 8: int8store(to, num); break;
+ default: DBUG_ASSERT(0);
+ }
+}
+
+static inline longlong read_lowendian(const uchar *from, uint bytes)
+{
+ switch(bytes) {
+ case 1: return from[0];
+ case 2: return uint2korr(from);
+ case 3: return uint3korr(from);
+ case 4: return uint4korr(from);
+ case 8: return sint8korr(from);
+ default: DBUG_ASSERT(0); return 0;
+ }
+}
+
extern LEX_CSTRING temp_lex_str;
@@ -4353,6 +4403,7 @@ public:
{ return (uint32) (packlength); }
uint row_pack_length() const override { return pack_length_no_ptr(); }
uint32 sort_length() const override;
+ uint32 sort_suffix_length() const override;
uint32 value_length() override { return get_length(); }
virtual uint32 max_data_length() const override
{
@@ -5461,7 +5512,8 @@ public:
*/
class Send_field :public Sql_alloc,
- public Type_handler_hybrid_field_type
+ public Type_handler_hybrid_field_type,
+ public Send_field_extended_metadata
{
public:
LEX_CSTRING db_name;
diff --git a/sql/filesort.cc b/sql/filesort.cc
index 763f9f59246..1e19d492220 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -48,13 +48,18 @@ static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
ha_rows *found_rows);
static bool write_keys(Sort_param *param, SORT_INFO *fs_info,
uint count, IO_CACHE *buffer_file, IO_CACHE *tempfile);
-static uint make_sortkey(Sort_param *param, uchar *to, uchar *ref_pos);
+static uint make_sortkey(Sort_param *param, uchar *to, uchar *ref_pos,
+ bool using_packed_sortkeys= false);
+static uint make_sortkey(Sort_param *param, uchar *to);
+static uint make_packed_sortkey(Sort_param *param, uchar *to);
+
static void register_used_fields(Sort_param *param);
static bool save_index(Sort_param *param, uint count,
SORT_INFO *table_sort);
static uint suffix_length(ulong string_length);
-static uint sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
- bool *multi_byte_charset);
+static uint sortlength(THD *thd, Sort_keys *sortorder,
+ bool *multi_byte_charset,
+ bool *allow_packing_for_sortkeys);
static Addon_fields *get_addon_fields(TABLE *table, uint sortlength,
uint *addon_length,
uint *m_packable_length);
@@ -63,6 +68,31 @@ static bool check_if_pq_applicable(Sort_param *param, SORT_INFO *info,
TABLE *table,
ha_rows records, size_t memory_available);
+static void store_key_part_length(uint32 num, uchar *to, uint bytes)
+{
+ switch(bytes) {
+ case 1: *to= (uchar)num; break;
+ case 2: int2store(to, num); break;
+ case 3: int3store(to, num); break;
+ case 4: int4store(to, num); break;
+ default: DBUG_ASSERT(0);
+ }
+}
+
+
+static uint32 read_keypart_length(const uchar *from, uint bytes)
+{
+ switch(bytes) {
+ case 1: return from[0];
+ case 2: return uint2korr(from);
+ case 3: return uint3korr(from);
+ case 4: return uint4korr(from);
+ default: DBUG_ASSERT(0); return 0;
+ }
+}
+
+
+// @param sortlen [Maximum] length of the sort key
void Sort_param::init_for_filesort(uint sortlen, TABLE *table,
ha_rows maxrows, bool sort_positions)
{
@@ -108,7 +138,7 @@ void Sort_param::try_to_pack_addons(ulong max_length_for_sort_data)
if (!Addon_fields::can_pack_addon_fields(res_length))
return;
- const uint sz= Addon_fields::size_of_length_field;;
+ const uint sz= Addon_fields::size_of_length_field;
if (rec_length + sz > max_length_for_sort_data)
return;
@@ -125,6 +155,7 @@ void Sort_param::try_to_pack_addons(ulong max_length_for_sort_data)
addon_fields->set_using_packed_addons(true);
m_using_packed_addons= true;
+ m_packed_format= true;
addon_length+= sz;
res_length+= sz;
@@ -171,18 +202,21 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort,
ha_rows num_rows= HA_POS_ERROR;
IO_CACHE tempfile, buffpek_pointers, *outfile;
Sort_param param;
- bool multi_byte_charset;
+ bool multi_byte_charset, allow_packing_for_sortkeys;
Bounded_queue<uchar, uchar> pq;
SQL_SELECT *const select= filesort->select;
ha_rows max_rows= filesort->limit;
uint s_length= 0;
+ Sort_keys *sort_keys;
DBUG_ENTER("filesort");
- if (!(s_length= filesort->make_sortorder(thd, join, first_table_bit)))
+ if (!(sort_keys= filesort->make_sortorder(thd, join, first_table_bit)))
DBUG_RETURN(NULL); /* purecov: inspected */
- DBUG_EXECUTE("info",TEST_filesort(filesort->sortorder,s_length););
+ s_length= static_cast<uint>(sort_keys->size());
+
+ DBUG_EXECUTE("info",TEST_filesort(filesort->sortorder, s_length););
#ifdef SKIP_DBUG_IN_FILESORT
DBUG_PUSH(""); /* No DBUG here */
#endif
@@ -215,16 +249,14 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort,
error= 1;
sort->found_rows= HA_POS_ERROR;
- param.init_for_filesort(sortlength(thd, filesort->sortorder, s_length,
- &multi_byte_charset),
- table, max_rows, filesort->sort_positions);
+ param.sort_keys= sort_keys;
+ uint sort_len= sortlength(thd, sort_keys, &multi_byte_charset,
+ &allow_packing_for_sortkeys);
- sort->addon_fields= param.addon_fields;
+ param.init_for_filesort(sort_len, table, max_rows, filesort->sort_positions);
- if (multi_byte_charset &&
- !(param.tmp_buffer= (char*) my_malloc(param.sort_length,
- MYF(MY_WME | MY_THREAD_SPECIFIC))))
- goto err;
+ sort->addon_fields= param.addon_fields;
+ sort->sort_keys= param.sort_keys;
if (select && select->quick)
thd->inc_status_sort_range();
@@ -245,6 +277,7 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort,
tracker->incr_pq_used();
param.using_pq= true;
const size_t compare_length= param.sort_length;
+ DBUG_ASSERT(param.using_packed_sortkeys() == false);
/*
For PQ queries (with limit) we know exactly how many pointers/records
we have in the buffer, so to simplify things, we initialize
@@ -271,9 +304,19 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort,
{
DBUG_PRINT("info", ("filesort PQ is not applicable"));
+ if (allow_packing_for_sortkeys)
+ param.try_to_pack_sortkeys();
+
param.try_to_pack_addons(thd->variables.max_length_for_sort_data);
+ tracker->report_sort_keys_format(param.using_packed_sortkeys());
param.using_pq= false;
+ if ((multi_byte_charset || param.using_packed_sortkeys()) &&
+ !(param.tmp_buffer= (char*) my_malloc(key_memory_Sort_param_tmp_buffer, param.sort_length,
+ MYF(MY_WME | MY_THREAD_SPECIFIC))))
+ goto err;
+
+
size_t min_sort_memory= MY_MAX(MIN_SORT_MEMORY,
param.sort_length*MERGEBUFF2);
set_if_bigger(min_sort_memory, sizeof(Merge_chunk*)*MERGEBUFF2);
@@ -298,6 +341,12 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort,
tracker->report_sort_buffer_size(sort->sort_buffer_size());
}
+ if (param.using_addon_fields())
+ {
+ // report information whether addon fields are packed or not
+ tracker->report_addon_fields_format(param.using_packed_addons());
+ }
+
if (open_cached_file(&buffpek_pointers,mysql_tmpdir,TEMP_PREFIX,
DISK_BUFFER_SIZE, MYF(MY_WME)))
goto err;
@@ -479,24 +528,42 @@ void Filesort::cleanup()
}
-uint Filesort::make_sortorder(THD *thd, JOIN *join, table_map first_table_bit)
+/*
+ Create the Sort_keys array and fill the sort_keys[i]->{item|field}.
+
+ This indicates which field/item values will be used as sort keys.
+ Attributes like lengths are not filled yet.
+*/
+
+Sort_keys*
+Filesort::make_sortorder(THD *thd, JOIN *join, table_map first_table_bit)
{
uint count;
SORT_FIELD *sort,*pos;
ORDER *ord;
DBUG_ENTER("make_sortorder");
-
count=0;
for (ord = order; ord; ord= ord->next)
count++;
- if (!sortorder)
- sortorder= (SORT_FIELD*) thd->alloc(sizeof(SORT_FIELD) * (count + 1));
+
+ if (sortorder)
+ DBUG_RETURN(sort_keys);
+
+ DBUG_ASSERT(sort_keys == NULL);
+
+ sortorder= (SORT_FIELD*) thd->alloc(sizeof(SORT_FIELD) * count);
pos= sort= sortorder;
if (!pos)
DBUG_RETURN(0);
+ sort_keys= new Sort_keys(sortorder, count);
+
+ if (!sort_keys)
+ DBUG_RETURN(0);
+
+ pos= sort_keys->begin();
for (ord= order; ord; ord= ord->next, pos++)
{
Item *first= ord->item[0];
@@ -537,7 +604,7 @@ uint Filesort::make_sortorder(THD *thd, JOIN *join, table_map first_table_bit)
pos->reverse= (ord->direction == ORDER::ORDER_DESC);
DBUG_ASSERT(pos->field != NULL || pos->item != NULL);
}
- DBUG_RETURN(count);
+ DBUG_RETURN(sort_keys);
}
@@ -552,7 +619,8 @@ static uchar *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count,
if (count > UINT_MAX/sizeof(Merge_chunk))
return 0; /* sizeof(BUFFPEK)*count will overflow */
if (!tmp)
- tmp= (uchar *)my_malloc(length, MYF(MY_WME | MY_THREAD_SPECIFIC));
+ tmp= (uchar *)my_malloc(key_memory_Filesort_info_merge, length,
+ MYF(MY_WME | MY_THREAD_SPECIFIC));
if (tmp)
{
if (reinit_io_cache(buffpek_pointers,READ_CACHE,0L,0,0) ||
@@ -746,7 +814,7 @@ static void dbug_print_record(TABLE *table, bool print_rowid)
static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
SORT_INFO *fs_info,
- IO_CACHE *buffpek_pointers,
+ IO_CACHE *buffpek_pointers,
IO_CACHE *tempfile,
Bounded_queue<uchar, uchar> *pq,
ha_rows *found_rows)
@@ -759,7 +827,9 @@ static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
MY_BITMAP *save_read_set, *save_write_set;
Item *sort_cond;
ha_rows num_records= 0;
- const bool packed_addon_fields= param->using_packed_addons();
+ const bool packed_format= param->is_packed_format();
+ const bool using_packed_sortkeys= param->using_packed_sortkeys();
+
DBUG_ENTER("find_all_keys");
DBUG_PRINT("info",("using: %s",
(select ? select->quick ? "ranges" : "where":
@@ -815,6 +885,7 @@ static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
}
DEBUG_SYNC(thd, "after_index_merge_phase1");
+
for (;;)
{
if (quick_select)
@@ -882,8 +953,9 @@ static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
fs_info->init_next_record_pointer();
uchar *start_of_rec= fs_info->get_next_record_pointer();
- const uint rec_sz= make_sortkey(param, start_of_rec, ref_pos);
- if (packed_addon_fields && rec_sz != param->rec_length)
+ const uint rec_sz= make_sortkey(param, start_of_rec,
+ ref_pos, using_packed_sortkeys);
+ if (packed_format && rec_sz != param->rec_length)
fs_info->adjust_next_record_pointer(rec_sz);
idx++;
}
@@ -964,12 +1036,9 @@ static bool
write_keys(Sort_param *param, SORT_INFO *fs_info, uint count,
IO_CACHE *buffpek_pointers, IO_CACHE *tempfile)
{
- size_t rec_length;
Merge_chunk buffpek;
DBUG_ENTER("write_keys");
- rec_length= param->rec_length;
-
fs_info->sort_buffer(param, count);
if (!my_b_inited(tempfile) &&
@@ -985,19 +1054,12 @@ write_keys(Sort_param *param, SORT_INFO *fs_info, uint count,
count=(uint) param->max_rows; /* purecov: inspected */
buffpek.set_rowcount(static_cast<ha_rows>(count));
- const bool packed_addon_fields= param->using_packed_addons();
for (uint ix= 0; ix < count; ++ix)
{
uchar *record= fs_info->get_sorted_record(ix);
- if (packed_addon_fields)
- {
- rec_length= param->sort_length +
- Addon_fields::read_addon_length(record + param->sort_length);
- }
- else
- rec_length= param->rec_length;
- if (my_b_write(tempfile, record, rec_length))
+
+ if (my_b_write(tempfile, record, param->get_record_length(record)))
DBUG_RETURN(1); /* purecov: inspected */
}
@@ -1010,10 +1072,9 @@ write_keys(Sort_param *param, SORT_INFO *fs_info, uint count,
/**
- Store length as suffix in high-byte-first order.
+ Store length in high-byte-first order.
*/
-
-static inline void store_length(uchar *to, uint length, uint pack_length)
+void store_length(uchar *to, uint length, uint pack_length)
{
switch (pack_length) {
case 1:
@@ -1033,9 +1094,9 @@ static inline void store_length(uchar *to, uint length, uint pack_length)
void
-Type_handler_string_result::make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const
+Type_handler_string_result::make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
{
CHARSET_INFO *cs= item->collation.collation;
bool maybe_null= item->maybe_null;
@@ -1105,9 +1166,9 @@ Type_handler_string_result::make_sort_key(uchar *to, Item *item,
void
-Type_handler_int_result::make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const
+Type_handler_int_result::make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
{
longlong value= item->val_int_result();
make_sort_key_longlong(to, item->maybe_null, item->null_value,
@@ -1116,7 +1177,7 @@ Type_handler_int_result::make_sort_key(uchar *to, Item *item,
void
-Type_handler_temporal_result::make_sort_key(uchar *to, Item *item,
+Type_handler_temporal_result::make_sort_key_part(uchar *to, Item *item,
const SORT_FIELD_ATTR *sort_field,
Sort_param *param) const
{
@@ -1138,7 +1199,7 @@ Type_handler_temporal_result::make_sort_key(uchar *to, Item *item,
void
-Type_handler_timestamp_common::make_sort_key(uchar *to, Item *item,
+Type_handler_timestamp_common::make_sort_key_part(uchar *to, Item *item,
const SORT_FIELD_ATTR *sort_field,
Sort_param *param) const
{
@@ -1171,6 +1232,24 @@ Type_handler_timestamp_common::make_sort_key(uchar *to, Item *item,
void
+Type_handler::store_sort_key_longlong(uchar *to, bool unsigned_flag,
+ longlong value) const
+{
+ to[7]= (uchar) value;
+ to[6]= (uchar) (value >> 8);
+ to[5]= (uchar) (value >> 16);
+ to[4]= (uchar) (value >> 24);
+ to[3]= (uchar) (value >> 32);
+ to[2]= (uchar) (value >> 40);
+ to[1]= (uchar) (value >> 48);
+ if (unsigned_flag) /* Fix sign */
+ to[0]= (uchar) (value >> 56);
+ else
+ to[0]= (uchar) (value >> 56) ^ 128; /* Reverse signbit */
+}
+
+
+void
Type_handler::make_sort_key_longlong(uchar *to,
bool maybe_null,
bool null_value,
@@ -1187,24 +1266,35 @@ Type_handler::make_sort_key_longlong(uchar *to,
}
*to++= 1;
}
- to[7]= (uchar) value;
- to[6]= (uchar) (value >> 8);
- to[5]= (uchar) (value >> 16);
- to[4]= (uchar) (value >> 24);
- to[3]= (uchar) (value >> 32);
- to[2]= (uchar) (value >> 40);
- to[1]= (uchar) (value >> 48);
- if (unsigned_flag) /* Fix sign */
- to[0]= (uchar) (value >> 56);
- else
- to[0]= (uchar) (value >> 56) ^ 128; /* Reverse signbit */
+ store_sort_key_longlong(to, unsigned_flag, value);
+}
+
+
+uint
+Type_handler::make_packed_sort_key_longlong(uchar *to, bool maybe_null,
+ bool null_value, bool unsigned_flag,
+ longlong value,
+ const SORT_FIELD_ATTR *sort_field) const
+{
+ if (maybe_null)
+ {
+ if (null_value)
+ {
+ *to++= 0;
+ return 0;
+ }
+ *to++= 1;
+ }
+ store_sort_key_longlong(to, unsigned_flag, value);
+ DBUG_ASSERT(sort_field->original_length == sort_field->length);
+ return sort_field->original_length;
}
void
-Type_handler_decimal_result::make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const
+Type_handler_decimal_result::make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
{
my_decimal dec_buf, *dec_val= item->val_decimal_result(&dec_buf);
if (item->maybe_null)
@@ -1222,9 +1312,9 @@ Type_handler_decimal_result::make_sort_key(uchar *to, Item *item,
void
-Type_handler_real_result::make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const
+Type_handler_real_result::make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
{
double value= item->val_result();
if (item->maybe_null)
@@ -1242,48 +1332,14 @@ Type_handler_real_result::make_sort_key(uchar *to, Item *item,
/** Make a sort-key from record. */
-static uint make_sortkey(Sort_param *param, uchar *to, uchar *ref_pos)
+static uint make_sortkey(Sort_param *param, uchar *to, uchar *ref_pos,
+ bool using_packed_sortkeys)
{
- Field *field;
- SORT_FIELD *sort_field;
- uint length;
uchar *orig_to= to;
- for (sort_field=param->local_sortorder.begin() ;
- sort_field != param->local_sortorder.end() ;
- sort_field++)
- {
- bool maybe_null=0;
- if ((field=sort_field->field))
- { // Field
- field->make_sort_key(to, sort_field->length);
- if ((maybe_null = field->maybe_null()))
- to++;
- }
- else
- { // Item
- sort_field->item->type_handler()->make_sort_key(to, sort_field->item,
- sort_field, param);
- if ((maybe_null= sort_field->item->maybe_null))
- to++;
- }
- if (sort_field->reverse)
- { /* Revers key */
- if (maybe_null && (to[-1]= !to[-1]))
- {
- to+= sort_field->length; // don't waste the time reversing all 0's
- continue;
- }
- length=sort_field->length;
- while (length--)
- {
- *to = (uchar) (~ *to);
- to++;
- }
- }
- else
- to+= sort_field->length;
- }
+ to+= using_packed_sortkeys ?
+ make_packed_sortkey(param, to) :
+ make_sortkey(param, to);
if (param->using_addon_fields())
{
@@ -1379,7 +1435,7 @@ static void register_used_fields(Sort_param *param)
static bool save_index(Sort_param *param, uint count,
SORT_INFO *table_sort)
{
- uint offset,res_length;
+ uint offset,res_length, length;
uchar *to;
DBUG_ENTER("save_index");
DBUG_ASSERT(table_sort->record_pointers == 0);
@@ -1393,16 +1449,21 @@ static bool save_index(Sort_param *param, uint count,
DBUG_RETURN(0);
}
+ bool using_packed_sortkeys= param->using_packed_sortkeys();
res_length= param->res_length;
offset= param->rec_length-res_length;
if (!(to= table_sort->record_pointers=
- (uchar*) my_malloc(res_length*count,
- MYF(MY_WME | MY_THREAD_SPECIFIC))))
+ (uchar*) my_malloc(key_memory_Filesort_info_record_pointers,
+ res_length*count, MYF(MY_WME | MY_THREAD_SPECIFIC))))
DBUG_RETURN(1); /* purecov: inspected */
for (uint ix= 0; ix < count; ++ix)
{
uchar *record= table_sort->get_sorted_record(ix);
- memcpy(to, record + offset, res_length);
+
+ length= using_packed_sortkeys ?
+ Sort_keys::read_sortkey_length(record) : offset;
+
+ memcpy(to, record + length, res_length);
to+= res_length;
}
DBUG_RETURN(0);
@@ -1605,7 +1666,7 @@ cleanup:
*/
ulong read_to_buffer(IO_CACHE *fromfile, Merge_chunk *buffpek,
- Sort_param *param)
+ Sort_param *param, bool packed_format)
{
ha_rows count;
uint rec_length= param->rec_length;
@@ -1613,7 +1674,7 @@ ulong read_to_buffer(IO_CACHE *fromfile, Merge_chunk *buffpek,
if ((count= MY_MIN(buffpek->max_keys(),buffpek->rowcount())))
{
size_t bytes_to_read;
- if (param->using_packed_addons())
+ if (packed_format)
{
count= buffpek->rowcount();
bytes_to_read= MY_MIN(buffpek->buffer_size(),
@@ -1628,26 +1689,43 @@ ulong read_to_buffer(IO_CACHE *fromfile, Merge_chunk *buffpek,
return ((ulong) -1);
size_t num_bytes_read;
- if (param->using_packed_addons())
+
+ if (packed_format)
{
/*
The last record read is most likely not complete here.
We need to loop through all the records, reading the length fields,
and then "chop off" the final incomplete record.
- */
+ */
uchar *record= buffpek->buffer_start();
uint ix= 0;
+ uint size_of_addon_length= param->using_packed_addons() ?
+ Addon_fields::size_of_length_field : 0;
+
+ uint size_of_sort_length= param->using_packed_sortkeys() ?
+ Sort_keys::size_of_length_field : 0;
+
for (; ix < count; ++ix)
{
- if (record + param->sort_length + Addon_fields::size_of_length_field >
+ if (record + size_of_sort_length > buffpek->buffer_end())
+ break;
+ uint sort_length= param->using_packed_sortkeys() ?
+ Sort_keys::read_sortkey_length(record) :
+ param->sort_length;
+
+ DBUG_ASSERT(sort_length <= param->sort_length);
+
+ if (record + sort_length + size_of_addon_length >
buffpek->buffer_end())
break; // Incomplete record.
- uchar *plen= record + param->sort_length;
- uint res_length= Addon_fields::read_addon_length(plen);
+
+ uchar *plen= record + sort_length;
+ uint res_length= param->get_result_length(plen);
if (plen + res_length > buffpek->buffer_end())
break; // Incomplete record.
DBUG_ASSERT(res_length > 0);
- record+= param->sort_length;
+ DBUG_ASSERT(sort_length + res_length <= param->rec_length);
+ record+= sort_length;
record+= res_length;
}
DBUG_ASSERT(ix > 0);
@@ -1704,7 +1782,10 @@ void reuse_freed_buff(QUEUE *queue, Merge_chunk *reuse, uint key_length)
@param lastbuff OUT Store here BUFFPEK describing data written to to_file
@param Fb First element in source BUFFPEKs array
@param Tb Last element in source BUFFPEKs array
- @param flag
+ @param flag 0 <=> write {sort_key, addon_fields} pairs as further
+ sorting will be performed
+ 1 <=> write just addon_fields as this is the final
+ merge pass
@retval
0 OK
@@ -1748,6 +1829,11 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
(flag && min_dupl_count ? sizeof(dupl_count) : 0)-res_length);
uint wr_len= flag ? res_length : rec_length;
uint wr_offset= flag ? offset : 0;
+
+ const bool using_packed_sortkeys= param->using_packed_sortkeys();
+ bool offset_for_packing= (flag == 1 && using_packed_sortkeys);
+ const bool packed_format= param->is_packed_format();
+
maxcount= (ulong) (param->max_keys_per_buffer/((uint) (Tb-Fb) +1));
to_start_filepos= my_b_tell(to_file);
strpos= sort_buffer.array();
@@ -1762,8 +1848,8 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
}
else
{
- cmp= get_ptr_compare(sort_length);
- first_cmp_arg= (void*) &sort_length;
+ cmp= param->get_compare_function();
+ first_cmp_arg= param->get_compare_argument(&sort_length);
}
if (unlikely(init_queue(&queue, (uint) (Tb-Fb)+1,
offsetof(Merge_chunk,m_current_key), 0,
@@ -1775,7 +1861,7 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
strpos + (sort_buffer.size()/((uint) (Tb-Fb) +1)));
buffpek->set_max_keys(maxcount);
- bytes_read= read_to_buffer(from_file, buffpek, param);
+ bytes_read= read_to_buffer(from_file, buffpek, param, packed_format);
if (unlikely(bytes_read == (ulong) -1))
goto err; /* purecov: inspected */
strpos+= bytes_read;
@@ -1802,7 +1888,7 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
if (buffpek->mem_count() == 0)
{
if (unlikely(!(bytes_read= read_to_buffer(from_file, buffpek,
- param))))
+ param, packed_format))))
{
(void) queue_remove_top(&queue);
reuse_freed_buff(&queue, buffpek, rec_length);
@@ -1860,7 +1946,11 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
*/
if (!check_dupl_count || dupl_count >= min_dupl_count)
{
- if (my_b_write(to_file, src + wr_offset, bytes_to_write))
+ if(my_b_write(to_file,
+ src + (offset_for_packing ?
+ rec_length - res_length : // sort length
+ wr_offset),
+ bytes_to_write))
goto err; /* purecov: inspected */
}
if (cmp)
@@ -1883,7 +1973,7 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
if (buffpek->mem_count() == 0)
{
if (unlikely(!(bytes_read= read_to_buffer(from_file, buffpek,
- param))))
+ param, packed_format))))
{
(void) queue_remove_top(&queue);
reuse_freed_buff(&queue, buffpek, rec_length);
@@ -1943,7 +2033,8 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
max_rows-= buffpek->mem_count();
for (uint ix= 0; ix < buffpek->mem_count(); ++ix)
{
- param->get_rec_and_res_len(buffpek->current_key(),
+ uchar *src= buffpek->current_key();
+ param->get_rec_and_res_len(src,
&rec_length, &res_length);
const uint bytes_to_write= (flag == 0) ? rec_length : res_length;
if (check_dupl_count)
@@ -1954,15 +2045,18 @@ bool merge_buffers(Sort_param *param, IO_CACHE *from_file,
if (dupl_count < min_dupl_count)
continue;
}
- if (my_b_write(to_file, buffpek->current_key() + wr_offset,
- bytes_to_write))
+ if(my_b_write(to_file,
+ src + (offset_for_packing ?
+ rec_length - res_length : // sort length
+ wr_offset),
+ bytes_to_write))
goto err;
buffpek->advance_current_key(rec_length);
}
}
while (likely(!(error=
- (bytes_read= read_to_buffer(from_file, buffpek,
- param)) == (ulong) -1)) &&
+ (bytes_read= read_to_buffer(from_file, buffpek, param,
+ packed_format)) == (ulong) -1)) &&
bytes_read != 0);
end:
@@ -2007,13 +2101,14 @@ static uint suffix_length(ulong string_length)
void
-Type_handler_string_result::sortlength(THD *thd,
+Type_handler_string_result::sort_length(THD *thd,
const Type_std_attributes *item,
SORT_FIELD_ATTR *sortorder) const
{
CHARSET_INFO *cs;
sortorder->length= item->max_length;
- set_if_smaller(sortorder->length, thd->variables.max_sort_length);
+ sortorder->original_length= item->max_length;
+
if (use_strnxfrm((cs= item->collation.collation)))
{
sortorder->length= (uint) cs->strnxfrmlen(sortorder->length);
@@ -2023,54 +2118,57 @@ Type_handler_string_result::sortlength(THD *thd,
/* Store length last to be able to sort blob/varbinary */
sortorder->suffix_length= suffix_length(sortorder->length);
sortorder->length+= sortorder->suffix_length;
+ sortorder->original_length+= sortorder->suffix_length;
}
}
void
-Type_handler_temporal_result::sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *sortorder) const
+Type_handler_temporal_result::sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *sortorder) const
{
- sortorder->length= 8; // Sizof intern longlong
+ sortorder->original_length= sortorder->length= 8; // Sizof intern longlong
}
void
-Type_handler_timestamp_common::sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *sortorder) const
+Type_handler_timestamp_common::sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *sortorder) const
{
sortorder->length= my_timestamp_binary_length(item->decimals);
+ sortorder->original_length= sortorder->length;
}
void
-Type_handler_int_result::sortlength(THD *thd,
+Type_handler_int_result::sort_length(THD *thd,
const Type_std_attributes *item,
SORT_FIELD_ATTR *sortorder) const
{
- sortorder->length= 8; // Sizof intern longlong
+ sortorder->original_length= sortorder->length= 8; // Sizof intern longlong
}
void
-Type_handler_real_result::sortlength(THD *thd,
+Type_handler_real_result::sort_length(THD *thd,
const Type_std_attributes *item,
SORT_FIELD_ATTR *sortorder) const
{
- sortorder->length= sizeof(double);
+ sortorder->original_length= sortorder->length= sizeof(double);
}
void
-Type_handler_decimal_result::sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *sortorder) const
+Type_handler_decimal_result::sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *sortorder) const
{
sortorder->length=
my_decimal_get_binary_size(item->max_length - (item->decimals ? 1 : 0),
item->decimals);
+ sortorder->original_length= sortorder->length;
}
@@ -2082,54 +2180,100 @@ Type_handler_decimal_result::sortlength(THD *thd,
@param s_length Number of items to sort
@param[out] multi_byte_charset Set to 1 if we are using multi-byte charset
(In which case we have to use strxnfrm())
+ @param allow_packing_for_sortkeys [out] set to false if packing sort keys is not
+ allowed
@note
- sortorder->length is updated for each sort item.
+ * sortorder->length and other members are updated for each sort item.
+ * TODO what is the meaning of this value if some fields are using packing while
+ others are not?
@return
Total length of sort buffer in bytes
*/
static uint
-sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
- bool *multi_byte_charset)
+sortlength(THD *thd, Sort_keys *sort_keys, bool *multi_byte_charset,
+ bool *allow_packing_for_sortkeys)
{
uint length;
*multi_byte_charset= 0;
+ *allow_packing_for_sortkeys= true;
+ bool allow_packing_for_keys= true;
length=0;
- for (; s_length-- ; sortorder++)
+ uint nullable_cols=0;
+
+ for (SORT_FIELD *sortorder= sort_keys->begin();
+ sortorder != sort_keys->end();
+ sortorder++)
{
sortorder->suffix_length= 0;
+ sortorder->length_bytes= 0;
if (sortorder->field)
{
+ Field *field= sortorder->field;
CHARSET_INFO *cs= sortorder->field->sort_charset();
sortorder->length= sortorder->field->sort_length();
+ sortorder->suffix_length= sortorder->field->sort_suffix_length();
+ sortorder->original_length= sortorder->length;
+ sortorder->type= field->is_packable() ?
+ SORT_FIELD_ATTR::VARIABLE_SIZE :
+ SORT_FIELD_ATTR::FIXED_SIZE;
+ sortorder->cs= cs;
+
if (use_strnxfrm((cs=sortorder->field->sort_charset())))
{
*multi_byte_charset= true;
sortorder->length= (uint) cs->strnxfrmlen(sortorder->length);
}
- if (sortorder->field->maybe_null())
- length++; // Place for NULL marker
+ if (sortorder->is_variable_sized() && allow_packing_for_keys)
+ {
+ allow_packing_for_keys= sortorder->check_if_packing_possible(thd);
+ sortorder->length_bytes=
+ number_storage_requirement(MY_MIN(sortorder->original_length,
+ thd->variables.max_sort_length));
+ }
+
+ if ((sortorder->maybe_null= sortorder->field->maybe_null()))
+ nullable_cols++; // Place for NULL marker
}
else
{
- sortorder->item->type_handler()->sortlength(thd, sortorder->item,
- sortorder);
- if (use_strnxfrm(sortorder->item->collation.collation))
+ CHARSET_INFO *cs;
+ sortorder->item->type_handler()->sort_length(thd, sortorder->item,
+ sortorder);
+ sortorder->type= sortorder->item->type_handler()->is_packable() ?
+ SORT_FIELD_ATTR::VARIABLE_SIZE :
+ SORT_FIELD_ATTR::FIXED_SIZE;
+ if (use_strnxfrm((cs=sortorder->item->collation.collation)))
{
*multi_byte_charset= true;
}
- if (sortorder->item->maybe_null)
- length++; // Place for NULL marker
+ sortorder->cs= cs;
+ if (sortorder->is_variable_sized() && allow_packing_for_keys)
+ {
+ allow_packing_for_keys= sortorder->check_if_packing_possible(thd);
+ sortorder->length_bytes=
+ number_storage_requirement(MY_MIN(sortorder->original_length,
+ thd->variables.max_sort_length));
+ }
+
+ if ((sortorder->maybe_null= sortorder->item->maybe_null))
+ nullable_cols++; // Place for NULL marker
}
set_if_smaller(sortorder->length, thd->variables.max_sort_length);
+ set_if_smaller(sortorder->original_length, thd->variables.max_sort_length);
length+=sortorder->length;
+
+ sort_keys->increment_size_of_packable_fields(sortorder->length_bytes);
+ sort_keys->increment_original_sort_length(sortorder->original_length);
}
- sortorder->field= NULL; // end marker
+ // add bytes for nullable_cols
+ sort_keys->increment_original_sort_length(nullable_cols);
+ *allow_packing_for_sortkeys= allow_packing_for_keys;
DBUG_PRINT("info",("sort_length: %d",length));
- return length;
+ return length + nullable_cols;
}
@@ -2237,7 +2381,7 @@ get_addon_fields(TABLE *table, uint sortlength,
if (!filesort_use_addons(table, sortlength, &length, &fields, &null_fields,
&packable_length) ||
- !(my_multi_malloc(MYF(MY_WME | MY_THREAD_SPECIFIC),
+ !(my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME | MY_THREAD_SPECIFIC),
&raw_mem, sizeof(Addon_fields),
&raw_mem_addon_field,
sizeof(SORT_ADDON_FIELD) * fields,
@@ -2283,23 +2427,6 @@ get_addon_fields(TABLE *table, uint sortlength,
}
-/**
- Copy (unpack) values appended to sorted fields from a buffer back to
- their regular positions specified by the Field::ptr pointers.
-
- @param addon_field Array of descriptors for appended fields
- @param buff Buffer which to unpack the value from
-
- @note
- The function is supposed to be used only as a callback function
- when getting field values for the sorted result set.
-
- @return
- void.
-*/
-
-
-
/*
** functions to change a double or float to a sortable string
** The following should work for IEEE
@@ -2359,6 +2486,14 @@ void SORT_INFO::free_addon_buff()
addon_fields->free_addon_buff();
}
+/*
+ Check if packed sortkeys are used or not
+*/
+bool SORT_INFO::using_packed_sortkeys()
+{
+ return sort_keys != NULL && sort_keys->using_packed_sortkeys();
+}
+
/**
Free SORT_INFO
*/
@@ -2369,3 +2504,561 @@ SORT_INFO::~SORT_INFO()
free_data();
DBUG_VOID_RETURN;
}
+
+
+void Sort_param::try_to_pack_sortkeys()
+{
+ #ifdef WITHOUT_PACKED_SORT_KEYS
+ return;
+ #endif
+
+ uint size_of_packable_fields= sort_keys->get_size_of_packable_fields();
+
+ /*
+ Disable packing when all fields are fixed-size fields.
+ */
+ if (size_of_packable_fields == 0)
+ return;
+
+ const uint sz= Sort_keys::size_of_length_field;
+ uint sort_len= sort_keys->get_sort_length();
+
+ /*
+ Heuristic introduced, skip packing sort keys if saving less than 128 bytes
+ */
+
+ if (sort_len < 128 + sz + size_of_packable_fields)
+ return;
+
+ sort_keys->set_using_packed_sortkeys(true);
+ m_packed_format= true;
+ m_using_packed_sortkeys= true;
+ sort_length= sort_len + sz + size_of_packable_fields +
+ (using_addon_fields() ? 0 : res_length);
+ /* Only the record length needs to be updated, the res_length does not need
+ to be updated
+ */
+ rec_length= sort_length + addon_length;
+}
+
+
+uint
+Type_handler_string_result::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ CHARSET_INFO *cs= item->collation.collation;
+ bool maybe_null= item->maybe_null;
+
+ if (maybe_null)
+ *to++= 1;
+
+ String tmp(param->tmp_buffer, param->sort_length, cs);
+ String *res= item->str_result(&tmp);
+ if (!res)
+ {
+ if (maybe_null)
+ {
+ *(to-1)= 0;
+ return 0;
+ }
+ else
+ {
+ /* purecov: begin deadcode */
+ /*
+ This should only happen during extreme conditions if we run out
+ of memory or have an item marked not null when it can be null.
+ This code is here mainly to avoid a hard crash in this case.
+ */
+ DBUG_ASSERT(0);
+ DBUG_PRINT("warning",
+ ("Got null on something that shouldn't be null"));
+ memset(to, 0, sort_field->length); // Avoid crash
+ /* purecov: end */
+ return sort_field->original_length;
+ }
+ }
+ return sort_field->pack_sort_string(to, res->lex_cstring(), cs);
+}
+
+
+uint
+Type_handler_int_result::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ longlong value= item->val_int_result();
+ return make_packed_sort_key_longlong(to, item->maybe_null,
+ item->null_value, item->unsigned_flag,
+ value, sort_field);
+}
+
+
+uint
+Type_handler_decimal_result::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ my_decimal dec_buf, *dec_val= item->val_decimal_result(&dec_buf);
+ if (item->maybe_null)
+ {
+ if (item->null_value)
+ {
+ *to++=0;
+ return 0;
+ }
+ *to++= 1;
+ }
+ dec_val->to_binary(to, item->max_length - (item->decimals ? 1 : 0),
+ item->decimals);
+ DBUG_ASSERT(sort_field->original_length == sort_field->length);
+ return sort_field->original_length;
+}
+
+
+uint
+Type_handler_real_result::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ double value= item->val_result();
+ if (item->maybe_null)
+ {
+ if (item->null_value)
+ {
+ *to++=0;
+ return 0;
+ }
+ *to++= 1;
+ }
+ change_double_for_sort(value, to);
+ DBUG_ASSERT(sort_field->original_length == sort_field->length);
+ return sort_field->original_length;
+}
+
+
+uint
+Type_handler_temporal_result::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ MYSQL_TIME buf;
+ // This is a temporal type. No nanoseconds. Rounding mode is not important.
+ DBUG_ASSERT(item->cmp_type() == TIME_RESULT);
+ static const Temporal::Options opt(TIME_INVALID_DATES, TIME_FRAC_NONE);
+ if (item->get_date_result(current_thd, &buf, opt))
+ {
+ DBUG_ASSERT(item->maybe_null);
+ DBUG_ASSERT(item->null_value);
+ return make_packed_sort_key_longlong(to, item->maybe_null, true,
+ item->unsigned_flag, 0, sort_field);
+ }
+ return make_packed_sort_key_longlong(to, item->maybe_null, false,
+ item->unsigned_flag, pack_time(&buf),
+ sort_field);
+}
+
+
+uint
+Type_handler_timestamp_common::make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const
+{
+ THD *thd= current_thd;
+ uint binlen= my_timestamp_binary_length(item->decimals);
+ Timestamp_or_zero_datetime_native_null native(thd, item);
+ if (native.is_null() || native.is_zero_datetime())
+ {
+ // NULL or '0000-00-00 00:00:00'
+ if (item->maybe_null)
+ {
+ *to++=0;
+ return 0;
+ }
+ else
+ {
+ bzero(to, binlen);
+ return binlen;
+ }
+ }
+ else
+ {
+ if (item->maybe_null)
+ *to++= 1;
+ if (native.length() != binlen)
+ {
+ /*
+ Some items can return native representation with a different
+ number of fractional digits, e.g.: GREATEST(ts_3, ts_4) can
+ return a value with 3 fractional digits, although its fractional
+ precision is 4. Re-pack with a proper precision now.
+ */
+ Timestamp(native).to_native(&native, item->datetime_precision(thd));
+ }
+ DBUG_ASSERT(native.length() == binlen);
+ memcpy((char *) to, native.ptr(), binlen);
+ return binlen;
+ }
+}
+
+
+/*
+ @brief
+ Reverse the key for DESC clause
+ @param to buffer where values are written
+ @param maybe_null nullability of a column
+ @param sort_field Sort field structure
+ @details
+ used for mem-comparable sort keys
+*/
+
+void reverse_key(uchar *to, const SORT_FIELD_ATTR *sort_field)
+{
+ uint length;
+ if (sort_field->maybe_null && (to[-1]= !to[-1]))
+ {
+ to+= sort_field->length; // don't waste the time reversing all 0's
+ return;
+ }
+ length=sort_field->length;
+ while (length--)
+ {
+ *to = (uchar) (~ *to);
+ to++;
+ }
+}
+
+
+/*
+ @brief
+ Check if packing sort keys is allowed
+ @param THD thread structure
+ @retval
+ TRUE packing allowed
+ FALSE packing not allowed
+*/
+bool SORT_FIELD_ATTR::check_if_packing_possible(THD *thd) const
+{
+ /*
+ Packing not allowed when original length is greater than max_sort_length
+ and we have a complex collation because cutting a prefix is not safe in
+ such a case
+ */
+ if (original_length > thd->variables.max_sort_length &&
+ cs->state & MY_CS_NON1TO1)
+ return false;
+ return true;
+}
+
+
+/*
+ Compare function used for packing sort keys
+*/
+
+qsort2_cmp get_packed_keys_compare_ptr()
+{
+ return (qsort2_cmp) compare_packed_sort_keys;
+}
+
+
+/*
+ Compare two varstrings.
+
+ The strings are in this data format:
+
+ [null_byte] [length of string + suffix_bytes] [the string] [suffix_bytes]
+
+ suffix_bytes are used only for binary columns.
+*/
+
+int SORT_FIELD_ATTR::compare_packed_varstrings(uchar *a, size_t *a_len,
+ uchar *b, size_t *b_len)
+{
+ int retval;
+ size_t a_length, b_length;
+ if (maybe_null)
+ {
+ *a_len= *b_len= 1; // NULL bytes are always stored
+ if (*a != *b)
+ {
+ // Note we don't return a proper value in *{a|b}_len for the non-NULL
+ // value but that's ok
+ if (*a == 0)
+ return -1;
+ else
+ return 1;
+ }
+ else
+ {
+ if (*a == 0)
+ return 0;
+ }
+ a++;
+ b++;
+ }
+ else
+ *a_len= *b_len= 0;
+
+ a_length= read_keypart_length(a, length_bytes);
+ b_length= read_keypart_length(b, length_bytes);
+
+ *a_len+= length_bytes + a_length;
+ *b_len+= length_bytes + b_length;
+
+ retval= cs->strnncollsp(a + length_bytes,
+ a_length - suffix_length,
+ b + length_bytes,
+ b_length - suffix_length);
+
+ if (!retval && suffix_length)
+ {
+ DBUG_ASSERT(cs == &my_charset_bin);
+ // comparing the length stored in suffix bytes for binary strings
+ a= a + length_bytes + a_length - suffix_length;
+ b= b + length_bytes + b_length - suffix_length;
+ retval= memcmp(a, b, suffix_length);
+ }
+
+ return retval;
+}
+
+
+/*
+ A value comparison function that has a signature that's suitable for
+ comparing packed values, but actually compares fixed-size values with memcmp.
+
+ This is used for ordering fixed-size columns when the sorting procedure used
+ packed-value format.
+*/
+
+int SORT_FIELD_ATTR::compare_packed_fixed_size_vals(uchar *a, size_t *a_len,
+ uchar *b, size_t *b_len)
+{
+ if (maybe_null)
+ {
+ *a_len=1;
+ *b_len=1;
+ if (*a != *b)
+ {
+ if (*a == 0)
+ return -1;
+ else
+ return 1;
+ }
+ else
+ {
+ if (*a == 0)
+ return 0;
+ }
+ a++;
+ b++;
+ }
+ else
+ *a_len= *b_len= 0;
+
+ *a_len+= length;
+ *b_len+= length;
+ return memcmp(a,b, length);
+}
+
+
+/*
+ @brief
+ Comparison function to compare two packed sort keys
+
+ @param sort_param cmp argument
+ @param a_ptr packed sort key
+ @param b_ptr packed sort key
+
+ @retval
+ >0 key a_ptr greater than b_ptr
+ =0 key a_ptr equal to b_ptr
+ <0 key a_ptr less than b_ptr
+
+*/
+
+int compare_packed_sort_keys(void *sort_param,
+ unsigned char **a_ptr, unsigned char **b_ptr)
+{
+ int retval= 0;
+ size_t a_len, b_len;
+ Sort_param *param= (Sort_param*)sort_param;
+ Sort_keys *sort_keys= param->sort_keys;
+ uchar *a= *a_ptr;
+ uchar *b= *b_ptr;
+
+ a+= Sort_keys::size_of_length_field;
+ b+= Sort_keys::size_of_length_field;
+ for (SORT_FIELD *sort_field= sort_keys->begin();
+ sort_field != sort_keys->end(); sort_field++)
+ {
+ retval= sort_field->is_variable_sized() ?
+ sort_field->compare_packed_varstrings(a, &a_len, b, &b_len) :
+ sort_field->compare_packed_fixed_size_vals(a, &a_len, b, &b_len);
+
+ if (retval)
+ return sort_field->reverse ? -retval : retval;
+
+ a+= a_len;
+ b+= b_len;
+
+ }
+ /*
+ this comparison is done for the case when the sort keys is appended with
+ the ROW_ID pointer. For such cases we don't have addon fields
+ so we can make a memcmp check over both the sort keys
+ */
+ if (!param->using_addon_fields())
+ retval= memcmp(a, b, param->res_length);
+ return retval;
+}
+
+
+/*
+ @brief
+ Store a packed string in the buffer
+
+ @param to buffer
+ @param str packed string value
+ @param cs character set
+
+ @details
+ This function writes to the buffer the packed value of a key_part
+ of the sort key.
+
+ The values written to the buffer are in this order
+ - value for null byte
+ - length of the string
+ - value of the string
+ - suffix length (for binary character set)
+*/
+
+uint
+SORT_FIELD_ATTR::pack_sort_string(uchar *to, const LEX_CSTRING &str,
+ CHARSET_INFO *cs) const
+{
+ uchar *orig_to= to;
+ uint32 length, data_length;
+ DBUG_ASSERT(str.length <= UINT32_MAX);
+ length= (uint32)str.length;
+
+ if (length + suffix_length <= original_length)
+ data_length= length;
+ else
+ data_length= original_length - suffix_length;
+
+ // length stored in lowendian form
+ store_key_part_length(data_length + suffix_length, to, length_bytes);
+ to+= length_bytes;
+ // copying data length bytes to the buffer
+ memcpy(to, (uchar*)str.str, data_length);
+ to+= data_length;
+
+ if (cs == &my_charset_bin && suffix_length)
+ {
+ // suffix length stored in bigendian form
+ store_bigendian(str.length, to, suffix_length);
+ to+= suffix_length;
+ }
+ return static_cast<uint>(to - orig_to);
+}
+
+
+/*
+ @brief
+ Create a mem-comparable sort key
+
+ @param param sort param structure
+ @param to buffer where values are written
+
+ @retval
+ length of the bytes written including the NULL bytes
+*/
+
+static uint make_sortkey(Sort_param *param, uchar *to)
+{
+ Field *field;
+ SORT_FIELD *sort_field;
+ uchar *orig_to= to;
+
+ for (sort_field=param->local_sortorder.begin() ;
+ sort_field != param->local_sortorder.end() ;
+ sort_field++)
+ {
+ bool maybe_null=0;
+ if ((field=sort_field->field))
+ {
+ // Field
+ field->make_sort_key_part(to, sort_field->length);
+ if ((maybe_null= field->maybe_null()))
+ to++;
+ }
+ else
+ { // Item
+ sort_field->item->type_handler()->make_sort_key_part(to,
+ sort_field->item,
+ sort_field, param);
+ if ((maybe_null= sort_field->item->maybe_null))
+ to++;
+ }
+
+ if (sort_field->reverse)
+ reverse_key(to, sort_field);
+ to+= sort_field->length;
+ }
+
+ DBUG_ASSERT(static_cast<uint>(to - orig_to) <= param->sort_length);
+ return static_cast<uint>(to - orig_to);
+}
+
+
+/*
+ @brief
+ create a compact sort key which can be compared with a comparison
+ function. They are called packed sort keys
+
+ @param param sort param structure
+ @param to buffer where values are written
+
+ @retval
+ length of the bytes written including the NULL bytes
+*/
+
+static uint make_packed_sortkey(Sort_param *param, uchar *to)
+{
+ Field *field;
+ SORT_FIELD *sort_field;
+ uint length;
+ uchar *orig_to= to;
+
+ to+= Sort_keys::size_of_length_field;
+
+ for (sort_field=param->local_sortorder.begin() ;
+ sort_field != param->local_sortorder.end() ;
+ sort_field++)
+ {
+ bool maybe_null=0;
+ if ((field=sort_field->field))
+ {
+ // Field
+ length= field->make_packed_sort_key_part(to, sort_field);
+ if ((maybe_null= field->maybe_null()))
+ to++;
+ }
+ else
+ { // Item
+ Item *item= sort_field->item;
+ length= item->type_handler()->make_packed_sort_key_part(to, item,
+ sort_field,
+ param);
+ if ((maybe_null= sort_field->item->maybe_null))
+ to++;
+ }
+ to+= length;
+ }
+
+ length= static_cast<int>(to - orig_to);
+ DBUG_ASSERT(length <= param->sort_length);
+ Sort_keys::store_sortkey_length(orig_to, length);
+ return length;
+}
diff --git a/sql/filesort.h b/sql/filesort.h
index 5102ee2326f..9f71da02c96 100644
--- a/sql/filesort.h
+++ b/sql/filesort.h
@@ -25,9 +25,12 @@ class THD;
struct TABLE;
class Filesort_tracker;
struct SORT_FIELD;
+struct SORT_FIELD_ATTR;
typedef struct st_order ORDER;
class JOIN;
class Addon_fields;
+class Sort_keys;
+
/**
Sorting related info.
@@ -57,6 +60,7 @@ public:
bool sort_positions;
Filesort_tracker *tracker;
+ Sort_keys *sort_keys;
Filesort(ORDER *order_arg, ha_rows limit_arg, bool sort_positions_arg,
SQL_SELECT *select_arg):
@@ -66,14 +70,15 @@ public:
select(select_arg),
own_select(false),
using_pq(false),
- sort_positions(sort_positions_arg)
+ sort_positions(sort_positions_arg),
+ sort_keys(NULL)
{
DBUG_ASSERT(order);
};
~Filesort() { cleanup(); }
/* Prepare ORDER BY list for sorting. */
- uint make_sortorder(THD *thd, JOIN *join, table_map first_table_bit);
+ Sort_keys* make_sortorder(THD *thd, JOIN *join, table_map first_table_bit);
private:
void cleanup();
@@ -88,6 +93,7 @@ class SORT_INFO
public:
SORT_INFO()
:addon_fields(NULL), record_pointers(0),
+ sort_keys(NULL),
sorted_result_in_fsbuf(FALSE)
{
buffpek.str= 0;
@@ -121,6 +127,7 @@ public:
LEX_STRING buffpek; /* Buffer for buffpek structures */
Addon_fields *addon_fields; /* Addon field descriptors */
uchar *record_pointers; /* If sorted in memory */
+ Sort_keys *sort_keys; /* Sort key descriptors*/
/**
If the entire result of filesort fits in memory, we skip the merge phase.
@@ -201,6 +208,7 @@ public:
template<bool Packed_addon_fields>
inline void unpack_addon_fields(uchar *buff);
+ bool using_packed_sortkeys();
friend SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort,
Filesort_tracker* tracker, JOIN *join,
@@ -216,5 +224,8 @@ bool filesort_use_addons(TABLE *table, uint sortlength,
uint *m_packable_length);
void change_double_for_sort(double nr,uchar *to);
+void store_length(uchar *to, uint length, uint pack_length);
+void
+reverse_key(uchar *to, const SORT_FIELD_ATTR *sort_field);
#endif /* FILESORT_INCLUDED */
diff --git a/sql/filesort_utils.cc b/sql/filesort_utils.cc
index 95b9dc51cf8..d178740d24b 100644
--- a/sql/filesort_utils.cc
+++ b/sql/filesort_utils.cc
@@ -20,6 +20,8 @@
#include "table.h"
+PSI_memory_key key_memory_Filesort_buffer_sort_keys;
+
namespace {
/**
A local helper function. See comments for get_merge_buffers_cost().
@@ -128,7 +130,8 @@ uchar *Filesort_buffer::alloc_sort_buffer(uint num_records,
the old values
*/
my_free(m_rawmem);
- if (!(m_rawmem= (uchar*) my_malloc(buff_size, MYF(MY_THREAD_SPECIFIC))))
+ if (!(m_rawmem= (uchar*) my_malloc(key_memory_Filesort_buffer_sort_keys,
+ buff_size, MYF(MY_THREAD_SPECIFIC))))
{
m_size_in_bytes= 0;
DBUG_RETURN(0);
@@ -137,7 +140,8 @@ uchar *Filesort_buffer::alloc_sort_buffer(uint num_records,
}
else
{
- if (!(m_rawmem= (uchar*) my_malloc(buff_size, MYF(MY_THREAD_SPECIFIC))))
+ if (!(m_rawmem= (uchar*) my_malloc(key_memory_Filesort_buffer_sort_keys,
+ buff_size, MYF(MY_THREAD_SPECIFIC))))
{
m_size_in_bytes= 0;
DBUG_RETURN(0);
@@ -175,14 +179,17 @@ void Filesort_buffer::sort_buffer(const Sort_param *param, uint count)
reverse_record_pointers();
uchar **buffer= NULL;
- if (radixsort_is_appliccable(count, param->sort_length) &&
- (buffer= (uchar**) my_malloc(count*sizeof(char*),
+ if (!param->using_packed_sortkeys() &&
+ radixsort_is_appliccable(count, param->sort_length) &&
+ (buffer= (uchar**) my_malloc(PSI_INSTRUMENT_ME, count*sizeof(char*),
MYF(MY_THREAD_SPECIFIC))))
{
radixsort_for_str_ptr(m_sort_keys, count, param->sort_length, buffer);
my_free(buffer);
return;
}
-
- my_qsort2(m_sort_keys, count, sizeof(uchar*), get_ptr_compare(size), &size);
+
+ my_qsort2(m_sort_keys, count, sizeof(uchar*),
+ param->get_compare_function(),
+ param->get_compare_argument(&size));
}
diff --git a/sql/filesort_utils.h b/sql/filesort_utils.h
index e8b93940abf..1962f149893 100644
--- a/sql/filesort_utils.h
+++ b/sql/filesort_utils.h
@@ -279,4 +279,8 @@ private:
longlong m_idx;
};
+int compare_packed_sort_keys(void *sort_keys, unsigned char **a,
+ unsigned char **b);
+qsort2_cmp get_packed_keys_compare_ptr();
+
#endif // FILESORT_UTILS_INCLUDED
diff --git a/sql/gcalc_slicescan.cc b/sql/gcalc_slicescan.cc
index 4919e5b959b..6d7ab7e29c3 100644
--- a/sql/gcalc_slicescan.cc
+++ b/sql/gcalc_slicescan.cc
@@ -204,7 +204,7 @@ void Gcalc_dyn_list::format_blk(void* block)
Gcalc_dyn_list::Item *Gcalc_dyn_list::alloc_new_blk()
{
- void *new_block= my_malloc(m_blk_size, MYF(MY_WME));
+ void *new_block= my_malloc(PSI_INSTRUMENT_ME, m_blk_size, MYF(MY_WME));
if (!new_block)
return NULL;
*m_blk_hook= new_block;
diff --git a/sql/gstream.cc b/sql/gstream.cc
index b743140ba59..f8e84e70560 100644
--- a/sql/gstream.cc
+++ b/sql/gstream.cc
@@ -23,6 +23,7 @@
#include "sql_priv.h"
#include "gstream.h"
#include "m_string.h" // LEX_STRING
+#include "mysqld.h"
enum Gis_read_stream::enum_tok_types Gis_read_stream::get_next_toc_type()
{
@@ -140,6 +141,7 @@ bool Gis_read_stream::check_next_symbol(char symbol)
void Gis_read_stream::set_error_msg(const char *msg)
{
size_t len= strlen(msg); // ok in this context
- m_err_msg= (char *) my_realloc(m_err_msg, (uint) len + 1, MYF(MY_ALLOW_ZERO_PTR));
+ m_err_msg= (char *) my_realloc(key_memory_Gis_read_stream_err_msg,
+ m_err_msg, (uint) len + 1, MYF(MY_ALLOW_ZERO_PTR));
memcpy(m_err_msg, msg, len + 1);
}
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index d36a58aef20..f30ef6a9688 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -102,22 +102,43 @@ static const char *ha_partition_ext[]=
ha_par_ext, NullS
};
+static PSI_memory_key key_memory_Partition_share;
+static PSI_memory_key key_memory_partition_sort_buffer;
+static PSI_memory_key key_memory_Partition_admin;
+
+static PSI_memory_key key_memory_ha_partition_file;
+//static PSI_memory_key key_memory_ha_partition_engine_array;
+static PSI_memory_key key_memory_ha_partition_part_ids;
#ifdef HAVE_PSI_INTERFACE
PSI_mutex_key key_partition_auto_inc_mutex;
+PSI_file_key key_file_ha_partition_par;
static PSI_mutex_info all_partition_mutexes[]=
{
{ &key_partition_auto_inc_mutex, "Partition_share::auto_inc_mutex", 0}
};
+static PSI_memory_info all_partitioning_memory[]=
+{ { &key_memory_Partition_share, "Partition_share", 0},
+ { &key_memory_partition_sort_buffer, "partition_sort_buffer", 0},
+ { &key_memory_Partition_admin, "Partition_admin", 0},
+ { &key_memory_ha_partition_file, "ha_partition::file", 0},
+// { &key_memory_ha_partition_engine_array, "ha_partition::engine_array", 0},
+ { &key_memory_ha_partition_part_ids, "ha_partition::part_ids", 0} };
+static PSI_file_info all_partition_file[]=
+{ { &key_file_ha_partition_par, "ha_partition::parfile", 0} };
static void init_partition_psi_keys(void)
{
const char* category= "partition";
int count;
+ count= array_elements(all_partitioning_memory);
+ mysql_memory_register(category, all_partitioning_memory, count);
count= array_elements(all_partition_mutexes);
mysql_mutex_register(category, all_partition_mutexes, count);
+ count= array_elements(all_partition_file);
+ mysql_file_register(category, all_partition_file, count);
}
#endif /* HAVE_PSI_INTERFACE */
@@ -244,7 +265,7 @@ ha_partition::ha_partition(handlerton *hton, TABLE_SHARE *share)
void ha_partition::ha_partition_init()
{
- init_alloc_root(&m_mem_root, "ha_partition", 512, 512, MYF(0));
+ init_alloc_root(PSI_INSTRUMENT_ME, &m_mem_root, 512, 512, MYF(0));
init_handler_variables();
}
@@ -649,9 +670,9 @@ int ha_partition::create_partitioning_metadata(const char *path,
strxmov(name, path, ha_par_ext, NullS);
strxmov(old_name, old_path, ha_par_ext, NullS);
if ((action_flag == CHF_DELETE_FLAG &&
- mysql_file_delete(key_file_partition, name, MYF(MY_WME))) ||
+ mysql_file_delete(key_file_ha_partition_par, name, MYF(MY_WME))) ||
(action_flag == CHF_RENAME_FLAG &&
- mysql_file_rename(key_file_partition, old_name, name, MYF(MY_WME))))
+ mysql_file_rename(key_file_ha_partition_par, old_name, name, MYF(MY_WME))))
{
DBUG_RETURN(TRUE);
}
@@ -1333,7 +1354,7 @@ bool print_admin_msg(THD* thd, uint len,
char *msgbuf;
bool error= true;
- if (!(msgbuf= (char*) my_malloc(len, MYF(0))))
+ if (!(msgbuf= (char*) my_malloc(key_memory_Partition_admin, len, MYF(0))))
return true;
va_start(args, fmt);
msg_length= my_vsnprintf(msgbuf, len, fmt, args);
@@ -2749,7 +2770,8 @@ bool ha_partition::create_handler_file(const char *name)
/* 4 static words (tot words, checksum, tot partitions, name length) */
tot_len_words= 4 + tot_partition_words + tot_name_words;
tot_len_byte= PAR_WORD_SIZE * tot_len_words;
- if (!(file_buffer= (uchar *) my_malloc(tot_len_byte, MYF(MY_ZEROFILL))))
+ if (!(file_buffer= (uchar *) my_malloc(key_memory_ha_partition_file,
+ tot_len_byte, MYF(MY_ZEROFILL))))
DBUG_RETURN(TRUE);
engine_array= (file_buffer + PAR_ENGINES_OFFSET);
name_buffer_ptr= (char*) (engine_array + tot_partition_words * PAR_WORD_SIZE
@@ -2804,7 +2826,7 @@ bool ha_partition::create_handler_file(const char *name)
to be used at open, delete_table and rename_table
*/
fn_format(file_name, name, "", ha_par_ext, MY_APPEND_EXT);
- if ((file= mysql_file_create(key_file_partition,
+ if ((file= mysql_file_create(key_file_ha_partition_par,
file_name, CREATE_MODE, O_RDWR | O_TRUNC,
MYF(MY_WME))) >= 0)
{
@@ -2829,7 +2851,7 @@ bool ha_partition::create_handler_file(const char *name)
}
(void) mysql_file_close(file, MYF(0));
if (result)
- mysql_file_delete(key_file_partition, file_name, MYF(MY_WME));
+ mysql_file_delete(key_file_ha_partition_par, file_name, MYF(MY_WME));
}
else
result= TRUE;
@@ -2993,7 +3015,7 @@ bool ha_partition::read_par_file(const char *name)
fn_format(buff, name, "", ha_par_ext, MY_APPEND_EXT);
/* Following could be done with mysql_file_stat to read in whole file */
- if ((file= mysql_file_open(key_file_partition,
+ if ((file= mysql_file_open(key_file_ha_partition_par,
buff, O_RDONLY | O_SHARE, MYF(0))) < 0)
DBUG_RETURN(TRUE);
if (mysql_file_read(file, (uchar *) &buff[0], PAR_WORD_SIZE, MYF(MY_NABP)))
@@ -3219,7 +3241,7 @@ bool ha_partition::insert_partition_name_in_hash(const char *name, uint part_id,
Since we use my_multi_malloc, then my_free(part_def) will also free
part_name, as a part of my_hash_free.
*/
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(key_memory_Partition_share, MY_WME,
&part_def, sizeof(PART_NAME_DEF),
&part_name, part_name_length + 1,
NULL))
@@ -3267,10 +3289,10 @@ bool ha_partition::populate_partition_name_hash()
DBUG_RETURN(false);
}
tot_names= m_is_sub_partitioned ? m_tot_parts + num_parts : num_parts;
- if (my_hash_init(&part_share->partition_name_hash,
- system_charset_info, tot_names, 0, 0,
- (my_hash_get_key) get_part_name,
- my_free, HASH_UNIQUE))
+ if (my_hash_init(key_memory_Partition_share,
+ &part_share->partition_name_hash, system_charset_info,
+ tot_names, 0, 0, (my_hash_get_key) get_part_name, my_free,
+ HASH_UNIQUE))
{
unlock_shared_ha_data();
DBUG_RETURN(TRUE);
@@ -3506,7 +3528,8 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
if (!m_part_ids_sorted_by_num_of_records)
{
if (!(m_part_ids_sorted_by_num_of_records=
- (uint32*) my_malloc(m_tot_parts * sizeof(uint32), MYF(MY_WME))))
+ (uint32*) my_malloc(key_memory_ha_partition_part_ids,
+ m_tot_parts * sizeof(uint32), MYF(MY_WME))))
DBUG_RETURN(error);
uint32 i;
/* Initialize it with all partition ids. */
@@ -3524,7 +3547,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
/* Allocate memory used with MMR */
if (!(m_range_info= (void **)
- my_multi_malloc(MYF(MY_WME),
+ my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&m_range_info, sizeof(range_id_t) * m_tot_parts,
&m_stock_range_seq, sizeof(uint) * m_tot_parts,
&m_mrr_buffer, sizeof(HANDLER_BUFFER) * m_tot_parts,
@@ -3535,8 +3558,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
&m_part_mrr_range_current,
sizeof(PARTITION_PART_KEY_MULTI_RANGE *) * m_tot_parts,
&m_partition_part_key_multi_range_hld,
- sizeof(PARTITION_PART_KEY_MULTI_RANGE_HLD) *
- m_tot_parts,
+ sizeof(PARTITION_PART_KEY_MULTI_RANGE_HLD) * m_tot_parts,
NullS)))
goto err_alloc;
@@ -5315,7 +5337,8 @@ bool ha_partition::init_record_priority_queue()
/* Allocate a key for temporary use when setting up the scan. */
alloc_len+= table_share->max_key_length;
- if (!(m_ordered_rec_buffer= (uchar*)my_malloc(alloc_len, MYF(MY_WME))))
+ if (!(m_ordered_rec_buffer= (uchar*)my_malloc(key_memory_partition_sort_buffer,
+ alloc_len, MYF(MY_WME))))
DBUG_RETURN(true);
/*
@@ -6066,9 +6089,8 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
if (!m_mrr_range_first)
{
if (!(m_mrr_range_first= (PARTITION_KEY_MULTI_RANGE *)
- my_multi_malloc(MYF(MY_WME),
- &m_mrr_range_current,
- sizeof(PARTITION_KEY_MULTI_RANGE),
+ my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
+ &m_mrr_range_current, sizeof(PARTITION_KEY_MULTI_RANGE),
NullS)))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -6085,9 +6107,8 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
if (!m_part_mrr_range_first[i])
{
if (!(m_part_mrr_range_first[i]= (PARTITION_PART_KEY_MULTI_RANGE *)
- my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
- &m_part_mrr_range_current[i],
- sizeof(PARTITION_PART_KEY_MULTI_RANGE),
+ my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME | MY_ZEROFILL),
+ &m_part_mrr_range_current[i], sizeof(PARTITION_PART_KEY_MULTI_RANGE),
NullS)))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
}
@@ -6123,7 +6144,7 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
if (m_mrr_range_current->key[0])
my_free(m_mrr_range_current->key[0]);
if (!(m_mrr_range_current->key[0]=
- (uchar *) my_malloc(length, MYF(MY_WME))))
+ (uchar *) my_malloc(PSI_INSTRUMENT_ME, length, MYF(MY_WME))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
m_mrr_range_current->length[0]= length;
}
@@ -6147,7 +6168,7 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
if (m_mrr_range_current->key[1])
my_free(m_mrr_range_current->key[1]);
if (!(m_mrr_range_current->key[1]=
- (uchar *) my_malloc(length, MYF(MY_WME))))
+ (uchar *) my_malloc(PSI_INSTRUMENT_ME, length, MYF(MY_WME))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
m_mrr_range_current->length[1]= length;
}
@@ -6181,7 +6202,7 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
{
PARTITION_PART_KEY_MULTI_RANGE *tmp_part_mrr_range;
if (!(tmp_part_mrr_range= (PARTITION_PART_KEY_MULTI_RANGE *)
- my_malloc(sizeof(PARTITION_PART_KEY_MULTI_RANGE),
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(PARTITION_PART_KEY_MULTI_RANGE),
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -6201,7 +6222,7 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
/* Add end of range sentinel */
PARTITION_KEY_MULTI_RANGE *tmp_mrr_range;
if (!(tmp_mrr_range= (PARTITION_KEY_MULTI_RANGE *)
- my_malloc(sizeof(PARTITION_KEY_MULTI_RANGE), MYF(MY_WME))))
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(PARTITION_KEY_MULTI_RANGE), MYF(MY_WME))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
tmp_mrr_range->id= m_mrr_range_current->id + 1;
@@ -6472,7 +6493,7 @@ int ha_partition::multi_range_read_init(RANGE_SEQ_IF *seq,
if (m_mrr_full_buffer)
my_free(m_mrr_full_buffer);
if (!(m_mrr_full_buffer=
- (uchar *) my_malloc(m_mrr_new_full_buffer_size, MYF(MY_WME))))
+ (uchar *) my_malloc(PSI_INSTRUMENT_ME, m_mrr_new_full_buffer_size, MYF(MY_WME))))
{
m_mrr_full_buffer_size= 0;
error= HA_ERR_OUT_OF_MEM;
@@ -6870,11 +6891,9 @@ FT_INFO *ha_partition::ft_init_ext(uint flags, uint inx, String *key)
{
FT_INFO **tmp_ft_info;
if (!(ft_target= (st_partition_ft_info *)
- my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
- &ft_target,
- sizeof(st_partition_ft_info),
- &tmp_ft_info,
- sizeof(FT_INFO *) * m_tot_parts,
+ my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME | MY_ZEROFILL),
+ &ft_target, sizeof(st_partition_ft_info),
+ &tmp_ft_info, sizeof(FT_INFO *) * m_tot_parts,
NullS)))
{
my_error(ER_OUT_OF_RESOURCES, MYF(ME_FATAL));
diff --git a/sql/handle_connections_win.cc b/sql/handle_connections_win.cc
index 5db10c2fada..44ad8ddc865 100644
--- a/sql/handle_connections_win.cc
+++ b/sql/handle_connections_win.cc
@@ -360,7 +360,7 @@ struct Pipe_Listener : public Listener
{
sql_perror("Create named pipe failed");
sql_print_error("Aborting");
- exit(1);
+ unireg_abort(1);
}
first_instance= false;
return pipe_handle;
diff --git a/sql/handler.cc b/sql/handler.cc
index 7d61252eea6..4dd915d8b91 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -30,7 +30,6 @@
#include "key.h" // key_copy, key_unpack, key_cmp_if_same, key_cmp
#include "sql_table.h" // build_table_filename
#include "sql_parse.h" // check_stack_overrun
-#include "sql_acl.h" // SUPER_ACL
#include "sql_base.h" // TDC_element
#include "discover.h" // extension_based_table_discovery, etc
#include "log_event.h" // *_rows_log_event
@@ -40,6 +39,8 @@
#include "myisam.h"
#include "probes_mysql.h"
#include <mysql/psi/mysql_table.h>
+#include <pfs_transaction_provider.h>
+#include <mysql/psi/mysql_transaction.h>
#include "debug_sync.h" // DEBUG_SYNC
#include "sql_audit.h"
#include "ha_sequence.h"
@@ -62,6 +63,39 @@
#include "wsrep_trans_observer.h" /* wsrep transaction hooks */
#endif /* WITH_WSREP */
+/**
+ @def MYSQL_TABLE_LOCK_WAIT
+ Instrumentation helper for table io_waits.
+ @param OP the table operation to be performed
+ @param FLAGS per table operation flags.
+ @param PAYLOAD the code to instrument.
+ @sa MYSQL_END_TABLE_WAIT.
+*/
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_TABLE_LOCK_WAIT(OP, FLAGS, PAYLOAD) \
+ { \
+ if (m_psi != NULL) \
+ { \
+ PSI_table_locker *locker; \
+ PSI_table_locker_state state; \
+ locker= PSI_TABLE_CALL(start_table_lock_wait) \
+ (& state, m_psi, OP, FLAGS, \
+ __FILE__, __LINE__); \
+ PAYLOAD \
+ if (locker != NULL) \
+ PSI_TABLE_CALL(end_table_lock_wait)(locker); \
+ } \
+ else \
+ { \
+ PAYLOAD \
+ } \
+ }
+#else
+ #define MYSQL_TABLE_LOCK_WAIT(OP, FLAGS, PAYLOAD) \
+ PAYLOAD
+#endif
+
+
/*
While we have legacy_db_type, we have this array to
check for dups and to find handlerton from legacy_db_type.
@@ -361,7 +395,8 @@ int ha_init_errors(void)
/* Allocate a pointer array for the error message strings. */
/* Zerofill it to avoid uninitialized gaps. */
- if (! (handler_errmsgs= (const char**) my_malloc(HA_ERR_ERRORS * sizeof(char*),
+ if (! (handler_errmsgs= (const char**) my_malloc(key_memory_handler_errmsgs,
+ HA_ERR_ERRORS * sizeof(char*),
MYF(MY_WME | MY_ZEROFILL))))
return 1;
@@ -531,7 +566,7 @@ int ha_initialize_handlerton(st_plugin_int *plugin)
DBUG_ENTER("ha_initialize_handlerton");
DBUG_PRINT("plugin", ("initialize plugin: '%s'", plugin->name.str));
- hton= (handlerton *)my_malloc(sizeof(handlerton),
+ hton= (handlerton *)my_malloc(key_memory_handlerton, sizeof(handlerton),
MYF(MY_WME | MY_ZEROFILL));
if (hton == NULL)
{
@@ -1200,7 +1235,7 @@ void ha_pre_shutdown()
times per transaction.
*/
-void trans_register_ha(THD *thd, bool all, handlerton *ht_arg)
+void trans_register_ha(THD *thd, bool all, handlerton *ht_arg, ulonglong trxid)
{
THD_TRANS *trans;
Ha_trx_info *ha_info;
@@ -1231,6 +1266,25 @@ void trans_register_ha(THD *thd, bool all, handlerton *ht_arg)
if (thd->transaction.implicit_xid.is_null())
thd->transaction.implicit_xid.set(thd->query_id);
+/*
+ Register transaction start in performance schema if not done already.
+ By doing this, we handle cases when the transaction is started implicitly in
+ autocommit=0 mode, and cases when we are in normal autocommit=1 mode and the
+ executed statement is a single-statement transaction.
+
+ Explicitly started transactions are handled in trans_begin().
+
+ Do not register transactions in which binary log is the only participating
+ transactional storage engine.
+*/
+ if (thd->m_transaction_psi == NULL && ht_arg->db_type != DB_TYPE_BINLOG)
+ {
+ thd->m_transaction_psi= MYSQL_START_TRANSACTION(&thd->m_transaction_state,
+ thd->get_xid(), trxid, thd->tx_isolation, thd->tx_read_only,
+ !thd->in_multi_stmt_transaction_mode());
+ DEBUG_SYNC(thd, "after_set_transaction_psi_before_set_transaction_gtid");
+ //gtid_set_performance_schema_values(thd);
+ }
DBUG_VOID_RETURN;
}
@@ -1456,12 +1510,14 @@ int ha_commit_trans(THD *thd, bool all)
Free resources and perform other cleanup even for 'empty' transactions.
*/
if (is_real_trans)
+ {
thd->transaction.cleanup();
+ MYSQL_COMMIT_TRANSACTION(thd->m_transaction_psi);
+ thd->m_transaction_psi= NULL;
+ }
#ifdef WITH_WSREP
if (wsrep_is_active(thd) && is_real_trans && !error)
- {
wsrep_commit_empty(thd, all);
- }
#endif /* WITH_WSREP */
DBUG_RETURN(0);
}
@@ -1490,7 +1546,8 @@ int ha_commit_trans(THD *thd, bool all)
We allow the owner of FTWRL to COMMIT; we assume that it knows
what it does.
*/
- mdl_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_COMMIT, MDL_EXPLICIT);
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::BACKUP, "", "", MDL_BACKUP_COMMIT,
+ MDL_EXPLICIT);
if (!WSREP(thd) &&
thd->mdl_context.acquire_lock(&mdl_request,
@@ -1505,7 +1562,7 @@ int ha_commit_trans(THD *thd, bool all)
if (rw_trans &&
opt_readonly &&
- !(thd->security_ctx->master_access & SUPER_ACL) &&
+ !(thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY) &&
!thd->slave_thread)
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
@@ -1651,12 +1708,15 @@ int ha_commit_trans(THD *thd, bool all)
#endif /* WITH_WSREP */
DBUG_EXECUTE_IF("crash_commit_before_unlog", DBUG_SUICIDE(););
if (tc_log->unlog(cookie, xid))
- {
error= 2; /* Error during commit */
- goto end;
- }
done:
+ if (is_real_trans)
+ {
+ MYSQL_COMMIT_TRANSACTION(thd->m_transaction_psi);
+ thd->m_transaction_psi= NULL;
+ }
+
DBUG_EXECUTE_IF("crash_commit_after", DBUG_SUICIDE(););
mysql_mutex_assert_not_owner(&LOCK_prepare_ordered);
@@ -1694,6 +1754,8 @@ err:
ha_rollback_trans(thd, all);
else
{
+ MYSQL_ROLLBACK_TRANSACTION(thd->m_transaction_psi);
+ thd->m_transaction_psi= NULL;
WSREP_DEBUG("rollback skipped %p %d",thd->rgi_slave,
thd->rgi_slave->is_parallel_exec);
}
@@ -1913,6 +1975,13 @@ int ha_rollback_trans(THD *thd, bool all)
}
(void) wsrep_after_rollback(thd, all);
#endif /* WITH_WSREP */
+
+ if (all || !thd->in_active_multi_stmt_transaction())
+ {
+ MYSQL_ROLLBACK_TRANSACTION(thd->m_transaction_psi);
+ thd->m_transaction_psi= NULL;
+ }
+
/* Always cleanup. Even if nht==0. There may be savepoints. */
if (is_real_trans)
{
@@ -2218,7 +2287,7 @@ int ha_recover(HASH *commit_list)
info.list==0 && info.len > MIN_XID_LIST_SIZE; info.len/=2)
{
DBUG_EXECUTE_IF("min_xa_len", info.len = 16;);
- info.list=(XID *)my_malloc(info.len*sizeof(XID), MYF(0));
+ info.list=(XID *)my_malloc(key_memory_XID, info.len*sizeof(XID), MYF(0));
}
if (!info.list)
{
@@ -2360,6 +2429,10 @@ int ha_rollback_to_savepoint(THD *thd, SAVEPOINT *sv)
ha_info->reset(); /* keep it conveniently zero-filled */
}
trans->ha_list= sv->ha_list;
+
+ if (thd->m_transaction_psi != NULL)
+ MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(thd->m_transaction_psi, 1);
+
DBUG_RETURN(error);
}
@@ -2411,6 +2484,9 @@ int ha_savepoint(THD *thd, SAVEPOINT *sv)
*/
sv->ha_list= trans->ha_list;
+ if (!error && thd->m_transaction_psi != NULL)
+ MYSQL_INC_TRANSACTION_SAVEPOINTS(thd->m_transaction_psi, 1);
+
DBUG_RETURN(error);
}
@@ -2435,6 +2511,10 @@ int ha_release_savepoint(THD *thd, SAVEPOINT *sv)
error=1;
}
}
+
+ if (thd->m_transaction_psi != NULL)
+ MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(thd->m_transaction_psi, 1);
+
DBUG_RETURN(error);
}
@@ -2702,6 +2782,30 @@ void handler::rebind_psi()
}
+void handler::start_psi_batch_mode()
+{
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ DBUG_ASSERT(m_psi_batch_mode == PSI_BATCH_MODE_NONE);
+ DBUG_ASSERT(m_psi_locker == NULL);
+ m_psi_batch_mode= PSI_BATCH_MODE_STARTING;
+ m_psi_numrows= 0;
+#endif
+}
+
+void handler::end_psi_batch_mode()
+{
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ DBUG_ASSERT(m_psi_batch_mode != PSI_BATCH_MODE_NONE);
+ if (m_psi_locker != NULL)
+ {
+ DBUG_ASSERT(m_psi_batch_mode == PSI_BATCH_MODE_STARTED);
+ PSI_TABLE_CALL(end_table_io_wait)(m_psi_locker, m_psi_numrows);
+ m_psi_locker= NULL;
+ }
+ m_psi_batch_mode= PSI_BATCH_MODE_NONE;
+#endif
+}
+
PSI_table_share *handler::ha_table_share_psi() const
{
return table_share->m_psi;
@@ -2791,8 +2895,10 @@ int handler::ha_close(void)
*/
if (table->in_use)
status_var_add(table->in_use->status_var.rows_tmp_read, rows_tmp_read);
- PSI_CALL_close_table(m_psi);
+ PSI_CALL_close_table(table_share, m_psi);
m_psi= NULL; /* instrumentation handle, invalid after close_table() */
+ DBUG_ASSERT(m_psi_batch_mode == PSI_BATCH_MODE_NONE);
+ DBUG_ASSERT(m_psi_locker == NULL);
/* Detach from ANALYZE tracker */
tracker= NULL;
@@ -2813,7 +2919,7 @@ int handler::ha_rnd_next(uchar *buf)
do
{
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, MAX_KEY, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, MAX_KEY, result,
{ result= rnd_next(buf); })
if (result != HA_ERR_RECORD_DELETED)
break;
@@ -2845,7 +2951,7 @@ int handler::ha_rnd_pos(uchar *buf, uchar *pos)
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited == RND);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, MAX_KEY, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, MAX_KEY, result,
{ result= rnd_pos(buf, pos); })
increment_statistics(&SSV::ha_read_rnd_count);
if (result == HA_ERR_RECORD_DELETED)
@@ -2870,7 +2976,7 @@ int handler::ha_index_read_map(uchar *buf, const uchar *key,
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited==INDEX);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, active_index, result,
{ result= index_read_map(buf, key, keypart_map, find_flag); })
increment_statistics(&SSV::ha_read_key_count);
if (!result)
@@ -2898,7 +3004,7 @@ int handler::ha_index_read_idx_map(uchar *buf, uint index, const uchar *key,
DBUG_ASSERT(table_share->tmp_table != NO_TMP_TABLE ||
m_lock_type != F_UNLCK);
DBUG_ASSERT(end_range == NULL);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, index, result,
{ result= index_read_idx_map(buf, index, key, keypart_map, find_flag); })
increment_statistics(&SSV::ha_read_key_count);
if (!result)
@@ -2920,7 +3026,7 @@ int handler::ha_index_next(uchar * buf)
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited==INDEX);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, active_index, result,
{ result= index_next(buf); })
increment_statistics(&SSV::ha_read_next_count);
if (!result)
@@ -2941,7 +3047,7 @@ int handler::ha_index_prev(uchar * buf)
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited==INDEX);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, active_index, result,
{ result= index_prev(buf); })
increment_statistics(&SSV::ha_read_prev_count);
if (!result)
@@ -2961,7 +3067,7 @@ int handler::ha_index_first(uchar * buf)
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited==INDEX);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, active_index, result,
{ result= index_first(buf); })
increment_statistics(&SSV::ha_read_first_count);
if (!result)
@@ -2981,7 +3087,7 @@ int handler::ha_index_last(uchar * buf)
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited==INDEX);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, active_index, result,
{ result= index_last(buf); })
increment_statistics(&SSV::ha_read_last_count);
if (!result)
@@ -3001,7 +3107,7 @@ int handler::ha_index_next_same(uchar *buf, const uchar *key, uint keylen)
m_lock_type != F_UNLCK);
DBUG_ASSERT(inited==INDEX);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_FETCH_ROW, active_index, result,
{ result= index_next_same(buf, key, keylen); })
increment_statistics(&SSV::ha_read_next_count);
if (!result)
@@ -4585,7 +4691,8 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table,
ALTER_DROP_CHECK_CONSTRAINT |
ALTER_PARTITIONED |
ALTER_VIRTUAL_GCOL_EXPR |
- ALTER_RENAME;
+ ALTER_RENAME |
+ ALTER_RENAME_INDEX;
/* Is there at least one operation that requires copy algorithm? */
if (ha_alter_info->handler_flags & ~inplace_offline_operations)
@@ -4942,7 +5049,7 @@ void handler::update_global_table_stats()
table->s->table_cache_key.length)))
{
if (!(table_stats = ((TABLE_STATS*)
- my_malloc(sizeof(TABLE_STATS),
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(TABLE_STATS),
MYF(MY_WME | MY_ZEROFILL)))))
{
/* Out of memory error already given */
@@ -5007,7 +5114,7 @@ void handler::update_global_index_stats()
key_length)))
{
if (!(index_stats = ((INDEX_STATS*)
- my_malloc(sizeof(INDEX_STATS),
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(INDEX_STATS),
MYF(MY_WME | MY_ZEROFILL)))))
goto end; // Error is already given
@@ -6389,7 +6496,7 @@ int handler::ha_external_lock(THD *thd, int lock_type)
We cache the table flags if the locking succeeded. Otherwise, we
keep them as they were when they were fetched in ha_open().
*/
- MYSQL_TABLE_LOCK_WAIT(m_psi, PSI_TABLE_EXTERNAL_LOCK, lock_type,
+ MYSQL_TABLE_LOCK_WAIT(PSI_TABLE_EXTERNAL_LOCK, lock_type,
{ error= external_lock(thd, lock_type); })
DBUG_EXECUTE_IF("external_lock_failure", error= HA_ERR_GENERIC;);
@@ -6646,15 +6753,15 @@ int handler::ha_write_row(const uchar *buf)
mark_trx_read_write();
increment_statistics(&SSV::ha_write_count);
- if (table->s->long_unique_table)
+ if (table->s->long_unique_table && this == table->file)
{
- if (this->inited == RND)
+ if (inited == RND)
table->clone_handler_for_update();
handler *h= table->update_handler ? table->update_handler : table->file;
if ((error= check_duplicate_long_entries(table, h, buf)))
DBUG_RETURN(error);
}
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_WRITE_ROW, MAX_KEY, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_WRITE_ROW, MAX_KEY, error,
{ error= write_row(buf); })
MYSQL_INSERT_ROW_DONE(error);
@@ -6699,7 +6806,7 @@ int handler::ha_update_row(const uchar *old_data, const uchar *new_data)
return error;
}
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_UPDATE_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_UPDATE_ROW, active_index, error,
{ error= update_row(old_data, new_data);})
MYSQL_UPDATE_ROW_DONE(error);
@@ -6762,7 +6869,7 @@ int handler::ha_delete_row(const uchar *buf)
mark_trx_read_write();
increment_statistics(&SSV::ha_delete_count);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_DELETE_ROW, active_index, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_DELETE_ROW, active_index, error,
{ error= delete_row(buf);})
MYSQL_DELETE_ROW_DONE(error);
if (likely(!error))
@@ -7222,7 +7329,7 @@ int del_global_table_stat(THD *thd, const LEX_CSTRING *db, const LEX_CSTRING *ta
cache_key_length= db->length + 1 + table->length + 1;
- if(!(cache_key= (uchar *)my_malloc(cache_key_length,
+ if(!(cache_key= (uchar *)my_malloc(PSI_INSTRUMENT_ME, cache_key_length,
MYF(MY_WME | MY_ZEROFILL))))
{
/* Out of memory error already given */
diff --git a/sql/handler.h b/sql/handler.h
index 0a561ec8b3f..f17c303571f 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -3115,8 +3115,59 @@ public:
*/
PSI_table *m_psi;
+private:
+ /** Internal state of the batch instrumentation. */
+ enum batch_mode_t
+ {
+ /** Batch mode not used. */
+ PSI_BATCH_MODE_NONE,
+ /** Batch mode used, before first table io. */
+ PSI_BATCH_MODE_STARTING,
+ /** Batch mode used, after first table io. */
+ PSI_BATCH_MODE_STARTED
+ };
+ /**
+ Batch mode state.
+ @sa start_psi_batch_mode.
+ @sa end_psi_batch_mode.
+ */
+ batch_mode_t m_psi_batch_mode;
+ /**
+ The number of rows in the batch.
+ @sa start_psi_batch_mode.
+ @sa end_psi_batch_mode.
+ */
+ ulonglong m_psi_numrows;
+ /**
+ The current event in a batch.
+ @sa start_psi_batch_mode.
+ @sa end_psi_batch_mode.
+ */
+ PSI_table_locker *m_psi_locker;
+ /**
+ Storage for the event in a batch.
+ @sa start_psi_batch_mode.
+ @sa end_psi_batch_mode.
+ */
+ PSI_table_locker_state m_psi_locker_state;
+
+public:
virtual void unbind_psi();
virtual void rebind_psi();
+ /**
+ Put the handler in 'batch' mode when collecting
+ table io instrumented events.
+ When operating in batch mode:
+ - a single start event is generated in the performance schema.
+ - all table io performed between @c start_psi_batch_mode
+ and @c end_psi_batch_mode is not instrumented:
+ the number of rows affected is counted instead in @c m_psi_numrows.
+ - a single end event is generated in the performance schema
+ when the batch mode ends with @c end_psi_batch_mode.
+ */
+ void start_psi_batch_mode();
+ /** End a batch started with @c start_psi_batch_mode. */
+ void end_psi_batch_mode();
bool set_top_table_fields;
struct TABLE *top_table;
@@ -3163,7 +3214,11 @@ public:
pushed_rowid_filter(NULL),
rowid_filter_is_active(0),
auto_inc_intervals_count(0),
- m_psi(NULL), set_top_table_fields(FALSE), top_table(0),
+ m_psi(NULL),
+ m_psi_batch_mode(PSI_BATCH_MODE_NONE),
+ m_psi_numrows(0),
+ m_psi_locker(NULL),
+ set_top_table_fields(FALSE), top_table(0),
top_table_field(0), top_table_fields(0),
m_lock_type(F_UNLCK), ha_share(NULL), m_prev_insert_id(0)
{
@@ -4036,11 +4091,10 @@ public:
virtual my_bool register_query_cache_table(THD *thd, const char *table_key,
uint key_length,
- qc_engine_callback
- *engine_callback,
+ qc_engine_callback *callback,
ulonglong *engine_data)
{
- *engine_callback= 0;
+ *callback= 0;
return TRUE;
}
@@ -5007,7 +5061,8 @@ int ha_abort_transaction(THD *bf_thd, THD *victim_thd, my_bool signal);
#endif
/* these are called by storage engines */
-void trans_register_ha(THD *thd, bool all, handlerton *ht);
+void trans_register_ha(THD *thd, bool all, handlerton *ht,
+ ulonglong trxid);
/*
Storage engine has to assume the transaction will end up with 2pc if
@@ -5032,13 +5087,82 @@ int binlog_log_row(TABLE* table,
const uchar *after_record,
Log_func *log_func);
-#define TABLE_IO_WAIT(TRACKER, PSI, OP, INDEX, FLAGS, PAYLOAD) \
+/**
+ @def MYSQL_TABLE_IO_WAIT
+ Instrumentation helper for table io_waits.
+ Note that this helper is intended to be used from
+ within the handler class only, as it uses members
+ from @c handler
+ Performance schema events are instrumented as follows:
+ - in non batch mode, one event is generated per call
+ - in batch mode, the number of rows affected is saved
+ in @c m_psi_numrows, so that @c end_psi_batch_mode()
+ generates a single event for the batch.
+ @param OP the table operation to be performed
+ @param INDEX the table index used if any, or MAX_KEY.
+ @param PAYLOAD instrumented code to execute
+ @sa handler::end_psi_batch_mode.
+*/
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_TABLE_IO_WAIT(OP, INDEX, RESULT, PAYLOAD) \
+ { \
+ if (m_psi != NULL) \
+ { \
+ switch (m_psi_batch_mode) \
+ { \
+ case PSI_BATCH_MODE_NONE: \
+ { \
+ PSI_table_locker *sub_locker= NULL; \
+ PSI_table_locker_state reentrant_safe_state; \
+ sub_locker= PSI_TABLE_CALL(start_table_io_wait) \
+ (& reentrant_safe_state, m_psi, OP, INDEX, \
+ __FILE__, __LINE__); \
+ PAYLOAD \
+ if (sub_locker != NULL) \
+ PSI_TABLE_CALL(end_table_io_wait) \
+ (sub_locker, 1); \
+ break; \
+ } \
+ case PSI_BATCH_MODE_STARTING: \
+ { \
+ m_psi_locker= PSI_TABLE_CALL(start_table_io_wait) \
+ (& m_psi_locker_state, m_psi, OP, INDEX, \
+ __FILE__, __LINE__); \
+ PAYLOAD \
+ if (!RESULT) \
+ m_psi_numrows++; \
+ m_psi_batch_mode= PSI_BATCH_MODE_STARTED; \
+ break; \
+ } \
+ case PSI_BATCH_MODE_STARTED: \
+ default: \
+ { \
+ DBUG_ASSERT(m_psi_batch_mode \
+ == PSI_BATCH_MODE_STARTED); \
+ PAYLOAD \
+ if (!RESULT) \
+ m_psi_numrows++; \
+ break; \
+ } \
+ } \
+ } \
+ else \
+ { \
+ PAYLOAD \
+ } \
+ }
+#else
+ #define MYSQL_TABLE_IO_WAIT(OP, INDEX, RESULT, PAYLOAD) \
+ PAYLOAD
+#endif
+
+#define TABLE_IO_WAIT(TRACKER, OP, INDEX, RESULT, PAYLOAD) \
{ \
Exec_time_tracker *this_tracker; \
if (unlikely((this_tracker= tracker))) \
tracker->start_tracking(table->in_use); \
\
- MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD); \
+ MYSQL_TABLE_IO_WAIT(OP, INDEX, RESULT, PAYLOAD); \
\
if (unlikely(this_tracker)) \
tracker->stop_tracking(table->in_use); \
diff --git a/sql/hash_filo.h b/sql/hash_filo.h
index d815c428ac6..ac84e5ccb7b 100644
--- a/sql/hash_filo.h
+++ b/sql/hash_filo.h
@@ -48,6 +48,7 @@ private:
class hash_filo
{
private:
+ PSI_memory_key m_psi_key;
const uint key_offset, key_length;
const my_hash_get_key get_key;
/** Size of this hash table. */
@@ -61,15 +62,13 @@ public:
mysql_mutex_t lock;
HASH cache;
- hash_filo(uint size_arg, uint key_offset_arg , uint key_length_arg,
- my_hash_get_key get_key_arg, my_hash_free_key free_element_arg,
- CHARSET_INFO *hash_charset_arg)
- :key_offset(key_offset_arg), key_length(key_length_arg),
- get_key(get_key_arg), m_size(size_arg),
- free_element(free_element_arg),init(0),
- hash_charset(hash_charset_arg),
- first_link(NULL),
- last_link(NULL)
+ hash_filo(PSI_memory_key psi_key, uint size_arg, uint key_offset_arg,
+ uint key_length_arg, my_hash_get_key get_key_arg,
+ my_hash_free_key free_element_arg, CHARSET_INFO *hash_charset_arg)
+ : m_psi_key(psi_key), key_offset(key_offset_arg),
+ key_length(key_length_arg), get_key(get_key_arg), m_size(size_arg),
+ free_element(free_element_arg),init(0), hash_charset(hash_charset_arg),
+ first_link(NULL), last_link(NULL)
{
bzero((char*) &cache,sizeof(cache));
}
@@ -95,8 +94,8 @@ public:
first_link= NULL;
last_link= NULL;
(void) my_hash_free(&cache);
- (void) my_hash_init(&cache,hash_charset,m_size,key_offset,
- key_length, get_key, free_element,0);
+ (void) my_hash_init(m_psi_key, &cache,hash_charset,m_size,key_offset,
+ key_length, get_key, free_element, 0);
if (!locked)
mysql_mutex_unlock(&lock);
}
@@ -202,10 +201,10 @@ public:
template <class T> class Hash_filo: public hash_filo
{
public:
- Hash_filo(uint size_arg, uint key_offset_arg, uint key_length_arg,
- my_hash_get_key get_key_arg, my_hash_free_key free_element_arg,
- CHARSET_INFO *hash_charset_arg) :
- hash_filo(size_arg, key_offset_arg, key_length_arg,
+ Hash_filo(PSI_memory_key psi_key, uint size_arg, uint key_offset_arg, uint
+ key_length_arg, my_hash_get_key get_key_arg, my_hash_free_key
+ free_element_arg, CHARSET_INFO *hash_charset_arg) :
+ hash_filo(psi_key, size_arg, key_offset_arg, key_length_arg,
get_key_arg, free_element_arg, hash_charset_arg) {}
T* first() { return (T*)hash_filo::first(); }
T* last() { return (T*)hash_filo::last(); }
diff --git a/sql/hostname.cc b/sql/hostname.cc
index 968914fd56e..edf31c11081 100644
--- a/sql/hostname.cc
+++ b/sql/hostname.cc
@@ -150,10 +150,9 @@ bool hostname_cache_init()
Host_entry tmp;
uint key_offset= (uint) ((char*) (&tmp.ip_key) - (char*) &tmp);
- if (!(hostname_cache= new Hash_filo<Host_entry>(host_cache_size,
- key_offset, HOST_ENTRY_KEY_SIZE,
- NULL, (my_hash_free_key) free,
- &my_charset_bin)))
+ if (!(hostname_cache= new Hash_filo<Host_entry>(key_memory_host_cache_hostname,
+ host_cache_size, key_offset, HOST_ENTRY_KEY_SIZE,
+ NULL, (my_hash_free_key) free, &my_charset_bin)))
return 1;
hostname_cache->clear();
@@ -476,7 +475,8 @@ int ip_to_hostname(struct sockaddr_storage *ip_storage,
if (entry->m_host_validated)
{
if (entry->m_hostname_length)
- *hostname= my_strdup(entry->m_hostname, MYF(0));
+ *hostname= my_strdup(key_memory_host_cache_hostname,
+ entry->m_hostname, MYF(0));
DBUG_PRINT("info",("IP (%s) has been found in the cache. "
"Hostname: '%s'",
@@ -926,7 +926,8 @@ int ip_to_hostname(struct sockaddr_storage *ip_storage,
{
/* Copy host name string to be stored in the cache. */
- *hostname= my_strdup(hostname_buffer, MYF(0));
+ *hostname= my_strdup(key_memory_host_cache_hostname,
+ hostname_buffer, MYF(0));
if (!*hostname)
{
diff --git a/sql/item.cc b/sql/item.cc
index 6b585325439..89e23173b0e 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -403,7 +403,7 @@ int Item::save_str_value_in_field(Field *field, String *result)
Item::Item(THD *thd):
is_expensive_cache(-1), rsize(0), name(null_clex_str), orig_name(0),
- is_autogenerated_name(TRUE)
+ common_flags(IS_AUTO_GENERATED_NAME)
{
DBUG_ASSERT(thd);
marker= 0;
@@ -463,7 +463,7 @@ Item::Item(THD *thd, Item *item):
with_param(item->with_param),
with_window_func(item->with_window_func),
with_field(item->with_field),
- is_autogenerated_name(item->is_autogenerated_name)
+ common_flags(item->common_flags)
{
next= thd->free_list; // Put in free list
thd->free_list= this;
@@ -1117,7 +1117,7 @@ void Item::set_name(THD *thd, const char *str, size_t length, CHARSET_INFO *cs)
str++;
}
}
- if (str != str_start && !is_autogenerated_name)
+ if (str != str_start && !is_autogenerated_name())
{
char buff[SAFE_NAME_LEN];
@@ -2771,7 +2771,8 @@ Item_sp::execute_impl(THD *thd, Item **args, uint arg_count)
(m_sp->agg_type() == NOT_AGGREGATE && !func_ctx));
if (!func_ctx)
{
- init_sql_alloc(&sp_mem_root, "Item_sp", MEM_ROOT_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(key_memory_sp_head_call_root, &sp_mem_root,
+ MEM_ROOT_BLOCK_SIZE, 0, MYF(0));
*sp_query_arena= Query_arena(&sp_mem_root,
Query_arena::STMT_INITIALIZED_FOR_SP);
}
@@ -5099,7 +5100,7 @@ static Item** find_field_in_group_list(Item *find_item, ORDER *group_list)
/* SELECT list element with explicit alias */
if ((*(cur_group->item))->name.str && !table_name.str &&
- !(*(cur_group->item))->is_autogenerated_name &&
+ !(*(cur_group->item))->is_autogenerated_name() &&
!lex_string_cmp(system_charset_info,
&(*(cur_group->item))->name, &field_name))
{
@@ -6197,6 +6198,9 @@ void Item::init_make_send_field(Send_field *tmp_field,
tmp_field->decimals=decimals;
if (unsigned_flag)
tmp_field->flags |= UNSIGNED_FLAG;
+ static_cast<Send_field_extended_metadata>(*tmp_field)=
+ Send_field_extended_metadata();
+ h->Item_append_extended_type_info(tmp_field, this);
}
void Item::make_send_field(THD *thd, Send_field *tmp_field)
diff --git a/sql/item.h b/sql/item.h
index 6a9d401b101..5eab1d049f0 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -624,6 +624,13 @@ class st_select_lex_unit;
class Item_func_not;
class Item_splocal;
+/* Item::common_flags */
+/* Indicates that name of this Item autogenerated or set by user */
+#define IS_AUTO_GENERATED_NAME 1
+/* Indicates that this item is in CYCLE clause of WITH */
+#define IS_IN_WITH_CYCLE 2
+
+
/**
String_copier that sends Item specific warnings.
*/
@@ -931,8 +938,9 @@ public:
True if any item except Item_sum contains a field. Set during parsing.
*/
bool with_field;
- bool is_autogenerated_name; /* indicate was name of this Item
- autogenerated or set by user */
+ uint8 common_flags;
+ bool is_autogenerated_name()
+ { return (common_flags & IS_AUTO_GENERATED_NAME); }
// alloc & destruct is done as start of select on THD::mem_root
Item(THD *thd);
/*
@@ -1815,6 +1823,15 @@ public:
virtual bool need_parentheses_in_default() { return false; }
virtual void save_in_result_field(bool no_conversions) {}
/*
+ Data type format implied by the CHECK CONSTRAINT,
+ to be sent to the client in the result set metadata.
+ */
+ virtual bool set_format_by_check_constraint(Send_field_extended_metadata *)
+ const
+ {
+ return false;
+ }
+ /*
set value of aggregate function in case of no rows for grouping were found
*/
virtual void no_rows_in_result() {}
@@ -7028,6 +7045,7 @@ public:
name= item->name;
Type_std_attributes::set(*attr);
maybe_null= maybe_null_arg;
+ common_flags= item->common_flags;
}
const Type_handler *type_handler() const
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 6df2b5dbd3a..7fe16848082 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -6481,6 +6481,21 @@ Item *Item_cond_and::neg_transformer(THD *thd) /* NOT(a AND b AND ...) -> */
}
+bool
+Item_cond_and::set_format_by_check_constraint(
+ Send_field_extended_metadata *to) const
+{
+ List_iterator_fast<Item> li(const_cast<List<Item>&>(list));
+ Item *item;
+ while ((item= li++))
+ {
+ if (item->set_format_by_check_constraint(to))
+ return true;
+ }
+ return false;
+}
+
+
Item *Item_cond_or::neg_transformer(THD *thd) /* NOT(a OR b OR ...) -> */
/* NOT a AND NOT b AND ... */
{
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 9b20fa50214..8d5cfb359ec 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -3349,6 +3349,7 @@ public:
COND *build_equal_items(THD *thd, COND_EQUAL *inherited,
bool link_item_fields,
COND_EQUAL **cond_equal_ref);
+ bool set_format_by_check_constraint(Send_field_extended_metadata *to) const;
void add_key_fields(JOIN *join, KEY_FIELD **key_fields, uint *and_level,
table_map usable_tables, SARGABLE_PARAM **sargables);
SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param, Item **cond_ptr);
diff --git a/sql/item_create.cc b/sql/item_create.cc
index 486f4fc591e..edf44fc3cd3 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -1765,6 +1765,15 @@ protected:
};
+class Create_func_release_all_locks : public Create_func_arg0
+{
+public:
+ virtual Item *create_builder(THD *thd);
+
+ static Create_func_release_all_locks s_singleton;
+};
+
+
class Create_func_release_lock : public Create_func_arg1
{
public:
@@ -2378,7 +2387,7 @@ static bool has_named_parameters(List<Item> *params)
List_iterator<Item> it(*params);
while ((param= it++))
{
- if (! param->is_autogenerated_name)
+ if (! param->is_autogenerated_name())
return true;
}
}
@@ -2624,7 +2633,7 @@ Create_func_arg1::create_func(THD *thd, LEX_CSTRING *name, List<Item> *item_list
Item *param_1= item_list->pop();
- if (unlikely(! param_1->is_autogenerated_name))
+ if (unlikely(! param_1->is_autogenerated_name()))
{
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name->str);
return NULL;
@@ -2651,8 +2660,8 @@ Create_func_arg2::create_func(THD *thd, LEX_CSTRING *name, List<Item> *item_list
Item *param_1= item_list->pop();
Item *param_2= item_list->pop();
- if (unlikely(!param_1->is_autogenerated_name ||
- !param_2->is_autogenerated_name))
+ if (unlikely(!param_1->is_autogenerated_name() ||
+ !param_2->is_autogenerated_name()))
{
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name->str);
return NULL;
@@ -2680,9 +2689,9 @@ Create_func_arg3::create_func(THD *thd, LEX_CSTRING *name, List<Item> *item_list
Item *param_2= item_list->pop();
Item *param_3= item_list->pop();
- if (unlikely(!param_1->is_autogenerated_name ||
- !param_2->is_autogenerated_name ||
- !param_3->is_autogenerated_name))
+ if (unlikely(!param_1->is_autogenerated_name() ||
+ !param_2->is_autogenerated_name() ||
+ !param_3->is_autogenerated_name()))
{
my_error(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, MYF(0), name->str);
return NULL;
@@ -4762,6 +4771,17 @@ Create_func_rand::create_native(THD *thd, LEX_CSTRING *name,
}
+Create_func_release_all_locks Create_func_release_all_locks::s_singleton;
+
+Item*
+Create_func_release_all_locks::create_builder(THD *thd)
+{
+ thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
+ thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
+ return new (thd->mem_root) Item_func_release_all_locks(thd);
+}
+
+
Create_func_release_lock Create_func_release_lock::s_singleton;
Item*
@@ -5525,6 +5545,8 @@ static Native_func_registry func_array[] =
{ { STRING_WITH_LEN("REGEXP_SUBSTR") }, BUILDER(Create_func_regexp_substr)},
{ { STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
{ { STRING_WITH_LEN("RAND") }, BUILDER(Create_func_rand)},
+ { { STRING_WITH_LEN("RELEASE_ALL_LOCKS") },
+ BUILDER(Create_func_release_all_locks)},
{ { STRING_WITH_LEN("RELEASE_LOCK") }, BUILDER(Create_func_release_lock)},
{ { STRING_WITH_LEN("REPLACE_ORACLE") },
BUILDER(Create_func_replace_oracle)},
@@ -5595,14 +5617,9 @@ int item_create_init()
#ifdef HAVE_SPATIAL
count+= native_func_registry_array_geom.count();
#endif
- if (my_hash_init(& native_functions_hash,
- system_charset_info,
- (ulong) count,
- 0,
- 0,
- (my_hash_get_key) get_native_fct_hash_key,
- NULL, /* Nothing to free */
- MYF(0)))
+ if (my_hash_init(key_memory_native_functions, & native_functions_hash,
+ system_charset_info, (ulong) count, 0, 0, (my_hash_get_key)
+ get_native_fct_hash_key, NULL, MYF(0)))
DBUG_RETURN(1);
if (native_func_registry_array.append_to_hash(&native_functions_hash))
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 0419d55cc58..57ef5d6adb9 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -4019,16 +4019,17 @@ longlong Item_func_get_lock::val_int()
DBUG_PRINT("enter", ("lock: %.*s", res->length(), res->ptr()));
/* HASH entries are of type User_level_lock. */
if (! my_hash_inited(&thd->ull_hash) &&
- my_hash_init(&thd->ull_hash, &my_charset_bin,
- 16 /* small hash */, 0, 0, ull_get_key, NULL, 0))
+ my_hash_init(key_memory_User_level_lock, &thd->ull_hash,
+ &my_charset_bin, 16 /* small hash */, 0, 0, ull_get_key,
+ NULL, 0))
{
DBUG_RETURN(0);
}
MDL_request ull_request;
- ull_request.init(MDL_key::USER_LOCK, res->c_ptr_safe(), "",
+ MDL_REQUEST_INIT(&ull_request, MDL_key::USER_LOCK, res->c_ptr_safe(), "",
MDL_SHARED_NO_WRITE, MDL_EXPLICIT);
- MDL_key *ull_key = &ull_request.key;
+ MDL_key *ull_key= &ull_request.key;
if ((ull= (User_level_lock*)
@@ -4036,7 +4037,7 @@ longlong Item_func_get_lock::val_int()
{
/* Recursive lock */
ull->refs++;
- null_value = 0;
+ null_value= 0;
DBUG_PRINT("info", ("recursive lock, ref-count: %d", (int) ull->refs));
DBUG_RETURN(1);
}
@@ -4052,7 +4053,8 @@ longlong Item_func_get_lock::val_int()
DBUG_RETURN(0);
}
- ull= (User_level_lock*) my_malloc(sizeof(User_level_lock),
+ ull= (User_level_lock*) my_malloc(key_memory_User_level_lock,
+ sizeof(User_level_lock),
MYF(MY_WME|MY_THREAD_SPECIFIC));
if (ull == NULL)
{
@@ -4076,6 +4078,30 @@ longlong Item_func_get_lock::val_int()
/**
+ Release all user level locks.
+ @return
+ - N if N-lock released
+ - 0 if lock wasn't held
+*/
+longlong Item_func_release_all_locks::val_int()
+{
+ DBUG_ASSERT(fixed == 1);
+ THD *thd= current_thd;
+ ulong num_unlocked= 0;
+ DBUG_ENTER("Item_func_release_all_locks::val_int");
+ for (size_t i= 0; i < thd->ull_hash.records; i++)
+ {
+ auto ull= (User_level_lock *) my_hash_element(&thd->ull_hash, i);
+ thd->mdl_context.release_lock(ull->lock);
+ num_unlocked+= ull->refs;
+ my_free(ull);
+ }
+ my_hash_free(&thd->ull_hash);
+ DBUG_RETURN(num_unlocked);
+}
+
+
+/**
Release a user level lock.
@return
- 1 if lock released
@@ -4275,7 +4301,7 @@ static PSI_mutex_key key_LOCK_item_func_sleep;
static PSI_mutex_info item_func_sleep_mutexes[]=
{
- { &key_LOCK_item_func_sleep, "LOCK_user_locks", PSI_FLAG_GLOBAL}
+ { &key_LOCK_item_func_sleep, "LOCK_item_func_sleep", PSI_FLAG_GLOBAL}
};
@@ -4396,7 +4422,7 @@ user_var_entry *get_variable(HASH *hash, LEX_CSTRING *name,
size_t size=ALIGN_SIZE(sizeof(user_var_entry))+name->length+1+extra_size;
if (!my_hash_inited(hash))
return 0;
- if (!(entry = (user_var_entry*) my_malloc(size,
+ if (!(entry = (user_var_entry*) my_malloc(key_memory_user_var_entry, size,
MYF(MY_WME | ME_FATAL |
MY_THREAD_SPECIFIC))))
return 0;
@@ -4656,10 +4682,10 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, size_t length,
char *pos= (char*) entry+ ALIGN_SIZE(sizeof(user_var_entry));
if (entry->value == pos)
entry->value=0;
- entry->value= (char*) my_realloc(entry->value, length,
+ entry->value= (char*) my_realloc(key_memory_user_var_entry_value,
+ entry->value, length,
MYF(MY_ALLOW_ZERO_PTR | MY_WME |
- ME_FATAL |
- MY_THREAD_SPECIFIC));
+ ME_FATAL | MY_THREAD_SPECIFIC));
if (!entry->value)
return 1;
}
@@ -6770,7 +6796,7 @@ longlong Item_func_nextval::val_int()
if (!(entry= ((SEQUENCE_LAST_VALUE*)
my_hash_search(&thd->sequences, (uchar*) key, length))))
{
- if (!(key= (char*) my_memdup(key, length, MYF(MY_WME))) ||
+ if (!(key= (char*) my_memdup(PSI_INSTRUMENT_ME, key, length, MYF(MY_WME))) ||
!(entry= new SEQUENCE_LAST_VALUE((uchar*) key, length)))
{
/* EOM, error given */
diff --git a/sql/item_func.h b/sql/item_func.h
index dced158bb86..3771992d617 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -2654,19 +2654,13 @@ public:
void mysql_ull_cleanup(THD *thd);
void mysql_ull_set_explicit_lock_duration(THD *thd);
-class Item_func_get_lock :public Item_long_func
+
+class Item_func_lock :public Item_long_func
{
- bool check_arguments() const
- {
- return args[0]->check_type_general_purpose_string(func_name()) ||
- args[1]->check_type_can_return_real(func_name());
- }
- String value;
public:
- Item_func_get_lock(THD *thd, Item *a, Item *b) :Item_long_func(thd, a, b) {}
- longlong val_int();
- const char *func_name() const { return "get_lock"; }
- bool fix_length_and_dec() { max_length=1; maybe_null=1; return FALSE; }
+ Item_func_lock(THD *thd): Item_long_func(thd) { }
+ Item_func_lock(THD *thd, Item *a): Item_long_func(thd, a) {}
+ Item_func_lock(THD *thd, Item *a, Item *b): Item_long_func(thd, a, b) {}
table_map used_tables() const
{
return used_tables_cache | RAND_TABLE_BIT;
@@ -2677,34 +2671,54 @@ class Item_func_get_lock :public Item_long_func
{
return mark_unsupported_function(func_name(), "()", arg, VCOL_IMPOSSIBLE);
}
- Item *get_copy(THD *thd)
+};
+
+
+class Item_func_get_lock final :public Item_func_lock
+{
+ bool check_arguments() const
+ {
+ return args[0]->check_type_general_purpose_string(func_name()) ||
+ args[1]->check_type_can_return_real(func_name());
+ }
+ String value;
+ public:
+ Item_func_get_lock(THD *thd, Item *a, Item *b) :Item_func_lock(thd, a, b) {}
+ longlong val_int() final;
+ const char *func_name() const final { return "get_lock"; }
+ bool fix_length_and_dec() { max_length= 1; maybe_null= 1; return FALSE; }
+ Item *get_copy(THD *thd) final
{ return get_item_copy<Item_func_get_lock>(thd, this); }
};
-class Item_func_release_lock :public Item_long_func
+
+class Item_func_release_all_locks final :public Item_func_lock
+{
+public:
+ Item_func_release_all_locks(THD *thd): Item_func_lock(thd)
+ { unsigned_flag= 1; }
+ longlong val_int() final;
+ const char *func_name() const final { return "release_all_locks"; }
+ Item *get_copy(THD *thd) final
+ { return get_item_copy<Item_func_release_all_locks>(thd, this); }
+};
+
+
+class Item_func_release_lock final :public Item_func_lock
{
bool check_arguments() const
{ return args[0]->check_type_general_purpose_string(func_name()); }
String value;
public:
- Item_func_release_lock(THD *thd, Item *a): Item_long_func(thd, a) {}
- longlong val_int();
+ Item_func_release_lock(THD *thd, Item *a): Item_func_lock(thd, a) {}
+ longlong val_int() final;
const char *func_name() const { return "release_lock"; }
bool fix_length_and_dec() { max_length= 1; maybe_null= 1; return FALSE; }
- table_map used_tables() const
- {
- return used_tables_cache | RAND_TABLE_BIT;
- }
- bool const_item() const { return 0; }
- bool is_expensive() { return 1; }
- bool check_vcol_func_processor(void *arg)
- {
- return mark_unsupported_function(func_name(), "()", arg, VCOL_IMPOSSIBLE);
- }
- Item *get_copy(THD *thd)
+ Item *get_copy(THD *thd) final
{ return get_item_copy<Item_func_release_lock>(thd, this); }
};
+
/* replication functions */
class Item_master_pos_wait :public Item_longlong_func
diff --git a/sql/item_jsonfunc.h b/sql/item_jsonfunc.h
index e61d0875056..44f9e8146c2 100644
--- a/sql/item_jsonfunc.h
+++ b/sql/item_jsonfunc.h
@@ -84,6 +84,11 @@ public:
maybe_null= 1;
return FALSE;
}
+ bool set_format_by_check_constraint(Send_field_extended_metadata *to) const
+ {
+ static const Lex_cstring fmt(STRING_WITH_LEN("json"));
+ return to->set_format_name(fmt);
+ }
Item *get_copy(THD *thd)
{ return get_item_copy<Item_func_json_valid>(thd, this); }
};
@@ -118,6 +123,12 @@ public:
Item_json_func(THD *thd, List<Item> &list)
:Item_str_func(thd, list) { }
bool is_json_type() { return true; }
+ void make_send_field(THD *thd, Send_field *tmp_field)
+ {
+ Item_str_func::make_send_field(thd, tmp_field);
+ static const Lex_cstring fmt(STRING_WITH_LEN("json"));
+ tmp_field->set_format_name(fmt);
+ }
};
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index bee56a607f7..bcc041ae9c6 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -43,7 +43,6 @@
#include "set_var.h"
#include "sql_base.h"
#include "sql_time.h"
-#include "sql_acl.h" // SUPER_ACL
#include "des_key_file.h" // st_des_keyschedule, st_des_keyblock
#include "password.h" // my_make_scrambled_password,
// my_make_scrambled_password_323
@@ -838,7 +837,7 @@ String *Item_func_des_decrypt::val_str(String *str)
{
uint key_number=(uint) (*res)[0] & 127;
// Check if automatic key and that we have privilege to uncompress using it
- if (!(current_thd->security_ctx->master_access & SUPER_ACL) ||
+ if (!(current_thd->security_ctx->master_access & PRIV_DES_DECRYPT_ONE_ARG) ||
key_number > 9)
goto error;
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 2d3ea388cc5..e494e9d84e1 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -4434,9 +4434,10 @@ void subselect_single_select_engine::print(String *str,
enum_query_type query_type)
{
With_clause* with_clause= select_lex->get_with_clause();
+ THD *thd= get_thd();
if (with_clause)
- with_clause->print(str, query_type);
- select_lex->print(get_thd(), str, query_type);
+ with_clause->print(thd, str, query_type);
+ select_lex->print(thd, str, query_type);
}
@@ -5807,8 +5808,9 @@ bool Ordered_key::alloc_keys_buffers()
{
DBUG_ASSERT(key_buff_elements > 0);
- if (!(key_buff= (rownum_t*) my_malloc((size_t)(key_buff_elements *
- sizeof(rownum_t)), MYF(MY_WME | MY_THREAD_SPECIFIC))))
+ if (!(key_buff= (rownum_t*) my_malloc(PSI_INSTRUMENT_ME,
+ static_cast<size_t>(key_buff_elements * sizeof(rownum_t)),
+ MYF(MY_WME | MY_THREAD_SPECIFIC))))
return TRUE;
/*
@@ -6239,8 +6241,9 @@ subselect_rowid_merge_engine::init(MY_BITMAP *non_null_key_parts,
sizeof(Ordered_key*))) ||
!(null_bitmaps= (MY_BITMAP**) thd->alloc(merge_keys_count *
sizeof(MY_BITMAP*))) ||
- !(row_num_to_rowid= (uchar*) my_malloc((size_t)(row_count * rowid_length),
- MYF(MY_WME | MY_THREAD_SPECIFIC))))
+ !(row_num_to_rowid= (uchar*) my_malloc(PSI_INSTRUMENT_ME,
+ static_cast<size_t>(row_count * rowid_length),
+ MYF(MY_WME | MY_THREAD_SPECIFIC))))
return TRUE;
/* Create the only non-NULL key if there is any. */
diff --git a/sql/keycaches.cc b/sql/keycaches.cc
index 60049cdd67d..10bec7c1de8 100644
--- a/sql/keycaches.cc
+++ b/sql/keycaches.cc
@@ -23,6 +23,9 @@
NAMED_ILIST key_caches;
NAMED_ILIST rpl_filters;
+extern "C" PSI_memory_key key_memory_KEY_CACHE;
+extern PSI_memory_key key_memory_NAMED_ILINK_name;
+
/**
ilink (intrusive list element) with a name
*/
@@ -37,7 +40,8 @@ public:
size_t name_length_arg, uchar* data_arg)
:name_length(name_length_arg), data(data_arg)
{
- name= my_strndup(name_arg, name_length, MYF(MY_WME));
+ name= my_strndup(key_memory_NAMED_ILINK_name, name_arg, name_length,
+ MYF(MY_WME));
links->push_back(this);
}
inline bool cmp(const char *name_cmp, size_t length)
@@ -118,8 +122,8 @@ KEY_CACHE *create_key_cache(const char *name, size_t length)
DBUG_ENTER("create_key_cache");
DBUG_PRINT("enter",("name: %.*s", (int)length, name));
- if ((key_cache= (KEY_CACHE*) my_malloc(sizeof(KEY_CACHE),
- MYF(MY_ZEROFILL | MY_WME))))
+ if ((key_cache= (KEY_CACHE*) my_malloc(key_memory_KEY_CACHE,
+ sizeof(KEY_CACHE), MYF(MY_ZEROFILL | MY_WME))))
{
if (!new NAMED_ILINK(&key_caches, name, length, (uchar*) key_cache))
{
diff --git a/sql/lex.h b/sql/lex.h
index 1cb7ad5d4c8..f36b8258c93 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -239,6 +239,7 @@ static SYMBOL symbols[] = {
{ "FALSE", SYM(FALSE_SYM)},
{ "FAST", SYM(FAST_SYM)},
{ "FAULTS", SYM(FAULTS_SYM)},
+ { "FEDERATED", SYM(FEDERATED_SYM)},
{ "FETCH", SYM(FETCH_SYM)},
{ "FIELDS", SYM(COLUMNS)},
{ "FILE", SYM(FILE_SYM)},
@@ -405,6 +406,7 @@ static SYMBOL symbols[] = {
{ "MODE", SYM(MODE_SYM)},
{ "MODIFIES", SYM(MODIFIES_SYM)},
{ "MODIFY", SYM(MODIFY_SYM)},
+ { "MONITOR", SYM(MONITOR_SYM)},
{ "MONTH", SYM(MONTH_SYM)},
{ "MUTEX", SYM(MUTEX_SYM)},
{ "MYSQL", SYM(MYSQL_SYM)},
diff --git a/sql/lock.cc b/sql/lock.cc
index 6f86c0a38f6..7f69946c35e 100644
--- a/sql/lock.cc
+++ b/sql/lock.cc
@@ -76,7 +76,6 @@
#include "lock.h"
#include "sql_base.h" // close_tables_for_reopen
#include "sql_parse.h" // is_log_table_write_query
-#include "sql_acl.h" // SUPER_ACL
#include "sql_handler.h"
#include <hash.h>
#include "wsrep_mysqld.h"
@@ -109,12 +108,13 @@ static int
lock_tables_check(THD *thd, TABLE **tables, uint count, uint flags)
{
uint system_count, i;
- bool is_superuser, log_table_write_query;
+ bool ignore_read_only, log_table_write_query;
DBUG_ENTER("lock_tables_check");
system_count= 0;
- is_superuser= (thd->security_ctx->master_access & SUPER_ACL) != NO_ACL;
+ ignore_read_only=
+ (thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY) != NO_ACL;
log_table_write_query= (is_log_table_write_query(thd->lex->sql_command)
|| ((flags & MYSQL_LOCK_LOG_TABLE) != 0));
@@ -179,7 +179,7 @@ lock_tables_check(THD *thd, TABLE **tables, uint count, uint flags)
if (!(flags & MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY) && !t->s->tmp_table)
{
if (t->reginfo.lock_type >= TL_WRITE_ALLOW_WRITE &&
- !is_superuser && opt_readonly && !thd->slave_thread)
+ !ignore_read_only && opt_readonly && !thd->slave_thread)
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
DBUG_RETURN(1);
@@ -645,7 +645,7 @@ MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b)
a->lock_count, b->lock_count));
if (!(sql_lock= (MYSQL_LOCK*)
- my_malloc(sizeof(*sql_lock)+
+ my_malloc(key_memory_MYSQL_LOCK, sizeof(*sql_lock) +
sizeof(THR_LOCK_DATA*)*((a->lock_count+b->lock_count)*2) +
sizeof(TABLE*)*(a->table_count+b->table_count),MYF(MY_WME))))
DBUG_RETURN(0); // Fatal error
@@ -764,7 +764,8 @@ MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count, uint flags)
sizeof(table_ptr) * table_count;
if (!(sql_lock= (MYSQL_LOCK*) (flags & GET_LOCK_ON_THD ?
thd->alloc(amount) :
- my_malloc(amount, MYF(0)))))
+ my_malloc(key_memory_MYSQL_LOCK, amount,
+ MYF(0)))))
DBUG_RETURN(0);
locks= locks_buf= sql_lock->locks= (THR_LOCK_DATA**) (sql_lock + 1);
to= table_buf= sql_lock->table= (TABLE**) (locks + lock_count * 2);
@@ -858,8 +859,10 @@ bool lock_schema_name(THD *thd, const char *db)
if (thd->has_read_only_protection())
return TRUE;
- global_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_DDL, MDL_STATEMENT);
- mdl_request.init(MDL_key::SCHEMA, db, "", MDL_EXCLUSIVE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&global_request, MDL_key::BACKUP, "", "", MDL_BACKUP_DDL,
+ MDL_STATEMENT);
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::SCHEMA, db, "", MDL_EXCLUSIVE,
+ MDL_TRANSACTION);
mdl_requests.push_front(&mdl_request);
mdl_requests.push_front(&global_request);
@@ -916,10 +919,12 @@ bool lock_object_name(THD *thd, MDL_key::enum_mdl_namespace mdl_type,
if (thd->has_read_only_protection())
return TRUE;
- global_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_DDL, MDL_STATEMENT);
- schema_request.init(MDL_key::SCHEMA, db, "", MDL_INTENTION_EXCLUSIVE,
- MDL_TRANSACTION);
- mdl_request.init(mdl_type, db, name, MDL_EXCLUSIVE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&global_request, MDL_key::BACKUP, "", "", MDL_BACKUP_DDL,
+ MDL_STATEMENT);
+ MDL_REQUEST_INIT(&schema_request, MDL_key::SCHEMA, db, "",
+ MDL_INTENTION_EXCLUSIVE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&mdl_request, mdl_type, db, name, MDL_EXCLUSIVE,
+ MDL_TRANSACTION);
mdl_requests.push_front(&mdl_request);
mdl_requests.push_front(&schema_request);
@@ -1040,7 +1045,7 @@ bool Global_read_lock::lock_global_read_lock(THD *thd)
MDL_BACKUP_FTWRL1));
DBUG_ASSERT(! thd->mdl_context.is_lock_owner(MDL_key::BACKUP, "", "",
MDL_BACKUP_FTWRL2));
- mdl_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_FTWRL1,
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::BACKUP, "", "", MDL_BACKUP_FTWRL1,
MDL_EXPLICIT);
do
diff --git a/sql/log.cc b/sql/log.cc
index 56e83bf2448..355118dc701 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -34,7 +34,6 @@
#include "sql_parse.h" // command_name
#include "sql_time.h" // calc_time_from_sec, my_time_compare
#include "tztime.h" // my_tz_OFFSET0, struct Time_zone
-#include "sql_acl.h" // SUPER_ACL
#include "log_event.h" // Query_log_event
#include "rpl_filter.h"
#include "rpl_rli.h"
@@ -253,7 +252,7 @@ void make_default_log_name(char **out, const char* log_ext, bool once)
else
{
my_free(*out);
- *out= my_strdup(buff, MYF(MY_WME));
+ *out= my_strdup(PSI_INSTRUMENT_ME, buff, MYF(MY_WME));
}
}
@@ -1723,7 +1722,8 @@ static int binlog_close_connection(handlerton *hton, THD *thd)
if (len > 0) wsrep_dump_rbr_buf(thd, buf, len);
}
#endif /* WITH_WSREP */
- DBUG_ASSERT(cache_mngr->trx_cache.empty() && cache_mngr->stmt_cache.empty());
+ DBUG_ASSERT(cache_mngr->trx_cache.empty());
+ DBUG_ASSERT(cache_mngr->stmt_cache.empty());
cache_mngr->~binlog_cache_mngr();
my_free(cache_mngr);
DBUG_RETURN(0);
@@ -2211,8 +2211,8 @@ void MYSQL_BIN_LOG::set_write_error(THD *thd, bool is_transactional)
if (WSREP_EMULATE_BINLOG(thd))
{
if (is_transactional)
- trans_register_ha(thd, TRUE, binlog_hton);
- trans_register_ha(thd, FALSE, binlog_hton);
+ trans_register_ha(thd, TRUE, binlog_hton, 0);
+ trans_register_ha(thd, FALSE, binlog_hton, 0);
}
#endif /* WITH_WSREP */
DBUG_VOID_RETURN;
@@ -2412,8 +2412,8 @@ File open_binlog(IO_CACHE *log, const char *log_file_name, const char **errmsg)
*errmsg = "Could not open log file";
goto err;
}
- if (init_io_cache(log, file, (size_t)binlog_file_cache_size, READ_CACHE, 0, 0,
- MYF(MY_WME|MY_DONT_CHECK_FILESIZE)))
+ if (init_io_cache_ext(log, file, (size_t)binlog_file_cache_size, READ_CACHE,
+ 0, 0, MYF(MY_WME|MY_DONT_CHECK_FILESIZE), key_file_binlog_cache))
{
sql_print_error("Failed to create a cache on log (file '%s')",
log_file_name);
@@ -2652,7 +2652,7 @@ bool MYSQL_LOG::open(
write_error= 0;
- if (!(name= my_strdup(log_name, MYF(MY_WME))))
+ if (!(name= my_strdup(key_memory_MYSQL_LOG_name, log_name, MYF(MY_WME))))
{
name= (char *)log_name; // for the error message
goto err;
@@ -3392,10 +3392,11 @@ bool MYSQL_BIN_LOG::open_index_file(const char *index_file_name_arg,
O_RDWR | O_CREAT | O_BINARY | O_CLOEXEC,
MYF(MY_WME))) < 0 ||
mysql_file_sync(index_file_nr, MYF(MY_WME)) ||
- init_io_cache(&index_file, index_file_nr,
+ init_io_cache_ext(&index_file, index_file_nr,
IO_SIZE, WRITE_CACHE,
mysql_file_seek(index_file_nr, 0L, MY_SEEK_END, MYF(0)),
- 0, MYF(MY_WME | MY_WAIT_IF_FULL)) ||
+ 0, MYF(MY_WME | MY_WAIT_IF_FULL),
+ m_key_file_log_index_cache) ||
DBUG_EVALUATE_IF("fault_injection_openning_index", 1, 0))
{
/*
@@ -4442,14 +4443,16 @@ int MYSQL_BIN_LOG::purge_first_log(Relay_log_info* rli, bool included)
{
rli->last_inuse_relaylog= NULL;
included= 1;
- to_purge_if_included= my_strdup(ir->name, MYF(0));
+ to_purge_if_included= my_strdup(key_memory_Relay_log_info_group_relay_log_name,
+ ir->name, MYF(0));
}
rli->free_inuse_relaylog(ir);
ir= next;
}
rli->inuse_relaylog_list= ir;
if (ir)
- to_purge_if_included= my_strdup(ir->name, MYF(0));
+ to_purge_if_included= my_strdup(key_memory_Relay_log_info_group_relay_log_name,
+ ir->name, MYF(0));
/*
Read the next log file name from the index file and pass it back to
@@ -5588,7 +5591,8 @@ binlog_cache_mngr *THD::binlog_setup_trx_data()
if (cache_mngr)
DBUG_RETURN(cache_mngr); // Already set up
- cache_mngr= (binlog_cache_mngr*) my_malloc(sizeof(binlog_cache_mngr), MYF(MY_ZEROFILL));
+ cache_mngr= (binlog_cache_mngr*) my_malloc(key_memory_binlog_cache_mngr,
+ sizeof(binlog_cache_mngr), MYF(MY_ZEROFILL));
if (!cache_mngr ||
open_cached_file(&cache_mngr->stmt_cache.cache_log, mysql_tmpdir,
LOG_PREFIX, (size_t)binlog_stmt_cache_size, MYF(MY_WME)) ||
@@ -5708,8 +5712,8 @@ THD::binlog_start_trans_and_stmt()
}
#endif
if (mstmt_mode)
- trans_register_ha(this, TRUE, binlog_hton);
- trans_register_ha(this, FALSE, binlog_hton);
+ trans_register_ha(this, TRUE, binlog_hton, 0);
+ trans_register_ha(this, FALSE, binlog_hton, 0);
/*
Mark statement transaction as read/write. We never start
a binary log transaction and keep it read-only,
@@ -5753,7 +5757,7 @@ binlog_start_consistent_snapshot(handlerton *hton, THD *thd)
strmake_buf(cache_mngr->last_commit_pos_file, mysql_bin_log.last_commit_pos_file);
cache_mngr->last_commit_pos_offset= mysql_bin_log.last_commit_pos_offset;
- trans_register_ha(thd, TRUE, hton);
+ trans_register_ha(thd, TRUE, binlog_hton, 0);
DBUG_RETURN(err);
}
@@ -9108,7 +9112,8 @@ int TC_LOG_MMAP::open(const char *opt_name)
npages=(uint)file_length/tc_log_page_size;
if (npages < 3) // to guarantee non-empty pool
goto err;
- if (!(pages=(PAGE *)my_malloc(npages*sizeof(PAGE), MYF(MY_WME|MY_ZEROFILL))))
+ if (!(pages=(PAGE *)my_malloc(key_memory_TC_LOG_MMAP_pages,
+ npages*sizeof(PAGE), MYF(MY_WME|MY_ZEROFILL))))
goto err;
inited=3;
for (pg=pages, i=0; i < npages; i++, pg++)
@@ -9418,7 +9423,8 @@ int TC_LOG_MMAP::unlog(ulong cookie, my_xid xid)
{
uint32 size= sizeof(*pending_checkpoint) + sizeof(ulong) * (ncookies - 1);
if (!(pending_checkpoint=
- (pending_cookies *)my_malloc(size, MYF(MY_ZEROFILL))))
+ (pending_cookies *)my_malloc(PSI_INSTRUMENT_ME, size,
+ MYF(MY_ZEROFILL))))
{
my_error(ER_OUTOFMEMORY, MYF(0), size);
mysql_mutex_unlock(&LOCK_pending_checkpoint);
@@ -9557,8 +9563,8 @@ int TC_LOG_MMAP::recover()
goto err1;
}
- if (my_hash_init(&xids, &my_charset_bin, tc_log_page_size/3, 0,
- sizeof(my_xid), 0, 0, MYF(0)))
+ if (my_hash_init(PSI_INSTRUMENT_ME, &xids, &my_charset_bin,
+ tc_log_page_size/3, 0, sizeof(my_xid), 0, 0, MYF(0)))
goto err1;
for ( ; p < end_p ; p++)
@@ -10071,13 +10077,13 @@ int TC_LOG_BINLOG::recover(LOG_INFO *linfo, const char *last_log_name,
#endif
if (! fdle->is_valid() ||
- (do_xa && my_hash_init(&xids, &my_charset_bin, TC_LOG_PAGE_SIZE/3, 0,
+ (do_xa && my_hash_init(key_memory_binlog_recover_exec, &xids, &my_charset_bin, TC_LOG_PAGE_SIZE/3, 0,
sizeof(my_xid), 0, 0, MYF(0))))
goto err1;
if (do_xa)
- init_alloc_root(&mem_root, "TC_LOG_BINLOG", TC_LOG_PAGE_SIZE,
- TC_LOG_PAGE_SIZE, MYF(0));
+ init_alloc_root(key_memory_binlog_recover_exec, &mem_root,
+ TC_LOG_PAGE_SIZE, TC_LOG_PAGE_SIZE, MYF(0));
fdle->flags&= ~LOG_EVENT_BINLOG_IN_USE_F; // abort on the first error
@@ -10489,7 +10495,7 @@ static struct st_mysql_sys_var *binlog_sys_vars[]=
/*
Copy out the non-directory part of binlog position filename for the
`binlog_snapshot_file' status variable, same way as it is done for
- SHOW MASTER STATUS.
+ SHOW BINLOG STATUS.
*/
static void
set_binlog_snapshot_file(const char *src)
@@ -10741,8 +10747,8 @@ void wsrep_register_binlog_handler(THD *thd, bool trx)
Set callbacks in order to be able to call commmit or rollback.
*/
if (trx)
- trans_register_ha(thd, TRUE, binlog_hton);
- trans_register_ha(thd, FALSE, binlog_hton);
+ trans_register_ha(thd, TRUE, binlog_hton, 0);
+ trans_register_ha(thd, FALSE, binlog_hton, 0);
/*
Set the binary log as read/write otherwise callbacks are not called.
diff --git a/sql/log.h b/sql/log.h
index 8684eaba786..e4424778111 100644
--- a/sql/log.h
+++ b/sql/log.h
@@ -412,7 +412,6 @@ struct wait_for_commit;
class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
{
-#ifdef HAVE_PSI_INTERFACE
/** The instrumentation key to use for @ LOCK_index. */
PSI_mutex_key m_key_LOCK_index;
/** The instrumentation key to use for @ COND_relay_log_updated */
@@ -420,14 +419,13 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
/** The instrumentation key to use for @ COND_bin_log_updated */
PSI_cond_key m_key_bin_log_update;
/** The instrumentation key to use for opening the log file. */
- PSI_file_key m_key_file_log;
+ PSI_file_key m_key_file_log, m_key_file_log_cache;
/** The instrumentation key to use for opening the log index file. */
- PSI_file_key m_key_file_log_index;
+ PSI_file_key m_key_file_log_index, m_key_file_log_index_cache;
- PSI_file_key m_key_COND_queue_busy;
+ PSI_cond_key m_key_COND_queue_busy;
/** The instrumentation key to use for LOCK_binlog_end_pos. */
PSI_mutex_key m_key_LOCK_binlog_end_pos;
-#endif
struct group_commit_entry
{
@@ -587,7 +585,7 @@ public:
:binlog_id(0), xid_count(0), notify_count(0)
{
binlog_name_len= log_file_name_len;
- binlog_name= (char *) my_malloc(binlog_name_len, MYF(MY_ZEROFILL));
+ binlog_name= (char *) my_malloc(PSI_INSTRUMENT_ME, binlog_name_len, MYF(MY_ZEROFILL));
if (binlog_name)
memcpy(binlog_name, log_file_name, binlog_name_len);
}
@@ -674,15 +672,19 @@ public:
PSI_cond_key key_relay_log_update,
PSI_cond_key key_bin_log_update,
PSI_file_key key_file_log,
+ PSI_file_key key_file_log_cache,
PSI_file_key key_file_log_index,
- PSI_file_key key_COND_queue_busy,
+ PSI_file_key key_file_log_index_cache,
+ PSI_cond_key key_COND_queue_busy,
PSI_mutex_key key_LOCK_binlog_end_pos)
{
m_key_LOCK_index= key_LOCK_index;
m_key_relay_log_update= key_relay_log_update;
m_key_bin_log_update= key_bin_log_update;
m_key_file_log= key_file_log;
+ m_key_file_log_cache= key_file_log_cache;
m_key_file_log_index= key_file_log_index;
+ m_key_file_log_index_cache= key_file_log_index_cache;
m_key_COND_queue_busy= key_COND_queue_busy;
m_key_LOCK_binlog_end_pos= key_LOCK_binlog_end_pos;
}
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 4c1c18fffff..7ee38a007d1 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -56,6 +56,10 @@
#define my_b_write_string(A, B) my_b_write((A), (uchar*)(B), (uint) (sizeof(B) - 1))
+PSI_memory_key key_memory_log_event;
+PSI_memory_key key_memory_Incident_log_event_message;
+PSI_memory_key key_memory_Rows_query_log_event_rows_query;
+
/**
BINLOG_CHECKSUM variable.
*/
@@ -410,7 +414,7 @@ query_event_uncompress(const Format_description_log_event *description_event,
}
else
{
- new_dst = (char *)my_malloc(alloc_size, MYF(MY_WME));
+ new_dst = (char *)my_malloc(PSI_INSTRUMENT_ME, alloc_size, MYF(MY_WME));
if (!new_dst)
return 1;
@@ -532,7 +536,7 @@ row_log_event_uncompress(const Format_description_log_event *description_event,
}
else
{
- new_dst = (char *)my_malloc(alloc_size, MYF(MY_WME));
+ new_dst = (char *)my_malloc(PSI_INSTRUMENT_ME, alloc_size, MYF(MY_WME));
if (!new_dst)
return 1;
@@ -873,7 +877,7 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet,
*/
sz += MY_AES_BLOCK_SIZE;
#endif
- char *newpkt= (char*)my_malloc(sz, MYF(MY_WME));
+ char *newpkt= (char*)my_malloc(PSI_INSTRUMENT_ME, sz, MYF(MY_WME));
if (!newpkt)
DBUG_RETURN(LOG_READ_MEM);
memcpy(newpkt, packet->ptr(), ev_offset);
@@ -1665,7 +1669,8 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
*/
#if !defined(MYSQL_CLIENT) && defined(HAVE_QUERY_CACHE)
- if (!(start= data_buf = (Log_event::Byte*) my_malloc(catalog_len + 1
+ if (!(start= data_buf = (Log_event::Byte*) my_malloc(PSI_INSTRUMENT_ME,
+ catalog_len + 1
+ time_zone_len + 1
+ user.length + 1
+ host.length + 1
@@ -1676,7 +1681,8 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
+ QUERY_CACHE_FLAGS_SIZE,
MYF(MY_WME))))
#else
- if (!(start= data_buf = (Log_event::Byte*) my_malloc(catalog_len + 1
+ if (!(start= data_buf = (Log_event::Byte*) my_malloc(PSI_INSTRUMENT_ME,
+ catalog_len + 1
+ time_zone_len + 1
+ user.length + 1
+ host.length + 1
@@ -1783,8 +1789,8 @@ Query_compressed_log_event::Query_compressed_log_event(const char *buf,
}
/* Reserve one byte for '\0' */
- query_buf = (Log_event::Byte*)my_malloc(ALIGN_SIZE(un_len + 1),
- MYF(MY_WME));
+ query_buf = (Log_event::Byte*)my_malloc(PSI_INSTRUMENT_ME,
+ ALIGN_SIZE(un_len + 1), MYF(MY_WME));
if(query_buf &&
!binlog_buf_uncompress(query, (char *)query_buf, q_len, &un_len))
{
@@ -2033,7 +2039,8 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
common_header_len= LOG_EVENT_HEADER_LEN;
number_of_event_types= LOG_EVENT_TYPES;
/* we'll catch my_malloc() error in is_valid() */
- post_header_len=(uint8*) my_malloc(number_of_event_types*sizeof(uint8)
+ post_header_len=(uint8*) my_malloc(PSI_INSTRUMENT_ME,
+ number_of_event_types*sizeof(uint8)
+ BINLOG_CHECKSUM_ALG_DESC_LEN,
MYF(0));
/*
@@ -2159,8 +2166,8 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
make the slave detect less corruptions).
*/
number_of_event_types= FORMAT_DESCRIPTION_EVENT - 1;
- post_header_len=(uint8*) my_malloc(number_of_event_types*sizeof(uint8),
- MYF(0));
+ post_header_len=(uint8*) my_malloc(PSI_INSTRUMENT_ME,
+ number_of_event_types*sizeof(uint8), MYF(0));
if (post_header_len)
{
post_header_len[START_EVENT_V3-1]= START_V3_HEADER_LEN;
@@ -2228,7 +2235,8 @@ Format_description_log_event(const char* buf,
common_header_len, number_of_event_types));
/* If alloc fails, we'll detect it in is_valid() */
- post_header_len= (uint8*) my_memdup((uchar*)buf+ST_COMMON_HEADER_LEN_OFFSET+1,
+ post_header_len= (uint8*) my_memdup(PSI_INSTRUMENT_ME,
+ buf+ST_COMMON_HEADER_LEN_OFFSET+1,
number_of_event_types*
sizeof(*post_header_len),
MYF(0));
@@ -2517,7 +2525,7 @@ Rotate_log_event::Rotate_log_event(const char* buf, uint event_len,
ident_len= (uint)(event_len - (LOG_EVENT_MINIMAL_HEADER_LEN + post_header_len));
ident_offset= post_header_len;
set_if_smaller(ident_len,FN_REFLEN-1);
- new_log_ident= my_strndup(buf + ident_offset, (uint) ident_len, MYF(MY_WME));
+ new_log_ident= my_strndup(PSI_INSTRUMENT_ME, buf + ident_offset, (uint) ident_len, MYF(MY_WME));
DBUG_PRINT("debug", ("new_log_ident: '%s'", new_log_ident));
DBUG_VOID_RETURN;
}
@@ -2544,7 +2552,7 @@ Binlog_checkpoint_log_event::Binlog_checkpoint_log_event(
binlog_file_len= uint4korr(buf);
if (event_len - (header_size + post_header_len) < binlog_file_len)
return;
- binlog_file_name= my_strndup(buf + post_header_len, binlog_file_len,
+ binlog_file_name= my_strndup(PSI_INSTRUMENT_ME, buf + post_header_len, binlog_file_len,
MYF(MY_WME));
return;
}
@@ -2603,8 +2611,8 @@ Gtid_list_log_event::Gtid_list_log_event(const char *buf, uint event_len,
gl_flags= val & ((uint32)0xf << 28);
buf+= 4;
if (event_len - (header_size + post_header_len) < count*element_size ||
- (!(list= (rpl_gtid *)my_malloc(count*sizeof(*list) + (count == 0),
- MYF(MY_WME)))))
+ (!(list= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME,
+ count*sizeof(*list) + (count == 0), MYF(MY_WME)))))
return;
for (i= 0; i < count; ++i)
@@ -2621,7 +2629,8 @@ Gtid_list_log_event::Gtid_list_log_event(const char *buf, uint event_len,
if ((gl_flags & FLAG_IGN_GTIDS))
{
uint32 i;
- if (!(sub_id_list= (uint64 *)my_malloc(count*sizeof(uint64), MYF(MY_WME))))
+ if (!(sub_id_list= (uint64 *)my_malloc(PSI_INSTRUMENT_ME,
+ count*sizeof(uint64), MYF(MY_WME))))
{
my_free(list);
list= NULL;
@@ -2678,8 +2687,8 @@ Gtid_list_log_event::peek(const char *event_start, size_t event_len,
if (event_len < (uint32)fdev->common_header_len + GTID_LIST_HEADER_LEN +
16 * count)
return true;
- if (!(gtid_list= (rpl_gtid *)my_malloc(sizeof(rpl_gtid)*count + (count == 0),
- MYF(MY_WME))))
+ if (!(gtid_list= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(rpl_gtid)*count + (count == 0), MYF(MY_WME))))
return true;
*out_gtid_list= gtid_list;
*out_list_len= count;
@@ -2886,7 +2895,7 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len,
uint header_len= description_event->common_header_len;
uint8 load_header_len= description_event->post_header_len[LOAD_EVENT-1];
uint8 create_file_header_len= description_event->post_header_len[CREATE_FILE_EVENT-1];
- if (!(event_buf= (char*) my_memdup(buf, len, MYF(MY_WME))) ||
+ if (!(event_buf= (char*) my_memdup(PSI_INSTRUMENT_ME, buf, len, MYF(MY_WME))) ||
copy_log_event(event_buf,len,
(((uchar)buf[EVENT_TYPE_OFFSET] == LOAD_EVENT) ?
load_header_len + header_len :
@@ -3188,7 +3197,7 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len,
/* Just store/use the first tag of this type, skip others */
if (likely(!m_extra_row_data))
{
- m_extra_row_data= (uchar*) my_malloc(infoLen,
+ m_extra_row_data= (uchar*) my_malloc(PSI_INSTRUMENT_ME, infoLen,
MYF(MY_WME));
if (likely(m_extra_row_data != NULL))
{
@@ -3277,7 +3286,7 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len,
DBUG_PRINT("info",("m_table_id: %llu m_flags: %d m_width: %lu data_size: %lu",
m_table_id, m_flags, m_width, (ulong) data_size));
- m_rows_buf= (uchar*) my_malloc(data_size, MYF(MY_WME));
+ m_rows_buf= (uchar*) my_malloc(PSI_INSTRUMENT_ME, data_size, MYF(MY_WME));
if (likely((bool)m_rows_buf))
{
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
@@ -3300,7 +3309,7 @@ void Rows_log_event::uncompress_buf()
if (!un_len)
return;
- uchar *new_buf= (uchar*) my_malloc(ALIGN_SIZE(un_len), MYF(MY_WME));
+ uchar *new_buf= (uchar*) my_malloc(PSI_INSTRUMENT_ME, ALIGN_SIZE(un_len), MYF(MY_WME));
if (new_buf)
{
if(!binlog_buf_uncompress((char *)m_rows_buf, (char *)new_buf,
@@ -3535,7 +3544,7 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len,
m_colcnt, (long) (ptr_colcnt-(const uchar*)vpart)));
/* Allocate mem for all fields in one go. If fails, caught in is_valid() */
- m_memory= (uchar*) my_multi_malloc(MYF(MY_WME),
+ m_memory= (uchar*) my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&m_dbnam, (uint) m_dblen + 1,
&m_tblnam, (uint) m_tbllen + 1,
&m_coltype, (uint) m_colcnt,
@@ -3554,7 +3563,7 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len,
if (m_field_metadata_size <= (m_colcnt * 2))
{
uint num_null_bytes= (m_colcnt + 7) / 8;
- m_meta_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
+ m_meta_memory= (uchar *)my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&m_null_bits, num_null_bytes,
&m_field_metadata, m_field_metadata_size,
NULL);
@@ -3578,7 +3587,7 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len,
{
m_optional_metadata_len= event_len - bytes_read;
m_optional_metadata=
- static_cast<unsigned char*>(my_malloc(m_optional_metadata_len, MYF(MY_WME)));
+ static_cast<unsigned char*>(my_malloc(PSI_INSTRUMENT_ME, m_optional_metadata_len, MYF(MY_WME)));
memcpy(m_optional_metadata, ptr_after_colcnt, m_optional_metadata_len);
}
}
@@ -3958,7 +3967,7 @@ Incident_log_event::Incident_log_event(const char *buf, uint event_len,
m_incident= INCIDENT_NONE;
DBUG_VOID_RETURN;
}
- if (!(m_message.str= (char*) my_malloc(len+1, MYF(MY_WME))))
+ if (!(m_message.str= (char*) my_malloc(key_memory_log_event, len+1, MYF(MY_WME))))
{
/* Mark this event invalid */
m_incident= INCIDENT_NONE;
diff --git a/sql/log_event.h b/sql/log_event.h
index 15442bd5a97..67cf27b60a0 100644
--- a/sql/log_event.h
+++ b/sql/log_event.h
@@ -1357,7 +1357,8 @@ public:
static void *operator new(size_t size)
{
- return (void*) my_malloc((uint)size, MYF(MY_WME|MY_FAE));
+ extern PSI_memory_key key_memory_log_event;
+ return my_malloc(key_memory_log_event, size, MYF(MY_WME|MY_FAE));
}
static void operator delete(void *ptr, size_t)
@@ -4880,6 +4881,12 @@ public:
#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION)
virtual uint8 get_trg_event_map()= 0;
+
+ inline bool do_invoke_trigger()
+ {
+ return (slave_run_triggers_for_rbr && !master_had_triggers) ||
+ slave_run_triggers_for_rbr == SLAVE_RUN_TRIGGERS_FOR_RBR_ENFORCE;
+ }
#endif
protected:
@@ -5362,11 +5369,12 @@ public:
Incident_log_event(THD *thd_arg, Incident incident, const LEX_CSTRING *msg)
: Log_event(thd_arg, 0, FALSE), m_incident(incident)
{
+ extern PSI_memory_key key_memory_Incident_log_event_message;
DBUG_ENTER("Incident_log_event::Incident_log_event");
DBUG_PRINT("enter", ("m_incident: %d", m_incident));
m_message.length= 0;
- if (unlikely(!(m_message.str= (char*) my_malloc(msg->length+1,
- MYF(MY_WME)))))
+ if (!(m_message.str= (char*) my_malloc(key_memory_Incident_log_event_message,
+ msg->length + 1, MYF(MY_WME))))
{
/* Mark this event invalid */
m_incident= INCIDENT_NONE;
diff --git a/sql/log_event_client.cc b/sql/log_event_client.cc
index cae4842355a..6ee5587943d 100644
--- a/sql/log_event_client.cc
+++ b/sql/log_event_client.cc
@@ -1104,7 +1104,7 @@ void Rows_log_event::change_to_flashback_event(PRINT_EVENT_INFO *print_event_inf
if (((get_general_type_code() == WRITE_ROWS_EVENT) && (m_rows_buf==m_rows_end)))
goto end;
- (void) my_init_dynamic_array(&rows_arr, sizeof(LEX_STRING), 8, 8, MYF(0));
+ (void) my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &rows_arr, sizeof(LEX_STRING), 8, 8, MYF(0));
for (uchar *value= m_rows_buf; value < m_rows_end; )
{
@@ -1119,7 +1119,7 @@ void Rows_log_event::change_to_flashback_event(PRINT_EVENT_INFO *print_event_inf
}
value+= length1;
- swap_buff1= (uchar *) my_malloc(length1, MYF(0));
+ swap_buff1= (uchar *) my_malloc(PSI_NOT_INSTRUMENTED, length1, MYF(0));
if (!swap_buff1)
{
fprintf(stderr, "\nError: Out of memory. "
@@ -1142,7 +1142,7 @@ void Rows_log_event::change_to_flashback_event(PRINT_EVENT_INFO *print_event_inf
}
value+= length2;
- swap_buff2= (uchar *) my_malloc(length2, MYF(0));
+ swap_buff2= (uchar *) my_malloc(PSI_NOT_INSTRUMENTED, length2, MYF(0));
if (!swap_buff2)
{
fprintf(stderr, "\nError: Out of memory. "
@@ -1170,7 +1170,7 @@ void Rows_log_event::change_to_flashback_event(PRINT_EVENT_INFO *print_event_inf
LEX_STRING one_row;
one_row.length= length1 + length2;
- one_row.str= (char *) my_malloc(one_row.length, MYF(0));
+ one_row.str= (char *) my_malloc(PSI_NOT_INSTRUMENTED, one_row.length, MYF(0));
memcpy(one_row.str, start_pos, one_row.length);
if (one_row.str == NULL || push_dynamic(&rows_arr, (uchar *) &one_row))
{
@@ -1637,7 +1637,7 @@ bool Log_event::print_base64(IO_CACHE* file,
{
size_t const tmp_str_sz= my_base64_needed_encoded_length((int) size);
char *tmp_str;
- if (!(tmp_str= (char *) my_malloc(tmp_str_sz, MYF(MY_WME))))
+ if (!(tmp_str= (char *) my_malloc(PSI_NOT_INSTRUMENTED, tmp_str_sz, MYF(MY_WME))))
goto err;
if (my_base64_encode(ptr, (size_t) size, tmp_str))
@@ -2491,7 +2491,7 @@ bool User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
bool error;
// 2 hex digits / byte
- hex_str= (char *) my_malloc(2 * val_len + 1 + 3, MYF(MY_WME));
+ hex_str= (char *) my_malloc(PSI_NOT_INSTRUMENTED, 2 * val_len + 1 + 3, MYF(MY_WME));
if (!hex_str)
goto err;
str_to_hex(hex_str, val, val_len);
@@ -2853,7 +2853,7 @@ bool copy_cache_to_string_wrapped(IO_CACHE *cache,
if (reinit_io_cache(cache, READ_CACHE, 0L, FALSE, FALSE))
goto err;
- if (!(to->str= (char*) my_malloc((size_t)cache->end_of_file + fmt_size,
+ if (!(to->str= (char*) my_malloc(PSI_NOT_INSTRUMENTED, (size_t)cache->end_of_file + fmt_size,
MYF(0))))
{
perror("Out of memory: can't allocate memory in "
@@ -3108,7 +3108,7 @@ int Table_map_log_event::rewrite_db(const char* new_db, size_t new_len,
// Create new temp_buf
ulong event_cur_len= uint4korr(temp_buf + EVENT_LEN_OFFSET);
ulong event_new_len= event_cur_len + len_diff;
- char* new_temp_buf= (char*) my_malloc(event_new_len, MYF(MY_WME));
+ char* new_temp_buf= (char*) my_malloc(PSI_NOT_INSTRUMENTED, event_new_len, MYF(MY_WME));
if (!new_temp_buf)
{
@@ -3150,7 +3150,7 @@ int Table_map_log_event::rewrite_db(const char* new_db, size_t new_len,
char const* tblnam= m_tblnam;
uchar* coltype= m_coltype;
- m_memory= (uchar*) my_multi_malloc(MYF(MY_WME),
+ m_memory= (uchar*) my_multi_malloc(PSI_NOT_INSTRUMENTED, MYF(MY_WME),
&m_dbnam, (uint) m_dblen + 1,
&m_tblnam, (uint) m_tbllen + 1,
&m_coltype, (uint) m_colcnt,
@@ -3801,7 +3801,7 @@ bool copy_event_cache_to_string_and_reinit(IO_CACHE *cache, LEX_STRING *to)
{
reinit_io_cache(cache, READ_CACHE, 0L, FALSE, FALSE);
if (cache->end_of_file > SIZE_T_MAX ||
- !(to->str= (char*) my_malloc((to->length= (size_t)cache->end_of_file), MYF(0))))
+ !(to->str= (char*) my_malloc(PSI_NOT_INSTRUMENTED, (to->length= (size_t)cache->end_of_file), MYF(0))))
{
perror("Out of memory: can't allocate memory in copy_event_cache_to_string_and_reinit().");
goto err;
diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc
index e01488abbb3..c6ccfc5a2c0 100644
--- a/sql/log_event_old.cc
+++ b/sql/log_event_old.cc
@@ -32,6 +32,8 @@
#include "rpl_record_old.h"
#include "transaction.h"
+PSI_memory_key key_memory_log_event_old;
+
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
// Old implementation of do_apply_event()
@@ -899,7 +901,7 @@ int Delete_rows_log_event_old::do_before_row_operations(TABLE *table)
if (table->s->keys > 0)
{
- m_memory= (uchar*) my_multi_malloc(MYF(MY_WME),
+ m_memory= (uchar*) my_multi_malloc(key_memory_log_event_old, MYF(MY_WME),
&m_after_image,
(uint) table->s->reclength,
&m_key,
@@ -908,7 +910,7 @@ int Delete_rows_log_event_old::do_before_row_operations(TABLE *table)
}
else
{
- m_after_image= (uchar*) my_malloc(table->s->reclength, MYF(MY_WME));
+ m_after_image= (uchar*) my_malloc(key_memory_log_event_old, table->s->reclength, MYF(MY_WME));
m_memory= (uchar*)m_after_image;
m_key= NULL;
}
@@ -997,7 +999,7 @@ int Update_rows_log_event_old::do_before_row_operations(TABLE *table)
if (table->s->keys > 0)
{
- m_memory= (uchar*) my_multi_malloc(MYF(MY_WME),
+ m_memory= (uchar*) my_multi_malloc(key_memory_log_event_old, MYF(MY_WME),
&m_after_image,
(uint) table->s->reclength,
&m_key,
@@ -1006,7 +1008,7 @@ int Update_rows_log_event_old::do_before_row_operations(TABLE *table)
}
else
{
- m_after_image= (uchar*) my_malloc(table->s->reclength, MYF(MY_WME));
+ m_after_image= (uchar*) my_malloc(key_memory_log_event_old, table->s->reclength, MYF(MY_WME));
m_memory= m_after_image;
m_key= NULL;
}
@@ -1252,7 +1254,7 @@ Old_rows_log_event::Old_rows_log_event(const char *buf, uint event_len,
m_table_id, m_flags, m_width, data_size));
DBUG_DUMP("rows_data", (uchar*) ptr_rows_data, data_size);
- m_rows_buf= (uchar*) my_malloc(data_size, MYF(MY_WME));
+ m_rows_buf= (uchar*) my_malloc(key_memory_log_event_old, data_size, MYF(MY_WME));
if (likely((bool)m_rows_buf))
{
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
@@ -1326,7 +1328,7 @@ int Old_rows_log_event::do_add_row_data(uchar *row_data, size_t length)
my_ptrdiff_t const new_alloc=
block_size * ((cur_size + length + block_size - 1) / block_size);
- uchar* const new_buf= (uchar*)my_realloc((uchar*)m_rows_buf, (uint) new_alloc,
+ uchar* const new_buf= (uchar*)my_realloc(key_memory_log_event_old, (uchar*)m_rows_buf, (uint) new_alloc,
MYF(MY_ALLOW_ZERO_PTR|MY_WME));
if (unlikely(!new_buf))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -2555,7 +2557,7 @@ Delete_rows_log_event_old::do_before_row_operations(const Slave_reporting_capabi
if (m_table->s->keys > 0)
{
// Allocate buffer for key searches
- m_key= (uchar*)my_malloc(m_table->key_info->key_length, MYF(MY_WME));
+ m_key= (uchar*)my_malloc(key_memory_log_event_old, m_table->key_info->key_length, MYF(MY_WME));
if (!m_key)
return HA_ERR_OUT_OF_MEM;
}
@@ -2653,7 +2655,7 @@ Update_rows_log_event_old::do_before_row_operations(const Slave_reporting_capabi
if (m_table->s->keys > 0)
{
// Allocate buffer for key searches
- m_key= (uchar*)my_malloc(m_table->key_info->key_length, MYF(MY_WME));
+ m_key= (uchar*)my_malloc(key_memory_log_event_old, m_table->key_info->key_length, MYF(MY_WME));
if (!m_key)
return HA_ERR_OUT_OF_MEM;
}
diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc
index 202a41c2837..2267f91f0f9 100644
--- a/sql/log_event_server.cc
+++ b/sql/log_event_server.cc
@@ -1833,8 +1833,8 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi,
thd->m_statement_psi= MYSQL_START_STATEMENT(&thd->m_statement_state,
stmt_info_rpl.m_key,
thd->db.str, thd->db.length,
- thd->charset());
- THD_STAGE_INFO(thd, stage_init);
+ thd->charset(), NULL);
+ THD_STAGE_INFO(thd, stage_starting);
MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query(), thd->query_length());
if (thd->m_digest != NULL)
thd->m_digest->reset(thd->m_token_array, max_digest_length);
@@ -3014,7 +3014,7 @@ Rotate_log_event::Rotate_log_event(const char* new_log_ident_arg,
pos_arg, (ulong) flags));
cache_type= EVENT_NO_CACHE;
if (flags & DUP_NAME)
- new_log_ident= my_strndup(new_log_ident_arg, ident_len, MYF(MY_WME));
+ new_log_ident= my_strndup(PSI_INSTRUMENT_ME, new_log_ident_arg, ident_len, MYF(MY_WME));
if (flags & RELAY_LOG)
set_relay_log_event();
DBUG_VOID_RETURN;
@@ -3170,7 +3170,7 @@ Binlog_checkpoint_log_event::Binlog_checkpoint_log_event(
const char *binlog_file_name_arg,
uint binlog_file_len_arg)
:Log_event(),
- binlog_file_name(my_strndup(binlog_file_name_arg, binlog_file_len_arg,
+ binlog_file_name(my_strndup(PSI_INSTRUMENT_ME, binlog_file_name_arg, binlog_file_len_arg,
MYF(MY_WME))),
binlog_file_len(binlog_file_len_arg)
{
@@ -3443,8 +3443,8 @@ Gtid_list_log_event::Gtid_list_log_event(rpl_binlog_state *gtid_set,
cache_type= EVENT_NO_CACHE;
/* Failure to allocate memory will be caught by is_valid() returning false. */
if (count < (1<<28) &&
- (list = (rpl_gtid *)my_malloc(count * sizeof(*list) + (count == 0),
- MYF(MY_WME))))
+ (list = (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME,
+ count * sizeof(*list) + (count == 0), MYF(MY_WME))))
gtid_set->get_gtid_list(list, count);
}
@@ -3456,8 +3456,8 @@ Gtid_list_log_event::Gtid_list_log_event(slave_connection_state *gtid_set,
cache_type= EVENT_NO_CACHE;
/* Failure to allocate memory will be caught by is_valid() returning false. */
if (count < (1<<28) &&
- (list = (rpl_gtid *)my_malloc(count * sizeof(*list) + (count == 0),
- MYF(MY_WME))))
+ (list = (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME,
+ count * sizeof(*list) + (count == 0), MYF(MY_WME))))
{
gtid_set->get_gtid_list(list, count);
#if defined(HAVE_REPLICATION)
@@ -3465,8 +3465,8 @@ Gtid_list_log_event::Gtid_list_log_event(slave_connection_state *gtid_set,
{
uint32 i;
- if (!(sub_id_list= (uint64 *)my_malloc(count * sizeof(uint64),
- MYF(MY_WME))))
+ if (!(sub_id_list= (uint64 *)my_malloc(PSI_INSTRUMENT_ME,
+ count * sizeof(uint64), MYF(MY_WME))))
{
my_free(list);
list= NULL;
@@ -4691,7 +4691,7 @@ int Execute_load_log_event::do_apply_event(rpl_group_info *rgi)
don't want to overwrite it with the filename.
What we want instead is add the filename to the current error message.
*/
- char *tmp= my_strdup(rli->last_error().message, MYF(MY_WME));
+ char *tmp= my_strdup(PSI_INSTRUMENT_ME, rli->last_error().message, MYF(MY_WME));
if (tmp)
{
rli->report(ERROR_LEVEL, rli->last_error().number, rgi->gtid_info(),
@@ -4823,8 +4823,8 @@ Execute_load_query_log_event::do_apply_event(rpl_group_info *rgi)
int error;
Relay_log_info const *rli= rgi->rli;
- buf= (char*) my_malloc(q_len + 1 - (fn_pos_end - fn_pos_start) +
- (FN_REFLEN + 10) + 10 + 8 + 5, MYF(MY_WME));
+ buf= (char*) my_malloc(PSI_INSTRUMENT_ME, q_len + 1 -
+ (fn_pos_end - fn_pos_start) + (FN_REFLEN + 10) + 10 + 8 + 5, MYF(MY_WME));
DBUG_EXECUTE_IF("LOAD_DATA_INFILE_has_fatal_error", my_free(buf); buf= NULL;);
@@ -5036,8 +5036,8 @@ int Rows_log_event::do_add_row_data(uchar *row_data, size_t length)
size_t const new_alloc=
block_size * ((cur_size + length + block_size - 1) / block_size);
- uchar* const new_buf= (uchar*)my_realloc((uchar*)m_rows_buf, new_alloc,
- MYF(MY_ALLOW_ZERO_PTR|MY_WME));
+ uchar* const new_buf= (uchar*)my_realloc(PSI_INSTRUMENT_ME, m_rows_buf,
+ new_alloc, MYF(MY_ALLOW_ZERO_PTR|MY_WME));
if (unlikely(!new_buf))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -5990,7 +5990,7 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
m_flags|= TM_BIT_HAS_TRIGGERS_F;
/* If malloc fails, caught in is_valid() */
- if ((m_memory= (uchar*) my_malloc(m_colcnt, MYF(MY_WME))))
+ if ((m_memory= (uchar*) my_malloc(PSI_INSTRUMENT_ME, m_colcnt, MYF(MY_WME))))
{
m_coltype= reinterpret_cast<uchar*>(m_memory);
for (unsigned int i= 0 ; i < m_table->s->fields ; ++i)
@@ -6006,7 +6006,7 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
*/
uint num_null_bytes= (m_table->s->fields + 7) / 8;
m_data_size+= num_null_bytes;
- m_meta_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
+ m_meta_memory= (uchar *)my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&m_null_bits, num_null_bytes,
&m_field_metadata, (m_colcnt * 2),
NULL);
@@ -6158,7 +6158,7 @@ int Table_map_log_event::do_apply_event(rpl_group_info *rgi)
/* Step the query id to mark what columns that are actually used. */
thd->set_query_id(next_query_id());
- if (!(memory= my_multi_malloc(MYF(MY_WME),
+ if (!(memory= my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&table_list, (uint) sizeof(RPL_TABLE_LIST),
&db_mem, (uint) NAME_LEN + 1,
&tname_mem, (uint) NAME_LEN + 1,
@@ -6809,7 +6809,7 @@ Write_rows_log_event::do_before_row_operations(const Slave_reporting_capability
m_table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
m_table->file->extra(HA_EXTRA_IGNORE_NO_KEY);
}
- if (slave_run_triggers_for_rbr && !master_had_triggers && m_table->triggers )
+ if (m_table->triggers && do_invoke_trigger())
m_table->prepare_triggers_for_insert_stmt_or_event();
/* Honor next number column if present */
@@ -6989,8 +6989,7 @@ Rows_log_event::write_row(rpl_group_info *rgi,
TABLE *table= m_table; // pointer to event's table
int error;
int UNINIT_VAR(keynum);
- const bool invoke_triggers=
- slave_run_triggers_for_rbr && !master_had_triggers && table->triggers;
+ const bool invoke_triggers= (m_table->triggers && do_invoke_trigger());
auto_afree_ptr<char> key(NULL);
prepare_record(table, m_width, true);
@@ -7439,7 +7438,7 @@ int Rows_log_event::find_key()
}
// Allocate buffer for key searches
- m_key= (uchar *) my_malloc(best_key->key_length, MYF(MY_WME));
+ m_key= (uchar *) my_malloc(PSI_INSTRUMENT_ME, best_key->key_length, MYF(MY_WME));
if (m_key == NULL)
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
m_key_info= best_key;
@@ -7866,7 +7865,7 @@ Delete_rows_log_event::do_before_row_operations(const Slave_reporting_capability
*/
return 0;
}
- if (slave_run_triggers_for_rbr && !master_had_triggers)
+ if (do_invoke_trigger())
m_table->prepare_triggers_for_delete_stmt_or_event();
return find_key();
@@ -7889,8 +7888,7 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi)
int error;
const char *tmp= thd->get_proc_info();
const char *message= "Delete_rows_log_event::find_row()";
- const bool invoke_triggers=
- slave_run_triggers_for_rbr && !master_had_triggers && m_table->triggers;
+ const bool invoke_triggers= (m_table->triggers && do_invoke_trigger());
DBUG_ASSERT(m_table != NULL);
#ifdef WSREP_PROC_INFO
@@ -8016,7 +8014,7 @@ Update_rows_log_event::do_before_row_operations(const Slave_reporting_capability
if ((err= find_key()))
return err;
- if (slave_run_triggers_for_rbr && !master_had_triggers)
+ if (do_invoke_trigger())
m_table->prepare_triggers_for_update_stmt_or_event();
return 0;
@@ -8035,11 +8033,10 @@ Update_rows_log_event::do_after_row_operations(const Slave_reporting_capability
return error;
}
-int
+int
Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
{
- const bool invoke_triggers=
- slave_run_triggers_for_rbr && !master_had_triggers && m_table->triggers;
+ const bool invoke_triggers= (m_table->triggers && do_invoke_trigger());
const char *tmp= thd->get_proc_info();
const char *message= "Update_rows_log_event::find_row()";
DBUG_ASSERT(m_table != NULL);
diff --git a/sql/mdl.cc b/sql/mdl.cc
index c4d6f89644b..5f229f73b2f 100644
--- a/sql/mdl.cc
+++ b/sql/mdl.cc
@@ -25,6 +25,10 @@
#include <mysql/service_thd_wait.h>
#include <mysql/psi/mysql_stage.h>
#include <tpool.h>
+#include <pfs_metadata_provider.h>
+#include <mysql/psi/mysql_mdl.h>
+
+static PSI_memory_key key_memory_MDL_context_acquire_locks;
#ifdef HAVE_PSI_INTERFACE
static PSI_mutex_key key_MDL_wait_LOCK_wait_status;
@@ -50,6 +54,11 @@ static PSI_cond_info all_mdl_conds[]=
{ &key_MDL_wait_COND_wait_status, "MDL_context::COND_wait_status", 0}
};
+static PSI_memory_info all_mdl_memory[]=
+{
+ { &key_memory_MDL_context_acquire_locks, "MDL_context::acquire_locks", 0}
+};
+
/**
Initialise all the performance schema instrumentation points
used by the MDL subsystem.
@@ -67,6 +76,9 @@ static void init_mdl_psi_keys(void)
count= array_elements(all_mdl_conds);
mysql_cond_register("sql", all_mdl_conds, count);
+ count= array_elements(all_mdl_memory);
+ mysql_memory_register("sql", all_mdl_memory, count);
+
MDL_key::init_psi_keys();
}
#endif /* HAVE_PSI_INTERFACE */
@@ -955,16 +967,20 @@ bool MDL_context::fix_pins()
@param mdl_type The MDL lock type for the request.
*/
-void MDL_request::init(MDL_key::enum_mdl_namespace mdl_namespace,
+void MDL_request::init_with_source(MDL_key::enum_mdl_namespace mdl_namespace,
const char *db_arg,
const char *name_arg,
enum_mdl_type mdl_type_arg,
- enum_mdl_duration mdl_duration_arg)
+ enum_mdl_duration mdl_duration_arg,
+ const char *src_file,
+ uint src_line)
{
key.mdl_key_init(mdl_namespace, db_arg, name_arg);
type= mdl_type_arg;
duration= mdl_duration_arg;
ticket= NULL;
+ m_src_file= src_file;
+ m_src_line= src_line;
}
@@ -977,14 +993,18 @@ void MDL_request::init(MDL_key::enum_mdl_namespace mdl_namespace,
@param mdl_type_arg The MDL lock type for the request.
*/
-void MDL_request::init(const MDL_key *key_arg,
+void MDL_request::init_by_key_with_source(const MDL_key *key_arg,
enum_mdl_type mdl_type_arg,
- enum_mdl_duration mdl_duration_arg)
+ enum_mdl_duration mdl_duration_arg,
+ const char *src_file,
+ uint src_line)
{
key.mdl_key_init(key_arg);
type= mdl_type_arg;
duration= mdl_duration_arg;
ticket= NULL;
+ m_src_file= src_file;
+ m_src_line= src_line;
}
@@ -1013,6 +1033,9 @@ MDL_ticket *MDL_ticket::create(MDL_context *ctx_arg, enum_mdl_type type_arg
void MDL_ticket::destroy(MDL_ticket *ticket)
{
+ mysql_mdl_destroy(ticket->m_psi);
+ ticket->m_psi= NULL;
+
delete ticket;
}
@@ -2099,6 +2122,15 @@ MDL_context::try_acquire_lock_impl(MDL_request *mdl_request,
return TRUE;
}
+ DBUG_ASSERT(ticket->m_psi == NULL);
+ ticket->m_psi= mysql_mdl_create(ticket,
+ &mdl_request->key,
+ mdl_request->type,
+ mdl_request->duration,
+ MDL_ticket::PENDING,
+ mdl_request->m_src_file,
+ mdl_request->m_src_line);
+
ticket->m_lock= lock;
if (lock->can_grant_lock(mdl_request->type, this, false))
@@ -2110,6 +2142,8 @@ MDL_context::try_acquire_lock_impl(MDL_request *mdl_request,
m_tickets[mdl_request->duration].push_front(ticket);
mdl_request->ticket= ticket;
+
+ mysql_mdl_set_status(ticket->m_psi, MDL_ticket::GRANTED);
}
else
*out_ticket= ticket;
@@ -2159,6 +2193,15 @@ MDL_context::clone_ticket(MDL_request *mdl_request)
)))
return TRUE;
+ DBUG_ASSERT(ticket->m_psi == NULL);
+ ticket->m_psi= mysql_mdl_create(ticket,
+ &mdl_request->key,
+ mdl_request->type,
+ mdl_request->duration,
+ MDL_ticket::PENDING,
+ mdl_request->m_src_file,
+ mdl_request->m_src_line);
+
/* clone() is not supposed to be used to get a stronger lock. */
DBUG_ASSERT(mdl_request->ticket->has_stronger_or_equal_type(ticket->m_type));
@@ -2171,6 +2214,8 @@ MDL_context::clone_ticket(MDL_request *mdl_request)
m_tickets[mdl_request->duration].push_front(ticket);
+ mysql_mdl_set_status(ticket->m_psi, MDL_ticket::GRANTED);
+
return FALSE;
}
@@ -2310,6 +2355,12 @@ MDL_context::acquire_lock(MDL_request *mdl_request, double lock_wait_timeout)
mysql_prlock_unlock(&lock->m_rwlock);
+ PSI_metadata_locker_state state __attribute__((unused));
+ PSI_metadata_locker *locker= NULL;
+
+ if (ticket->m_psi != NULL)
+ locker= PSI_CALL_start_metadata_wait(&state, ticket->m_psi, __FILE__, __LINE__);
+
will_wait_for(ticket);
/* There is a shared or exclusive lock on the object. */
@@ -2355,6 +2406,9 @@ MDL_context::acquire_lock(MDL_request *mdl_request, double lock_wait_timeout)
done_waiting_for();
+ if (locker != NULL)
+ PSI_CALL_end_metadata_wait(locker, 0);
+
if (wait_status != MDL_wait::GRANTED)
{
lock->remove_ticket(m_pins, &MDL_lock::m_waiting, ticket);
@@ -2390,6 +2444,8 @@ MDL_context::acquire_lock(MDL_request *mdl_request, double lock_wait_timeout)
mdl_request->ticket= ticket;
+ mysql_mdl_set_status(ticket->m_psi, MDL_ticket::GRANTED);
+
DBUG_RETURN(FALSE);
}
@@ -2435,8 +2491,8 @@ bool MDL_context::acquire_locks(MDL_request_list *mdl_requests,
DBUG_RETURN(FALSE);
/* Sort requests according to MDL_key. */
- if (! (sort_buf= (MDL_request **)my_malloc(req_count *
- sizeof(MDL_request*),
+ if (! (sort_buf= (MDL_request **)my_malloc(key_memory_MDL_context_acquire_locks,
+ req_count * sizeof(MDL_request*),
MYF(MY_WME))))
DBUG_RETURN(TRUE);
@@ -2521,8 +2577,8 @@ MDL_context::upgrade_shared_lock(MDL_ticket *mdl_ticket,
mdl_ticket->get_key()->mdl_namespace() != MDL_key::BACKUP)
DBUG_RETURN(FALSE);
- mdl_xlock_request.init(&mdl_ticket->m_lock->key, new_type,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT_BY_KEY(&mdl_xlock_request, &mdl_ticket->m_lock->key,
+ new_type, MDL_TRANSACTION);
if (acquire_lock(&mdl_xlock_request, lock_wait_timeout))
DBUG_RETURN(TRUE);
@@ -2962,7 +3018,8 @@ MDL_context::is_lock_owner(MDL_key::enum_mdl_namespace mdl_namespace,
MDL_request mdl_request;
enum_mdl_duration not_unused;
/* We don't care about exact duration of lock here. */
- mdl_request.init(mdl_namespace, db, name, mdl_type, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&mdl_request, mdl_namespace, db, name, mdl_type,
+ MDL_TRANSACTION);
MDL_ticket *ticket= find_ticket(&mdl_request, &not_unused);
DBUG_ASSERT(ticket == NULL || ticket->m_lock);
diff --git a/sql/mdl.h b/sql/mdl.h
index b084670e5c6..4659238e9f2 100644
--- a/sql/mdl.h
+++ b/sql/mdl.h
@@ -353,7 +353,7 @@ enum enum_mdl_duration {
or "name".
*/
-class MDL_key
+struct MDL_key
{
public:
#ifdef HAVE_PSI_INTERFACE
@@ -535,18 +535,23 @@ public:
/** A lock is requested based on a fully qualified name and type. */
MDL_key key;
+ const char *m_src_file;
+ uint m_src_line;
+
public:
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
{ return alloc_root(mem_root, size); }
static void operator delete(void *, MEM_ROOT *) {}
- void init(MDL_key::enum_mdl_namespace namespace_arg,
+ void init_with_source(MDL_key::enum_mdl_namespace namespace_arg,
const char *db_arg, const char *name_arg,
enum_mdl_type mdl_type_arg,
- enum_mdl_duration mdl_duration_arg);
- void init(const MDL_key *key_arg, enum_mdl_type mdl_type_arg,
- enum_mdl_duration mdl_duration_arg);
+ enum_mdl_duration mdl_duration_arg,
+ const char *src_file, uint src_line);
+ void init_by_key_with_source(const MDL_key *key_arg, enum_mdl_type mdl_type_arg,
+ enum_mdl_duration mdl_duration_arg,
+ const char *src_file, uint src_line);
/** Set type of lock request. Can be only applied to pending locks. */
inline void set_type(enum_mdl_type type_arg)
{
@@ -610,6 +615,12 @@ public:
typedef void (*mdl_cached_object_release_hook)(void *);
+#define MDL_REQUEST_INIT(R, P1, P2, P3, P4, P5) \
+ (*R).init_with_source(P1, P2, P3, P4, P5, __FILE__, __LINE__)
+
+#define MDL_REQUEST_INIT_BY_KEY(R, P1, P2, P3) \
+ (*R).init_by_key_with_source(P1, P2, P3, __FILE__, __LINE__)
+
/**
An abstract class for inspection of a connected
@@ -718,6 +729,11 @@ public:
/** Implement MDL_wait_for_subgraph interface. */
virtual bool accept_visitor(MDL_wait_for_graph_visitor *dvisitor);
virtual uint get_deadlock_weight() const;
+ /**
+ Status of lock request represented by the ticket as reflected in P_S.
+ */
+ enum enum_psi_status { PENDING = 0, GRANTED,
+ PRE_ACQUIRE_NOTIFY, POST_RELEASE_NOTIFY };
private:
friend class MDL_context;
@@ -731,9 +747,15 @@ private:
m_duration(duration_arg),
#endif
m_ctx(ctx_arg),
- m_lock(NULL)
+ m_lock(NULL),
+ m_psi(NULL)
{}
+ virtual ~MDL_ticket()
+ {
+ DBUG_ASSERT(m_psi == NULL);
+ }
+
static MDL_ticket *create(MDL_context *ctx_arg, enum_mdl_type type_arg
#ifndef DBUG_OFF
, enum_mdl_duration duration_arg
@@ -760,6 +782,8 @@ private:
*/
MDL_lock *m_lock;
+ PSI_metadata_lock *m_psi;
+
private:
MDL_ticket(const MDL_ticket &); /* not implemented */
MDL_ticket &operator=(const MDL_ticket &); /* not implemented */
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 7aa6d9bfb38..8f1c11a6518 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -113,6 +113,7 @@
#include "sp_rcontext.h"
#include "sp_cache.h"
#include "sql_reload.h" // reload_acl_and_cache
+#include "sp_head.h" // init_sp_psi_keys
#ifdef HAVE_POLL_H
#include <poll.h>
@@ -321,10 +322,6 @@ static PSI_rwlock_key key_rwlock_openssl;
#endif
#endif /* HAVE_PSI_INTERFACE */
-#ifdef HAVE_NPTL
-volatile sig_atomic_t ld_assume_kernel_is_set= 0;
-#endif
-
/**
Statement instrumentation key for replication.
*/
@@ -789,8 +786,8 @@ static struct my_option pfs_early_options[]=
{"performance_schema_consumer_events_statements_current", 0,
"Default startup value for the events_statements_current consumer.",
&pfs_param.m_consumer_events_statements_current_enabled,
- &pfs_param.m_consumer_events_statements_current_enabled, 0,
- GET_BOOL, OPT_ARG, TRUE, 0, 0, 0, 0, 0},
+ &pfs_param.m_consumer_events_statements_current_enabled, 0, GET_BOOL,
+ OPT_ARG, FALSE, 0, 0, 0, 0, 0},
{"performance_schema_consumer_events_statements_history", 0,
"Default startup value for the events_statements_history consumer.",
&pfs_param.m_consumer_events_statements_history_enabled,
@@ -801,6 +798,21 @@ static struct my_option pfs_early_options[]=
&pfs_param.m_consumer_events_statements_history_long_enabled,
&pfs_param.m_consumer_events_statements_history_long_enabled, 0,
GET_BOOL, OPT_ARG, FALSE, 0, 0, 0, 0, 0},
+ {"performance_schema_consumer_events_transactions_current", 0,
+ "Default startup value for the events_transactions_current consumer.",
+ &pfs_param.m_consumer_events_transactions_current_enabled,
+ &pfs_param.m_consumer_events_transactions_current_enabled, 0,
+ GET_BOOL, OPT_ARG, FALSE, 0, 0, 0, 0, 0},
+ {"performance_schema_consumer_events_transactions_history", 0,
+ "Default startup value for the events_transactions_history consumer.",
+ &pfs_param.m_consumer_events_transactions_history_enabled,
+ &pfs_param.m_consumer_events_transactions_history_enabled, 0,
+ GET_BOOL, OPT_ARG, FALSE, 0, 0, 0, 0, 0},
+ {"performance_schema_consumer_events_transactions_history_long", 0,
+ "Default startup value for the events_transactions_history_long consumer.",
+ &pfs_param.m_consumer_events_transactions_history_long_enabled,
+ &pfs_param.m_consumer_events_transactions_history_long_enabled, 0,
+ GET_BOOL, OPT_ARG, FALSE, 0, 0, 0, 0, 0},
{"performance_schema_consumer_events_waits_current", 0,
"Default startup value for the events_waits_current consumer.",
&pfs_param.m_consumer_events_waits_current_enabled,
@@ -838,6 +850,19 @@ static struct my_option pfs_early_options[]=
NO_ARG, 1, 0, 1, 0, 0, 0}
};
+PSI_file_key key_file_binlog, key_file_binlog_cache, key_file_binlog_index,
+ key_file_binlog_index_cache, key_file_casetest,
+ key_file_dbopt, key_file_des_key_file, key_file_ERRMSG, key_select_to_file,
+ key_file_fileparser, key_file_frm, key_file_global_ddl_log, key_file_load,
+ key_file_loadfile, key_file_log_event_data, key_file_log_event_info,
+ key_file_master_info, key_file_misc, key_file_partition_ddl_log,
+ key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog,
+ key_file_trg, key_file_trn, key_file_init;
+PSI_file_key key_file_query_log, key_file_slow_log;
+PSI_file_key key_file_relaylog, key_file_relaylog_index,
+ key_file_relaylog_cache, key_file_relaylog_index_cache;
+PSI_file_key key_file_binlog_state;
+
#ifdef HAVE_PSI_INTERFACE
#ifdef HAVE_MMAP
PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active, key_LOCK_pool,
@@ -1110,17 +1135,6 @@ static PSI_thread_info all_server_threads[]=
PSI_file_key key_file_map;
#endif /* HAVE_MMAP */
-PSI_file_key key_file_binlog, key_file_binlog_index, key_file_casetest,
- key_file_dbopt, key_file_des_key_file, key_file_ERRMSG, key_select_to_file,
- key_file_fileparser, key_file_frm, key_file_global_ddl_log, key_file_load,
- key_file_loadfile, key_file_log_event_data, key_file_log_event_info,
- key_file_master_info, key_file_misc, key_file_partition,
- key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog,
- key_file_trg, key_file_trn, key_file_init;
-PSI_file_key key_file_query_log, key_file_slow_log;
-PSI_file_key key_file_relaylog, key_file_relaylog_index;
-PSI_file_key key_file_binlog_state;
-
#endif /* HAVE_PSI_INTERFACE */
#ifdef HAVE_PSI_STATEMENT_INTERFACE
@@ -1168,9 +1182,9 @@ void net_after_header_psi(struct st_net *net, void *user_data,
thd->m_statement_psi= MYSQL_START_STATEMENT(&thd->m_statement_state,
stmt_info_new_packet.m_key,
thd->get_db(), thd->db.length,
- thd->charset());
+ thd->charset(), NULL);
- THD_STAGE_INFO(thd, stage_init);
+ THD_STAGE_INFO(thd, stage_starting);
}
/*
@@ -1296,7 +1310,7 @@ private:
void Buffered_logs::init()
{
- init_alloc_root(&m_root, "Buffered_logs", 1024, 0, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &m_root, 1024, 0, MYF(0));
}
void Buffered_logs::cleanup()
@@ -1676,7 +1690,7 @@ void kill_mysql(THD *thd)
make_user_name(thd, user_host_buff);
- if ((user= my_strdup(user_host_buff, MYF(0))) &&
+ if ((user= my_strdup(PSI_NOT_INSTRUMENTED, user_host_buff, MYF(0))) &&
!shutdown_user.compare_exchange_strong(expected_shutdown_user,
user,
std::memory_order_relaxed,
@@ -2953,8 +2967,7 @@ void init_signals(void)
sa.sa_flags = 0;
sa.sa_handler = print_signal_warning;
sigaction(SIGHUP, &sa, (struct sigaction*) 0);
- if (thd_lib_detected != THD_LIB_LT)
- sigaddset(&set,THR_SERVER_ALARM);
+ sigaddset(&set,THR_SERVER_ALARM);
if (test_flags & TEST_SIGINT)
{
/* Allow SIGINT to break mysqld. This is for debugging with --gdb */
@@ -3211,10 +3224,18 @@ extern "C" void *my_str_malloc_mysqld(size_t size);
void *my_str_malloc_mysqld(size_t size)
{
- return my_malloc(size, MYF(MY_FAE));
+ return my_malloc(key_memory_my_str_malloc, size, MYF(MY_FAE));
}
+#if 0
+extern "C" void *my_str_realloc_mysqld(void *ptr, size_t size);
+void *my_str_realloc_mysqld(void *ptr, size_t size)
+{
+ return my_realloc(key_memory_my_str_malloc, ptr, size, MYF(MY_FAE));
+}
+#endif
+
#include <mysqld_default_groups.h>
#if defined(__WIN__) && !defined(EMBEDDED_LIBRARY)
@@ -3423,7 +3444,7 @@ SHOW_VAR com_status_vars[]= {
{"show_generic", STMT_STATUS(SQLCOM_SHOW_GENERIC)},
{"show_grants", STMT_STATUS(SQLCOM_SHOW_GRANTS)},
{"show_keys", STMT_STATUS(SQLCOM_SHOW_KEYS)},
- {"show_master_status", STMT_STATUS(SQLCOM_SHOW_MASTER_STAT)},
+ {"show_binlog_status", STMT_STATUS(SQLCOM_SHOW_BINLOG_STAT)},
{"show_open_tables", STMT_STATUS(SQLCOM_SHOW_OPEN_TABLES)},
{"show_package_status", STMT_STATUS(SQLCOM_SHOW_STATUS_PACKAGE)},
#ifndef DBUG_OFF
@@ -3637,10 +3658,8 @@ int json_unescape_json(const char *json_str, const char *json_end,
@returns Pointer to string containing the full file path, or NULL if
it was not possible to create the path.
*/
-static inline const char *
-rpl_make_log_name(const char *opt,
- const char *def,
- const char *ext)
+static const char *rpl_make_log_name(PSI_memory_key key, const char *opt,
+ const char *def, const char *ext)
{
DBUG_ENTER("rpl_make_log_name");
DBUG_PRINT("enter", ("opt: %s, def: %s, ext: %s", opt, def, ext));
@@ -3658,7 +3677,7 @@ rpl_make_log_name(const char *opt,
mysql_real_data_home_ptr= mysql_real_data_home;
if (fn_format(buff, base, mysql_real_data_home_ptr, ext, options))
- DBUG_RETURN(my_strdup(buff, MYF(MY_WME)));
+ DBUG_RETURN(my_strdup(key, buff, MYF(MY_WME)));
else
DBUG_RETURN(NULL);
}
@@ -3794,7 +3813,9 @@ static int init_common_variables()
key_BINLOG_COND_relay_log_updated,
key_BINLOG_COND_bin_log_updated,
key_file_binlog,
+ key_file_binlog_cache,
key_file_binlog_index,
+ key_file_binlog_index_cache,
key_BINLOG_COND_queue_busy,
key_LOCK_binlog_end_pos);
#endif
@@ -4981,10 +5002,12 @@ static int init_server_components()
}
log_bin_basename=
- rpl_make_log_name(opt_bin_logname, pidfile_name,
+ rpl_make_log_name(key_memory_MYSQL_BIN_LOG_basename,
+ opt_bin_logname, pidfile_name,
opt_bin_logname ? "" : "-bin");
log_bin_index=
- rpl_make_log_name(opt_binlog_index_name, log_bin_basename, ".index");
+ rpl_make_log_name(key_memory_MYSQL_BIN_LOG_index,
+ opt_binlog_index_name, log_bin_basename, ".index");
if (log_bin_basename == NULL || log_bin_index == NULL)
{
sql_print_error("Unable to create replication path names:"
@@ -5002,10 +5025,12 @@ static int init_server_components()
if (opt_relay_logname)
{
relay_log_basename=
- rpl_make_log_name(opt_relay_logname, pidfile_name,
+ rpl_make_log_name(key_memory_MYSQL_RELAY_LOG_basename,
+ opt_relay_logname, pidfile_name,
opt_relay_logname ? "" : "-relay-bin");
relay_log_index=
- rpl_make_log_name(opt_relaylog_index_name, relay_log_basename, ".index");
+ rpl_make_log_name(key_memory_MYSQL_RELAY_LOG_index,
+ opt_relaylog_index_name, relay_log_basename, ".index");
if (relay_log_basename == NULL || relay_log_index == NULL)
{
sql_print_error("Unable to create replication path names:"
@@ -5351,10 +5376,10 @@ int mysqld_main(int argc, char **argv)
if (init_early_variables())
exit(1);
-#ifdef HAVE_NPTL
- ld_assume_kernel_is_set= (getenv("LD_ASSUME_KERNEL") != 0);
-#endif
#ifndef _WIN32
+#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
+ pre_initialize_performance_schema();
+#endif /*WITH_PERFSCHEMA_STORAGE_ENGINE */
// For windows, my_init() is called from the win specific mysqld_main
if (my_init()) // init my_sys library & pthreads
{
@@ -5454,6 +5479,7 @@ int mysqld_main(int argc, char **argv)
init_server_psi_keys();
/* Instrument the main thread */
PSI_thread *psi= PSI_CALL_new_thread(key_thread_main, NULL, 0);
+ PSI_CALL_set_thread_os_id(psi);
PSI_CALL_set_thread(psi);
/*
@@ -5733,7 +5759,7 @@ int mysqld_main(int argc, char **argv)
mysql_cond_broadcast(&COND_server_started);
mysql_mutex_unlock(&LOCK_server_started);
- MYSQL_SET_STAGE(0 ,__FILE__, __LINE__);
+ (void)MYSQL_SET_STAGE(0 ,__FILE__, __LINE__);
/* Memory used when everything is setup */
start_memory_used= global_status_var.global_memory_used;
@@ -5918,6 +5944,10 @@ int mysqld_main(int argc, char **argv)
/* Must be initialized early for comparison of service name */
system_charset_info= &my_charset_utf8mb3_general_ci;
+#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
+ pre_initialize_performance_schema();
+#endif /*WITH_PERFSCHEMA_STORAGE_ENGINE */
+
if (my_init())
{
fprintf(stderr, "my_init() failed.");
@@ -6381,7 +6411,8 @@ int handle_early_options()
my_getopt_skip_unknown= TRUE;
/* prepare all_early_options array */
- my_init_dynamic_array(&all_early_options, sizeof(my_option), 100, 25, MYF(0));
+ my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &all_early_options,
+ sizeof(my_option), 100, 25, MYF(0));
add_many_options(&all_early_options, pfs_early_options,
array_elements(pfs_early_options));
sys_var_add_options(&all_early_options, sys_var::PARSE_EARLY);
@@ -7700,7 +7731,7 @@ static int option_cmp(my_option *a, my_option *b)
static void print_help()
{
MEM_ROOT mem_root;
- init_alloc_root(&mem_root, "help", 4096, 4096, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &mem_root, 4096, 4096, MYF(0));
pop_dynamic(&all_options);
add_many_options(&all_options, pfs_early_options,
@@ -8555,7 +8586,7 @@ static int get_options(int *argc_ptr, char ***argv_ptr)
my_getopt_error_reporter= option_error_reporter;
/* prepare all_options array */
- my_init_dynamic_array(&all_options, sizeof(my_option),
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &all_options, sizeof(my_option),
array_elements(my_long_options) + sys_var_elements(),
array_elements(my_long_options)/4, MYF(0));
add_many_options(&all_options, my_long_options, array_elements(my_long_options));
@@ -8987,7 +9018,7 @@ static int fix_paths(void)
sql_print_warning("Failed to normalize the argument for --secure-file-priv.");
DBUG_RETURN(1);
}
- char *secure_file_real_path= (char *)my_malloc(FN_REFLEN, MYF(MY_FAE));
+ char *secure_file_real_path= (char *)my_malloc(PSI_INSTRUMENT_ME, FN_REFLEN, MYF(MY_FAE));
convert_dirname(secure_file_real_path, buff, NullS);
my_free(opt_secure_file_priv);
opt_secure_file_priv= secure_file_real_path;
@@ -9088,6 +9119,11 @@ void refresh_status(THD *thd)
{
mysql_mutex_lock(&LOCK_status);
+#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
+ /* Reset aggregated status counters. */
+ reset_pfs_status_stats();
+#endif
+
/* Add thread's status variabes to global status */
add_to_status(&global_status_var, &thd->status_var);
@@ -9125,9 +9161,14 @@ static PSI_file_info all_server_files[]=
{ &key_file_map, "map", 0},
#endif /* HAVE_MMAP */
{ &key_file_binlog, "binlog", 0},
+ { &key_file_binlog_cache, "binlog_cache", 0},
{ &key_file_binlog_index, "binlog_index", 0},
+ { &key_file_binlog_index_cache, "binlog_index_cache", 0},
{ &key_file_relaylog, "relaylog", 0},
+ { &key_file_relaylog_cache, "relaylog_cache", 0},
{ &key_file_relaylog_index, "relaylog_index", 0},
+ { &key_file_relaylog_index_cache, "relaylog_index_cache", 0},
+ { &key_file_io_cache, "io_cache", 0},
{ &key_file_casetest, "casetest", 0},
{ &key_file_dbopt, "dbopt", 0},
{ &key_file_des_key_file, "des_key_file", 0},
@@ -9142,7 +9183,7 @@ static PSI_file_info all_server_files[]=
{ &key_file_log_event_info, "log_event_info", 0},
{ &key_file_master_info, "master_info", 0},
{ &key_file_misc, "misc", 0},
- { &key_file_partition, "partition", 0},
+ { &key_file_partition_ddl_log, "partition_ddl_log", 0},
{ &key_file_pid, "pid", 0},
{ &key_file_query_log, "query_log", 0},
{ &key_file_relay_log_info, "relay_log_info", 0},
@@ -9161,25 +9202,25 @@ PSI_stage_info stage_after_create= { 0, "After create", 0};
PSI_stage_info stage_after_opening_tables= { 0, "After opening tables", 0};
PSI_stage_info stage_after_table_lock= { 0, "After table lock", 0};
PSI_stage_info stage_allocating_local_table= { 0, "Allocating local table", 0};
-PSI_stage_info stage_alter_inplace_prepare= { 0, "Preparing for alter table", 0};
-PSI_stage_info stage_alter_inplace= { 0, "Altering table", 0};
+PSI_stage_info stage_alter_inplace_prepare= { 0, "preparing for alter table", 0};
+PSI_stage_info stage_alter_inplace= { 0, "altering table", 0};
PSI_stage_info stage_alter_inplace_commit= { 0, "Committing alter table to storage engine", 0};
PSI_stage_info stage_apply_event= { 0, "Apply log event", 0};
PSI_stage_info stage_changing_master= { 0, "Changing master", 0};
PSI_stage_info stage_checking_master_version= { 0, "Checking master version", 0};
-PSI_stage_info stage_checking_permissions= { 0, "Checking permissions", 0};
-PSI_stage_info stage_checking_privileges_on_cached_query= { 0, "Checking privileges on cached query", 0};
+PSI_stage_info stage_checking_permissions= { 0, "checking permissions", 0};
+PSI_stage_info stage_checking_privileges_on_cached_query= { 0, "checking privileges on cached query", 0};
PSI_stage_info stage_checking_query_cache_for_query= { 0, "Checking query cache for query", 0};
PSI_stage_info stage_cleaning_up= { 0, "Reset for next command", 0};
-PSI_stage_info stage_closing_tables= { 0, "Closing tables", 0};
+PSI_stage_info stage_closing_tables= { 0, "closing tables", 0};
PSI_stage_info stage_connecting_to_master= { 0, "Connecting to master", 0};
PSI_stage_info stage_converting_heap_to_myisam= { 0, "Converting HEAP to " TMP_ENGINE_NAME, 0};
PSI_stage_info stage_copying_to_group_table= { 0, "Copying to group table", 0};
PSI_stage_info stage_copying_to_tmp_table= { 0, "Copying to tmp table", 0};
-PSI_stage_info stage_copy_to_tmp_table= { 0, "Copy to tmp table", 0};
+PSI_stage_info stage_copy_to_tmp_table= { 0, "copy to tmp table", PSI_FLAG_STAGE_PROGRESS};
PSI_stage_info stage_creating_delayed_handler= { 0, "Creating delayed handler", 0};
PSI_stage_info stage_creating_sort_index= { 0, "Creating sort index", 0};
-PSI_stage_info stage_creating_table= { 0, "Creating table", 0};
+PSI_stage_info stage_creating_table= { 0, "creating table", 0};
PSI_stage_info stage_creating_tmp_table= { 0, "Creating tmp table", 0};
PSI_stage_info stage_deleting_from_main_table= { 0, "Deleting from main table", 0};
PSI_stage_info stage_deleting_from_reference_tables= { 0, "Deleting from reference tables", 0};
@@ -9197,17 +9238,17 @@ PSI_stage_info stage_freeing_items= { 0, "Freeing items", 0};
PSI_stage_info stage_fulltext_initialization= { 0, "Fulltext initialization", 0};
PSI_stage_info stage_got_handler_lock= { 0, "Got handler lock", 0};
PSI_stage_info stage_got_old_table= { 0, "Got old table", 0};
-PSI_stage_info stage_init= { 0, "Init", 0};
-PSI_stage_info stage_init_update= { 0, "Init for update", 0};
+PSI_stage_info stage_init= { 0, "init", 0};
+PSI_stage_info stage_init_update= { 0, "init for update", 0};
PSI_stage_info stage_insert= { 0, "Insert", 0};
PSI_stage_info stage_invalidating_query_cache_entries_table= { 0, "Invalidating query cache entries (table)", 0};
PSI_stage_info stage_invalidating_query_cache_entries_table_list= { 0, "Invalidating query cache entries (table list)", 0};
PSI_stage_info stage_killing_slave= { 0, "Killing slave", 0};
PSI_stage_info stage_logging_slow_query= { 0, "Logging slow query", 0};
-PSI_stage_info stage_making_temp_file_append_before_load_data= { 0, "Making temporary file (append) before replaying LOAD DATA INFILE.", 0};
-PSI_stage_info stage_making_temp_file_create_before_load_data= { 0, "Making temporary file (create) before replaying LOAD DATA INFILE.", 0};
+PSI_stage_info stage_making_temp_file_append_before_load_data= { 0, "Making temporary file (append) before replaying LOAD DATA INFILE", 0};
+PSI_stage_info stage_making_temp_file_create_before_load_data= { 0, "Making temporary file (create) before replaying LOAD DATA INFILE", 0};
PSI_stage_info stage_manage_keys= { 0, "Manage keys", 0};
-PSI_stage_info stage_master_has_sent_all_binlog_to_slave= { 0, "Master has sent all binlog to slave; waiting for binlog to be updated", 0};
+PSI_stage_info stage_master_has_sent_all_binlog_to_slave= { 0, "Master has sent all binlog to slave; waiting for more updates", 0};
PSI_stage_info stage_opening_tables= { 0, "Opening tables", 0};
PSI_stage_info stage_optimizing= { 0, "Optimizing", 0};
PSI_stage_info stage_preparing= { 0, "Preparing", 0};
@@ -9217,7 +9258,7 @@ PSI_stage_info stage_starting_cleanup= { 0, "Starting cleanup", 0};
PSI_stage_info stage_rollback= { 0, "Rollback", 0};
PSI_stage_info stage_rollback_implicit= { 0, "Rollback_implicit", 0};
PSI_stage_info stage_commit= { 0, "Commit", 0};
-PSI_stage_info stage_commit_implicit= { 0, "Commit_implicit", 0};
+PSI_stage_info stage_commit_implicit= { 0, "Commit implicit", 0};
PSI_stage_info stage_queueing_master_event_to_the_relay_log= { 0, "Queueing master event to the relay log", 0};
PSI_stage_info stage_reading_event_from_the_relay_log= { 0, "Reading event from the relay log", 0};
PSI_stage_info stage_recreating_table= { 0, "Recreating table", 0};
@@ -9232,9 +9273,9 @@ PSI_stage_info stage_searching_rows_for_update= { 0, "Searching rows for update"
PSI_stage_info stage_sending_binlog_event_to_slave= { 0, "Sending binlog event to slave", 0};
PSI_stage_info stage_sending_cached_result_to_client= { 0, "Sending cached result to client", 0};
PSI_stage_info stage_sending_data= { 0, "Sending data", 0};
-PSI_stage_info stage_setup= { 0, "Setup", 0};
+PSI_stage_info stage_setup= { 0, "setup", 0};
PSI_stage_info stage_show_explain= { 0, "Show explain", 0};
-PSI_stage_info stage_slave_has_read_all_relay_log= { 0, "Slave has read all relay log; waiting for the slave I/O thread to update it", 0};
+PSI_stage_info stage_slave_has_read_all_relay_log= { 0, "Slave has read all relay log; waiting for more updates", 0};
PSI_stage_info stage_sorting= { 0, "Sorting", 0};
PSI_stage_info stage_sorting_for_group= { 0, "Sorting for group", 0};
PSI_stage_info stage_sorting_for_order= { 0, "Sorting for order", 0};
@@ -9245,7 +9286,7 @@ PSI_stage_info stage_storing_result_in_query_cache= { 0, "Storing result in quer
PSI_stage_info stage_storing_row_into_queue= { 0, "Storing row into queue", 0};
PSI_stage_info stage_system_lock= { 0, "System lock", 0};
PSI_stage_info stage_unlocking_tables= { 0, "Unlocking tables", 0};
-PSI_stage_info stage_table_lock= { 0, "Table lock", 0};
+PSI_stage_info stage_table_lock= { 0, "table lock", 0};
PSI_stage_info stage_filling_schema_table= { 0, "Filling schema table", 0};
PSI_stage_info stage_update= { 0, "Update", 0};
PSI_stage_info stage_updating= { 0, "Updating", 0};
@@ -9275,14 +9316,13 @@ PSI_stage_info stage_waiting_for_query_cache_lock= { 0, "Waiting for query cache
PSI_stage_info stage_waiting_for_the_next_event_in_relay_log= { 0, "Waiting for the next event in relay log", 0};
PSI_stage_info stage_waiting_for_the_slave_thread_to_advance_position= { 0, "Waiting for the slave SQL thread to advance position", 0};
PSI_stage_info stage_waiting_to_finalize_termination= { 0, "Waiting to finalize termination", 0};
-PSI_stage_info stage_waiting_to_get_readlock= { 0, "Waiting to get readlock", 0};
PSI_stage_info stage_binlog_waiting_background_tasks= { 0, "Waiting for background binlog tasks", 0};
PSI_stage_info stage_binlog_write= { 0, "Writing to binlog", 0};
PSI_stage_info stage_binlog_processing_checkpoint_notify= { 0, "Processing binlog checkpoint notification", 0};
PSI_stage_info stage_binlog_stopping_background_thread= { 0, "Stopping binlog background thread", 0};
PSI_stage_info stage_waiting_for_work_from_sql_thread= { 0, "Waiting for work from SQL thread", 0};
PSI_stage_info stage_waiting_for_prior_transaction_to_commit= { 0, "Waiting for prior transaction to commit", 0};
-PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit= { 0, "Waiting for prior transaction to start commit before starting next transaction", 0};
+PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit= { 0, "Waiting for prior transaction to start commit", 0};
PSI_stage_info stage_waiting_for_room_in_worker_thread= { 0, "Waiting for room in worker thread event queue", 0};
PSI_stage_info stage_waiting_for_workers_idle= { 0, "Waiting for worker threads to be idle", 0};
PSI_stage_info stage_waiting_for_ftwrl= { 0, "Waiting due to global read lock", 0};
@@ -9290,10 +9330,92 @@ PSI_stage_info stage_waiting_for_ftwrl_threads_to_pause= { 0, "Waiting for worke
PSI_stage_info stage_waiting_for_rpl_thread_pool= { 0, "Waiting while replication worker thread pool is busy", 0};
PSI_stage_info stage_master_gtid_wait_primary= { 0, "Waiting in MASTER_GTID_WAIT() (primary waiter)", 0};
PSI_stage_info stage_master_gtid_wait= { 0, "Waiting in MASTER_GTID_WAIT()", 0};
-PSI_stage_info stage_gtid_wait_other_connection= { 0, "Waiting for other master connection to process GTID received on multiple master connections", 0};
+PSI_stage_info stage_gtid_wait_other_connection= { 0, "Waiting for other master connection to process the same GTID", 0};
PSI_stage_info stage_slave_background_process_request= { 0, "Processing requests", 0};
PSI_stage_info stage_slave_background_wait_request= { 0, "Waiting for requests", 0};
PSI_stage_info stage_waiting_for_deadlock_kill= { 0, "Waiting for parallel replication deadlock handling to complete", 0};
+PSI_stage_info stage_starting= { 0, "starting", 0};
+
+PSI_memory_key key_memory_DATE_TIME_FORMAT;
+PSI_memory_key key_memory_DDL_LOG_MEMORY_ENTRY;
+PSI_memory_key key_memory_Event_queue_element_for_exec_names;
+PSI_memory_key key_memory_Event_scheduler_scheduler_param;
+PSI_memory_key key_memory_Filesort_info_merge;
+PSI_memory_key key_memory_Filesort_info_record_pointers;
+PSI_memory_key key_memory_Gis_read_stream_err_msg;
+PSI_memory_key key_memory_JOIN_CACHE;
+PSI_memory_key key_memory_MPVIO_EXT_auth_info;
+PSI_memory_key key_memory_MYSQL_BIN_LOG_basename;
+PSI_memory_key key_memory_MYSQL_BIN_LOG_index;
+PSI_memory_key key_memory_MYSQL_LOCK;
+PSI_memory_key key_memory_MYSQL_LOG_name;
+PSI_memory_key key_memory_MYSQL_RELAY_LOG_basename;
+PSI_memory_key key_memory_MYSQL_RELAY_LOG_index;
+PSI_memory_key key_memory_NAMED_ILINK_name;
+PSI_memory_key key_memory_PROFILE;
+PSI_memory_key key_memory_QUICK_RANGE_SELECT_mrr_buf_desc;
+PSI_memory_key key_memory_Query_cache;
+PSI_memory_key key_memory_Relay_log_info_group_relay_log_name;
+PSI_memory_key key_memory_Row_data_memory_memory;
+PSI_memory_key key_memory_Rpl_info_file_buffer;
+PSI_memory_key key_memory_SLAVE_INFO;
+PSI_memory_key key_memory_ST_SCHEMA_TABLE;
+PSI_memory_key key_memory_Sort_param_tmp_buffer;
+PSI_memory_key key_memory_Sys_var_charptr_value;
+PSI_memory_key key_memory_TABLE;
+PSI_memory_key key_memory_TABLE_RULE_ENT;
+PSI_memory_key key_memory_TC_LOG_MMAP_pages;
+PSI_memory_key key_memory_THD_db;
+PSI_memory_key key_memory_THD_handler_tables_hash;
+PSI_memory_key key_memory_THD_variables;
+PSI_memory_key key_memory_Table_trigger_dispatcher;
+PSI_memory_key key_memory_Unique_merge_buffer;
+PSI_memory_key key_memory_Unique_sort_buffer;
+PSI_memory_key key_memory_User_level_lock;
+PSI_memory_key key_memory_XID;
+PSI_memory_key key_memory_acl_cache;
+PSI_memory_key key_memory_acl_mem;
+PSI_memory_key key_memory_acl_memex;
+PSI_memory_key key_memory_binlog_cache_mngr;
+PSI_memory_key key_memory_binlog_pos;
+PSI_memory_key key_memory_binlog_recover_exec;
+PSI_memory_key key_memory_binlog_statement_buffer;
+PSI_memory_key key_memory_binlog_ver_1_event;
+PSI_memory_key key_memory_bison_stack;
+PSI_memory_key key_memory_blob_mem_storage;
+PSI_memory_key key_memory_dboptions_hash;
+PSI_memory_key key_memory_errmsgs;
+PSI_memory_key key_memory_frm_string;
+PSI_memory_key key_memory_gdl;
+PSI_memory_key key_memory_global_system_variables;
+PSI_memory_key key_memory_handler_errmsgs;
+PSI_memory_key key_memory_handlerton;
+PSI_memory_key key_memory_hash_index_key_buffer;
+PSI_memory_key key_memory_host_cache_hostname;
+PSI_memory_key key_memory_ignored_db;
+PSI_memory_key key_memory_locked_table_list;
+PSI_memory_key key_memory_locked_thread_list;
+PSI_memory_key key_memory_my_str_malloc;
+PSI_memory_key key_memory_native_functions;
+PSI_memory_key key_memory_prepared_statement_main_mem_root;
+PSI_memory_key key_memory_prepared_statement_map;
+PSI_memory_key key_memory_queue_item;
+PSI_memory_key key_memory_quick_range_select_root;
+PSI_memory_key key_memory_rpl_filter;
+PSI_memory_key key_memory_sp_cache;
+PSI_memory_key key_memory_sp_head_call_root;
+PSI_memory_key key_memory_sp_head_execute_root;
+PSI_memory_key key_memory_sp_head_main_root;
+PSI_memory_key key_memory_table_mapping_root;
+PSI_memory_key key_memory_table_share;
+PSI_memory_key key_memory_table_triggers_list;
+PSI_memory_key key_memory_thd_main_mem_root;
+PSI_memory_key key_memory_thd_transactions;
+PSI_memory_key key_memory_user_conn;
+PSI_memory_key key_memory_user_var_entry;
+PSI_memory_key key_memory_user_var_entry_value;
+
+PSI_memory_key key_memory_String_value;
#ifdef HAVE_PSI_INTERFACE
@@ -9422,7 +9544,6 @@ PSI_stage_info *all_server_stages[]=
& stage_waiting_for_the_slave_thread_to_advance_position,
& stage_waiting_for_work_from_sql_thread,
& stage_waiting_to_finalize_termination,
- & stage_waiting_to_get_readlock,
& stage_master_gtid_wait_primary,
& stage_master_gtid_wait,
& stage_gtid_wait_other_connection,
@@ -9431,7 +9552,8 @@ PSI_stage_info *all_server_stages[]=
& stage_waiting_for_semi_sync_ack_from_slave,
& stage_waiting_for_semi_sync_slave,
& stage_reading_semi_sync_ack,
- & stage_waiting_for_deadlock_kill
+ & stage_waiting_for_deadlock_kill,
+ & stage_starting
};
PSI_socket_key key_socket_tcpip, key_socket_unix, key_socket_client_connection;
@@ -9443,6 +9565,145 @@ static PSI_socket_info all_server_sockets[]=
{ &key_socket_client_connection, "client_connection", 0}
};
+static PSI_memory_info all_server_memory[]=
+{
+ { &key_memory_locked_table_list, "Locked_tables_list::m_locked_tables_root", 0},
+ { &key_memory_locked_thread_list, "display_table_locks", PSI_FLAG_THREAD},
+ { &key_memory_thd_transactions, "THD::transactions::mem_root", PSI_FLAG_THREAD},
+// { &key_memory_delegate, "Delegate::memroot", 0},
+ { &key_memory_acl_mem, "sql_acl_mem", PSI_FLAG_GLOBAL},
+ { &key_memory_acl_memex, "sql_acl_memex", PSI_FLAG_GLOBAL},
+ { &key_memory_acl_cache, "acl_cache", PSI_FLAG_GLOBAL},
+ { &key_memory_thd_main_mem_root, "thd::main_mem_root", PSI_FLAG_THREAD},
+// { &key_memory_help, "help", 0},
+// { &key_memory_new_frm_mem, "new_frm_mem", 0},
+ { &key_memory_table_share, "TABLE_SHARE::mem_root", PSI_FLAG_GLOBAL}, /* table definition cache */
+ { &key_memory_gdl, "gdl", 0},
+ { &key_memory_table_triggers_list, "Table_triggers_list", 0},
+// { &key_memory_servers, "servers", 0},
+ { &key_memory_prepared_statement_map, "Prepared_statement_map", PSI_FLAG_THREAD},
+ { &key_memory_prepared_statement_main_mem_root, "Prepared_statement::main_mem_root", PSI_FLAG_THREAD},
+// { &key_memory_protocol_rset_root, "Protocol_local::m_rset_root", PSI_FLAG_THREAD},
+// { &key_memory_warning_info_warn_root, "Warning_info::m_warn_root", PSI_FLAG_THREAD},
+ { &key_memory_sp_cache, "THD::sp_cache", 0},
+ { &key_memory_sp_head_main_root, "sp_head::main_mem_root", 0},
+ { &key_memory_sp_head_execute_root, "sp_head::execute_mem_root", PSI_FLAG_THREAD},
+ { &key_memory_sp_head_call_root, "sp_head::call_mem_root", PSI_FLAG_THREAD},
+ { &key_memory_table_mapping_root, "table_mapping::m_mem_root", 0},
+ { &key_memory_quick_range_select_root, "QUICK_RANGE_SELECT::alloc", PSI_FLAG_THREAD},
+// { &key_memory_quick_index_merge_root, "QUICK_INDEX_MERGE_SELECT::alloc", PSI_FLAG_THREAD},
+// { &key_memory_quick_ror_intersect_select_root, "QUICK_ROR_INTERSECT_SELECT::alloc", PSI_FLAG_THREAD},
+// { &key_memory_quick_ror_union_select_root, "QUICK_ROR_UNION_SELECT::alloc", PSI_FLAG_THREAD},
+// { &key_memory_quick_group_min_max_select_root, "QUICK_GROUP_MIN_MAX_SELECT::alloc", PSI_FLAG_THREAD},
+// { &key_memory_test_quick_select_exec, "test_quick_select", PSI_FLAG_THREAD},
+// { &key_memory_prune_partitions_exec, "prune_partitions::exec", 0},
+ { &key_memory_binlog_recover_exec, "MYSQL_BIN_LOG::recover", 0},
+ { &key_memory_blob_mem_storage, "Blob_mem_storage::storage", 0},
+ { &key_memory_NAMED_ILINK_name, "NAMED_ILINK::name", 0},
+ { &key_memory_String_value, "String::value", 0},
+ { &key_memory_Sys_var_charptr_value, "Sys_var_charptr::value", 0},
+ { &key_memory_queue_item, "Queue::queue_item", 0},
+ { &key_memory_THD_db, "THD::db", 0},
+ { &key_memory_user_var_entry, "user_var_entry", 0},
+// { &key_memory_Slave_job_group_group_relay_log_name, "Slave_job_group::group_relay_log_name", 0},
+ { &key_memory_Relay_log_info_group_relay_log_name, "Relay_log_info::group_relay_log_name", 0},
+ { &key_memory_binlog_cache_mngr, "binlog_cache_mngr", 0},
+ { &key_memory_Row_data_memory_memory, "Row_data_memory::memory", 0},
+// { &key_memory_Gtid_set_to_string, "Gtid_set::to_string", 0},
+// { &key_memory_Gtid_state_to_string, "Gtid_state::to_string", 0},
+// { &key_memory_Owned_gtids_to_string, "Owned_gtids::to_string", 0},
+// { &key_memory_log_event, "Log_event", 0},
+// { &key_memory_Incident_log_event_message, "Incident_log_event::message", 0},
+// { &key_memory_Rows_query_log_event_rows_query, "Rows_query_log_event::rows_query", 0},
+ { &key_memory_Sort_param_tmp_buffer, "Sort_param::tmp_buffer", 0},
+ { &key_memory_Filesort_info_merge, "Filesort_info::merge", 0},
+ { &key_memory_Filesort_info_record_pointers, "Filesort_info::record_pointers", 0},
+// { &key_memory_Filesort_buffer_sort_keys, "Filesort_buffer::sort_keys", 0},
+ { &key_memory_handler_errmsgs, "handler::errmsgs", 0},
+ { &key_memory_handlerton, "handlerton", 0},
+ { &key_memory_XID, "XID", 0},
+ { &key_memory_host_cache_hostname, "host_cache::hostname", 0},
+ { &key_memory_user_var_entry_value, "user_var_entry::value", 0},
+ { &key_memory_User_level_lock, "User_level_lock", 0},
+ { &key_memory_MYSQL_LOG_name, "MYSQL_LOG::name", 0},
+ { &key_memory_TC_LOG_MMAP_pages, "TC_LOG_MMAP::pages", 0},
+// { &key_memory_my_bitmap_map, "my_bitmap_map", 0},
+ { &key_memory_QUICK_RANGE_SELECT_mrr_buf_desc, "QUICK_RANGE_SELECT::mrr_buf_desc", 0},
+ { &key_memory_Event_queue_element_for_exec_names, "Event_queue_element_for_exec::names", 0},
+ { &key_memory_my_str_malloc, "my_str_malloc", 0},
+ { &key_memory_MYSQL_BIN_LOG_basename, "MYSQL_BIN_LOG::basename", 0},
+ { &key_memory_MYSQL_BIN_LOG_index, "MYSQL_BIN_LOG::index", 0},
+ { &key_memory_MYSQL_RELAY_LOG_basename, "MYSQL_RELAY_LOG::basename", 0},
+ { &key_memory_MYSQL_RELAY_LOG_index, "MYSQL_RELAY_LOG::index", 0},
+ { &key_memory_rpl_filter, "rpl_filter memory", 0},
+ { &key_memory_errmsgs, "errmsgs", 0},
+ { &key_memory_Gis_read_stream_err_msg, "Gis_read_stream::err_msg", 0},
+// { &key_memory_Geometry_objects_data, "Geometry::ptr_and_wkb_data", 0},
+ { &key_memory_MYSQL_LOCK, "MYSQL_LOCK", 0},
+// { &key_memory_NET_buff, "NET::buff", 0},
+// { &key_memory_NET_compress_packet, "NET::compress_packet", 0},
+ { &key_memory_Event_scheduler_scheduler_param, "Event_scheduler::scheduler_param", 0},
+// { &key_memory_Gtid_set_Interval_chunk, "Gtid_set::Interval_chunk", 0},
+// { &key_memory_Owned_gtids_sidno_to_hash, "Owned_gtids::sidno_to_hash", 0},
+// { &key_memory_Sid_map_Node, "Sid_map::Node", 0},
+// { &key_memory_Gtid_state_group_commit_sidno, "Gtid_state::group_commit_sidno_locks", 0},
+// { &key_memory_Mutex_cond_array_Mutex_cond, "Mutex_cond_array::Mutex_cond", 0},
+ { &key_memory_TABLE_RULE_ENT, "TABLE_RULE_ENT", 0},
+// { &key_memory_Rpl_info_table, "Rpl_info_table", 0},
+ { &key_memory_Rpl_info_file_buffer, "Rpl_info_file::buffer", 0},
+// { &key_memory_db_worker_hash_entry, "db_worker_hash_entry", 0},
+// { &key_memory_rpl_slave_check_temp_dir, "rpl_slave::check_temp_dir", 0},
+// { &key_memory_rpl_slave_command_buffer, "rpl_slave::command_buffer", 0},
+ { &key_memory_binlog_ver_1_event, "binlog_ver_1_event", 0},
+ { &key_memory_SLAVE_INFO, "SLAVE_INFO", 0},
+ { &key_memory_binlog_pos, "binlog_pos", 0},
+// { &key_memory_HASH_ROW_ENTRY, "HASH_ROW_ENTRY", 0},
+ { &key_memory_binlog_statement_buffer, "binlog_statement_buffer", 0},
+// { &key_memory_partition_syntax_buffer, "partition_syntax_buffer", 0},
+// { &key_memory_READ_INFO, "READ_INFO", 0},
+ { &key_memory_JOIN_CACHE, "JOIN_CACHE", 0},
+// { &key_memory_TABLE_sort_io_cache, "TABLE::sort_io_cache", 0},
+// { &key_memory_frm, "frm", 0},
+ { &key_memory_Unique_sort_buffer, "Unique::sort_buffer", 0},
+ { &key_memory_Unique_merge_buffer, "Unique::merge_buffer", 0},
+ { &key_memory_TABLE, "TABLE", PSI_FLAG_GLOBAL}, /* Table cache */
+// { &key_memory_frm_extra_segment_buff, "frm::extra_segment_buff", 0},
+// { &key_memory_frm_form_pos, "frm::form_pos", 0},
+ { &key_memory_frm_string, "frm::string", 0},
+// { &key_memory_LOG_name, "LOG_name", 0},
+ { &key_memory_DATE_TIME_FORMAT, "DATE_TIME_FORMAT", 0},
+ { &key_memory_DDL_LOG_MEMORY_ENTRY, "DDL_LOG_MEMORY_ENTRY", 0},
+ { &key_memory_ST_SCHEMA_TABLE, "ST_SCHEMA_TABLE", 0},
+ { &key_memory_ignored_db, "ignored_db", 0},
+ { &key_memory_PROFILE, "PROFILE", 0},
+ { &key_memory_global_system_variables, "global_system_variables", 0},
+ { &key_memory_THD_variables, "THD::variables", 0},
+// { &key_memory_Security_context, "Security_context", 0},
+// { &key_memory_shared_memory_name, "Shared_memory_name", 0},
+ { &key_memory_bison_stack, "bison_stack", 0},
+ { &key_memory_THD_handler_tables_hash, "THD::handler_tables_hash", 0},
+ { &key_memory_hash_index_key_buffer, "hash_index_key_buffer", 0},
+ { &key_memory_dboptions_hash, "dboptions_hash", 0},
+ { &key_memory_user_conn, "user_conn", 0},
+// { &key_memory_LOG_POS_COORD, "LOG_POS_COORD", 0},
+// { &key_memory_XID_STATE, "XID_STATE", 0},
+ { &key_memory_MPVIO_EXT_auth_info, "MPVIO_EXT::auth_info", 0},
+// { &key_memory_opt_bin_logname, "opt_bin_logname", 0},
+ { &key_memory_Query_cache, "Query_cache", PSI_FLAG_GLOBAL},
+// { &key_memory_READ_RECORD_cache, "READ_RECORD_cache", 0},
+// { &key_memory_Quick_ranges, "Quick_ranges", 0},
+// { &key_memory_File_query_log_name, "File_query_log::name", 0},
+ { &key_memory_Table_trigger_dispatcher, "Table_trigger_dispatcher::m_mem_root", 0},
+// { &key_memory_thd_timer, "thd_timer", 0},
+// { &key_memory_THD_Session_tracker, "THD::Session_tracker", 0},
+// { &key_memory_THD_Session_sysvar_resource_manager, "THD::Session_sysvar_resource_manager", 0},
+// { &key_memory_show_slave_status_io_gtid_set, "show_slave_status_io_gtid_set", 0},
+// { &key_memory_write_set_extraction, "write_set_extraction", 0},
+// { &key_memory_get_all_tables, "get_all_tables", 0},
+// { &key_memory_fill_schema_schemata, "fill_schema_schemata", 0},
+ { &key_memory_native_functions, "native_functions", PSI_FLAG_GLOBAL},
+};
+
/**
Initialise all the performance schema instrumentation points
used by the server.
@@ -9473,11 +9734,16 @@ void init_server_psi_keys(void)
count= array_elements(all_server_sockets);
mysql_socket_register(category, all_server_sockets, count);
+ count= array_elements(all_server_memory);
+ mysql_memory_register(category, all_server_memory, count);
+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
init_sql_statement_info();
count= array_elements(sql_statement_info);
mysql_statement_register(category, sql_statement_info, count);
+ init_sp_psi_keys();
+
category= "com";
init_com_statement_info();
diff --git a/sql/mysqld.h b/sql/mysqld.h
index 7261b25cab0..018c8cdcaf5 100644
--- a/sql/mysqld.h
+++ b/sql/mysqld.h
@@ -306,7 +306,6 @@ extern my_bool disconnect_on_expired_password;
enum secure_timestamp { SECTIME_NO, SECTIME_SUPER, SECTIME_REPL, SECTIME_YES };
-#ifdef HAVE_PSI_INTERFACE
#ifdef HAVE_MMAP
extern PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active,
key_LOCK_pool, key_LOCK_pending_checkpoint;
@@ -391,22 +390,153 @@ extern PSI_thread_key key_thread_delayed_insert,
key_thread_one_connection, key_thread_signal_hand,
key_thread_slave_background, key_rpl_parallel_thread;
-extern PSI_file_key key_file_binlog, key_file_binlog_index, key_file_casetest,
+extern PSI_file_key key_file_binlog, key_file_binlog_cache,
+ key_file_binlog_index, key_file_binlog_index_cache, key_file_casetest,
key_file_dbopt, key_file_des_key_file, key_file_ERRMSG, key_select_to_file,
key_file_fileparser, key_file_frm, key_file_global_ddl_log, key_file_load,
key_file_loadfile, key_file_log_event_data, key_file_log_event_info,
- key_file_master_info, key_file_misc, key_file_partition,
+ key_file_master_info, key_file_misc, key_file_partition_ddl_log,
key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog,
key_file_trg, key_file_trn, key_file_init;
extern PSI_file_key key_file_query_log, key_file_slow_log;
-extern PSI_file_key key_file_relaylog, key_file_relaylog_index;
+extern PSI_file_key key_file_relaylog, key_file_relaylog_index,
+ key_file_relaylog_cache, key_file_relaylog_index_cache;
extern PSI_socket_key key_socket_tcpip, key_socket_unix,
key_socket_client_connection;
extern PSI_file_key key_file_binlog_state;
+#ifdef HAVE_PSI_INTERFACE
void init_server_psi_keys();
#endif /* HAVE_PSI_INTERFACE */
+extern PSI_memory_key key_memory_locked_table_list;
+extern PSI_memory_key key_memory_locked_thread_list;
+extern PSI_memory_key key_memory_thd_transactions;
+extern PSI_memory_key key_memory_delegate;
+extern PSI_memory_key key_memory_acl_mem;
+extern PSI_memory_key key_memory_acl_memex;
+extern PSI_memory_key key_memory_acl_cache;
+extern PSI_memory_key key_memory_thd_main_mem_root;
+extern PSI_memory_key key_memory_help;
+extern PSI_memory_key key_memory_frm;
+extern PSI_memory_key key_memory_table_share;
+extern PSI_memory_key key_memory_gdl;
+extern PSI_memory_key key_memory_table_triggers_list;
+extern PSI_memory_key key_memory_prepared_statement_map;
+extern PSI_memory_key key_memory_prepared_statement_main_mem_root;
+extern PSI_memory_key key_memory_protocol_rset_root;
+extern PSI_memory_key key_memory_warning_info_warn_root;
+extern PSI_memory_key key_memory_sp_cache;
+extern PSI_memory_key key_memory_sp_head_main_root;
+extern PSI_memory_key key_memory_sp_head_execute_root;
+extern PSI_memory_key key_memory_sp_head_call_root;
+extern PSI_memory_key key_memory_table_mapping_root;
+extern PSI_memory_key key_memory_quick_range_select_root;
+extern PSI_memory_key key_memory_quick_index_merge_root;
+extern PSI_memory_key key_memory_quick_ror_intersect_select_root;
+extern PSI_memory_key key_memory_quick_ror_union_select_root;
+extern PSI_memory_key key_memory_quick_group_min_max_select_root;
+extern PSI_memory_key key_memory_test_quick_select_exec;
+extern PSI_memory_key key_memory_prune_partitions_exec;
+extern PSI_memory_key key_memory_binlog_recover_exec;
+extern PSI_memory_key key_memory_blob_mem_storage;
+
+extern PSI_memory_key key_memory_Sys_var_charptr_value;
+extern PSI_memory_key key_memory_THD_db;
+extern PSI_memory_key key_memory_user_var_entry;
+extern PSI_memory_key key_memory_user_var_entry_value;
+extern PSI_memory_key key_memory_Slave_job_group_group_relay_log_name;
+extern PSI_memory_key key_memory_Relay_log_info_group_relay_log_name;
+extern PSI_memory_key key_memory_binlog_cache_mngr;
+extern PSI_memory_key key_memory_Row_data_memory_memory;
+extern PSI_memory_key key_memory_errmsgs;
+extern PSI_memory_key key_memory_Event_queue_element_for_exec_names;
+extern PSI_memory_key key_memory_Event_scheduler_scheduler_param;
+extern PSI_memory_key key_memory_Gis_read_stream_err_msg;
+extern PSI_memory_key key_memory_Geometry_objects_data;
+extern PSI_memory_key key_memory_host_cache_hostname;
+extern PSI_memory_key key_memory_User_level_lock;
+extern PSI_memory_key key_memory_Filesort_info_record_pointers;
+extern PSI_memory_key key_memory_Sort_param_tmp_buffer;
+extern PSI_memory_key key_memory_Filesort_info_merge;
+extern PSI_memory_key key_memory_Filesort_buffer_sort_keys;
+extern PSI_memory_key key_memory_handler_errmsgs;
+extern PSI_memory_key key_memory_handlerton;
+extern PSI_memory_key key_memory_XID;
+extern PSI_memory_key key_memory_MYSQL_LOCK;
+extern PSI_memory_key key_memory_MYSQL_LOG_name;
+extern PSI_memory_key key_memory_TC_LOG_MMAP_pages;
+extern PSI_memory_key key_memory_my_str_malloc;
+extern PSI_memory_key key_memory_MYSQL_BIN_LOG_basename;
+extern PSI_memory_key key_memory_MYSQL_BIN_LOG_index;
+extern PSI_memory_key key_memory_MYSQL_RELAY_LOG_basename;
+extern PSI_memory_key key_memory_MYSQL_RELAY_LOG_index;
+extern PSI_memory_key key_memory_rpl_filter;
+extern PSI_memory_key key_memory_Security_context;
+extern PSI_memory_key key_memory_NET_buff;
+extern PSI_memory_key key_memory_NET_compress_packet;
+extern PSI_memory_key key_memory_my_bitmap_map;
+extern PSI_memory_key key_memory_QUICK_RANGE_SELECT_mrr_buf_desc;
+extern PSI_memory_key key_memory_TABLE_RULE_ENT;
+extern PSI_memory_key key_memory_Mutex_cond_array_Mutex_cond;
+extern PSI_memory_key key_memory_Owned_gtids_sidno_to_hash;
+extern PSI_memory_key key_memory_Sid_map_Node;
+extern PSI_memory_key key_memory_bison_stack;
+extern PSI_memory_key key_memory_TABLE_sort_io_cache;
+extern PSI_memory_key key_memory_DATE_TIME_FORMAT;
+extern PSI_memory_key key_memory_DDL_LOG_MEMORY_ENTRY;
+extern PSI_memory_key key_memory_ST_SCHEMA_TABLE;
+extern PSI_memory_key key_memory_ignored_db;
+extern PSI_memory_key key_memory_SLAVE_INFO;
+extern PSI_memory_key key_memory_log_event_old;
+extern PSI_memory_key key_memory_HASH_ROW_ENTRY;
+extern PSI_memory_key key_memory_table_def_memory;
+extern PSI_memory_key key_memory_MPVIO_EXT_auth_info;
+extern PSI_memory_key key_memory_LOG_POS_COORD;
+extern PSI_memory_key key_memory_XID_STATE;
+extern PSI_memory_key key_memory_Rpl_info_file_buffer;
+extern PSI_memory_key key_memory_Rpl_info_table;
+extern PSI_memory_key key_memory_binlog_pos;
+extern PSI_memory_key key_memory_db_worker_hash_entry;
+extern PSI_memory_key key_memory_rpl_slave_command_buffer;
+extern PSI_memory_key key_memory_binlog_ver_1_event;
+extern PSI_memory_key key_memory_rpl_slave_check_temp_dir;
+extern PSI_memory_key key_memory_TABLE;
+extern PSI_memory_key key_memory_binlog_statement_buffer;
+extern PSI_memory_key key_memory_user_conn;
+extern PSI_memory_key key_memory_dboptions_hash;
+extern PSI_memory_key key_memory_hash_index_key_buffer;
+extern PSI_memory_key key_memory_THD_handler_tables_hash;
+extern PSI_memory_key key_memory_JOIN_CACHE;
+extern PSI_memory_key key_memory_READ_INFO;
+extern PSI_memory_key key_memory_partition_syntax_buffer;
+extern PSI_memory_key key_memory_global_system_variables;
+extern PSI_memory_key key_memory_THD_variables;
+extern PSI_memory_key key_memory_PROFILE;
+extern PSI_memory_key key_memory_LOG_name;
+extern PSI_memory_key key_memory_string_iterator;
+extern PSI_memory_key key_memory_frm_extra_segment_buff;
+extern PSI_memory_key key_memory_frm_form_pos;
+extern PSI_memory_key key_memory_frm_string;
+extern PSI_memory_key key_memory_Unique_sort_buffer;
+extern PSI_memory_key key_memory_Unique_merge_buffer;
+extern PSI_memory_key key_memory_shared_memory_name;
+extern PSI_memory_key key_memory_opt_bin_logname;
+extern PSI_memory_key key_memory_Query_cache;
+extern PSI_memory_key key_memory_READ_RECORD_cache;
+extern PSI_memory_key key_memory_Quick_ranges;
+extern PSI_memory_key key_memory_File_query_log_name;
+extern PSI_memory_key key_memory_Table_trigger_dispatcher;
+extern PSI_memory_key key_memory_show_slave_status_io_gtid_set;
+extern PSI_memory_key key_memory_write_set_extraction;
+extern PSI_memory_key key_memory_thd_timer;
+extern PSI_memory_key key_memory_THD_Session_tracker;
+extern PSI_memory_key key_memory_THD_Session_sysvar_resource_manager;
+extern PSI_memory_key key_memory_get_all_tables;
+extern PSI_memory_key key_memory_fill_schema_schemata;
+extern PSI_memory_key key_memory_native_functions;
+extern PSI_memory_key key_memory_JSON;
+
/*
MAINTAINER: Please keep this list in order, to limit merge collisions.
Hint: grep PSI_stage_info | sort -u
@@ -526,7 +656,6 @@ extern PSI_stage_info stage_waiting_for_table_flush;
extern PSI_stage_info stage_waiting_for_the_next_event_in_relay_log;
extern PSI_stage_info stage_waiting_for_the_slave_thread_to_advance_position;
extern PSI_stage_info stage_waiting_to_finalize_termination;
-extern PSI_stage_info stage_waiting_to_get_readlock;
extern PSI_stage_info stage_binlog_waiting_background_tasks;
extern PSI_stage_info stage_binlog_write;
extern PSI_stage_info stage_binlog_processing_checkpoint_notify;
@@ -545,6 +674,7 @@ extern PSI_stage_info stage_gtid_wait_other_connection;
extern PSI_stage_info stage_slave_background_process_request;
extern PSI_stage_info stage_slave_background_wait_request;
extern PSI_stage_info stage_waiting_for_deadlock_kill;
+extern PSI_stage_info stage_starting;
#ifdef HAVE_PSI_STATEMENT_INTERFACE
/**
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index 4fecf8bffd0..840593cd2db 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -47,6 +47,9 @@
#include "probes_mysql.h"
#include "proxy_protocol.h"
+PSI_memory_key key_memory_NET_buff;
+PSI_memory_key key_memory_NET_compress_packet;
+
#ifdef EMBEDDED_LIBRARY
#undef MYSQL_SERVER
#undef MYSQL_CLIENT
@@ -176,8 +179,9 @@ my_bool my_net_init(NET *net, Vio *vio, void *thd, uint my_flags)
my_bool net_allocate_new_packet(NET *net, void *thd, uint my_flags)
{
DBUG_ENTER("net_allocate_new_packet");
- if (!(net->buff=(uchar*) my_malloc((size_t) net->max_packet+
- NET_HEADER_SIZE + COMP_HEADER_SIZE +1,
+ if (!(net->buff=(uchar*) my_malloc(key_memory_NET_buff,
+ (size_t) net->max_packet +
+ NET_HEADER_SIZE + COMP_HEADER_SIZE + 1,
MYF(MY_WME | my_flags))))
DBUG_RETURN(1);
net->buff_end=net->buff+net->max_packet;
@@ -221,11 +225,11 @@ my_bool net_realloc(NET *net, size_t length)
my_real_read() may actually read 4 bytes depending on build flags and
platform.
*/
- if (!(buff= (uchar*) my_realloc((char*) net->buff, pkt_length +
+ if (!(buff= (uchar*) my_realloc(key_memory_NET_buff,
+ (char*) net->buff, pkt_length +
NET_HEADER_SIZE + COMP_HEADER_SIZE + 1,
- MYF(MY_WME |
- (net->thread_specific_malloc ?
- MY_THREAD_SPECIFIC : 0)))))
+ MYF(MY_WME | (net->thread_specific_malloc
+ ? MY_THREAD_SPECIFIC : 0)))))
{
/* @todo: 1 and 2 codes are identical. */
net->error= 1;
@@ -636,11 +640,10 @@ net_real_write(NET *net,const uchar *packet, size_t len)
size_t complen;
uchar *b;
uint header_length=NET_HEADER_SIZE+COMP_HEADER_SIZE;
- if (!(b= (uchar*) my_malloc(len + NET_HEADER_SIZE +
- COMP_HEADER_SIZE + 1,
- MYF(MY_WME |
- (net->thread_specific_malloc ?
- MY_THREAD_SPECIFIC : 0)))))
+ if (!(b= (uchar*) my_malloc(key_memory_NET_compress_packet,
+ len + NET_HEADER_SIZE + COMP_HEADER_SIZE + 1,
+ MYF(MY_WME | (net->thread_specific_malloc
+ ? MY_THREAD_SPECIFIC : 0)))))
{
net->error= 2;
net->last_errno= ER_OUT_OF_RESOURCES;
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index b4e2cfdf599..5822aaa8250 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -1267,9 +1267,8 @@ QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD *thd, TABLE *table, uint key_nr,
if (!no_alloc && !parent_alloc)
{
// Allocates everything through the internal memroot
- init_sql_alloc(&alloc, "QUICK_RANGE_SELECT",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
thd->mem_root= &alloc;
}
else
@@ -1277,7 +1276,7 @@ QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD *thd, TABLE *table, uint key_nr,
file= head->file;
record= head->record[0];
- my_init_dynamic_array2(&ranges, sizeof(QUICK_RANGE*),
+ my_init_dynamic_array2(PSI_INSTRUMENT_ME, &ranges, sizeof(QUICK_RANGE*),
thd->alloc(sizeof(QUICK_RANGE*) * 16), 16, 16,
MYF(MY_THREAD_SPECIFIC));
@@ -1363,9 +1362,8 @@ QUICK_INDEX_SORT_SELECT::QUICK_INDEX_SORT_SELECT(THD *thd_param, TABLE *table)
DBUG_ENTER("QUICK_INDEX_SORT_SELECT::QUICK_INDEX_SORT_SELECT");
index= MAX_KEY;
head= table;
- init_sql_alloc(&alloc, "QUICK_INDEX_SORT_SELECT",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
DBUG_VOID_RETURN;
}
@@ -1435,9 +1433,8 @@ QUICK_ROR_INTERSECT_SELECT::QUICK_ROR_INTERSECT_SELECT(THD *thd_param,
head= table;
record= head->record[0];
if (!parent_alloc)
- init_sql_alloc(&alloc, "QUICK_ROR_INTERSECT_SELECT",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
else
bzero(&alloc, sizeof(MEM_ROOT));
last_rowid= (uchar*) alloc_root(parent_alloc? parent_alloc : &alloc,
@@ -1713,9 +1710,8 @@ QUICK_ROR_UNION_SELECT::QUICK_ROR_UNION_SELECT(THD *thd_param,
head= table;
rowid_length= table->file->ref_length;
record= head->record[0];
- init_sql_alloc(&alloc, "QUICK_ROR_UNION_SELECT",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
thd_param->mem_root= &alloc;
}
@@ -2726,9 +2722,8 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
param.possible_keys.clear_all();
thd->no_errors=1; // Don't warn about NULL
- init_sql_alloc(&alloc, "test_quick_select",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
if (!(param.key_parts=
(KEY_PART*) alloc_root(&alloc,
sizeof(KEY_PART) *
@@ -3407,9 +3402,8 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
SEL_TREE *tree;
double rows;
- init_sql_alloc(&alloc, "calculate_cond_selectivity_for_table",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
param.thd= thd;
param.mem_root= &alloc;
param.old_root= thd->mem_root;
@@ -3839,9 +3833,8 @@ bool prune_partitions(THD *thd, TABLE *table, Item *pprune_cond)
my_bitmap_map *old_sets[2];
prune_param.part_info= part_info;
- init_sql_alloc(&alloc, "prune_partitions",
- thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
range_par->mem_root= &alloc;
range_par->old_root= thd->mem_root;
@@ -12098,7 +12091,8 @@ int QUICK_RANGE_SELECT::reset()
if (mrr_buf_size && !mrr_buf_desc)
{
buf_size= mrr_buf_size;
- while (buf_size && !my_multi_malloc(MYF(MY_WME),
+ while (buf_size && !my_multi_malloc(key_memory_QUICK_RANGE_SELECT_mrr_buf_desc,
+ MYF(MY_WME),
&mrr_buf_desc, sizeof(*mrr_buf_desc),
&mrange_buff, buf_size,
NullS))
@@ -14450,10 +14444,10 @@ QUICK_GROUP_MIN_MAX_SELECT(TABLE *table, JOIN *join_arg, bool have_min_arg,
DBUG_ASSERT(!parent_alloc);
if (!parent_alloc)
{
- init_sql_alloc(&alloc, "QUICK_GROUP_MIN_MAX_SELECT",
- join->thd->variables.range_alloc_block_size, 0,
- MYF(MY_THREAD_SPECIFIC));
- join->thd->mem_root= &alloc;
+ THD *thd= join->thd;
+ init_sql_alloc(key_memory_quick_range_select_root, &alloc,
+ thd->variables.range_alloc_block_size, 0, MYF(MY_THREAD_SPECIFIC));
+ thd->mem_root= &alloc;
}
else
bzero(&alloc, sizeof(MEM_ROOT)); // ensure that it's not used
@@ -14513,7 +14507,8 @@ int QUICK_GROUP_MIN_MAX_SELECT::init()
if (min_max_arg_part)
{
- if (my_init_dynamic_array(&min_max_ranges, sizeof(QUICK_RANGE*), 16, 16,
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &min_max_ranges,
+ sizeof(QUICK_RANGE*), 16, 16,
MYF(MY_THREAD_SPECIFIC)))
return 1;
diff --git a/sql/opt_split.cc b/sql/opt_split.cc
index 6f8248c315c..b27a0d757cb 100644
--- a/sql/opt_split.cc
+++ b/sql/opt_split.cc
@@ -341,7 +341,7 @@ bool JOIN::check_for_splittable_materialized()
return false;
ORDER *ord;
- Dynamic_array<SplM_field_ext_info> candidates;
+ Dynamic_array<SplM_field_ext_info> candidates(PSI_INSTRUMENT_MEM);
/*
Select from partition_list all candidates for splitting.
@@ -712,7 +712,7 @@ void JOIN::add_keyuses_for_splitting()
KEY_FIELD *added_key_field;
if (!spl_opt_info->added_key_fields.elements)
goto err;
- if (!(ext_keyuses_for_splitting= new Dynamic_array<KEYUSE_EXT>))
+ if (!(ext_keyuses_for_splitting= new Dynamic_array<KEYUSE_EXT>(PSI_INSTRUMENT_MEM)))
goto err;
while ((added_key_field= li++))
{
@@ -742,13 +742,11 @@ void JOIN::add_keyuses_for_splitting()
save_query_plan(save_qep);
if (!keyuse.buffer &&
- my_init_dynamic_array(&keyuse, sizeof(KEYUSE), 20, 64,
- MYF(MY_THREAD_SPECIFIC)))
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &keyuse, sizeof(KEYUSE),
+ 20, 64, MYF(MY_THREAD_SPECIFIC)))
goto err;
- if (allocate_dynamic(&keyuse,
- save_qep->keyuse.elements +
- added_keyuse_count))
+ if (allocate_dynamic(&keyuse, save_qep->keyuse.elements + added_keyuse_count))
goto err;
memcpy(keyuse.buffer,
diff --git a/sql/opt_subselect.cc b/sql/opt_subselect.cc
index c7d95fdadec..6c491300d17 100644
--- a/sql/opt_subselect.cc
+++ b/sql/opt_subselect.cc
@@ -4470,8 +4470,8 @@ SJ_TMP_TABLE::create_sj_weedout_tmp_table(THD *thd)
using_unique_constraint= TRUE;
/* STEP 3: Allocate memory for temptable description */
- init_sql_alloc(&own_root, "SJ_TMP_TABLE",
- TABLE_ALLOC_BLOCK_SIZE, 0, MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(PSI_INSTRUMENT_ME, &own_root, TABLE_ALLOC_BLOCK_SIZE, 0,
+ MYF(MY_THREAD_SPECIFIC));
if (!multi_alloc_root(&own_root,
&table, sizeof(*table),
&share, sizeof(*share),
diff --git a/sql/opt_trace.cc b/sql/opt_trace.cc
index 7ff11e65a30..057c6f3cc0a 100644
--- a/sql/opt_trace.cc
+++ b/sql/opt_trace.cc
@@ -449,7 +449,7 @@ bool Opt_trace_context::is_enabled()
return false;
}
-Opt_trace_context::Opt_trace_context()
+Opt_trace_context::Opt_trace_context() : traces(PSI_INSTRUMENT_MEM)
{
current_trace= NULL;
max_mem_size= 0;
diff --git a/sql/partition_info.cc b/sql/partition_info.cc
index 252744a3a73..5e3c19850de 100644
--- a/sql/partition_info.cc
+++ b/sql/partition_info.cc
@@ -30,7 +30,6 @@
// NOT_A_PARTITION_ID
#include "partition_info.h"
#include "sql_parse.h"
-#include "sql_acl.h" // *_ACL
#include "sql_base.h" // fill_record
#include "lock.h"
#include "table.h"
@@ -733,7 +732,7 @@ char *partition_info::find_duplicate_name()
max_names= num_parts;
if (is_sub_partitioned())
max_names+= num_parts * num_subparts;
- if (my_hash_init(&partition_names, system_charset_info, max_names, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &partition_names, system_charset_info, max_names, 0, 0,
(my_hash_get_key) get_part_name_from_elem, 0, HASH_UNIQUE))
{
DBUG_ASSERT(0);
diff --git a/sql/privilege.h b/sql/privilege.h
index 6f12546796e..c5c13186743 100644
--- a/sql/privilege.h
+++ b/sql/privilege.h
@@ -49,7 +49,7 @@ enum privilege_t: unsigned long long
LOCK_TABLES_ACL = (1UL << 17),
EXECUTE_ACL = (1UL << 18),
REPL_SLAVE_ACL = (1UL << 19),
- REPL_CLIENT_ACL = (1UL << 20),
+ BINLOG_MONITOR_ACL = (1UL << 20), // Was REPL_CLIENT_ACL prior to 10.5.2
CREATE_VIEW_ACL = (1UL << 21),
SHOW_VIEW_ACL = (1UL << 22),
CREATE_PROC_ACL = (1UL << 23),
@@ -58,20 +58,66 @@ enum privilege_t: unsigned long long
EVENT_ACL = (1UL << 26),
TRIGGER_ACL = (1UL << 27),
CREATE_TABLESPACE_ACL = (1UL << 28),
- DELETE_HISTORY_ACL = (1UL << 29),
+ DELETE_HISTORY_ACL = (1UL << 29), // Added in 10.3.4
+ SET_USER_ACL = (1UL << 30), // Added in 10.5.2
+ FEDERATED_ADMIN_ACL = (1UL << 31), // Added in 10.5.2
+ CONNECTION_ADMIN_ACL = (1ULL << 32), // Added in 10.5.2
+ READ_ONLY_ADMIN_ACL = (1ULL << 33), // Added in 10.5.2
+ REPL_SLAVE_ADMIN_ACL = (1ULL << 34), // Added in 10.5.2
+ REPL_MASTER_ADMIN_ACL = (1ULL << 35), // Added in 10.5.2
+ BINLOG_ADMIN_ACL = (1ULL << 36) // Added in 10.5.2
/*
- don't forget to update
- 1. static struct show_privileges_st sys_privileges[]
- 2. static const char *command_array[] and static uint command_lengths[]
- 3. mysql_system_tables.sql and mysql_system_tables_fix.sql
- 4. acl_init() or whatever - to define behaviour for old privilege tables
- 5. sql_yacc.yy - for GRANT/REVOKE to work
- 6. ALL_KNOWN_ACL
+ When adding new privilege bits, don't forget to update:
+ In this file:
+ - Add a new LAST_version_ACL
+ - Add a new ALL_KNOWN_ACL_version
+ - Change ALL_KNOWN_ACL to ALL_KNOWN_ACL_version
+ - Change GLOBAL_ACLS if needed
+ - Change SUPER_ADDED_SINCE_USER_TABLE_ACL if needed
+
+ In other files:
+ - static struct show_privileges_st sys_privileges[]
+ - static const char *command_array[] and static uint command_lengths[]
+ - mysql_system_tables.sql and mysql_system_tables_fix.sql
+ - acl_init() or whatever - to define behaviour for old privilege tables
+ - Update User_table_json::get_access()
+ - sql_yacc.yy - for GRANT/REVOKE to work
+
+ Important: the enum should contain only single-bit values.
+ In this case, debuggers print bit combinations in the readable form:
+ (gdb) p (privilege_t) (15)
+ $8 = (SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL)
+
+ Bit-OR combinations of the above values should be declared outside!
*/
- ALL_KNOWN_ACL = (1UL << 30) - 1 // A combination of all defined bits
};
+// Version markers
+constexpr privilege_t LAST_100304_ACL= DELETE_HISTORY_ACL;
+constexpr privilege_t LAST_100502_ACL= BINLOG_ADMIN_ACL;
+
+// Current version markers
+constexpr privilege_t LAST_CURRENT_ACL= LAST_100502_ACL;
+constexpr uint PRIVILEGE_T_MAX_BIT=
+ my_bit_log2_uint64((ulonglong) LAST_CURRENT_ACL);
+
+static_assert((privilege_t)(1ULL << PRIVILEGE_T_MAX_BIT) == LAST_CURRENT_ACL,
+ "Something went fatally badly: "
+ "LAST_CURRENT_ACL and PRIVILEGE_T_MAX_BIT do not match");
+
+// A combination of all bits defined in 10.3.4 (and earlier)
+constexpr privilege_t ALL_KNOWN_ACL_100304 =
+ (privilege_t) ((LAST_100304_ACL << 1) - 1);
+
+// A combination of all bits defined in 10.5.2
+constexpr privilege_t ALL_KNOWN_ACL_100502=
+ (privilege_t) ((LAST_100502_ACL << 1) - 1);
+
+// A combination of all bits defined as of the current version
+constexpr privilege_t ALL_KNOWN_ACL= ALL_KNOWN_ACL_100502;
+
+
// Unary operators
static inline constexpr ulonglong operator~(privilege_t access)
{
@@ -168,6 +214,19 @@ static inline privilege_t& operator|=(privilege_t &a, privilege_t b)
}
+/*
+ A combination of all SUPER privileges added since the old user table format.
+ These privileges are automatically added when upgrading from the
+ old format mysql.user table if a user has the SUPER privilege.
+*/
+constexpr privilege_t GLOBAL_SUPER_ADDED_SINCE_USER_TABLE_ACLS=
+ SET_USER_ACL |
+ FEDERATED_ADMIN_ACL |
+ CONNECTION_ADMIN_ACL |
+ READ_ONLY_ADMIN_ACL |
+ REPL_SLAVE_ADMIN_ACL |
+ BINLOG_ADMIN_ACL;
+
constexpr privilege_t COL_DML_ACLS=
SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL;
@@ -206,7 +265,9 @@ constexpr privilege_t GLOBAL_ACLS=
DB_ACLS | SHOW_DB_ACL |
CREATE_USER_ACL | CREATE_TABLESPACE_ACL |
SUPER_ACL | RELOAD_ACL | SHUTDOWN_ACL | PROCESS_ACL | FILE_ACL |
- REPL_SLAVE_ACL | REPL_CLIENT_ACL;
+ REPL_SLAVE_ACL | BINLOG_MONITOR_ACL |
+ GLOBAL_SUPER_ADDED_SINCE_USER_TABLE_ACLS |
+ REPL_MASTER_ADMIN_ACL;
constexpr privilege_t DEFAULT_CREATE_PROC_ACLS=
ALTER_PROC_ACL | EXECUTE_ACL;
@@ -222,6 +283,124 @@ constexpr privilege_t SHOW_CREATE_TABLE_ACLS=
constexpr privilege_t TMP_TABLE_ACLS=
COL_DML_ACLS | ALL_TABLE_DDL_ACLS;
+
+
+/*
+ Allow to set an object definer:
+ CREATE DEFINER=xxx {TRIGGER|VIEW|FUNCTION|PROCEDURE}
+ Was SUPER prior to 10.5.2
+*/
+constexpr privilege_t PRIV_DEFINER_CLAUSE= SET_USER_ACL | SUPER_ACL;
+/*
+ If a VIEW has a `definer=invoker@host` clause and
+ the specified definer does not exists, then
+ - The invoker with REVEAL_MISSING_DEFINER_ACL gets:
+ ERROR: The user specified as a definer ('definer1'@'localhost') doesn't exist
+ - The invoker without MISSING_DEFINER_ACL gets a generic access error,
+ without revealing details that the definer does not exists.
+
+ TODO: we should eventually test the same privilege when processing
+ other objects that have the DEFINER clause (e.g. routines, triggers).
+ Currently the missing definer is revealed for non-privileged invokers
+ in case of routines, triggers, etc.
+
+ Was SUPER prior to 10.5.2
+*/
+constexpr privilege_t PRIV_REVEAL_MISSING_DEFINER= SET_USER_ACL | SUPER_ACL;
+
+/* Actions that require only the SUPER privilege */
+constexpr privilege_t PRIV_DES_DECRYPT_ONE_ARG= SUPER_ACL;
+constexpr privilege_t PRIV_LOG_BIN_TRUSTED_SP_CREATOR= SUPER_ACL;
+constexpr privilege_t PRIV_DEBUG= SUPER_ACL;
+constexpr privilege_t PRIV_SET_GLOBAL_SYSTEM_VARIABLE= SUPER_ACL;
+constexpr privilege_t PRIV_SET_RESTRICTED_SESSION_SYSTEM_VARIABLE= SUPER_ACL;
+
+/* Privileges related to --read-only */
+constexpr privilege_t PRIV_IGNORE_READ_ONLY= READ_ONLY_ADMIN_ACL | SUPER_ACL;
+
+/*
+ Privileges related to connection handling.
+*/
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_IGNORE_INIT_CONNECT= CONNECTION_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_IGNORE_MAX_USER_CONNECTIONS= CONNECTION_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_IGNORE_MAX_CONNECTIONS= CONNECTION_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_IGNORE_MAX_PASSWORD_ERRORS= CONNECTION_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_KILL_OTHER_USER_PROCESS= CONNECTION_ADMIN_ACL | SUPER_ACL;
+
+
+/*
+ Binary log related privileges that are checked regardless
+ of active replication running.
+*/
+
+/*
+ This command was renamed from "SHOW MASTER STATUS"
+ to "SHOW BINLOG STATUS" in 10.5.2.
+ Was SUPER_ACL | REPL_CLIENT_ACL prior to 10.5.2
+ REPL_CLIENT_ACL was renamed to BINLOG_MONITOR_ACL.
+*/
+constexpr privilege_t PRIV_STMT_SHOW_BINLOG_STATUS= BINLOG_MONITOR_ACL | SUPER_ACL;
+
+/*
+ Was SUPER_ACL | REPL_CLIENT_ACL prior to 10.5.2
+ REPL_CLIENT_ACL was renamed to BINLOG_MONITOR_ACL.
+*/
+constexpr privilege_t PRIV_STMT_SHOW_BINARY_LOGS= BINLOG_MONITOR_ACL | SUPER_ACL;
+
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_PURGE_BINLOG= BINLOG_ADMIN_ACL | SUPER_ACL;
+
+// Was REPL_SLAVE_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_SHOW_BINLOG_EVENTS= BINLOG_MONITOR_ACL;
+
+
+/*
+ Privileges for replication related statements and commands
+ that are executed on the master.
+*/
+constexpr privilege_t PRIV_COM_REGISTER_SLAVE= REPL_SLAVE_ACL;
+constexpr privilege_t PRIV_COM_BINLOG_DUMP= REPL_SLAVE_ACL;
+// Was REPL_SLAVE_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_SHOW_SLAVE_HOSTS= REPL_MASTER_ADMIN_ACL;
+
+
+/* Privileges for statements that are executed on the slave */
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_START_SLAVE= REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_STOP_SLAVE= REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_CHANGE_MASTER= REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
+// Was (SUPER_ACL | REPL_CLIENT_ACL) prior to 10.5.2
+constexpr privilege_t PRIV_STMT_SHOW_SLAVE_STATUS= REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_BINLOG= REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
+// Was REPL_SLAVE_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_SHOW_RELAYLOG_EVENTS= REPL_SLAVE_ADMIN_ACL;
+
+
+/* Privileges for federated database related statements */
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_CREATE_SERVER= FEDERATED_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_ALTER_SERVER= FEDERATED_ADMIN_ACL | SUPER_ACL;
+// Was SUPER_ACL prior to 10.5.2
+constexpr privilege_t PRIV_STMT_DROP_SERVER= FEDERATED_ADMIN_ACL | SUPER_ACL;
+
+
+/* Privileges related to processes */
+constexpr privilege_t PRIV_COM_PROCESS_INFO= PROCESS_ACL;
+constexpr privilege_t PRIV_STMT_SHOW_EXPLAIN= PROCESS_ACL;
+constexpr privilege_t PRIV_STMT_SHOW_ENGINE_STATUS= PROCESS_ACL;
+constexpr privilege_t PRIV_STMT_SHOW_ENGINE_MUTEX= PROCESS_ACL;
+constexpr privilege_t PRIV_STMT_SHOW_PROCESSLIST= PROCESS_ACL;
+
+
/*
Defines to change the above bits to how things are stored in tables
This is needed as the 'host' and 'db' table is missing a few privileges
diff --git a/sql/protocol.cc b/sql/protocol.cc
index 30e4cc6c214..21efac46c52 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -799,6 +799,41 @@ bool Protocol::flush()
#ifndef EMBEDDED_LIBRARY
+
+class Send_field_packed_extended_metadata: public Binary_string
+{
+public:
+ bool append_chunk(mariadb_field_attr_t type, const LEX_CSTRING &value)
+ {
+ /*
+ If we eventually support many metadata chunk types and long metadata
+ values, we'll need to encode type and length using net_store_length()
+ and do corresponding changes to the unpacking code in libmariadb.
+ For now let's just assert that type and length fit into one byte.
+ */
+ DBUG_ASSERT(net_length_size(type) == 1);
+ DBUG_ASSERT(net_length_size(value.length) == 1);
+ size_t nbytes= 1/*type*/ + 1/*length*/ + value.length;
+ if (reserve(nbytes))
+ return true;
+ qs_append((char) (uchar) type);
+ qs_append((char) (uchar) value.length);
+ qs_append(&value);
+ return false;
+ }
+ bool pack(const Send_field_extended_metadata &src)
+ {
+ for (uint i= 0 ; i <= MARIADB_FIELD_ATTR_LAST; i++)
+ {
+ const LEX_CSTRING attr= src.attr(i);
+ if (attr.str && append_chunk((mariadb_field_attr_t) i, attr))
+ return true;
+ }
+ return false;
+ }
+};
+
+
bool Protocol_text::store_field_metadata(const THD * thd,
const Send_field &field,
CHARSET_INFO *charset_for_protocol,
@@ -816,8 +851,20 @@ bool Protocol_text::store_field_metadata(const THD * thd,
store_str(field.table_name, cs, thd_charset) ||
store_str(field.org_table_name, cs, thd_charset) ||
store_str(field.col_name, cs, thd_charset) ||
- store_str(field.org_col_name, cs, thd_charset) ||
- packet->realloc(packet->length() + 12))
+ store_str(field.org_col_name, cs, thd_charset))
+ return true;
+ if (thd->client_capabilities & MARIADB_CLIENT_EXTENDED_METADATA)
+ {
+ Send_field_packed_extended_metadata metadata;
+ metadata.pack(field);
+ /*
+ Don't apply character set conversion:
+ extended metadata is a binary encoded data.
+ */
+ if (store_str(metadata.lex_cstring(), cs, &my_charset_bin))
+ return true;
+ }
+ if (packet->realloc(packet->length() + 12))
return true;
/* Store fixed length fields */
pos= (char*) packet->end();
diff --git a/sql/proxy_protocol.cc b/sql/proxy_protocol.cc
index 550813c6457..689d1af88f0 100644
--- a/sql/proxy_protocol.cc
+++ b/sql/proxy_protocol.cc
@@ -364,7 +364,8 @@ static int parse_networks(const char *subnets_str, subnet **out_subnets, size_t
}
max_subnets= MY_MAX(3,strlen(subnets_str)/2);
- subnets= (subnet *)my_malloc(max_subnets * sizeof(subnet),MY_ZEROFILL);
+ subnets= (subnet *)my_malloc(PSI_INSTRUMENT_ME,
+ max_subnets * sizeof(subnet), MY_ZEROFILL);
/* Check for special case '*'. */
if (strcmp(subnets_str, "*") == 0)
diff --git a/sql/records.cc b/sql/records.cc
index 2b146abb005..e1766322e2f 100644
--- a/sql/records.cc
+++ b/sql/records.cc
@@ -39,7 +39,7 @@ static int rr_quick(READ_RECORD *info);
int rr_sequential(READ_RECORD *info);
static int rr_from_tempfile(READ_RECORD *info);
template<bool> static int rr_unpack_from_tempfile(READ_RECORD *info);
-template<bool> static int rr_unpack_from_buffer(READ_RECORD *info);
+template<bool,bool> static int rr_unpack_from_buffer(READ_RECORD *info);
int rr_from_pointers(READ_RECORD *info);
static int rr_from_cache(READ_RECORD *info);
static int init_rr_cache(THD *thd, READ_RECORD *info);
@@ -190,6 +190,7 @@ bool init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
DBUG_ENTER("init_read_record");
const bool using_addon_fields= filesort && filesort->using_addon_fields();
+ bool using_packed_sortkeys= filesort && filesort->using_packed_sortkeys();
bzero((char*) info,sizeof(*info));
info->thd=thd;
@@ -287,10 +288,19 @@ bool init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
DBUG_PRINT("info",("using rr_unpack_from_buffer"));
DBUG_ASSERT(filesort->sorted_result_in_fsbuf);
info->unpack_counter= 0;
+
if (filesort->using_packed_addons())
- info->read_record_func= rr_unpack_from_buffer<true>;
+ {
+ info->read_record_func= using_packed_sortkeys ?
+ rr_unpack_from_buffer<true, true> :
+ rr_unpack_from_buffer<true, false>;
+ }
else
- info->read_record_func= rr_unpack_from_buffer<false>;
+ {
+ info->read_record_func= using_packed_sortkeys ?
+ rr_unpack_from_buffer<false, true> :
+ rr_unpack_from_buffer<false, false>;
+ }
}
else
{
@@ -626,7 +636,7 @@ int rr_from_pointers(READ_RECORD *info)
-1 There is no record to be read anymore.
*/
-template<bool Packed_addon_fields>
+template<bool Packed_addon_fields, bool Packed_sort_keys>
static int rr_unpack_from_buffer(READ_RECORD *info)
{
if (info->unpack_counter == info->sort_info->return_rows)
@@ -634,7 +644,12 @@ static int rr_unpack_from_buffer(READ_RECORD *info)
uchar *record= info->sort_info->get_sorted_record(
static_cast<uint>(info->unpack_counter));
- uchar *plen= record + info->sort_info->get_sort_length();
+
+ uint sort_length= Packed_sort_keys ?
+ Sort_keys::read_sortkey_length(record):
+ info->sort_info->get_sort_length();
+
+ uchar *plen= record + sort_length;
info->sort_info->unpack_addon_fields<Packed_addon_fields>(plen);
info->unpack_counter++;
return 0;
@@ -772,6 +787,19 @@ static int rr_cmp(uchar *a,uchar *b)
#endif
}
+
+/**
+ Copy (unpack) values appended to sorted fields from a buffer back to
+ their regular positions specified by the Field::ptr pointers.
+
+ @param addon_field Array of descriptors for appended fields
+ @param buff Buffer which to unpack the value from
+
+ @note
+ The function is supposed to be used only as a callback function
+ when getting field values for the sorted result set.
+
+*/
template<bool Packed_addon_fields>
inline void SORT_INFO::unpack_addon_fields(uchar *buff)
{
diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc
index 7905e112e2e..1df85759a9c 100644
--- a/sql/repl_failsafe.cc
+++ b/sql/repl_failsafe.cc
@@ -101,7 +101,7 @@ void THD::unregister_slave()
mysql_mutex_lock(&LOCK_thd_data);
slave_info= 0;
mysql_mutex_unlock(&LOCK_thd_data);
- delete old_si;
+ my_free(old_si);
binlog_dump_thread_count--;
}
}
@@ -122,9 +122,10 @@ int THD::register_slave(uchar *packet, size_t packet_length)
uchar *p= packet, *p_end= packet + packet_length;
const char *errmsg= "Wrong parameters to function register_slave";
- if (check_access(this, REPL_SLAVE_ACL, any_db, NULL, NULL, 0, 0))
+ if (check_access(this, PRIV_COM_REGISTER_SLAVE, any_db, NULL, NULL, 0, 0))
return 1;
- if (!(si= new Slave_info))
+ if (!(si= (Slave_info*)my_malloc(key_memory_SLAVE_INFO, sizeof(Slave_info),
+ MYF(MY_WME))))
return 1;
variables.server_id= si->server_id= uint4korr(p);
diff --git a/sql/rpl_filter.cc b/sql/rpl_filter.cc
index e96f9640098..635a0f4e2d6 100644
--- a/sql/rpl_filter.cc
+++ b/sql/rpl_filter.cc
@@ -286,7 +286,7 @@ Rpl_filter::parse_filter_rule(const char* spec, Add_filter add)
if (!spec)
return false;
- if (! (ptr= my_strdup(spec, MYF(MY_WME))))
+ if (! (ptr= my_strdup(key_memory_rpl_filter, spec, MYF(MY_WME))))
return true;
pstr= ptr;
@@ -461,8 +461,9 @@ Rpl_filter::add_table_rule(HASH* h, const char* table_spec)
if (!dot) return 1;
// len is always > 0 because we know the there exists a '.'
uint len = (uint)strlen(table_spec);
- TABLE_RULE_ENT* e = (TABLE_RULE_ENT*)my_malloc(sizeof(TABLE_RULE_ENT)
- + len, MYF(MY_WME));
+ TABLE_RULE_ENT* e = (TABLE_RULE_ENT*)my_malloc(key_memory_TABLE_RULE_ENT,
+ sizeof(TABLE_RULE_ENT) + len,
+ MYF(MY_WME));
if (!e) return 1;
e->db= (char*)e + sizeof(TABLE_RULE_ENT);
e->tbl_name= e->db + (dot - table_spec) + 1;
@@ -483,8 +484,9 @@ Rpl_filter::add_wild_table_rule(DYNAMIC_ARRAY* a, const char* table_spec)
const char* dot = strchr(table_spec, '.');
if (!dot) return 1;
uint len = (uint)strlen(table_spec);
- TABLE_RULE_ENT* e = (TABLE_RULE_ENT*)my_malloc(sizeof(TABLE_RULE_ENT)
- + len, MYF(MY_WME));
+ TABLE_RULE_ENT* e = (TABLE_RULE_ENT*)my_malloc(key_memory_TABLE_RULE_ENT,
+ sizeof(TABLE_RULE_ENT) + len,
+ MYF(MY_WME));
if (!e) return 1;
e->db= (char*)e + sizeof(TABLE_RULE_ENT);
e->tbl_name= e->db + (dot - table_spec) + 1;
@@ -500,7 +502,7 @@ Rpl_filter::add_string_list(I_List<i_string> *list, const char* spec)
char *str;
i_string *node;
- if (! (str= my_strdup(spec, MYF(MY_WME))))
+ if (! (str= my_strdup(key_memory_rpl_filter, spec, MYF(MY_WME))))
return true;
if (! (node= new i_string(str)))
@@ -571,8 +573,9 @@ void free_table_ent(void* a)
void
Rpl_filter::init_table_rule_hash(HASH* h, bool* h_inited)
{
- my_hash_init(h, system_charset_info,TABLE_RULE_HASH_SIZE,0,0,
- get_table_key, free_table_ent, 0);
+ my_hash_init(key_memory_TABLE_RULE_ENT, h,
+ system_charset_info,TABLE_RULE_HASH_SIZE,0,0, get_table_key,
+ free_table_ent, 0);
*h_inited = 1;
}
@@ -580,8 +583,8 @@ Rpl_filter::init_table_rule_hash(HASH* h, bool* h_inited)
void
Rpl_filter::init_table_rule_array(DYNAMIC_ARRAY* a, bool* a_inited)
{
- my_init_dynamic_array(a, sizeof(TABLE_RULE_ENT*), TABLE_RULE_ARR_SIZE,
- TABLE_RULE_ARR_SIZE, MYF(0));
+ my_init_dynamic_array(key_memory_TABLE_RULE_ENT, a, sizeof(TABLE_RULE_ENT*),
+ TABLE_RULE_ARR_SIZE, TABLE_RULE_ARR_SIZE, MYF(0));
*a_inited = 1;
}
diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc
index 599129b98f4..bc87441d183 100644
--- a/sql/rpl_gtid.cc
+++ b/sql/rpl_gtid.cc
@@ -248,9 +248,10 @@ rpl_slave_state::rpl_slave_state()
{
mysql_mutex_init(key_LOCK_slave_state, &LOCK_slave_state,
MY_MUTEX_INIT_SLOW);
- my_hash_init(&hash, &my_charset_bin, 32, offsetof(element, domain_id),
+ my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32, offsetof(element, domain_id),
sizeof(uint32), NULL, rpl_slave_state_free_element, HASH_UNIQUE);
- my_init_dynamic_array(&gtid_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &gtid_sort_array, sizeof(rpl_gtid),
+ 8, 8, MYF(0));
}
@@ -333,7 +334,8 @@ rpl_slave_state::update(uint32 domain_id, uint32 server_id, uint64 sub_id,
rgi->gtid_ignore_duplicate_state= rpl_group_info::GTID_DUPLICATE_NULL;
}
- if (!(list_elem= (list_element *)my_malloc(sizeof(*list_elem), MYF(MY_WME))))
+ if (!(list_elem= (list_element *)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(*list_elem), MYF(MY_WME))))
return 1;
list_elem->domain_id= domain_id;
list_elem->server_id= server_id;
@@ -367,7 +369,7 @@ rpl_slave_state::get_element(uint32 domain_id)
if (elem)
return elem;
- if (!(elem= (element *)my_malloc(sizeof(*elem), MYF(MY_WME))))
+ if (!(elem= (element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*elem), MYF(MY_WME))))
return NULL;
elem->list= NULL;
elem->domain_id= domain_id;
@@ -1111,8 +1113,9 @@ rpl_slave_state::iterate(int (*cb)(rpl_gtid *, void *), void *data,
int res= 1;
bool locked= false;
- my_hash_init(&gtid_hash, &my_charset_bin, 32, offsetof(rpl_gtid, domain_id),
- sizeof(uint32), NULL, NULL, HASH_UNIQUE);
+ my_hash_init(PSI_INSTRUMENT_ME, &gtid_hash, &my_charset_bin, 32,
+ offsetof(rpl_gtid, domain_id), sizeof(uint32), NULL, NULL,
+ HASH_UNIQUE);
for (i= 0; i < num_extra; ++i)
if (extra_gtids[i].server_id == global_system_variables.server_id &&
my_hash_insert(&gtid_hash, (uchar *)(&extra_gtids[i])))
@@ -1329,7 +1332,7 @@ gtid_parse_string_to_list(const char *str, size_t str_len, uint32 *out_len)
}
if ((!list || len >= alloc_len) &&
!(list=
- (rpl_gtid *)my_realloc(list,
+ (rpl_gtid *)my_realloc(PSI_INSTRUMENT_ME, list,
(alloc_len= alloc_len*2) * sizeof(rpl_gtid),
MYF(MY_FREE_ON_ERROR|MY_ALLOW_ZERO_PTR))))
return NULL;
@@ -1466,10 +1469,8 @@ rpl_slave_state::alloc_gtid_pos_table(LEX_CSTRING *table_name, void *hton,
struct gtid_pos_table *p;
char *allocated_str;
- if (!my_multi_malloc(MYF(MY_WME),
- &p, sizeof(*p),
- &allocated_str, table_name->length+1,
- NULL))
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME), &p, sizeof(*p),
+ &allocated_str, table_name->length+1, NULL))
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)(sizeof(*p) + table_name->length+1));
return NULL;
@@ -1486,9 +1487,9 @@ rpl_slave_state::alloc_gtid_pos_table(LEX_CSTRING *table_name, void *hton,
void rpl_binlog_state::init()
{
- my_hash_init(&hash, &my_charset_bin, 32, offsetof(element, domain_id),
+ my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32, offsetof(element, domain_id),
sizeof(uint32), NULL, my_free, HASH_UNIQUE);
- my_init_dynamic_array(&gtid_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &gtid_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0));
mysql_mutex_init(key_LOCK_binlog_state, &LOCK_binlog_state,
MY_MUTEX_INIT_SLOW);
initialized= 1;
@@ -1685,7 +1686,8 @@ rpl_binlog_state::element::update_element(const rpl_gtid *gtid)
}
/* Allocate a new GTID and insert it. */
- lookup_gtid= (rpl_gtid *)my_malloc(sizeof(*lookup_gtid), MYF(MY_WME));
+ lookup_gtid= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*lookup_gtid),
+ MYF(MY_WME));
if (!lookup_gtid)
return 1;
memcpy(lookup_gtid, gtid, sizeof(*lookup_gtid));
@@ -1706,12 +1708,13 @@ rpl_binlog_state::alloc_element_nolock(const rpl_gtid *gtid)
rpl_gtid *lookup_gtid;
/* First time we see this domain_id; allocate a new element. */
- elem= (element *)my_malloc(sizeof(*elem), MYF(MY_WME));
- lookup_gtid= (rpl_gtid *)my_malloc(sizeof(*lookup_gtid), MYF(MY_WME));
+ elem= (element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*elem), MYF(MY_WME));
+ lookup_gtid= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*lookup_gtid),
+ MYF(MY_WME));
if (elem && lookup_gtid)
{
elem->domain_id= gtid->domain_id;
- my_hash_init(&elem->hash, &my_charset_bin, 32,
+ my_hash_init(PSI_INSTRUMENT_ME, &elem->hash, &my_charset_bin, 32,
offsetof(rpl_gtid, server_id), sizeof(uint32), NULL, my_free,
HASH_UNIQUE);
elem->last_gtid= lookup_gtid;
@@ -1784,14 +1787,15 @@ rpl_binlog_state::bump_seq_no_if_needed(uint32 domain_id, uint64 seq_no)
}
/* We need to allocate a new, empty element to remember the next seq_no. */
- if (!(elem= (element *)my_malloc(sizeof(*elem), MYF(MY_WME))))
+ if (!(elem= (element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*elem),
+ MYF(MY_WME))))
{
res= 1;
goto end;
}
elem->domain_id= domain_id;
- my_hash_init(&elem->hash, &my_charset_bin, 32,
+ my_hash_init(PSI_INSTRUMENT_ME, &elem->hash, &my_charset_bin, 32,
offsetof(rpl_gtid, server_id), sizeof(uint32), NULL, my_free,
HASH_UNIQUE);
elem->last_gtid= NULL;
@@ -2006,8 +2010,8 @@ rpl_binlog_state::get_most_recent_gtid_list(rpl_gtid **list, uint32 *size)
out_size= 0;
mysql_mutex_lock(&LOCK_binlog_state);
alloc_size= hash.records;
- if (!(*list= (rpl_gtid *)my_malloc(alloc_size * sizeof(rpl_gtid),
- MYF(MY_WME))))
+ if (!(*list= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME,
+ alloc_size * sizeof(rpl_gtid), MYF(MY_WME))))
{
res= 1;
goto end;
@@ -2122,7 +2126,7 @@ rpl_binlog_state::drop_domain(DYNAMIC_ARRAY *ids,
DBUG_ENTER("rpl_binlog_state::drop_domain");
- my_init_dynamic_array2(&domain_unique,
+ my_init_dynamic_array2(PSI_INSTRUMENT_ME, &domain_unique,
sizeof(element*), domain_unique_buffer,
sizeof(domain_unique_buffer) / sizeof(element*), 4, 0);
@@ -2247,10 +2251,10 @@ end:
slave_connection_state::slave_connection_state()
{
- my_hash_init(&hash, &my_charset_bin, 32,
+ my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32,
offsetof(entry, gtid) + offsetof(rpl_gtid, domain_id),
sizeof(uint32), NULL, my_free, HASH_UNIQUE);
- my_init_dynamic_array(&gtid_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &gtid_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0));
}
@@ -2294,7 +2298,7 @@ slave_connection_state::load(const char *slave_request, size_t len)
return 0;
for (;;)
{
- if (!(rec= (uchar *)my_malloc(sizeof(entry), MYF(MY_WME))))
+ if (!(rec= (uchar *)my_malloc(PSI_INSTRUMENT_ME, sizeof(entry), MYF(MY_WME))))
return 1;
gtid= &((entry *)rec)->gtid;
if (gtid_parser_helper(&p, end, gtid))
@@ -2397,7 +2401,7 @@ slave_connection_state::update(const rpl_gtid *in_gtid)
return 0;
}
- if (!(e= (entry *)my_malloc(sizeof(*e), MYF(MY_WME))))
+ if (!(e= (entry *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*e), MYF(MY_WME))))
return 1;
e->gtid= *in_gtid;
e->flags= 0;
@@ -2873,7 +2877,7 @@ free_hash_element(void *p)
void
gtid_waiting::init()
{
- my_hash_init(&hash, &my_charset_bin, 32,
+ my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32,
offsetof(hash_element, domain_id), sizeof(uint32), NULL,
free_hash_element, HASH_UNIQUE);
mysql_mutex_init(key_LOCK_gtid_waiting, &LOCK_gtid_waiting, 0);
@@ -2910,7 +2914,7 @@ gtid_waiting::get_entry(uint32 domain_id)
if ((e= (hash_element *)my_hash_search(&hash, (const uchar *)&domain_id, 0)))
return e;
- if (!(e= (hash_element *)my_malloc(sizeof(*e), MYF(MY_WME))))
+ if (!(e= (hash_element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*e), MYF(MY_WME))))
return NULL;
if (init_queue(&e->queue, 8, offsetof(queue_element, wait_seq_no), 0,
diff --git a/sql/rpl_gtid.h b/sql/rpl_gtid.h
index 167d7461a7e..523af4856ae 100644
--- a/sql/rpl_gtid.h
+++ b/sql/rpl_gtid.h
@@ -27,6 +27,8 @@ extern const LEX_CSTRING rpl_gtid_slave_state_table_name;
class String;
+#define GTID_MAX_STR_LENGTH (10+1+10+1+20)
+
struct rpl_gtid
{
uint32 domain_id;
diff --git a/sql/rpl_injector.cc b/sql/rpl_injector.cc
index 597a357e4e2..b0b6e30bed6 100644
--- a/sql/rpl_injector.cc
+++ b/sql/rpl_injector.cc
@@ -37,7 +37,8 @@ injector::transaction::transaction(MYSQL_BIN_LOG *log, THD *thd)
LOG_INFO log_info;
log->get_current_log(&log_info);
/* !!! binlog_pos does not follow RAII !!! */
- m_start_pos.m_file_name= my_strdup(log_info.log_file_name, MYF(0));
+ m_start_pos.m_file_name= my_strdup(key_memory_binlog_pos,
+ log_info.log_file_name, MYF(0));
m_start_pos.m_file_pos= log_info.pos;
m_thd->lex->start_transaction_opt= 0; /* for begin_trans() */
diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc
index 43a02147496..0649a8f05e8 100644
--- a/sql/rpl_mi.cc
+++ b/sql/rpl_mi.cc
@@ -58,7 +58,7 @@ Master_info::Master_info(LEX_CSTRING *connection_name_arg,
connection_name.length= cmp_connection_name.length=
connection_name_arg->length;
if ((connection_name.str= tmp= (char*)
- my_malloc(connection_name_arg->length*2+2, MYF(MY_WME))))
+ my_malloc(PSI_INSTRUMENT_ME, connection_name_arg->length*2+2, MYF(MY_WME))))
{
strmake(tmp, connection_name_arg->str, connection_name.length);
tmp+= connection_name_arg->length+1;
@@ -77,7 +77,7 @@ Master_info::Master_info(LEX_CSTRING *connection_name_arg,
parallel_mode= rpl_filter->get_parallel_mode();
- my_init_dynamic_array(&ignore_server_ids,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &ignore_server_ids,
sizeof(global_system_variables.server_id), 16, 16,
MYF(0));
bzero((char*) &file, sizeof(file));
@@ -742,7 +742,8 @@ int flush_master_info(Master_info* mi,
char* ignore_server_ids_buf;
{
ignore_server_ids_buf=
- (char *) my_malloc((sizeof(global_system_variables.server_id) * 3 + 1) *
+ (char *) my_malloc(PSI_INSTRUMENT_ME,
+ (sizeof(global_system_variables.server_id) * 3 + 1) *
(1 + mi->ignore_server_ids.elements), MYF(MY_WME));
if (!ignore_server_ids_buf)
DBUG_RETURN(1); /* error */
@@ -1098,7 +1099,7 @@ bool Master_info_index::init_all_master_info()
}
/* Initialize Master_info Hash Table */
- if (my_hash_init(&master_info_hash, system_charset_info,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &master_info_hash, system_charset_info,
MAX_REPLICATION_THREAD, 0, 0,
(my_hash_get_key) get_key_master_info,
(my_hash_free_key)free_key_master_info, HASH_UNIQUE))
@@ -1570,6 +1571,8 @@ uint any_slave_sql_running(bool already_locked)
if (!already_locked)
mysql_mutex_lock(&LOCK_active_mi);
+ else
+ mysql_mutex_assert_owner(&LOCK_active_mi);
if (unlikely(abort_loop || !master_info_index))
count= 1;
else
@@ -1739,7 +1742,8 @@ Domain_id_filter::Domain_id_filter() : m_filter(false)
{
for (int i= DO_DOMAIN_IDS; i <= IGNORE_DOMAIN_IDS; i ++)
{
- my_init_dynamic_array(&m_domain_ids[i], sizeof(ulong), 16, 16, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &m_domain_ids[i], sizeof(ulong),
+ 16, 16, MYF(0));
}
}
@@ -1902,7 +1906,7 @@ char *Domain_id_filter::as_string(enum_list_type type)
sz= (sizeof(ulong) * 3 + 1) * (1 + ids->elements);
- if (!(buf= (char *) my_malloc(sz, MYF(MY_WME))))
+ if (!(buf= (char *) my_malloc(PSI_INSTRUMENT_ME, sz, MYF(MY_WME))))
return NULL;
// Store the total number of elements followed by the individual elements.
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc
index 4313840119e..f875ab2b4a4 100644
--- a/sql/rpl_parallel.cc
+++ b/sql/rpl_parallel.cc
@@ -1557,7 +1557,7 @@ rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
to allocate, and will not be left with a half-functional thread pool.
*/
if (new_count &&
- !my_multi_malloc(MYF(MY_WME|MY_ZEROFILL),
+ !my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME|MY_ZEROFILL),
&new_list, new_count*sizeof(*new_list),
&rpt_array, new_count*sizeof(*rpt_array),
NULL))
@@ -1789,7 +1789,7 @@ rpl_parallel_thread::get_qev_common(Log_event *ev, ulonglong event_size)
mysql_mutex_assert_owner(&LOCK_rpl_thread);
if ((qev= qev_free_list))
qev_free_list= qev->next;
- else if(!(qev= (queued_event *)my_malloc(sizeof(*qev), MYF(0))))
+ else if(!(qev= (queued_event *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*qev), MYF(0))))
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*qev));
return NULL;
@@ -1952,7 +1952,7 @@ rpl_parallel_thread::get_gco(uint64 wait_count, group_commit_orderer *prev,
mysql_mutex_assert_owner(&LOCK_rpl_thread);
if ((gco= gco_free_list))
gco_free_list= gco->next_gco;
- else if(!(gco= (group_commit_orderer *)my_malloc(sizeof(*gco), MYF(0))))
+ else if(!(gco= (group_commit_orderer *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*gco), MYF(0))))
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*gco));
return NULL;
@@ -2199,7 +2199,7 @@ free_rpl_parallel_entry(void *element)
rpl_parallel::rpl_parallel() :
current(NULL), sql_thread_stopping(false)
{
- my_hash_init(&domain_hash, &my_charset_bin, 32,
+ my_hash_init(PSI_INSTRUMENT_ME, &domain_hash, &my_charset_bin, 32,
offsetof(rpl_parallel_entry, domain_id), sizeof(uint32),
NULL, free_rpl_parallel_entry, HASH_UNIQUE);
}
@@ -2233,7 +2233,7 @@ rpl_parallel::find(uint32 domain_id)
if (count == 0 || count > opt_slave_parallel_threads)
count= opt_slave_parallel_threads;
rpl_parallel_thread **p;
- if (!my_multi_malloc(MYF(MY_WME|MY_ZEROFILL),
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME|MY_ZEROFILL),
&e, sizeof(*e),
&p, count*sizeof(*p),
NULL))
diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc
index 6d55b06b497..01093d9a6da 100644
--- a/sql/rpl_rli.cc
+++ b/sql/rpl_rli.cc
@@ -73,7 +73,9 @@ Relay_log_info::Relay_log_info(bool is_slave_recovery)
key_RELAYLOG_COND_relay_log_updated,
key_RELAYLOG_COND_bin_log_updated,
key_file_relaylog,
+ key_file_relaylog_cache,
key_file_relaylog_index,
+ key_file_relaylog_index_cache,
key_RELAYLOG_COND_queue_busy,
key_LOCK_relaylog_end_pos);
#endif
@@ -1435,14 +1437,15 @@ Relay_log_info::alloc_inuse_relaylog(const char *name)
uint32 gtid_count;
rpl_gtid *gtid_list;
- if (!(ir= (inuse_relaylog *)my_malloc(sizeof(*ir), MYF(MY_WME|MY_ZEROFILL))))
+ if (!(ir= (inuse_relaylog *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*ir),
+ MYF(MY_WME|MY_ZEROFILL))))
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*ir));
return 1;
}
gtid_count= relay_log_state.count();
- if (!(gtid_list= (rpl_gtid *)my_malloc(sizeof(*gtid_list)*gtid_count,
- MYF(MY_WME))))
+ if (!(gtid_list= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(*gtid_list)*gtid_count, MYF(MY_WME))))
{
my_free(ir);
my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*gtid_list)*gtid_count);
@@ -1589,8 +1592,8 @@ scan_one_gtid_slave_pos_table(THD *thd, HASH *hash, DYNAMIC_ARRAY *array,
}
else
{
- if (!(entry= (struct gtid_pos_element *)my_malloc(sizeof(*entry),
- MYF(MY_WME))))
+ if (!(entry= (struct gtid_pos_element *)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(*entry), MYF(MY_WME))))
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*entry));
err= 1;
@@ -1831,10 +1834,11 @@ rpl_load_gtid_slave_state(THD *thd)
cb_data.table_list= NULL;
cb_data.default_entry= NULL;
- my_hash_init(&hash, &my_charset_bin, 32,
+ my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32,
offsetof(gtid_pos_element, gtid) + offsetof(rpl_gtid, domain_id),
sizeof(uint32), NULL, my_free, HASH_UNIQUE);
- if ((err= my_init_dynamic_array(&array, sizeof(gtid_pos_element), 0, 0, MYF(0))))
+ if ((err= my_init_dynamic_array(PSI_INSTRUMENT_ME, &array,
+ sizeof(gtid_pos_element), 0, 0, MYF(0))))
goto end;
array_inited= true;
diff --git a/sql/rpl_tblmap.cc b/sql/rpl_tblmap.cc
index b2da9092e3a..a230b9f6f29 100644
--- a/sql/rpl_tblmap.cc
+++ b/sql/rpl_tblmap.cc
@@ -34,6 +34,12 @@
table_mapping::table_mapping()
: m_free(0)
{
+#ifdef MYSQL_CLIENT
+ PSI_memory_key psi_key= PSI_NOT_INSTRUMENTED;
+#else
+ PSI_memory_key psi_key= key_memory_table_mapping_root;
+#endif
+
DBUG_ENTER("table_mapping::table_mapping");
/*
No "free_element" function for entries passed here, as the entries are
@@ -42,12 +48,11 @@ table_mapping::table_mapping()
Note that below we don't test if my_hash_init() succeeded. This
constructor is called at startup only.
*/
- (void) my_hash_init(&m_table_ids,&my_charset_bin,TABLE_ID_HASH_SIZE,
+ (void) my_hash_init(psi_key, &m_table_ids,&my_charset_bin,TABLE_ID_HASH_SIZE,
offsetof(entry,table_id),sizeof(ulonglong),
- 0,0,0);
+ 0,0,0);
/* We don't preallocate any block, this is consistent with m_free=0 above */
- init_alloc_root(&m_mem_root, "table_mapping",
- TABLE_ID_HASH_SIZE*sizeof(entry), 0, MYF(0));
+ init_alloc_root(psi_key, &m_mem_root, TABLE_ID_HASH_SIZE*sizeof(entry), 0, MYF(0));
DBUG_VOID_RETURN;
}
diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc
index 1e4b59844b8..7c347eba51f 100644
--- a/sql/rpl_utility.cc
+++ b/sql/rpl_utility.cc
@@ -171,6 +171,7 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
return length;
}
+PSI_memory_key key_memory_table_def_memory;
table_def::table_def(unsigned char *types, ulong size,
uchar *field_metadata, int metadata_size,
@@ -179,7 +180,7 @@ table_def::table_def(unsigned char *types, ulong size,
m_field_metadata(0), m_null_bits(0), m_flags(flags),
m_memory(NULL)
{
- m_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
+ m_memory= (uchar *)my_multi_malloc(key_memory_table_def_memory, MYF(MY_WME),
&m_type, size,
&m_field_metadata,
size * sizeof(uint16),
diff --git a/sql/rpl_utility_server.cc b/sql/rpl_utility_server.cc
index e58c9cf018e..8110b142e74 100644
--- a/sql/rpl_utility_server.cc
+++ b/sql/rpl_utility_server.cc
@@ -1123,7 +1123,7 @@ err:
Deferred_log_events::Deferred_log_events(Relay_log_info *rli) : last_added(NULL)
{
- my_init_dynamic_array(&array, sizeof(Log_event *), 32, 16, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &array, sizeof(Log_event *), 32, 16, MYF(0));
}
Deferred_log_events::~Deferred_log_events()
diff --git a/sql/scheduler.h b/sql/scheduler.h
index 676262f6454..ebf8d6e9e64 100644
--- a/sql/scheduler.h
+++ b/sql/scheduler.h
@@ -82,17 +82,6 @@ extern void post_kill_notification(THD *);
struct thd_scheduler
{
public:
- /*
- Thread instrumentation for the user job.
- This member holds the instrumentation while the user job is not run
- by a thread.
-
- Note that this member is not conditionally declared
- (ifdef HAVE_PSI_INTERFACE), because doing so will change the binary
- layout of THD, which is exposed to plugin code that may be compiled
- differently.
- */
- PSI_thread *m_psi;
void *data; /* scheduler-specific data structure */
};
diff --git a/sql/select_handler.cc b/sql/select_handler.cc
index c8f92461fd0..4d2cacd1a6e 100644
--- a/sql/select_handler.cc
+++ b/sql/select_handler.cc
@@ -77,18 +77,17 @@ bool Pushdown_select::init()
bool Pushdown_select::send_result_set_metadata()
{
- THD *thd= handler->thd;
- Protocol *protocol= thd->protocol;
DBUG_ENTER("Pushdown_select::send_result_set_metadata");
#ifdef WITH_WSREP
+ THD *thd= handler->thd;
if (WSREP(thd) && thd->wsrep_retry_query)
{
WSREP_DEBUG("skipping select metadata");
DBUG_RETURN(false);
}
#endif /* WITH_WSREP */
- if (protocol->send_result_set_metadata(&result_columns,
+ if (select->join->result->send_result_set_metadata(result_columns,
Protocol::SEND_NUM_ROWS |
Protocol::SEND_EOF))
DBUG_RETURN(true);
@@ -99,21 +98,10 @@ bool Pushdown_select::send_result_set_metadata()
bool Pushdown_select::send_data()
{
- THD *thd= handler->thd;
- Protocol *protocol= thd->protocol;
DBUG_ENTER("Pushdown_select::send_data");
- protocol->prepare_for_resend();
- if (protocol->send_result_set_row(&result_columns))
- {
- protocol->remove_last_row();
+ if (select->join->result->send_data(result_columns))
DBUG_RETURN(true);
- }
-
- thd->inc_sent_row_count(1);
-
- if (thd->vio_ok())
- DBUG_RETURN(protocol->write());
DBUG_RETURN(false);
}
@@ -121,16 +109,10 @@ bool Pushdown_select::send_data()
bool Pushdown_select::send_eof()
{
- THD *thd= handler->thd;
DBUG_ENTER("Pushdown_select::send_eof");
- /*
- Don't send EOF if we're in error condition (which implies we've already
- sent or are sending an error)
- */
- if (thd->is_error())
+ if (select->join->result->send_eof())
DBUG_RETURN(true);
- ::my_eof(thd);
DBUG_RETURN(false);
}
diff --git a/sql/semisync_master.cc b/sql/semisync_master.cc
index b239a9776a7..79634d142eb 100644
--- a/sql/semisync_master.cc
+++ b/sql/semisync_master.cc
@@ -724,8 +724,8 @@ int Repl_semi_sync_master::report_binlog_update(THD* thd, const char *log_file,
if (!(log_info= thd->semisync_info))
{
- if(!(log_info=
- (Trans_binlog_info*) my_malloc(sizeof(Trans_binlog_info), MYF(0))))
+ if(!(log_info= (Trans_binlog_info*)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(Trans_binlog_info), MYF(0))))
return 1;
thd->semisync_info= log_info;
}
diff --git a/sql/semisync_master.h b/sql/semisync_master.h
index 74f6c24c8ea..9f0acf57a60 100644
--- a/sql/semisync_master.h
+++ b/sql/semisync_master.h
@@ -231,7 +231,7 @@ private:
*/
int allocate_block()
{
- Block *block= (Block *)my_malloc(sizeof(Block), MYF(0));
+ Block *block= (Block *)my_malloc(PSI_INSTRUMENT_ME, sizeof(Block), MYF(0));
if (block)
{
block->next= NULL;
diff --git a/sql/semisync_master_ack_receiver.cc b/sql/semisync_master_ack_receiver.cc
index e189fc5f631..6340b4bd661 100644
--- a/sql/semisync_master_ack_receiver.cc
+++ b/sql/semisync_master_ack_receiver.cc
@@ -164,7 +164,7 @@ void Ack_receiver::remove_slave(THD *thd)
inline void Ack_receiver::set_stage_info(const PSI_stage_info &stage)
{
- MYSQL_SET_STAGE(stage.m_key, __FILE__, __LINE__);
+ (void)MYSQL_SET_STAGE(stage.m_key, __FILE__, __LINE__);
}
inline void Ack_receiver::wait_for_slave_connection()
diff --git a/sql/session_tracker.cc b/sql/session_tracker.cc
index 33ee6141658..e1c2ec37644 100644
--- a/sql/session_tracker.cc
+++ b/sql/session_tracker.cc
@@ -72,7 +72,8 @@ void Session_sysvars_tracker::vars_list::copy(vars_list* from, THD *thd)
bool Session_sysvars_tracker::vars_list::insert(const sys_var *svar)
{
sysvar_node_st *node;
- if (!(node= (sysvar_node_st *) my_malloc(sizeof(sysvar_node_st),
+ if (!(node= (sysvar_node_st *) my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(sysvar_node_st),
MYF(MY_WME |
(mysqld_server_initialized ?
MY_THREAD_SPECIFIC : 0)))))
@@ -326,7 +327,8 @@ void Session_sysvars_tracker::init(THD *thd)
global_system_variables.session_track_system_variables);
DBUG_ASSERT(global_system_variables.session_track_system_variables);
thd->variables.session_track_system_variables=
- my_strdup(global_system_variables.session_track_system_variables,
+ my_strdup(PSI_INSTRUMENT_ME,
+ global_system_variables.session_track_system_variables,
MYF(MY_WME | MY_THREAD_SPECIFIC));
}
@@ -383,11 +385,11 @@ bool Session_sysvars_tracker::update(THD *thd, set_var *var)
size_t length= 1;
if (var->save_result.string_value.str)
- copy= my_memdup(var->save_result.string_value.str,
+ copy= my_memdup(PSI_INSTRUMENT_ME, var->save_result.string_value.str,
(length= var->save_result.string_value.length + 1),
MYF(MY_WME | MY_THREAD_SPECIFIC));
else
- copy= my_strdup("", MYF(MY_WME | MY_THREAD_SPECIFIC));
+ copy= my_strdup(PSI_INSTRUMENT_ME, "", MYF(MY_WME | MY_THREAD_SPECIFIC));
if (!copy)
return true;
diff --git a/sql/session_tracker.h b/sql/session_tracker.h
index b91e588a34e..7db1feb1b1a 100644
--- a/sql/session_tracker.h
+++ b/sql/session_tracker.h
@@ -142,10 +142,9 @@ class Session_sysvars_tracker: public State_tracker
bool track_all;
void init()
{
- my_hash_init(&m_registered_sysvars, &my_charset_bin, 0, 0, 0,
- (my_hash_get_key) sysvars_get_key, my_free,
- HASH_UNIQUE | (mysqld_server_initialized ?
- HASH_THREAD_SPECIFIC : 0));
+ my_hash_init(PSI_INSTRUMENT_ME, &m_registered_sysvars, &my_charset_bin,
+ 0, 0, 0, (my_hash_get_key) sysvars_get_key, my_free,
+ HASH_UNIQUE | (mysqld_server_initialized ? HASH_THREAD_SPECIFIC : 0));
}
void free_hash()
{
@@ -401,10 +400,9 @@ class User_variables_tracker: public State_tracker
Hash_set<const user_var_entry> m_changed_user_variables;
public:
User_variables_tracker():
- m_changed_user_variables(&my_charset_bin, 0, 0,
- sizeof(const user_var_entry*), 0, 0,
- HASH_UNIQUE | (mysqld_server_initialized ?
- HASH_THREAD_SPECIFIC : 0)) {}
+ m_changed_user_variables(PSI_INSTRUMENT_ME, &my_charset_bin, 0, 0,
+ sizeof(const user_var_entry*), 0, 0, HASH_UNIQUE |
+ mysqld_server_initialized ? HASH_THREAD_SPECIFIC : 0) {}
bool update(THD *thd, set_var *var);
bool store(THD *thd, String *buf);
void mark_as_changed(THD *thd, const user_var_entry *var)
diff --git a/sql/set_var.cc b/sql/set_var.cc
index fac409f8ef9..551b92012d1 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -33,7 +33,6 @@
// date_time_format_make
#include "derror.h"
#include "tztime.h" // my_tz_find, my_tz_SYSTEM, struct Time_zone
-#include "sql_acl.h" // SUPER_ACL
#include "sql_select.h" // free_underlaid_joins
#include "sql_i_s.h"
#include "sql_view.h" // updatable_views_with_limit_typelib
@@ -43,6 +42,7 @@
static HASH system_variable_hash;
static PolyLock_mutex PLock_global_system_variables(&LOCK_global_system_variables);
+static ulonglong system_variable_hash_version= 0;
/**
Return variable name and length for hashing of variables.
@@ -64,7 +64,7 @@ int sys_var_init()
/* Must be already initialized. */
DBUG_ASSERT(system_charset_info != NULL);
- if (my_hash_init(&system_variable_hash, system_charset_info, 700, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &system_variable_hash, system_charset_info, 700, 0,
0, (my_hash_get_key) get_sys_var_length, 0, HASH_UNIQUE))
goto error;
@@ -583,6 +583,8 @@ int mysql_add_sys_var_chain(sys_var *first)
goto error;
}
}
+ /* Update system_variable_hash version. */
+ system_variable_hash_version++;
return 0;
error:
@@ -613,6 +615,8 @@ int mysql_del_sys_var_chain(sys_var *first)
result|= my_hash_delete(&system_variable_hash, (uchar*) var);
mysql_prlock_unlock(&LOCK_system_variables_hash);
+ /* Update system_variable_hash version. */
+ system_variable_hash_version++;
return result;
}
@@ -623,6 +627,16 @@ static int show_cmp(SHOW_VAR *a, SHOW_VAR *b)
}
+/*
+ Number of records in the system_variable_hash.
+ Requires lock on LOCK_system_variables_hash.
+*/
+ulong get_system_variable_hash_records(void)
+{
+ return system_variable_hash.records;
+}
+
+
/**
Constructs an array of system variables for display to the user.
@@ -773,7 +787,8 @@ int set_var::check(THD *thd)
my_error(err, MYF(0), var->name.str);
return -1;
}
- if ((type == OPT_GLOBAL && check_global_access(thd, SUPER_ACL)))
+ if (type == OPT_GLOBAL &&
+ check_global_access(thd, PRIV_SET_GLOBAL_SYSTEM_VARIABLE))
return 1;
/* value is a NULL pointer if we are using SET ... = DEFAULT */
if (!value)
@@ -810,7 +825,8 @@ int set_var::light_check(THD *thd)
my_error(err, MYF(0), var->name.str);
return -1;
}
- if (type == OPT_GLOBAL && check_global_access(thd, SUPER_ACL))
+ if (type == OPT_GLOBAL &&
+ check_global_access(thd, PRIV_SET_GLOBAL_SYSTEM_VARIABLE))
return 1;
if (value && value->fix_fields_if_needed_for_scalar(thd, &value))
@@ -1377,7 +1393,7 @@ resolve_engine_list(THD *thd, const char *str_arg, size_t str_arg_len,
if (temp_copy)
res= (plugin_ref *)thd->calloc((count+1)*sizeof(*res));
else
- res= (plugin_ref *)my_malloc((count+1)*sizeof(*res), MYF(MY_ZEROFILL|MY_WME));
+ res= (plugin_ref *)my_malloc(PSI_INSTRUMENT_ME, (count+1)*sizeof(*res), MYF(MY_ZEROFILL|MY_WME));
if (!res)
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)((count+1)*sizeof(*res)));
@@ -1428,7 +1444,7 @@ copy_engine_list(plugin_ref *list)
for (p= list, count= 0; *p; ++p, ++count)
;
- p= (plugin_ref *)my_malloc((count+1)*sizeof(*p), MYF(0));
+ p= (plugin_ref *)my_malloc(PSI_INSTRUMENT_ME, (count+1)*sizeof(*p), MYF(0));
if (!p)
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)((count+1)*sizeof(*p)));
@@ -1503,3 +1519,13 @@ pretty_print_engine_list(THD *thd, plugin_ref *list)
*pos= '\0';
return buf;
}
+
+/*
+ Current version of the system_variable_hash.
+ Requires lock on LOCK_system_variables_hash.
+*/
+ulonglong get_system_variable_hash_version(void)
+{
+ return system_variable_hash_version;
+}
+
diff --git a/sql/set_var.h b/sql/set_var.h
index c4a29968818..075339c4f38 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -404,6 +404,8 @@ extern SHOW_COMP_OPTION have_openssl;
/*
Prototypes for helper functions
*/
+ulong get_system_variable_hash_records(void);
+ulonglong get_system_variable_hash_version(void);
SHOW_VAR* enumerate_sys_vars(THD *thd, bool sorted, enum enum_var_type type);
int fill_sysvars(THD *thd, TABLE_LIST *tables, COND *cond);
diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt
index aa740ba5248..afa9d72f2d8 100644
--- a/sql/share/errmsg-utf8.txt
+++ b/sql/share/errmsg-utf8.txt
@@ -7944,6 +7944,9 @@ ER_WARN_HISTORY_ROW_START_TIME
ER_PART_STARTS_BEYOND_INTERVAL
eng "%`s: STARTS is later than query time, first history partition may exceed INTERVAL value"
ER_GALERA_REPLICATION_NOT_SUPPORTED
- eng "DDL-statement is forbidden as table storage engine does not support Galera replication"
+ eng "DDL-statement is forbidden as table storage engine does not support Galera replication"
+ER_LOAD_INFILE_CAPABILITY_DISABLED
+ eng "The used command is not allowed because the MariaDB server or client has disabled the local infile capability"
+ rum "Comanda folosită nu este permisă deoarece clientul sau serverul MariaDB a dezactivat această capabilitate"
ER_NO_SECURE_TRANSPORTS_CONFIGURED
eng "No secure transports are configured, unable to set --require_secure_transport=ON"
diff --git a/sql/signal_handler.cc b/sql/signal_handler.cc
index 51b9d7a2c51..cbf58bb6e57 100644
--- a/sql/signal_handler.cc
+++ b/sql/signal_handler.cc
@@ -42,9 +42,6 @@
static volatile sig_atomic_t segfaulted= 0;
extern ulong max_used_connections;
extern volatile sig_atomic_t calling_initgroups;
-#ifdef HAVE_NPTL
-extern volatile sig_atomic_t ld_assume_kernel_is_set;
-#endif
extern const char *optimizer_switch_names[];
@@ -296,21 +293,6 @@ extern "C" sig_handler handle_fatal_signal(int sig)
}
#endif
-#ifdef HAVE_NPTL
- if (thd_lib_detected == THD_LIB_LT && !ld_assume_kernel_is_set)
- {
- my_safe_printf_stderr("%s",
- "You are running a statically-linked LinuxThreads binary on an NPTL\n"
- "system. This can result in crashes on some distributions due to "
- "LT/NPTL conflicts.\n"
- "You should either build a dynamically-linked binary, "
- "or force LinuxThreads\n"
- "to be used with the LD_ASSUME_KERNEL environment variable.\n"
- "Please consult the documentation for your distribution "
- "on how to do that.\n");
- }
-#endif
-
if (locked_in_memory)
{
my_safe_printf_stderr("%s", "\n"
diff --git a/sql/slave.cc b/sql/slave.cc
index 87c1cf6cb77..aba10b8bd6e 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -57,6 +57,9 @@
#include "wsrep_trans_observer.h"
#endif
+class Master_info_index;
+Master_info_index *master_info_index;
+
#ifdef HAVE_REPLICATION
#include "rpl_tblmap.h"
@@ -81,7 +84,6 @@ char slave_transaction_retry_error_names[SHOW_VAR_FUNC_BUFF_SIZE];
char* slave_load_tmpdir = 0;
Master_info *active_mi= 0;
-Master_info_index *master_info_index;
my_bool replicate_same_server_id;
ulonglong relay_log_space_limit = 0;
ulonglong opt_read_binlog_speed_limit = 0;
@@ -488,6 +490,7 @@ handle_slave_background(void *arg __attribute__((unused)))
#ifdef WITH_WSREP
thd->variables.wsrep_on= 0;
#endif
+ thd->set_psi(PSI_CALL_get_thread());
thd_proc_info(thd, "Loading slave GTID position from table");
if (rpl_load_gtid_slave_state(thd))
@@ -583,7 +586,7 @@ slave_background_kill_request(THD *to_kill)
if (to_kill->rgi_slave->killed_for_retry)
return; // Already deadlock killed.
slave_background_kill_t *p=
- (slave_background_kill_t *)my_malloc(sizeof(*p), MYF(MY_WME));
+ (slave_background_kill_t *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*p), MYF(MY_WME));
if (p)
{
p->to_kill= to_kill;
@@ -611,7 +614,7 @@ slave_background_gtid_pos_create_request(
if (table_entry->state != rpl_slave_state::GTID_POS_AUTO_CREATE)
return;
- p= (slave_background_gtid_pos_create_t *)my_malloc(sizeof(*p), MYF(MY_WME));
+ p= (slave_background_gtid_pos_create_t *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*p), MYF(MY_WME));
if (!p)
return;
mysql_mutex_lock(&rpl_global_gtid_slave_state->LOCK_slave_state);
@@ -1662,7 +1665,7 @@ bool Sql_cmd_show_slave_status::execute(THD *thd)
bool res= true;
/* Accept one of two privileges */
- if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_SLAVE_STATUS))
goto error;
if (is_show_all_slaves_stat())
{
@@ -1809,7 +1812,8 @@ int init_dynarray_intvar_from_file(DYNAMIC_ARRAY* arr, IO_CACHE* f)
(decimal size + space) - 1 + `\n' + '\0'
*/
size_t max_size= (1 + num_items) * (sizeof(long)*3 + 1) + 1;
- buf_act= (char*) my_malloc(max_size, MYF(MY_WME));
+ buf_act= (char*) my_malloc(key_memory_Rpl_info_file_buffer, max_size,
+ MYF(MY_WME));
memcpy(buf_act, buf, read_size);
snd_size= my_b_gets(f, buf_act + read_size, max_size - read_size);
if (snd_size == 0 ||
@@ -4727,6 +4731,8 @@ pthread_handler_t handle_slave_io(void *arg)
THD_CHECK_SENTRY(thd);
mi->io_thd = thd;
+ thd->set_psi(PSI_CALL_get_thread());
+
pthread_detach_this_thread();
thd->thread_stack= (char*) &thd; // remember where our stack is
mi->clear_error();
@@ -5365,6 +5371,8 @@ pthread_handler_t handle_slave_sql(void *arg)
executing SQL queries too.
*/
serial_rgi->thd= rli->sql_driver_thd= thd;
+
+ thd->set_psi(PSI_CALL_get_thread());
/* Inform waiting threads that slave has started */
rli->slave_run_id++;
@@ -6035,7 +6043,8 @@ static int queue_binlog_ver_1_event(Master_info *mi, const char *buf,
*/
if ((uchar)buf[EVENT_TYPE_OFFSET] == LOAD_EVENT)
{
- if (unlikely(!(tmp_buf=(char*)my_malloc(event_len+1,MYF(MY_WME)))))
+ if (unlikely(!(tmp_buf=(char*)my_malloc(key_memory_binlog_ver_1_event,
+ event_len+1,MYF(MY_WME)))))
{
mi->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, NULL,
ER(ER_SLAVE_FATAL_ERROR), "Memory allocation failed");
diff --git a/sql/sp.cc b/sql/sp.cc
index ae413fcf615..157ddeb63c6 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -28,12 +28,12 @@
// mysql_change_db, check_db_dir_existence,
// load_db_opt_by_name
#include "sql_table.h" // write_bin_log
-#include "sql_acl.h" // SUPER_ACL
#include "sp_head.h"
#include "sp_cache.h"
#include "lock.h" // lock_object_name
#include <my_user.h>
+#include "mysql/psi/mysql_sp.h"
sp_cache **Sp_handler_procedure::get_cache(THD *thd) const
{
@@ -718,7 +718,7 @@ Sp_handler::db_find_routine(THD *thd,
table->field[MYSQL_PROC_FIELD_PARAM_LIST]->val_str_nopad(thd->mem_root,
&params);
- if (type() != TYPE_ENUM_FUNCTION)
+ if (type() != SP_TYPE_FUNCTION)
returns= empty_clex_str;
else if (table->field[MYSQL_PROC_FIELD_RETURNS]->val_str_nopad(thd->mem_root,
&returns))
@@ -866,6 +866,8 @@ static sp_head *sp_compile(THD *thd, String *defstr, sql_mode_t sql_mode,
thd->spcont= old_spcont;
thd->variables.sql_mode= old_sql_mode;
thd->variables.select_limit= old_select_limit;
+ if (sp != NULL)
+ sp->init_psi_share();
return sp;
}
@@ -1001,7 +1003,7 @@ Sp_handler::db_load_routine(THD *thd, const Database_qualified_name *name,
(*sphp)->set_creation_ctx(creation_ctx);
(*sphp)->optimize();
- if (type() == TYPE_ENUM_PACKAGE_BODY)
+ if (type() == SP_TYPE_PACKAGE_BODY)
{
sp_package *package= (*sphp)->get_package();
List_iterator<LEX> it(package->m_routine_implementations);
@@ -1104,6 +1106,9 @@ Sp_handler::sp_drop_routine_internal(THD *thd,
DBUG_ASSERT(spc);
if ((sp= sp_cache_lookup(spc, name)))
sp_cache_flush_obsolete(spc, &sp);
+ /* Drop statistics for this stored program from performance schema. */
+ MYSQL_DROP_SP(type(), name->m_db.str, static_cast<uint>(name->m_db.length),
+ name->m_name.str, static_cast<uint>(name->m_name.length));
DBUG_RETURN(SP_OK);
}
@@ -1231,17 +1236,17 @@ Sp_handler::sp_create_routine(THD *thd, const sp_head *sp) const
if (lex->create_info.or_replace())
{
switch (type()) {
- case TYPE_ENUM_PACKAGE:
+ case SP_TYPE_PACKAGE:
// Drop together with its PACKAGE BODY mysql.proc record
ret= sp_handler_package_spec.sp_find_and_drop_routine(thd, table, sp);
break;
- case TYPE_ENUM_PACKAGE_BODY:
- case TYPE_ENUM_FUNCTION:
- case TYPE_ENUM_PROCEDURE:
+ case SP_TYPE_PACKAGE_BODY:
+ case SP_TYPE_FUNCTION:
+ case SP_TYPE_PROCEDURE:
ret= sp_drop_routine_internal(thd, sp, table);
break;
- case TYPE_ENUM_TRIGGER:
- case TYPE_ENUM_PROXY:
+ case SP_TYPE_TRIGGER:
+ case SP_TYPE_EVENT:
DBUG_ASSERT(0);
ret= SP_OK;
}
@@ -1258,7 +1263,7 @@ Sp_handler::sp_create_routine(THD *thd, const sp_head *sp) const
ret= FALSE;
// Setting retstr as it is used for logging.
- if (type() == TYPE_ENUM_FUNCTION)
+ if (type() == SP_TYPE_FUNCTION)
{
sp_returns_type(thd, retstr, sp);
returns= retstr.lex_cstring();
@@ -1341,7 +1346,7 @@ Sp_handler::sp_create_routine(THD *thd, const sp_head *sp) const
table->field[MYSQL_PROC_FIELD_PARAM_LIST]->
store(sp->m_params, system_charset_info);
- if (type() == TYPE_ENUM_FUNCTION)
+ if (type() == SP_TYPE_FUNCTION)
{
sp_returns_type(thd, retstr, sp);
returns= retstr.lex_cstring();
@@ -1373,7 +1378,7 @@ Sp_handler::sp_create_routine(THD *thd, const sp_head *sp) const
store(sp->comment(), system_charset_info);
}
- if (type() == TYPE_ENUM_FUNCTION &&
+ if (type() == SP_TYPE_FUNCTION &&
!trust_function_creators && mysql_bin_log.is_open())
{
if (!sp->detistic())
@@ -1392,7 +1397,7 @@ Sp_handler::sp_create_routine(THD *thd, const sp_head *sp) const
goto done;
}
}
- if (!(thd->security_ctx->master_access & SUPER_ACL))
+ if (!(thd->security_ctx->master_access & PRIV_LOG_BIN_TRUSTED_SP_CREATOR))
{
my_error(ER_BINLOG_CREATE_ROUTINE_NEED_SUPER,MYF(0));
goto done;
@@ -1625,7 +1630,7 @@ Sp_handler::sp_update_routine(THD *thd, const Database_qualified_name *name,
if ((ret= db_find_routine_aux(thd, name, table)) == SP_OK)
{
- if (type() == TYPE_ENUM_FUNCTION && ! trust_function_creators &&
+ if (type() == SP_TYPE_FUNCTION && ! trust_function_creators &&
mysql_bin_log.is_open() &&
(chistics->daccess == SP_CONTAINS_SQL ||
chistics->daccess == SP_MODIFIES_SQL_DATA))
@@ -1771,11 +1776,11 @@ bool lock_db_routines(THD *thd, const char *db)
longlong sp_type= table->field[MYSQL_PROC_MYSQL_TYPE]->val_int();
MDL_request *mdl_request= new (thd->mem_root) MDL_request;
- const Sp_handler *sph= Sp_handler::handler((stored_procedure_type)
+ const Sp_handler *sph= Sp_handler::handler((enum_sp_type)
sp_type);
if (!sph)
sph= &sp_handler_procedure;
- mdl_request->init(sph->get_mdl_type(), db, sp_name,
+ MDL_REQUEST_INIT(mdl_request, sph->get_mdl_type(), db, sp_name,
MDL_EXCLUSIVE, MDL_TRANSACTION);
mdl_requests.push_front(mdl_request);
} while (! (nxtres= table->file->ha_index_next_same(table->record[0], keybuf, key_len)));
@@ -1814,6 +1819,8 @@ sp_drop_db_routines(THD *thd, const char *db)
uint key_len;
MDL_savepoint mdl_savepoint= thd->mdl_context.mdl_savepoint();
uchar keybuf[MAX_KEY_LENGTH];
+ size_t db_length= strlen(db);
+ Sql_mode_instant_remove smir(thd, MODE_PAD_CHAR_TO_FULL_LENGTH); // see below
DBUG_ENTER("sp_drop_db_routines");
DBUG_PRINT("enter", ("db: %s", db));
@@ -1821,7 +1828,7 @@ sp_drop_db_routines(THD *thd, const char *db)
if (!(table= open_proc_table_for_update(thd)))
goto err;
- table->field[MYSQL_PROC_FIELD_DB]->store(db, strlen(db), system_charset_info);
+ table->field[MYSQL_PROC_FIELD_DB]->store(db, db_length, system_charset_info);
key_len= table->key_info->key_part[0].store_length;
table->field[MYSQL_PROC_FIELD_DB]->get_key_image(keybuf, key_len, Field::itRAW);
@@ -1840,7 +1847,18 @@ sp_drop_db_routines(THD *thd, const char *db)
do
{
if (! table->file->ha_delete_row(table->record[0]))
+ {
deleted= TRUE; /* We deleted something */
+#ifdef HAVE_PSI_SP_INTERFACE
+ String buf;
+ // the following assumes MODE_PAD_CHAR_TO_FULL_LENGTH being *unset*
+ String *name= table->field[MYSQL_PROC_FIELD_NAME]->val_str(&buf);
+
+ enum_sp_type sp_type= (enum_sp_type) table->field[MYSQL_PROC_MYSQL_TYPE]->ptr[0];
+ /* Drop statistics for this stored program from performance schema. */
+ MYSQL_DROP_SP(sp_type, db, static_cast<uint>(db_length), name->ptr(), name->length());
+#endif
+ }
else
{
ret= SP_DELETE_ROW_FAILED;
@@ -2014,7 +2032,7 @@ Sp_handler::sp_clone_and_link_routine(THD *thd,
DBUG_RETURN(0);
}
- if (type() == TYPE_ENUM_FUNCTION)
+ if (type() == SP_TYPE_FUNCTION)
{
sp_returns_type(thd, retstr, sp);
returns= retstr.lex_cstring();
@@ -2282,7 +2300,7 @@ bool sp_add_used_routine(Query_tables_list *prelocking_ctx, Query_arena *arena,
const Sp_handler *handler,
TABLE_LIST *belong_to_view)
{
- my_hash_init_opt(&prelocking_ctx->sroutines, system_charset_info,
+ my_hash_init_opt(PSI_INSTRUMENT_ME, &prelocking_ctx->sroutines, system_charset_info,
Query_tables_list::START_SROUTINES_HASH_SIZE,
0, 0, sp_sroutine_key, 0, 0);
@@ -2292,7 +2310,7 @@ bool sp_add_used_routine(Query_tables_list *prelocking_ctx, Query_arena *arena,
(Sroutine_hash_entry *)arena->alloc(sizeof(Sroutine_hash_entry));
if (unlikely(!rn)) // OOM. Error will be reported using fatal_error().
return FALSE;
- rn->mdl_request.init(key, MDL_SHARED, MDL_TRANSACTION);
+ MDL_REQUEST_INIT_BY_KEY(&rn->mdl_request, key, MDL_SHARED, MDL_TRANSACTION);
if (my_hash_insert(&prelocking_ctx->sroutines, (uchar *)rn))
return FALSE;
prelocking_ctx->sroutines_list.link_in_list(rn, &rn->next);
@@ -2362,7 +2380,7 @@ is_package_public_routine(THD *thd,
const LEX_CSTRING &db,
const LEX_CSTRING &package,
const LEX_CSTRING &routine,
- stored_procedure_type type)
+ enum_sp_type type)
{
sp_head *sp= NULL;
Database_qualified_name tmp(db, package);
@@ -2396,7 +2414,7 @@ is_package_public_routine_quick(THD *thd,
const LEX_CSTRING &db,
const LEX_CSTRING &pkgname,
const LEX_CSTRING &name,
- stored_procedure_type type)
+ enum_sp_type type)
{
Database_qualified_name tmp(db, pkgname);
sp_head *sp= sp_cache_lookup(&thd->sp_package_spec_cache, &tmp);
@@ -2415,7 +2433,7 @@ static bool
is_package_body_routine(THD *thd, sp_package *pkg,
const LEX_CSTRING &name1,
const LEX_CSTRING &name2,
- stored_procedure_type type)
+ enum_sp_type type)
{
return Sp_handler::eq_routine_name(pkg->m_name, name1) &&
(pkg->m_routine_declarations.find(name2, type) ||
@@ -2843,7 +2861,7 @@ Sp_handler::sp_cache_package_routine(THD *thd,
bool lookup_only, sp_head **sp) const
{
DBUG_ENTER("sp_cache_package_routine");
- DBUG_ASSERT(type() == TYPE_ENUM_FUNCTION || type() == TYPE_ENUM_PROCEDURE);
+ DBUG_ASSERT(type() == SP_TYPE_FUNCTION || type() == SP_TYPE_PROCEDURE);
sp_name pkgname(&name->m_db, &pkgname_cstr, false);
sp_head *ph= NULL;
int ret= sp_handler_package_body.sp_cache_routine(thd, &pkgname,
@@ -2942,7 +2960,7 @@ Sp_handler::show_create_sp(THD *thd, String *buf,
buf->append('(');
buf->append(&params);
buf->append(')');
- if (type() == TYPE_ENUM_FUNCTION)
+ if (type() == SP_TYPE_FUNCTION)
{
if (sql_mode & MODE_ORACLE)
buf->append(STRING_WITH_LEN(" RETURN "));
diff --git a/sql/sp.h b/sql/sp.h
index 69dde53b34c..72485632261 100644
--- a/sql/sp.h
+++ b/sql/sp.h
@@ -47,18 +47,18 @@ template <typename T> class SQL_I_List;
/*
Values for the type enum. This reflects the order of the enum declaration
in the CREATE TABLE command.
+ See also storage/perfschema/my_thread.h
*/
-enum stored_procedure_type
+enum enum_sp_type
{
- TYPE_ENUM_FUNCTION=1,
- TYPE_ENUM_PROCEDURE=2,
- TYPE_ENUM_PACKAGE=3,
- TYPE_ENUM_PACKAGE_BODY=4,
- TYPE_ENUM_TRIGGER=5,
- TYPE_ENUM_PROXY=6
+ SP_TYPE_FUNCTION=1,
+ SP_TYPE_PROCEDURE=2,
+ SP_TYPE_PACKAGE=3,
+ SP_TYPE_PACKAGE_BODY=4,
+ SP_TYPE_TRIGGER=5,
+ SP_TYPE_EVENT=6,
};
-
class Sp_handler
{
bool sp_resolve_package_routine_explicit(THD *thd,
@@ -121,13 +121,13 @@ public: // TODO: make it private or protected
public:
virtual ~Sp_handler() {}
static const Sp_handler *handler(enum enum_sql_command cmd);
- static const Sp_handler *handler(stored_procedure_type type);
+ static const Sp_handler *handler(enum_sp_type type);
static const Sp_handler *handler(MDL_key::enum_mdl_namespace ns);
/*
Return a handler only those SP objects that store
definitions in the mysql.proc system table
*/
- static const Sp_handler *handler_mysql_proc(stored_procedure_type type)
+ static const Sp_handler *handler_mysql_proc(enum_sp_type type)
{
const Sp_handler *sph= handler(type);
return sph ? sph->sp_handler_mysql_proc() : NULL;
@@ -154,7 +154,7 @@ public:
{
return this;
}
- virtual stored_procedure_type type() const= 0;
+ virtual enum_sp_type type() const= 0;
virtual LEX_CSTRING type_lex_cstring() const= 0;
virtual LEX_CSTRING empty_body_lex_cstring(sql_mode_t mode) const
{
@@ -249,7 +249,7 @@ public:
class Sp_handler_procedure: public Sp_handler
{
public:
- stored_procedure_type type() const { return TYPE_ENUM_PROCEDURE; }
+ enum_sp_type type() const { return SP_TYPE_PROCEDURE; }
LEX_CSTRING type_lex_cstring() const
{
static LEX_CSTRING m_type_str= { STRING_WITH_LEN("PROCEDURE")};
@@ -299,7 +299,7 @@ public:
class Sp_handler_function: public Sp_handler
{
public:
- stored_procedure_type type() const { return TYPE_ENUM_FUNCTION; }
+ enum_sp_type type() const { return SP_TYPE_FUNCTION; }
LEX_CSTRING type_lex_cstring() const
{
static LEX_CSTRING m_type_str= { STRING_WITH_LEN("FUNCTION")};
@@ -368,7 +368,7 @@ public: // TODO: make it private or protected
const Database_qualified_name *name)
const;
public:
- stored_procedure_type type() const { return TYPE_ENUM_PACKAGE; }
+ enum_sp_type type() const { return SP_TYPE_PACKAGE; }
LEX_CSTRING type_lex_cstring() const
{
static LEX_CSTRING m_type_str= {STRING_WITH_LEN("PACKAGE")};
@@ -401,7 +401,7 @@ public:
class Sp_handler_package_body: public Sp_handler_package
{
public:
- stored_procedure_type type() const { return TYPE_ENUM_PACKAGE_BODY; }
+ enum_sp_type type() const { return SP_TYPE_PACKAGE_BODY; }
LEX_CSTRING type_lex_cstring() const
{
static LEX_CSTRING m_type_str= {STRING_WITH_LEN("PACKAGE BODY")};
@@ -434,7 +434,7 @@ public:
class Sp_handler_trigger: public Sp_handler
{
public:
- stored_procedure_type type() const { return TYPE_ENUM_TRIGGER; }
+ enum_sp_type type() const { return SP_TYPE_TRIGGER; }
LEX_CSTRING type_lex_cstring() const
{
static LEX_CSTRING m_type_str= { STRING_WITH_LEN("TRIGGER")};
@@ -493,20 +493,20 @@ inline const Sp_handler *Sp_handler::handler(enum_sql_command cmd)
}
-inline const Sp_handler *Sp_handler::handler(stored_procedure_type type)
+inline const Sp_handler *Sp_handler::handler(enum_sp_type type)
{
switch (type) {
- case TYPE_ENUM_PROCEDURE:
+ case SP_TYPE_PROCEDURE:
return &sp_handler_procedure;
- case TYPE_ENUM_FUNCTION:
+ case SP_TYPE_FUNCTION:
return &sp_handler_function;
- case TYPE_ENUM_PACKAGE:
+ case SP_TYPE_PACKAGE:
return &sp_handler_package_spec;
- case TYPE_ENUM_PACKAGE_BODY:
+ case SP_TYPE_PACKAGE_BODY:
return &sp_handler_package_body;
- case TYPE_ENUM_TRIGGER:
+ case SP_TYPE_TRIGGER:
return &sp_handler_trigger;
- case TYPE_ENUM_PROXY:
+ case SP_TYPE_EVENT:
break;
}
return NULL;
diff --git a/sql/sp_cache.cc b/sql/sp_cache.cc
index e4ffbdcb155..a8659cc121f 100644
--- a/sql/sp_cache.cc
+++ b/sql/sp_cache.cc
@@ -302,7 +302,7 @@ sp_cache::~sp_cache()
void
sp_cache::init()
{
- my_hash_init(&m_hashtable, system_charset_info, 0, 0, 0,
+ my_hash_init(key_memory_sp_cache, &m_hashtable, system_charset_info, 0, 0, 0,
hash_get_key_for_sp_head, hash_free_sp_head, 0);
}
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index c15465f105e..b63cf79dd7e 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -23,7 +23,6 @@
#include "probes_mysql.h"
#include "sql_show.h" // append_identifier
#include "sql_db.h" // mysql_opt_change_db, mysql_change_db
-#include "sql_acl.h" // *_ACL
#include "sql_array.h" // Dynamic_array
#include "log_event.h" // Query_log_event
#include "sql_derived.h" // mysql_handle_derived
@@ -56,8 +55,51 @@
#define SP_INSTR_UINT_MAXLEN 8
#define SP_STMT_PRINT_MAXLEN 40
-
#include <my_user.h>
+#include "mysql/psi/mysql_statement.h"
+#include "mysql/psi/mysql_sp.h"
+
+#ifdef HAVE_PSI_INTERFACE
+void init_sp_psi_keys()
+{
+ const char *category= "sp";
+ const int num __attribute__((unused)) = __LINE__ + 3;
+
+ PSI_server->register_statement(category, & sp_instr_stmt::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_set::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_set_trigger_field::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_jump::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_jump_if_not::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_freturn::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_preturn::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_hpush_jump::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_hpop::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_hreturn::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_cpush::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_cpop::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_copen::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_cclose::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_cfetch::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_agg_cfetch::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_cursor_copy_struct::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_error::psi_info, 1);
+ PSI_server->register_statement(category, & sp_instr_set_case_expr::psi_info, 1);
+
+ DBUG_ASSERT(SP_PSI_STATEMENT_INFO_COUNT == __LINE__ - num);
+}
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+#define MYSQL_RUN_SP(SP,CODE) \
+ do { \
+ PSI_sp_locker_state psi_state; \
+ PSI_sp_locker *locker= MYSQL_START_SP(&psi_state, (SP)->m_sp_share); \
+ CODE; \
+ MYSQL_END_SP(locker); \
+ } while(0)
+#else
+#define MYSQL_RUN_SP(SP, CODE) do { CODE; } while(0)
+#endif
extern "C" uchar *sp_table_key(const uchar *ptr, size_t *plen, my_bool first);
@@ -188,7 +230,7 @@ sp_get_flags_for_command(LEX *lex)
case SQLCOM_SHOW_ENGINE_MUTEX:
case SQLCOM_SHOW_EVENTS:
case SQLCOM_SHOW_KEYS:
- case SQLCOM_SHOW_MASTER_STAT:
+ case SQLCOM_SHOW_BINLOG_STAT:
case SQLCOM_SHOW_OPEN_TABLES:
case SQLCOM_SHOW_PRIVILEGES:
case SQLCOM_SHOW_PROCESSLIST:
@@ -455,8 +497,8 @@ sp_head *sp_head::create(sp_package *parent, const Sp_handler *handler,
enum_sp_aggregate_type agg_type)
{
MEM_ROOT own_root;
- init_sql_alloc(&own_root, "sp_head", MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC,
- MYF(0));
+ init_sql_alloc(key_memory_sp_head_main_root, &own_root, MEM_ROOT_BLOCK_SIZE,
+ MEM_ROOT_PREALLOC, MYF(0));
sp_head *sp;
if (!(sp= new (&own_root) sp_head(&own_root, parent, handler, agg_type)))
free_root(&own_root, MYF(0));
@@ -537,11 +579,12 @@ sp_head::sp_head(MEM_ROOT *mem_root_arg, sp_package *parent,
m_backpatch_goto.empty();
m_cont_backpatch.empty();
m_lex.empty();
- my_init_dynamic_array(&m_instr, sizeof(sp_instr *), 16, 8, MYF(0));
- my_hash_init(&m_sptabs, system_charset_info, 0, 0, 0, sp_table_key, 0, 0);
- my_hash_init(&m_sroutines, system_charset_info, 0, 0, 0, sp_sroutine_key,
- 0, 0);
- m_security_ctx.init();
+ my_init_dynamic_array(key_memory_sp_head_main_root, &m_instr,
+ sizeof(sp_instr *), 16, 8, MYF(0));
+ my_hash_init(key_memory_sp_head_main_root, &m_sptabs, system_charset_info, 0,
+ 0, 0, sp_table_key, 0, 0);
+ my_hash_init(key_memory_sp_head_main_root, &m_sroutines, system_charset_info,
+ 0, 0, 0, sp_sroutine_key, 0, 0);
DBUG_VOID_RETURN;
}
@@ -551,7 +594,7 @@ sp_package *sp_package::create(LEX *top_level_lex, const sp_name *name,
const Sp_handler *sph)
{
MEM_ROOT own_root;
- init_sql_alloc(&own_root, "sp_package", MEM_ROOT_BLOCK_SIZE,
+ init_sql_alloc(key_memory_sp_head_main_root, &own_root, MEM_ROOT_BLOCK_SIZE,
MEM_ROOT_PREALLOC, MYF(0));
sp_package *sp;
if (!(sp= new (&own_root) sp_package(&own_root, top_level_lex, name, sph)))
@@ -604,7 +647,7 @@ bool sp_head::eq_routine_spec(const sp_head *sp) const
bool sp_package::validate_after_parser(THD *thd)
{
- if (m_handler->type() != TYPE_ENUM_PACKAGE_BODY)
+ if (m_handler->type() != SP_TYPE_PACKAGE_BODY)
return false;
sp_head *sp= sp_cache_lookup(&thd->sp_package_spec_cache, this);
sp_package *spec= sp ? sp->get_package() : NULL;
@@ -683,7 +726,7 @@ bool sp_package::validate_private_routines(THD *thd)
LEX *sp_package::LexList::find(const LEX_CSTRING &name,
- stored_procedure_type type)
+ enum_sp_type type)
{
List_iterator<LEX> it(*this);
for (LEX *lex; (lex= it++); )
@@ -706,7 +749,7 @@ LEX *sp_package::LexList::find(const LEX_CSTRING &name,
LEX *sp_package::LexList::find_qualified(const LEX_CSTRING &name,
- stored_procedure_type type)
+ enum_sp_type type)
{
List_iterator<LEX> it(*this);
for (LEX *lex; (lex= it++); )
@@ -720,6 +763,17 @@ LEX *sp_package::LexList::find_qualified(const LEX_CSTRING &name,
}
+void sp_package::init_psi_share()
+{
+ List_iterator<LEX> it(m_routine_implementations);
+ for (LEX *lex; (lex= it++); )
+ {
+ DBUG_ASSERT(lex->sphead);
+ lex->sphead->init_psi_share();
+ }
+ sp_head::init_psi_share();
+}
+
void
sp_head::init(LEX *lex)
{
@@ -755,6 +809,13 @@ sp_head::init_sp_name(const sp_name *spname)
DBUG_VOID_RETURN;
}
+void
+sp_head::init_psi_share()
+{
+ m_sp_share= MYSQL_GET_SP_SHARE(m_handler->type(), m_db.str, static_cast<uint>(m_db.length),
+ m_name.str, static_cast<uint>(m_name.length));
+}
+
void
sp_head::set_body_start(THD *thd, const char *begin_ptr)
@@ -1038,7 +1099,7 @@ subst_spvars(THD *thd, sp_instr *instr, LEX_STRING *query_str)
{
DBUG_ENTER("subst_spvars");
- Dynamic_array<Rewritable_query_parameter*> rewritables;
+ Dynamic_array<Rewritable_query_parameter*> rewritables(PSI_INSTRUMENT_MEM);
char *pbuf;
StringBuffer<512> qbuf;
Copy_query_with_rewrite acc(thd, query_str->str, query_str->length, &qbuf);
@@ -1170,7 +1231,7 @@ sp_head::execute(THD *thd, bool merge_da_on_success)
opt_trace_disable_if_no_security_context_access(thd);
/* init per-instruction memroot */
- init_sql_alloc(&execute_mem_root, "per_instruction_memroot",
+ init_sql_alloc(key_memory_sp_head_execute_root, &execute_mem_root,
MEM_ROOT_BLOCK_SIZE, 0, MYF(0));
DBUG_ASSERT(!(m_flags & IS_INVOKED));
@@ -1357,8 +1418,24 @@ sp_head::execute(THD *thd, bool merge_da_on_success)
WSREP_DEBUG("assigned new next trx ID for SP, trx id: %" PRIu64, thd->wsrep_next_trx_id());
}
#endif /* WITH_WSREP */
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ PSI_statement_locker_state state;
+ PSI_statement_locker *parent_locker;
+ PSI_statement_info *psi_info = i->get_psi_info();
+
+ parent_locker= thd->m_statement_psi;
+ thd->m_statement_psi= MYSQL_START_STATEMENT(& state, psi_info->m_key,
+ thd->db.str, thd->db.length, thd->charset(), m_sp_share);
+#endif
+
err_status= i->execute(thd, &ip);
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ MYSQL_END_STATEMENT(thd->m_statement_psi, thd->get_stmt_da());
+ thd->m_statement_psi= parent_locker;
+#endif
+
#ifdef WITH_WSREP
if (WSREP(thd))
{
@@ -1815,8 +1892,8 @@ sp_head::execute_trigger(THD *thd,
TODO: we should create sp_rcontext once per command and reuse it
on subsequent executions of a trigger.
*/
- init_sql_alloc(&call_mem_root, "execute_trigger", MEM_ROOT_BLOCK_SIZE, 0,
- MYF(0));
+ init_sql_alloc(key_memory_sp_head_call_root,
+ &call_mem_root, MEM_ROOT_BLOCK_SIZE, 0, MYF(0));
thd->set_n_backup_active_arena(&call_arena, &backup_arena);
Row_definition_list defs;
@@ -1829,7 +1906,7 @@ sp_head::execute_trigger(THD *thd,
thd->spcont= nctx;
- err_status= execute(thd, FALSE);
+ MYSQL_RUN_SP(this, err_status= execute(thd, FALSE));
err_with_cleanup:
thd->restore_active_arena(&call_arena, &backup_arena);
@@ -2079,7 +2156,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
*/
thd->set_n_backup_active_arena(call_arena, &backup_arena);
- err_status= execute(thd, TRUE);
+ MYSQL_RUN_SP(this, err_status= execute(thd, TRUE));
thd->restore_active_arena(call_arena, &backup_arena);
@@ -2360,11 +2437,9 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
#endif
opt_trace_disable_if_no_stored_proc_func_access(thd, this);
+
if (!err_status)
- {
- err_status= execute(thd, TRUE);
- DBUG_PRINT("info", ("execute returned %d", (int) err_status));
- }
+ MYSQL_RUN_SP(this, err_status= execute(thd, TRUE));
if (save_log_general)
thd->variables.option_bits &= ~OPTION_LOG_OFF;
@@ -3444,7 +3519,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
thd->mdl_context.release_statement_locks();
}
}
- //TODO: why is this here if log_slow_query is in sp_instr_stmt_execute?
+ //TODO: why is this here if log_slow_query is in sp_instr_stmt::execute?
delete_explain_query(m_lex);
if (m_lex->query_tables_own_last)
@@ -3553,6 +3628,9 @@ int sp_instr::exec_core(THD *thd, uint *nextp)
sp_instr_stmt class functions
*/
+PSI_statement_info sp_instr_stmt::psi_info=
+{ 0, "stmt", 0};
+
int
sp_instr_stmt::execute(THD *thd, uint *nextp)
{
@@ -3563,6 +3641,8 @@ sp_instr_stmt::execute(THD *thd, uint *nextp)
DBUG_ENTER("sp_instr_stmt::execute");
DBUG_PRINT("info", ("command: %d", m_lex_keeper.sql_command()));
+ MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, m_query.str, static_cast<uint>(m_query.length));
+
#if defined(ENABLED_PROFILING)
/* This s-p instr is profilable and will be captured. */
thd->profiling.set_query_source(m_query.str, m_query.length);
@@ -3689,6 +3769,9 @@ sp_instr_stmt::exec_core(THD *thd, uint *nextp)
sp_instr_set class functions
*/
+PSI_statement_info sp_instr_set::psi_info=
+{ 0, "set", 0};
+
int
sp_instr_set::execute(THD *thd, uint *nextp)
{
@@ -3839,6 +3922,9 @@ sp_instr_set_row_field_by_name::print(String *str)
sp_instr_set_trigger_field class functions
*/
+PSI_statement_info sp_instr_set_trigger_field::psi_info=
+{ 0, "set_trigger_field", 0};
+
int
sp_instr_set_trigger_field::execute(THD *thd, uint *nextp)
{
@@ -3882,6 +3968,9 @@ uint sp_instr_opt_meta::get_cont_dest() const
sp_instr_jump class functions
*/
+PSI_statement_info sp_instr_jump::psi_info=
+{ 0, "jump", 0};
+
int
sp_instr_jump::execute(THD *thd, uint *nextp)
{
@@ -3947,6 +4036,9 @@ sp_instr_jump::opt_move(uint dst, List<sp_instr> *bp)
sp_instr_jump_if_not class functions
*/
+PSI_statement_info sp_instr_jump_if_not::psi_info=
+{ 0, "jump_if_not", 0};
+
int
sp_instr_jump_if_not::execute(THD *thd, uint *nextp)
{
@@ -4042,6 +4134,9 @@ sp_instr_jump_if_not::opt_move(uint dst, List<sp_instr> *bp)
sp_instr_freturn class functions
*/
+PSI_statement_info sp_instr_freturn::psi_info=
+{ 0, "freturn", 0};
+
int
sp_instr_freturn::execute(THD *thd, uint *nextp)
{
@@ -4106,9 +4201,33 @@ sp_instr_freturn::print(String *str)
}
/*
+ sp_instr_preturn class functions
+*/
+
+PSI_statement_info sp_instr_preturn::psi_info=
+{ 0, "preturn", 0};
+
+int
+sp_instr_preturn::execute(THD *thd, uint *nextp)
+{
+ DBUG_ENTER("sp_instr_preturn::execute");
+ *nextp= UINT_MAX;
+ DBUG_RETURN(0);
+}
+
+void
+sp_instr_preturn::print(String *str)
+{
+ str->append(STRING_WITH_LEN("preturn"));
+}
+
+/*
sp_instr_hpush_jump class functions
*/
+PSI_statement_info sp_instr_hpush_jump::psi_info=
+{ 0, "hpush_jump", 0};
+
int
sp_instr_hpush_jump::execute(THD *thd, uint *nextp)
{
@@ -4185,6 +4304,9 @@ sp_instr_hpush_jump::opt_mark(sp_head *sp, List<sp_instr> *leads)
sp_instr_hpop class functions
*/
+PSI_statement_info sp_instr_hpop::psi_info=
+{ 0, "hpop", 0};
+
int
sp_instr_hpop::execute(THD *thd, uint *nextp)
{
@@ -4209,6 +4331,9 @@ sp_instr_hpop::print(String *str)
sp_instr_hreturn class functions
*/
+PSI_statement_info sp_instr_hreturn::psi_info=
+{ 0, "hreturn", 0};
+
int
sp_instr_hreturn::execute(THD *thd, uint *nextp)
{
@@ -4268,6 +4393,9 @@ sp_instr_hreturn::opt_mark(sp_head *sp, List<sp_instr> *leads)
sp_instr_cpush class functions
*/
+PSI_statement_info sp_instr_cpush::psi_info=
+{ 0, "cpush", 0};
+
int
sp_instr_cpush::execute(THD *thd, uint *nextp)
{
@@ -4309,6 +4437,9 @@ sp_instr_cpush::print(String *str)
sp_instr_cpop class functions
*/
+PSI_statement_info sp_instr_cpop::psi_info=
+{ 0, "cpop", 0};
+
int
sp_instr_cpop::execute(THD *thd, uint *nextp)
{
@@ -4339,6 +4470,9 @@ sp_instr_cpop::print(String *str)
Assert that we either have an error or a cursor
*/
+PSI_statement_info sp_instr_copen::psi_info=
+{ 0, "copen", 0};
+
int
sp_instr_copen::execute(THD *thd, uint *nextp)
{
@@ -4397,6 +4531,9 @@ sp_instr_copen::print(String *str)
sp_instr_cclose class functions
*/
+PSI_statement_info sp_instr_cclose::psi_info=
+{ 0, "cclose", 0};
+
int
sp_instr_cclose::execute(THD *thd, uint *nextp)
{
@@ -4439,6 +4576,9 @@ sp_instr_cclose::print(String *str)
sp_instr_cfetch class functions
*/
+PSI_statement_info sp_instr_cfetch::psi_info=
+{ 0, "cfetch", 0};
+
int
sp_instr_cfetch::execute(THD *thd, uint *nextp)
{
@@ -4486,6 +4626,13 @@ sp_instr_cfetch::print(String *str)
}
}
+/*
+ sp_instr_agg_cfetch class functions
+*/
+
+PSI_statement_info sp_instr_agg_cfetch::psi_info=
+{ 0, "agg_cfetch", 0};
+
int
sp_instr_agg_cfetch::execute(THD *thd, uint *nextp)
{
@@ -4538,6 +4685,9 @@ sp_instr_agg_cfetch::print(String *str)
- copies the cursor structure to the associated %ROWTYPE variable.
*/
+PSI_statement_info sp_instr_cursor_copy_struct::psi_info=
+{ 0, "cursor_copy_struct", 0};
+
int
sp_instr_cursor_copy_struct::exec_core(THD *thd, uint *nextp)
{
@@ -4610,6 +4760,9 @@ sp_instr_cursor_copy_struct::print(String *str)
sp_instr_error class functions
*/
+PSI_statement_info sp_instr_error::psi_info=
+{ 0, "error", 0};
+
int
sp_instr_error::execute(THD *thd, uint *nextp)
{
@@ -4636,6 +4789,9 @@ sp_instr_error::print(String *str)
sp_instr_set_case_expr class implementation
**************************************************************************/
+PSI_statement_info sp_instr_set_case_expr::psi_info=
+{ 0, "set_case_expr", 0};
+
int
sp_instr_set_case_expr::execute(THD *thd, uint *nextp)
{
@@ -4976,8 +5132,8 @@ sp_add_to_query_tables(THD *thd, LEX *lex,
table->lock_type= locktype;
table->select_lex= lex->current_select;
table->cacheable_table= 1;
- table->mdl_request.init(MDL_key::TABLE, table->db.str, table->table_name.str,
- mdl_type, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table->mdl_request, MDL_key::TABLE, table->db.str,
+ table->table_name.str, mdl_type, MDL_TRANSACTION);
lex->add_to_query_tables(table);
return table;
diff --git a/sql/sp_head.h b/sql/sp_head.h
index 6cf4610c466..913be1aace7 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -47,6 +47,14 @@ class sp_instr;
class sp_instr_opt_meta;
class sp_instr_jump_if_not;
+/**
+ Number of PSI_statement_info instruments
+ for internal stored programs statements.
+*/
+#ifdef HAVE_PSI_INTERFACE
+void init_sp_psi_keys(void);
+#endif
+
/*************************************************************************/
/**
@@ -174,6 +182,11 @@ public:
const Sp_handler *m_handler;
uint m_flags; // Boolean attributes of a stored routine
+ /**
+ Instrumentation interface for SP.
+ */
+ PSI_sp_share *m_sp_share;
+
Column_definition m_return_field_def; /**< This is used for FUNCTIONs only. */
const char *m_tmp_query; ///< Temporary pointer to sub query string
@@ -856,6 +869,8 @@ public:
return NULL;
}
+ virtual void init_psi_share();
+
protected:
MEM_ROOT *m_thd_root; ///< Temp. store for thd's mem_root
@@ -931,9 +946,9 @@ public:
public:
LexList() { elements= 0; }
// Find a package routine by a non qualified name
- LEX *find(const LEX_CSTRING &name, stored_procedure_type type);
+ LEX *find(const LEX_CSTRING &name, enum_sp_type type);
// Find a package routine by a package-qualified name, e.g. 'pkg.proc'
- LEX *find_qualified(const LEX_CSTRING &name, stored_procedure_type type);
+ LEX *find_qualified(const LEX_CSTRING &name, enum_sp_type type);
// Check if a routine with the given qualified name already exists
bool check_dup_qualified(const LEX_CSTRING &name, const Sp_handler *sph)
{
@@ -990,6 +1005,7 @@ public:
m_routine_implementations.push_back(lex, &main_mem_root);
}
sp_package *get_package() { return this; }
+ void init_psi_share();
bool is_invoked() const
{
/*
@@ -1156,6 +1172,7 @@ public:
{
m_ip= dst;
}
+ virtual PSI_statement_info* get_psi_info() = 0;
}; // class sp_instr : public Sql_alloc
@@ -1282,6 +1299,10 @@ private:
sp_lex_keeper m_lex_keeper;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
+
}; // class sp_instr_stmt : public sp_instr
@@ -1316,6 +1337,10 @@ protected:
uint m_offset; ///< Frame offset
Item *m_value;
sp_lex_keeper m_lex_keeper;
+
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_set : public sp_instr
@@ -1424,6 +1449,10 @@ private:
Item_trigger_field *trigger_field;
Item *value;
sp_lex_keeper m_lex_keeper;
+
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_trigger_field : public sp_instr
@@ -1510,6 +1539,9 @@ public:
m_dest= new_dest;
}
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_jump : public sp_instr_opt_meta
@@ -1561,6 +1593,9 @@ private:
Item *m_expr; ///< The condition
sp_lex_keeper m_lex_keeper;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_jump_if_not : public sp_instr_jump
@@ -1578,17 +1613,9 @@ public:
virtual ~sp_instr_preturn()
{}
- virtual int execute(THD *thd, uint *nextp)
- {
- DBUG_ENTER("sp_instr_preturn::execute");
- *nextp= UINT_MAX;
- DBUG_RETURN(0);
- }
+ virtual int execute(THD *thd, uint *nextp);
- virtual void print(String *str)
- {
- str->append(STRING_WITH_LEN("preturn"));
- }
+ virtual void print(String *str);
virtual uint opt_mark(sp_head *sp, List<sp_instr> *leads)
{
@@ -1596,6 +1623,9 @@ public:
return UINT_MAX;
}
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_preturn : public sp_instr
@@ -1633,6 +1663,9 @@ protected:
const Type_handler *m_type_handler;
sp_lex_keeper m_lex_keeper;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_freturn : public sp_instr
@@ -1698,6 +1731,9 @@ private:
// debug version only). It's used in print().
uint m_frame;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_hpush_jump : public sp_instr_jump
@@ -1728,6 +1764,9 @@ private:
uint m_count;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_hpop : public sp_instr
@@ -1762,12 +1801,14 @@ private:
uint m_frame;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_hreturn : public sp_instr_jump
/** This is DECLARE CURSOR */
-class sp_instr_cpush : public sp_instr,
- public sp_cursor
+class sp_instr_cpush : public sp_instr, public sp_cursor
{
sp_instr_cpush(const sp_instr_cpush &); /**< Prevent use of these */
void operator=(sp_instr_cpush &);
@@ -1796,6 +1837,9 @@ private:
sp_lex_keeper m_lex_keeper;
uint m_cursor; /**< Frame offset (for debugging) */
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_cpush : public sp_instr
@@ -1826,6 +1870,9 @@ private:
uint m_count;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_cpop : public sp_instr
@@ -1853,6 +1900,9 @@ private:
uint m_cursor; ///< Stack index
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_copen : public sp_instr_stmt
@@ -1880,6 +1930,10 @@ public:
virtual int execute(THD *thd, uint *nextp);
virtual int exec_core(THD *thd, uint *nextp);
virtual void print(String *str);
+
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
};
@@ -1905,6 +1959,9 @@ private:
uint m_cursor;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_cclose : public sp_instr
@@ -1939,6 +1996,9 @@ private:
List<sp_variable> m_varlist;
bool m_error_on_no_data;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_cfetch : public sp_instr
/*
@@ -1963,6 +2023,10 @@ public:
virtual int execute(THD *thd, uint *nextp);
virtual void print(String *str);
+
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_agg_cfetch : public sp_instr
@@ -1996,6 +2060,9 @@ private:
int m_errcode;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_error : public sp_instr
@@ -2035,6 +2102,9 @@ private:
Item *m_case_expr;
sp_lex_keeper m_lex_keeper;
+public:
+ virtual PSI_statement_info* get_psi_info() { return & psi_info; }
+ static PSI_statement_info psi_info;
}; // class sp_instr_set_case_expr : public sp_instr_opt_meta
bool check_show_routine_access(THD *thd, sp_head *sp, bool *full_access);
diff --git a/sql/sp_pcontext.cc b/sql/sp_pcontext.cc
index 01841bb57b7..848d1f0c655 100644
--- a/sql/sp_pcontext.cc
+++ b/sql/sp_pcontext.cc
@@ -96,6 +96,9 @@ sp_pcontext::sp_pcontext()
: Sql_alloc(),
m_max_var_index(0), m_max_cursor_index(0),
m_parent(NULL), m_pboundary(0),
+ m_vars(PSI_INSTRUMENT_MEM), m_case_expr_ids(PSI_INSTRUMENT_MEM),
+ m_conditions(PSI_INSTRUMENT_MEM), m_cursors(PSI_INSTRUMENT_MEM),
+ m_handlers(PSI_INSTRUMENT_MEM), m_children(PSI_INSTRUMENT_MEM),
m_scope(REGULAR_SCOPE)
{
init(0, 0, 0);
@@ -106,6 +109,9 @@ sp_pcontext::sp_pcontext(sp_pcontext *prev, sp_pcontext::enum_scope scope)
: Sql_alloc(),
m_max_var_index(0), m_max_cursor_index(0),
m_parent(prev), m_pboundary(0),
+ m_vars(PSI_INSTRUMENT_MEM), m_case_expr_ids(PSI_INSTRUMENT_MEM),
+ m_conditions(PSI_INSTRUMENT_MEM), m_cursors(PSI_INSTRUMENT_MEM),
+ m_handlers(PSI_INSTRUMENT_MEM), m_children(PSI_INSTRUMENT_MEM),
m_scope(scope)
{
init(prev->m_var_offset + prev->m_max_var_index,
diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc
index 17b4c83b7bc..c4c19dd39f6 100644
--- a/sql/sp_rcontext.cc
+++ b/sql/sp_rcontext.cc
@@ -74,6 +74,7 @@ sp_rcontext::sp_rcontext(const sp_head *owner,
m_return_value_fld(return_value_fld),
m_return_value_set(false),
m_in_sub_stmt(in_sub_stmt),
+ m_handlers(PSI_INSTRUMENT_MEM), m_handler_call_stack(PSI_INSTRUMENT_MEM),
m_ccount(0)
{
}
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 45bb6ae89ad..4c9a523159d 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -68,6 +68,15 @@ const uint max_hostname_length= 60;
const uint max_dbname_length= 64;
#endif
+const char *safe_vio_type_name(Vio *vio)
+{
+ size_t unused;
+#ifdef EMBEDDED_LIBRARY
+ if (!vio) return "Internal";
+#endif
+ return vio_type_name(vio_type(vio), &unused);
+}
+
#include "sql_acl_getsort.ic"
static LEX_CSTRING native_password_plugin_name= {
@@ -645,7 +654,7 @@ bool ROLE_GRANT_PAIR::init(MEM_ROOT *mem, const char *username,
#define ROLE_OPENED (1L << 3)
static DYNAMIC_ARRAY acl_hosts, acl_users, acl_proxy_users;
-static Dynamic_array<ACL_DB> acl_dbs(0U,50U);
+static Dynamic_array<ACL_DB> acl_dbs(PSI_INSTRUMENT_MEM, 0U, 50U);
typedef Dynamic_array<ACL_DB>::CMP_FUNC acl_dbs_cmp;
static HASH acl_roles;
/*
@@ -992,7 +1001,7 @@ class User_table_tabular: public User_table
{
access|= LOCK_TABLES_ACL | CREATE_TMP_ACL | SHOW_DB_ACL;
if (access & FILE_ACL)
- access|= REPL_CLIENT_ACL | REPL_SLAVE_ACL;
+ access|= BINLOG_MONITOR_ACL | REPL_SLAVE_ACL | BINLOG_ADMIN_ACL ;
if (access & PROCESS_ACL)
access|= SUPER_ACL | EXECUTE_ACL;
}
@@ -1020,6 +1029,12 @@ class User_table_tabular: public User_table
if (num_fields() <= 46 && (access & DELETE_ACL))
access|= DELETE_HISTORY_ACL;
+ if (access & SUPER_ACL)
+ access|= GLOBAL_SUPER_ADDED_SINCE_USER_TABLE_ACLS;
+
+ if (access & REPL_SLAVE_ACL)
+ access|= REPL_MASTER_ADMIN_ACL;
+
return access & GLOBAL_ACLS;
}
@@ -1470,15 +1485,79 @@ class User_table_json: public User_table
set_str_value("authentication_string",
u.auth[i].auth_string.str, u.auth[i].auth_string.length);
}
+
+ void print_warning_bad_version_id(ulonglong version_id) const
+ {
+ sql_print_warning("'user' entry '%s@%s' has a wrong 'version_id' value %lld",
+ safe_str(get_user(current_thd->mem_root)),
+ safe_str(get_host(current_thd->mem_root)),
+ version_id);
+ }
+
+ void print_warning_bad_access(ulonglong version_id,
+ privilege_t mask,
+ ulonglong access) const
+ {
+ sql_print_warning("'user' entry '%s@%s' "
+ "has a wrong 'access' value 0x%llx "
+ "(allowed mask is 0x%llx, version_id=%lld)",
+ safe_str(get_user(current_thd->mem_root)),
+ safe_str(get_host(current_thd->mem_root)),
+ access, mask, version_id);
+ }
+
+ privilege_t adjust_access(ulonglong version_id, ulonglong access) const
+ {
+ privilege_t mask= ALL_KNOWN_ACL_100304;
+ ulonglong orig_access= access;
+ if (version_id >= 100502)
+ {
+ mask= ALL_KNOWN_ACL_100502;
+ }
+ else // 100501 or earlier
+ {
+ if (access & SUPER_ACL)
+ access|= GLOBAL_SUPER_ADDED_SINCE_USER_TABLE_ACLS;
+
+ if (access & REPL_SLAVE_ACL)
+ access|= REPL_MASTER_ADMIN_ACL;
+ }
+
+ if (orig_access & ~mask)
+ {
+ print_warning_bad_access(version_id, mask, orig_access);
+ return NO_ACL;
+ }
+ return access & ALL_KNOWN_ACL;
+ }
+
privilege_t get_access() const
{
+ ulonglong version_id= (ulonglong) get_int_value("version_id");
+ ulonglong access= (ulonglong) get_int_value("access");
+
/*
- when new privileges will be added, we'll start storing GLOBAL_ACLS
- (or, for example, my_count_bits(GLOBAL_ACLS))
- in the json too, and it'll allow us to do privilege upgrades
+ Special case:
+ mysql_system_tables_data.sql populates "ALL PRIVILEGES"
+ for the super user this way:
+ {"access":18446744073709551615}
*/
- return get_access_value("access") & GLOBAL_ACLS;
+ if (access == (ulonglong) ~0)
+ return GLOBAL_ACLS;
+
+ /*
+ Reject obviously bad (negative and too large) version_id values.
+ Also reject versions before 10.4.0 (when JSON table was added).
+ */
+ if ((longlong) version_id < 0 || version_id > 999999 ||
+ (version_id > 0 && version_id < 100400))
+ {
+ print_warning_bad_version_id(version_id);
+ return NO_ACL;
+ }
+ return adjust_access(version_id, access) & GLOBAL_ACLS;
}
+
void set_access(const privilege_t rights, bool revoke) const
{
privilege_t access= get_access();
@@ -1487,6 +1566,7 @@ class User_table_json: public User_table
else
access|= rights;
set_int_value("access", (longlong) (access & GLOBAL_ACLS));
+ set_int_value("version_id", (longlong) MYSQL_VERSION_ID);
}
const char *unsafe_str(const char *s) const
{ return s[0] ? s : NULL; }
@@ -1607,10 +1687,6 @@ class User_table_json: public User_table
const char *value_end= value_start + value_len;
return my_strtoll10(value_start, (char**)&value_end, &err);
}
- privilege_t get_access_value(const char *key) const
- {
- return privilege_t(ALL_KNOWN_ACL & (ulonglong) get_int_value(key));
- }
double get_double_value(const char *key) const
{
int err;
@@ -2251,9 +2327,9 @@ bool acl_init(bool dont_read_acl_tables)
bool return_val;
DBUG_ENTER("acl_init");
- acl_cache= new Hash_filo<acl_entry>(ACL_CACHE_SIZE, 0, 0,
+ acl_cache= new Hash_filo<acl_entry>(key_memory_acl_cache, ACL_CACHE_SIZE, 0, 0,
(my_hash_get_key) acl_entry_get_key,
- (my_hash_free_key) free,
+ (my_hash_free_key) my_free,
&my_charset_utf8mb3_bin);
/*
@@ -2328,7 +2404,7 @@ static bool acl_load(THD *thd, const Grant_tables& tables)
grant_version++; /* Privileges updated */
const Host_table& host_table= tables.host_table();
- init_sql_alloc(&acl_memroot, "ACL", ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(key_memory_acl_mem, &acl_memroot, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
if (host_table.table_exists()) // "host" table may not exist (e.g. in MySQL 5.6.7+)
{
if (host_table.init_read_record(&read_record_info))
@@ -2405,7 +2481,8 @@ static bool acl_load(THD *thd, const Grant_tables& tables)
user.sort= get_magic_sort("hu", user.host.hostname, user.user.str);
user.hostname_length= safe_strlen(user.host.hostname);
- my_init_dynamic_array(&user.role_grants, sizeof(ACL_ROLE *), 0, 8, MYF(0));
+ my_init_dynamic_array(key_memory_acl_mem, &user.role_grants,
+ sizeof(ACL_ROLE *), 0, 8, MYF(0));
user.account_locked= user_table.get_account_locked();
@@ -2423,7 +2500,7 @@ static bool acl_load(THD *thd, const Grant_tables& tables)
ACL_ROLE *entry= new (&acl_memroot) ACL_ROLE(&user, &acl_memroot);
entry->role_grants = user.role_grants;
- my_init_dynamic_array(&entry->parent_grantee,
+ my_init_dynamic_array(key_memory_acl_mem, &entry->parent_grantee,
sizeof(ACL_USER_BASE *), 0, 8, MYF(0));
my_hash_insert(&acl_roles, (uchar *)entry);
@@ -2568,7 +2645,7 @@ static bool acl_load(THD *thd, const Grant_tables& tables)
DBUG_RETURN(TRUE);
MEM_ROOT temp_root;
- init_alloc_root(&temp_root, "ACL_tmp", ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_alloc_root(key_memory_acl_mem, &temp_root, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
while (!(read_record_info.read_record()))
{
char *hostname= safe_str(get_field(&temp_root, roles_mapping_table.host()));
@@ -2687,15 +2764,16 @@ bool acl_reload(THD *thd)
old_acl_roles_mappings= acl_roles_mappings;
old_acl_proxy_users= acl_proxy_users;
old_acl_dbs= acl_dbs;
- my_init_dynamic_array(&acl_hosts, sizeof(ACL_HOST), 20, 50, MYF(0));
- my_init_dynamic_array(&acl_users, sizeof(ACL_USER), 50, 100, MYF(0));
- acl_dbs.init(50, 100);
- my_init_dynamic_array(&acl_proxy_users, sizeof(ACL_PROXY_USER), 50, 100, MYF(0));
- my_hash_init2(&acl_roles,50, &my_charset_utf8mb3_bin,
+ my_init_dynamic_array(key_memory_acl_mem, &acl_hosts, sizeof(ACL_HOST), 20, 50, MYF(0));
+ my_init_dynamic_array(key_memory_acl_mem, &acl_users, sizeof(ACL_USER), 50, 100, MYF(0));
+ acl_dbs.init(key_memory_acl_mem, 50, 100);
+ my_init_dynamic_array(key_memory_acl_mem, &acl_proxy_users, sizeof(ACL_PROXY_USER), 50, 100, MYF(0));
+ my_hash_init2(key_memory_acl_mem, &acl_roles,50, &my_charset_utf8mb3_bin,
0, 0, 0, (my_hash_get_key) acl_role_get_key, 0,
(void (*)(void *))free_acl_role, 0);
- my_hash_init2(&acl_roles_mappings, 50, &my_charset_utf8mb3_bin, 0, 0, 0,
- (my_hash_get_key) acl_role_map_get_key, 0, 0, 0);
+ my_hash_init2(key_memory_acl_mem, &acl_roles_mappings, 50,
+ &my_charset_utf8mb3_bin, 0, 0, 0, (my_hash_get_key)
+ acl_role_map_get_key, 0, 0, 0);
old_mem= acl_memroot;
delete_dynamic(&acl_wild_hosts);
my_hash_free(&acl_check_hosts);
@@ -3133,7 +3211,7 @@ ACL_USER::ACL_USER(THD *thd, const LEX_USER &combo,
sort= get_magic_sort("hu", host.hostname, user.str);
password_last_changed= thd->query_start();
password_lifetime= -1;
- my_init_dynamic_array(&role_grants, sizeof(ACL_USER *), 0, 8, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &role_grants, sizeof(ACL_USER *), 0, 8, MYF(0));
}
@@ -3218,9 +3296,10 @@ static void acl_insert_role(const char *rolename, privilege_t privileges)
mysql_mutex_assert_owner(&acl_cache->lock);
entry= new (&acl_memroot) ACL_ROLE(rolename, privileges, &acl_memroot);
- my_init_dynamic_array(&entry->parent_grantee,
+ my_init_dynamic_array(key_memory_acl_mem, &entry->parent_grantee,
sizeof(ACL_USER_BASE *), 0, 8, MYF(0));
- my_init_dynamic_array(&entry->role_grants, sizeof(ACL_ROLE *), 0, 8, MYF(0));
+ my_init_dynamic_array(key_memory_acl_mem, &entry->role_grants,
+ sizeof(ACL_ROLE *), 0, 8, MYF(0));
my_hash_insert(&acl_roles, (uchar *)entry);
}
@@ -3367,7 +3446,8 @@ privilege_t acl_get(const char *host, const char *ip,
exit:
/* Save entry in cache for quick retrieval */
if (!db_is_pattern &&
- (entry= (acl_entry*) malloc(sizeof(acl_entry)+key_length)))
+ (entry= (acl_entry*) my_malloc(key_memory_acl_cache,
+ sizeof(acl_entry)+key_length, MYF(MY_WME))))
{
entry->access=(db_access & host_access);
DBUG_ASSERT(key_length < 0xffff);
@@ -3391,9 +3471,10 @@ exit:
static void init_check_host(void)
{
DBUG_ENTER("init_check_host");
- (void) my_init_dynamic_array(&acl_wild_hosts,sizeof(struct acl_host_and_ip),
+ (void) my_init_dynamic_array(key_memory_acl_mem, &acl_wild_hosts,
+ sizeof(struct acl_host_and_ip),
acl_users.elements, 1, MYF(0));
- (void) my_hash_init(&acl_check_hosts,system_charset_info,
+ (void) my_hash_init(key_memory_acl_mem, &acl_check_hosts,system_charset_info,
acl_users.elements, 0, 0,
(my_hash_get_key) check_get_key, 0, 0);
if (!allow_all_hosts)
@@ -5040,8 +5121,8 @@ public:
bool ok() { return privs != NO_ACL || cols != NO_ACL; }
void init_hash()
{
- my_hash_init2(&hash_columns, 4, system_charset_info, 0, 0, 0,
- (my_hash_get_key) get_key_column, 0, 0, 0);
+ my_hash_init2(key_memory_acl_memex, &hash_columns, 4, system_charset_info,
+ 0, 0, 0, (my_hash_get_key) get_key_column, 0, 0, 0);
}
};
@@ -5307,8 +5388,7 @@ column_hash_search(GRANT_TABLE *t, const char *cname, size_t length)
{
if (!my_hash_inited(&t->hash_columns))
return (GRANT_COLUMN*) 0;
- return (GRANT_COLUMN*) my_hash_search(&t->hash_columns,
- (uchar*) cname, length);
+ return (GRANT_COLUMN*)my_hash_search(&t->hash_columns, (uchar*)cname, length);
}
@@ -5824,19 +5904,19 @@ struct PRIVS_TO_MERGE
};
-static enum PRIVS_TO_MERGE::what sp_privs_to_merge(stored_procedure_type type)
+static enum PRIVS_TO_MERGE::what sp_privs_to_merge(enum_sp_type type)
{
switch (type) {
- case TYPE_ENUM_FUNCTION:
+ case SP_TYPE_FUNCTION:
return PRIVS_TO_MERGE::FUNC;
- case TYPE_ENUM_PROCEDURE:
+ case SP_TYPE_PROCEDURE:
return PRIVS_TO_MERGE::PROC;
- case TYPE_ENUM_PACKAGE:
+ case SP_TYPE_PACKAGE:
return PRIVS_TO_MERGE::PACKAGE_SPEC;
- case TYPE_ENUM_PACKAGE_BODY:
+ case SP_TYPE_PACKAGE_BODY:
return PRIVS_TO_MERGE::PACKAGE_BODY;
- case TYPE_ENUM_TRIGGER:
- case TYPE_ENUM_PROXY:
+ case SP_TYPE_EVENT:
+ case SP_TYPE_TRIGGER:
break;
}
DBUG_ASSERT(0);
@@ -6229,7 +6309,7 @@ static int update_role_db(int merged, int first, privilege_t access,
static bool merge_role_db_privileges(ACL_ROLE *grantee, const char *dbname,
role_hash_t *rhash)
{
- Dynamic_array<int> dbs;
+ Dynamic_array<int> dbs(PSI_INSTRUMENT_MEM);
/*
Supposedly acl_dbs can be huge, but only a handful of db grants
@@ -6448,7 +6528,7 @@ static int update_role_table_columns(GRANT_TABLE *merged,
static bool merge_role_table_and_column_privileges(ACL_ROLE *grantee,
const char *db, const char *tname, role_hash_t *rhash)
{
- Dynamic_array<GRANT_TABLE *> grants;
+ Dynamic_array<GRANT_TABLE *> grants(PSI_INSTRUMENT_MEM);
DBUG_ASSERT(MY_TEST(db) == MY_TEST(tname)); // both must be set, or neither
/*
@@ -6577,7 +6657,7 @@ static bool merge_role_routine_grant_privileges(ACL_ROLE *grantee,
DBUG_ASSERT(MY_TEST(db) == MY_TEST(tname)); // both must be set, or neither
- Dynamic_array<GRANT_NAME *> grants;
+ Dynamic_array<GRANT_NAME *> grants(PSI_INSTRUMENT_MEM);
/* first, collect routine privileges granted to roles in question */
for (uint i=0 ; i < hash->records ; i++)
@@ -6638,7 +6718,7 @@ static int merge_role_privileges(ACL_ROLE *role __attribute__((unused)),
grantee->counter= 1; // Mark the grantee as merged.
/* if we'll do db/table/routine privileges, create a hash of role names */
- role_hash_t role_hash(role_key);
+ role_hash_t role_hash(PSI_INSTRUMENT_MEM, role_key);
if (data->what != PRIVS_TO_MERGE::GLOBAL)
{
role_hash.insert(grantee);
@@ -7590,18 +7670,22 @@ static bool grant_load(THD *thd,
Sql_mode_instant_remove sms(thd, MODE_PAD_CHAR_TO_FULL_LENGTH);
- (void) my_hash_init(&column_priv_hash, &my_charset_utf8mb3_bin,
- 0,0,0, (my_hash_get_key) get_grant_table,
- (my_hash_free_key) free_grant_table,0);
- (void) my_hash_init(&proc_priv_hash, &my_charset_utf8mb3_bin,
- 0,0,0, (my_hash_get_key) get_grant_table, 0,0);
- (void) my_hash_init(&func_priv_hash, &my_charset_utf8mb3_bin,
- 0,0,0, (my_hash_get_key) get_grant_table, 0,0);
- (void) my_hash_init(&package_spec_priv_hash, &my_charset_utf8mb3_bin,
- 0,0,0, (my_hash_get_key) get_grant_table, 0,0);
- (void) my_hash_init(&package_body_priv_hash, &my_charset_utf8mb3_bin,
- 0,0,0, (my_hash_get_key) get_grant_table, 0,0);
- init_sql_alloc(&grant_memroot, "GRANT", ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ (void) my_hash_init(key_memory_acl_memex, &column_priv_hash,
+ &my_charset_utf8mb3_bin, 0,0,0, (my_hash_get_key)
+ get_grant_table, (my_hash_free_key) free_grant_table, 0);
+ (void) my_hash_init(key_memory_acl_memex, &proc_priv_hash,
+ &my_charset_utf8mb3_bin, 0,0,0, (my_hash_get_key)
+ get_grant_table, 0,0);
+ (void) my_hash_init(key_memory_acl_memex, &func_priv_hash,
+ &my_charset_utf8mb3_bin, 0,0,0, (my_hash_get_key)
+ get_grant_table, 0,0);
+ (void) my_hash_init(key_memory_acl_memex, &package_spec_priv_hash,
+ &my_charset_utf8mb3_bin, 0,0,0, (my_hash_get_key)
+ get_grant_table, 0,0);
+ (void) my_hash_init(key_memory_acl_memex, &package_body_priv_hash,
+ &my_charset_utf8mb3_bin, 0,0,0, (my_hash_get_key)
+ get_grant_table, 0,0);
+ init_sql_alloc(key_memory_acl_mem, &grant_memroot, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
t_table= tables_priv.table();
c_table= columns_priv.table();
@@ -7682,7 +7766,7 @@ static bool grant_load(THD *thd,
continue;
}
}
- stored_procedure_type type= (stored_procedure_type)procs_priv.routine_type()->val_int();
+ enum_sp_type type= (enum_sp_type)procs_priv.routine_type()->val_int();
const Sp_handler *sph= Sp_handler::handler(type);
if (!sph || !(hash= sph->get_priv_hash()))
{
@@ -7930,15 +8014,7 @@ bool check_grant(THD *thd, privilege_t want_access, TABLE_LIST *tables,
switch(access->check(orig_want_access, &t_ref->grant.privilege))
{
case ACL_INTERNAL_ACCESS_GRANTED:
- /*
- Currently,
- - the information_schema does not subclass ACL_internal_table_access,
- there are no per table privilege checks for I_S,
- - the performance schema does use per tables checks, but at most
- returns 'CHECK_GRANT', and never 'ACCESS_GRANTED'.
- so this branch is not used.
- */
- DBUG_ASSERT(0);
+ continue;
case ACL_INTERNAL_ACCESS_DENIED:
goto err;
case ACL_INTERNAL_ACCESS_CHECK_GRANT:
@@ -8801,19 +8877,32 @@ static const char *command_array[]=
"SELECT", "INSERT", "UPDATE", "DELETE", "CREATE", "DROP", "RELOAD",
"SHUTDOWN", "PROCESS","FILE", "GRANT", "REFERENCES", "INDEX",
"ALTER", "SHOW DATABASES", "SUPER", "CREATE TEMPORARY TABLES",
- "LOCK TABLES", "EXECUTE", "REPLICATION SLAVE", "REPLICATION CLIENT",
+ "LOCK TABLES", "EXECUTE", "REPLICATION SLAVE", "BINLOG MONITOR",
"CREATE VIEW", "SHOW VIEW", "CREATE ROUTINE", "ALTER ROUTINE",
- "CREATE USER", "EVENT", "TRIGGER", "CREATE TABLESPACE",
- "DELETE HISTORY"
+ "CREATE USER", "EVENT", "TRIGGER", "CREATE TABLESPACE", "DELETE HISTORY",
+ "SET USER", "FEDERATED ADMIN", "CONNECTION ADMIN", "READ_ONLY ADMIN",
+ "REPLICATION SLAVE ADMIN", "REPLICATION MASTER ADMIN", "BINLOG ADMIN"
};
static uint command_lengths[]=
{
- 6, 6, 6, 6, 6, 4, 6, 8, 7, 4, 5, 10, 5, 5, 14, 5, 23, 11, 7, 17, 18, 11, 9,
- 14, 13, 11, 5, 7, 17, 14,
+ 6, 6, 6, 6, 6, 4, 6,
+ 8, 7, 4, 5, 10, 5,
+ 5, 14, 5, 23,
+ 11, 7, 17, 14,
+ 11, 9, 14, 13,
+ 11, 5, 7, 17, 14,
+ 8, 15, 16, 15,
+ 23, 24, 12
};
+static_assert(array_elements(command_array) == PRIVILEGE_T_MAX_BIT + 1,
+ "The definition of command_array does not match privilege_t");
+static_assert(array_elements(command_lengths) == PRIVILEGE_T_MAX_BIT + 1,
+ "The definition of command_lengths does not match privilege_t");
+
+
static bool print_grants_for_role(THD *thd, ACL_ROLE * role)
{
char buff[1024];
@@ -12937,7 +13026,7 @@ static bool send_plugin_request_packet(MPVIO_EXT *mpvio,
static bool ignore_max_password_errors(const ACL_USER *acl_user)
{
const char *host= acl_user->host.hostname;
- return (acl_user->access & SUPER_ACL)
+ return (acl_user->access & PRIV_IGNORE_MAX_PASSWORD_ERRORS)
&& (!strcasecmp(host, "localhost") ||
!strcmp(host, "127.0.0.1") ||
!strcmp(host, "::1"));
@@ -13125,7 +13214,8 @@ static bool parse_com_change_user_packet(MPVIO_EXT *mpvio, uint packet_length)
system_charset_info, user, user_len,
thd->charset(), &dummy_errors);
- if (!(sctx->user= my_strndup(user_buff, user_len, MYF(MY_WME))))
+ if (!(sctx->user= my_strndup(key_memory_MPVIO_EXT_auth_info, user_buff,
+ user_len, MYF(MY_WME))))
DBUG_RETURN(1);
/* Clear variables that are allocated */
@@ -13384,8 +13474,8 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
Security_context *sctx= thd->security_ctx;
- my_free((char*) sctx->user);
- if (!(sctx->user= my_strndup(user, user_len, MYF(MY_WME))))
+ my_free(const_cast<char*>(sctx->user));
+ if (!(sctx->user= my_strndup(key_memory_MPVIO_EXT_auth_info, user, user_len, MYF(MY_WME))))
return packet_error; /* The error is set by my_strdup(). */
@@ -13929,6 +14019,8 @@ bool acl_authenticate(THD *thd, uint com_change_user_pkt_len)
res= do_auth_once(thd, default_auth_plugin_name, &mpvio);
}
+ PSI_CALL_set_connection_type(vio_type(thd->net.vio));
+
Security_context * const sctx= thd->security_ctx;
const ACL_USER * acl_user= mpvio.acl_user;
if (!acl_user)
@@ -13966,17 +14058,9 @@ bool acl_authenticate(THD *thd, uint com_change_user_pkt_len)
*/
if (sctx->user)
{
- if (strcmp(sctx->priv_user, sctx->user))
- {
- general_log_print(thd, command, "%s@%s as %s on %s",
- sctx->user, sctx->host_or_ip,
- sctx->priv_user[0] ? sctx->priv_user : "anonymous",
- safe_str(mpvio.db.str));
- }
- else
- general_log_print(thd, command, (char*) "%s@%s on %s",
- sctx->user, sctx->host_or_ip,
- safe_str(mpvio.db.str));
+ general_log_print(thd, command, (char*) "%s@%s on %s using %s",
+ sctx->user, sctx->host_or_ip,
+ safe_str(mpvio.db.str), safe_vio_type_name(thd->net.vio));
}
if (res > CR_OK && mpvio.status != MPVIO_EXT::SUCCESS)
@@ -14158,7 +14242,7 @@ bool acl_authenticate(THD *thd, uint com_change_user_pkt_len)
(longlong) sctx->master_access, mpvio.db.str));
if (command == COM_CONNECT &&
- !(thd->main_security_ctx.master_access & SUPER_ACL))
+ !(thd->main_security_ctx.master_access & PRIV_IGNORE_MAX_CONNECTIONS))
{
if (*thd->scheduler->connection_count > *thd->scheduler->max_connections)
{ // too many connections
@@ -14220,16 +14304,17 @@ bool acl_authenticate(THD *thd, uint com_change_user_pkt_len)
thd->net.net_skip_rest_factor= 2; // skip at most 2*max_packet_size
if (mpvio.auth_info.external_user[0])
- sctx->external_user= my_strdup(mpvio.auth_info.external_user, MYF(0));
+ sctx->external_user= my_strdup(key_memory_MPVIO_EXT_auth_info,
+ mpvio.auth_info.external_user, MYF(0));
if (res == CR_OK_HANDSHAKE_COMPLETE)
thd->get_stmt_da()->disable_status();
else
my_ok(thd);
- PSI_CALL_set_thread_user_host
- (thd->main_security_ctx.user, (uint)strlen(thd->main_security_ctx.user),
- thd->main_security_ctx.host_or_ip, (uint)strlen(thd->main_security_ctx.host_or_ip));
+ PSI_CALL_set_thread_account
+ (thd->main_security_ctx.user, static_cast<uint>(strlen(thd->main_security_ctx.user)),
+ thd->main_security_ctx.host_or_ip, static_cast<uint>(strlen(thd->main_security_ctx.host_or_ip)));
/* Ready to handle queries */
DBUG_RETURN(0);
diff --git a/sql/sql_acl.h b/sql/sql_acl.h
index 000228945f4..2cf1637c8db 100644
--- a/sql/sql_acl.h
+++ b/sql/sql_acl.h
@@ -167,8 +167,6 @@ enum ACL_internal_access_result
/**
Access granted for all the requested privileges,
do not use the grant tables.
- This flag is used only for the INFORMATION_SCHEMA privileges,
- for compatibility reasons.
*/
ACL_INTERNAL_ACCESS_GRANTED,
/** Access denied, do not use the grant tables. */
diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc
index e5347f2fda4..cfc48c82b4d 100644
--- a/sql/sql_admin.cc
+++ b/sql/sql_admin.cc
@@ -26,7 +26,6 @@
#include "sql_view.h" // view_checksum
#include "sql_table.h" // mysql_recreate_table
#include "debug_sync.h" // DEBUG_SYNC
-#include "sql_acl.h" // *_ACL
#include "sp.h" // Sroutine_hash_entry
#include "sql_parse.h" // check_table_access
#include "strfunc.h"
@@ -122,9 +121,9 @@ static int prepare_for_repair(THD *thd, TABLE_LIST *table_list,
Let us try to open at least a .FRM for this table.
*/
- table_list->mdl_request.init(MDL_key::TABLE,
- table_list->db.str, table_list->table_name.str,
- MDL_EXCLUSIVE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table_list->mdl_request, MDL_key::TABLE,
+ table_list->db.str, table_list->table_name.str,
+ MDL_EXCLUSIVE, MDL_TRANSACTION);
if (lock_table_names(thd, table_list, table_list->next_global,
thd->variables.lock_wait_timeout, 0))
@@ -547,8 +546,9 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
close_thread_tables(thd);
table->table= NULL;
thd->mdl_context.release_transactional_locks();
- table->mdl_request.init(MDL_key::TABLE, table->db.str, table->table_name.str,
- MDL_SHARED_NO_READ_WRITE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table->mdl_request, MDL_key::TABLE, table->db.str,
+ table->table_name.str, MDL_SHARED_NO_READ_WRITE,
+ MDL_TRANSACTION);
}
#ifdef WITH_PARTITION_STORAGE_ENGINE
@@ -822,8 +822,9 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
close_thread_tables(thd);
table->table= NULL;
thd->mdl_context.release_transactional_locks();
- table->mdl_request.init(MDL_key::TABLE, table->db.str, table->table_name.str,
- MDL_SHARED_NO_READ_WRITE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table->mdl_request, MDL_key::TABLE, table->db.str,
+ table->table_name.str, MDL_SHARED_NO_READ_WRITE,
+ MDL_TRANSACTION);
table->mdl_request.set_type(MDL_SHARED_READ);
table->lock_type= TL_READ;
diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc
index 0828e1b7ba8..23e2e3e097f 100644
--- a/sql/sql_alter.cc
+++ b/sql/sql_alter.cc
@@ -25,6 +25,7 @@ Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root)
:drop_list(rhs.drop_list, mem_root),
alter_list(rhs.alter_list, mem_root),
key_list(rhs.key_list, mem_root),
+ alter_rename_key_list(rhs.alter_rename_key_list, mem_root),
create_list(rhs.create_list, mem_root),
check_constraint_list(rhs.check_constraint_list, mem_root),
flags(rhs.flags), partition_flags(rhs.partition_flags),
@@ -46,6 +47,7 @@ Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root)
list_copy_and_replace_each_value(drop_list, mem_root);
list_copy_and_replace_each_value(alter_list, mem_root);
list_copy_and_replace_each_value(key_list, mem_root);
+ list_copy_and_replace_each_value(alter_rename_key_list, mem_root);
list_copy_and_replace_each_value(create_list, mem_root);
/* partition_names are not deeply copied currently */
}
diff --git a/sql/sql_alter.h b/sql/sql_alter.h
index 41408a91836..a553c31346a 100644
--- a/sql/sql_alter.h
+++ b/sql/sql_alter.h
@@ -19,6 +19,7 @@
class Alter_drop;
class Alter_column;
+class Alter_rename_key;
class Key;
/**
@@ -87,6 +88,8 @@ public:
List<Alter_column> alter_list;
// List of keys, used by both CREATE and ALTER TABLE.
List<Key> key_list;
+ // List of keys to be renamed.
+ List<Alter_rename_key> alter_rename_key_list;
// List of columns, used by both CREATE and ALTER TABLE.
List<Create_field> create_list;
@@ -123,6 +126,7 @@ public:
drop_list.empty();
alter_list.empty();
key_list.empty();
+ alter_rename_key_list.empty();
create_list.empty();
check_constraint_list.empty();
flags= 0;
diff --git a/sql/sql_analyze_stmt.cc b/sql/sql_analyze_stmt.cc
index fdabcf1e494..2f87b9b0d40 100644
--- a/sql/sql_analyze_stmt.cc
+++ b/sql/sql_analyze_stmt.cc
@@ -26,6 +26,7 @@
void Filesort_tracker::print_json_members(Json_writer *writer)
{
const char *varied_str= "(varied across executions)";
+ String str;
if (!get_r_loops())
writer->add_member("r_loops").add_null();
@@ -78,6 +79,28 @@ void Filesort_tracker::print_json_members(Json_writer *writer)
else
writer->add_size(sort_buffer_size);
}
+
+ get_data_format(&str);
+ writer->add_member("r_sort_mode").add_str(str.c_ptr(), str.length());
+}
+
+void Filesort_tracker::get_data_format(String *str)
+{
+ if (r_sort_keys_packed)
+ str->append("packed_sort_key");
+ else
+ str->append("sort_key");
+ str->append(",");
+
+ if (r_using_addons)
+ {
+ if (r_packed_addon_fields)
+ str->append("packed_addon_fields");
+ else
+ str->append("addon_fields");
+ }
+ else
+ str->append("rowid");
}
void attach_gap_time_tracker(THD *thd, Gap_time_tracker *gap_tracker,
diff --git a/sql/sql_analyze_stmt.h b/sql/sql_analyze_stmt.h
index 9d5151c3be2..bc7c60a318b 100644
--- a/sql/sql_analyze_stmt.h
+++ b/sql/sql_analyze_stmt.h
@@ -221,7 +221,10 @@ public:
time_tracker(do_timing), r_limit(0), r_used_pq(0),
r_examined_rows(0), r_sorted_rows(0), r_output_rows(0),
sort_passes(0),
- sort_buffer_size(0)
+ sort_buffer_size(0),
+ r_using_addons(false),
+ r_packed_addon_fields(false),
+ r_sort_keys_packed(false)
{}
/* Functions that filesort uses to report various things about its execution */
@@ -263,6 +266,18 @@ public:
else
sort_buffer_size= bufsize;
}
+
+ inline void report_addon_fields_format(bool addons_packed)
+ {
+ r_using_addons= true;
+ r_packed_addon_fields= addons_packed;
+ }
+ inline void report_sort_keys_format(bool sort_keys_packed)
+ {
+ r_sort_keys_packed= sort_keys_packed;
+ }
+
+ void get_data_format(String *str);
/* Functions to get the statistics */
void print_json_members(Json_writer *writer);
@@ -322,6 +337,9 @@ private:
other - value
*/
ulonglong sort_buffer_size;
+ bool r_using_addons;
+ bool r_packed_addon_fields;
+ bool r_sort_keys_packed;
};
diff --git a/sql/sql_array.h b/sql/sql_array.h
index 44dde114d62..b6de1b18d78 100644
--- a/sql/sql_array.h
+++ b/sql/sql_array.h
@@ -114,21 +114,21 @@ template <class Elem> class Dynamic_array
{
DYNAMIC_ARRAY array;
public:
- Dynamic_array(uint prealloc=16, uint increment=16)
+ Dynamic_array(PSI_memory_key psi_key, uint prealloc=16, uint increment=16)
{
- init(prealloc, increment);
+ init(psi_key, prealloc, increment);
}
Dynamic_array(MEM_ROOT *root, uint prealloc=16, uint increment=16)
{
void *init_buffer= alloc_root(root, sizeof(Elem) * prealloc);
- my_init_dynamic_array2(&array, sizeof(Elem), init_buffer,
+ init_dynamic_array2(root->m_psi_key, &array, sizeof(Elem), init_buffer,
prealloc, increment, MYF(0));
}
- void init(uint prealloc=16, uint increment=16)
+ void init(PSI_memory_key psi_key, uint prealloc=16, uint increment=16)
{
- init_dynamic_array2(&array, sizeof(Elem), 0, prealloc, increment, MYF(0));
+ init_dynamic_array2(psi_key, &array, sizeof(Elem), 0, prealloc, increment, MYF(0));
}
/**
@@ -170,6 +170,11 @@ public:
return ((const Elem*)array.buffer) + array.elements - 1;
}
+ const Elem *end() const
+ {
+ return back() + 1;
+ }
+
/// @returns pointer to n-th element
Elem *get_pos(size_t idx)
{
@@ -182,7 +187,6 @@ public:
return ((const Elem*)array.buffer) + idx;
}
-
/**
@retval false ok
@retval true OOM, @c my_error() has been called.
@@ -240,10 +244,16 @@ public:
freeze_size(&array);
}
+ bool reserve(size_t new_size)
+ {
+ return allocate_dynamic(&array, (uint)new_size);
+ }
+
+
bool resize(size_t new_size, Elem default_val)
{
size_t old_size= elements();
- if (unlikely(allocate_dynamic(&array, (uint)new_size)))
+ if (reserve(new_size))
return true;
if (new_size > old_size)
diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc
index ed175ae4865..3e9379ebe33 100644
--- a/sql/sql_audit.cc
+++ b/sql/sql_audit.cc
@@ -88,7 +88,7 @@ static my_bool acquire_plugins(THD *thd, plugin_ref plugin, void *arg)
if (unlikely(!thd->audit_class_plugins.buffer))
{
/* specify some reasonable initialization defaults */
- my_init_dynamic_array(&thd->audit_class_plugins,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &thd->audit_class_plugins,
sizeof(plugin_ref), 16, 16, MYF(0));
}
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index c88aef09c96..c41e08e4b8c 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -30,9 +30,6 @@
#include "sql_view.h" // mysql_make_view, VIEW_ANY_ACL
#include "sql_parse.h" // check_table_access
#include "sql_insert.h" // kill_delayed_threads
-#include "sql_acl.h" // *_ACL, check_grant_all_columns,
- // check_column_grant_in_table_ref,
- // get_column_grant
#include "sql_partition.h" // ALTER_PARTITION_PARAM_TYPE
#include "sql_derived.h" // mysql_derived_prepare,
// mysql_handle_derived,
@@ -437,7 +434,8 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables,
MDL_request *mdl_request= new (thd->mem_root) MDL_request;
if (mdl_request == NULL)
DBUG_RETURN(true);
- mdl_request->init(&table->mdl_request.key, MDL_EXCLUSIVE, MDL_STATEMENT);
+ MDL_REQUEST_INIT_BY_KEY(mdl_request, &table->mdl_request.key,
+ MDL_EXCLUSIVE, MDL_STATEMENT);
mdl_requests.push_front(mdl_request);
}
@@ -566,12 +564,12 @@ bool flush_tables(THD *thd, flush_tables_type flag)
write after last time all tables was closed.
*/
- if (!(tmp_table= (TABLE*) my_malloc(sizeof(*tmp_table),
+ if (!(tmp_table= (TABLE*) my_malloc(PSI_INSTRUMENT_ME, sizeof(*tmp_table),
MYF(MY_WME | MY_THREAD_SPECIFIC))))
DBUG_RETURN(1);
- my_init_dynamic_array(&collect_arg.shares, sizeof(TABLE_SHARE*), 100, 100,
- MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &collect_arg.shares,
+ sizeof(TABLE_SHARE*), 100, 100, MYF(0));
collect_arg.flush_type= flag;
if (tdc_iterate(thd, (my_hash_walk_action) tc_collect_used_shares,
&collect_arg, true))
@@ -1577,10 +1575,9 @@ open_table_get_mdl_lock(THD *thd, Open_table_context *ot_ctx,
DBUG_ASSERT(!(flags & MYSQL_OPEN_FORCE_SHARED_MDL) ||
!(flags & MYSQL_OPEN_FORCE_SHARED_HIGH_PRIO_MDL));
- mdl_request_shared.init(&mdl_request->key,
- (flags & MYSQL_OPEN_FORCE_SHARED_MDL) ?
- MDL_SHARED : MDL_SHARED_HIGH_PRIO,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT_BY_KEY(&mdl_request_shared, &mdl_request->key,
+ flags & MYSQL_OPEN_FORCE_SHARED_MDL ? MDL_SHARED : MDL_SHARED_HIGH_PRIO,
+ MDL_TRANSACTION);
mdl_request= &mdl_request_shared;
}
@@ -2064,7 +2061,8 @@ retry_share:
{
enum open_frm_error error;
/* make a new table */
- if (!(table=(TABLE*) my_malloc(sizeof(*table),MYF(MY_WME))))
+ if (!(table=(TABLE*) my_malloc(key_memory_TABLE, sizeof(*table),
+ MYF(MY_WME))))
goto err_lock;
error= open_table_from_share(thd, share, &table_list->alias,
@@ -2150,8 +2148,8 @@ retry_share:
DBUG_RETURN(TRUE);
}
- protection_request.init(MDL_key::BACKUP, "", "", mdl_type,
- MDL_STATEMENT);
+ MDL_REQUEST_INIT(&protection_request, MDL_key::BACKUP, "", "", mdl_type,
+ MDL_STATEMENT);
/*
Install error handler which if possible will convert deadlock error
@@ -3004,7 +3002,7 @@ static bool auto_repair_table(THD *thd, TABLE_LIST *table_list)
thd->clear_error();
- if (!(entry= (TABLE*)my_malloc(sizeof(TABLE), MYF(MY_WME))))
+ if (!(entry= (TABLE*)my_malloc(key_memory_TABLE, sizeof(TABLE), MYF(MY_WME))))
return result;
if (!(share= tdc_acquire_share(thd, table_list, GTS_TABLE)))
@@ -4043,9 +4041,8 @@ lock_table_names(THD *thd, const DDL_options_st &options,
MDL_request *schema_request= new (thd->mem_root) MDL_request;
if (schema_request == NULL)
DBUG_RETURN(TRUE);
- schema_request->init(MDL_key::SCHEMA, table->db.str, "",
- MDL_INTENTION_EXCLUSIVE,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(schema_request, MDL_key::SCHEMA, table->db.str, "",
+ MDL_INTENTION_EXCLUSIVE, MDL_TRANSACTION);
mdl_requests.push_front(schema_request);
}
@@ -4067,7 +4064,8 @@ lock_table_names(THD *thd, const DDL_options_st &options,
if (thd->has_read_only_protection())
DBUG_RETURN(true);
- global_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_DDL, MDL_STATEMENT);
+ MDL_REQUEST_INIT(&global_request, MDL_key::BACKUP, "", "", MDL_BACKUP_DDL,
+ MDL_STATEMENT);
mdl_savepoint= thd->mdl_context.mdl_savepoint();
while (!thd->mdl_context.acquire_locks(&mdl_requests, lock_wait_timeout) &&
@@ -5767,7 +5765,7 @@ find_field_in_view(THD *thd, TABLE_LIST *table_list,
replace. If the item was aliased by the user, set the alias to
the replacing item.
*/
- if (*ref && !(*ref)->is_autogenerated_name)
+ if (*ref && !(*ref)->is_autogenerated_name())
item->set_name(thd, (*ref)->name);
if (register_tree_change)
thd->change_item_tree(ref, item);
@@ -5858,7 +5856,7 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name, si
replace. If the item was aliased by the user, set the alias to
the replacing item.
*/
- if (*ref && !(*ref)->is_autogenerated_name)
+ if (*ref && !(*ref)->is_autogenerated_name())
item->set_name(thd, (*ref)->name);
if (register_tree_change && arena)
thd->restore_active_arena(arena, &backup);
diff --git a/sql/sql_binlog.cc b/sql/sql_binlog.cc
index 44a885bf0eb..ea91f68f360 100644
--- a/sql/sql_binlog.cc
+++ b/sql/sql_binlog.cc
@@ -144,7 +144,7 @@ int binlog_defragment(THD *thd)
}
thd->lex->comment.str= // to be freed by the caller
- (char *) my_malloc(thd->lex->comment.length, MYF(MY_WME));
+ (char *) my_malloc(PSI_INSTRUMENT_ME, thd->lex->comment.length, MYF(MY_WME));
if (!thd->lex->comment.str)
{
my_error(ER_OUTOFMEMORY, MYF(ME_FATAL), 1);
@@ -189,7 +189,7 @@ void mysql_client_binlog_statement(THD* thd)
thd->lex->comment.length : 2048),
thd->lex->comment.str));
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_BINLOG))
DBUG_VOID_RETURN;
/*
@@ -242,7 +242,8 @@ void mysql_client_binlog_statement(THD* thd)
}
decoded_len= my_base64_needed_decoded_length((int)coded_len);
- if (!(buf= (char *) my_malloc(decoded_len, MYF(MY_WME))))
+ if (!(buf= (char *) my_malloc(key_memory_binlog_statement_buffer,
+ decoded_len, MYF(MY_WME))))
{
my_error(ER_OUTOFMEMORY, MYF(ME_FATAL), 1);
goto end;
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 5b649b739c6..00681ba8e2a 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -2727,8 +2727,8 @@ size_t Query_cache::init_cache()
DUMP(this);
- (void) my_hash_init(&queries, &my_charset_bin, def_query_hash_size, 0, 0,
- query_cache_query_get_key, 0, 0);
+ (void) my_hash_init(key_memory_Query_cache, &queries, &my_charset_bin,
+ def_query_hash_size, 0,0, query_cache_query_get_key,0,0);
#ifndef FN_NO_CASE_SENSE
/*
If lower_case_table_names!=0 then db and table names are already
@@ -2738,8 +2738,8 @@ size_t Query_cache::init_cache()
lower_case_table_names == 0 then we should distinguish my_table
and MY_TABLE cases and so again can use binary collation.
*/
- (void) my_hash_init(&tables, &my_charset_bin, def_table_hash_size, 0, 0,
- query_cache_table_get_key, 0, 0);
+ (void) my_hash_init(key_memory_Query_cache, &tables, &my_charset_bin,
+ def_table_hash_size, 0,0, query_cache_table_get_key, 0,0);
#else
/*
On windows, OS/2, MacOS X with HFS+ or any other case insensitive
@@ -2749,11 +2749,9 @@ size_t Query_cache::init_cache()
file system) and so should use case insensitive collation for
comparison.
*/
- (void) my_hash_init(&tables,
- lower_case_table_names ? &my_charset_bin :
- files_charset_info,
- def_table_hash_size, 0, 0,query_cache_table_get_key,
- 0, 0);
+ (void) my_hash_init(PSI_INSTRUMENT_ME, &tables, lower_case_table_names ?
+ &my_charset_bin : files_charset_info,
+ def_table_hash_size, 0,0, query_cache_table_get_key, 0,0);
#endif
queries_in_cache = 0;
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 2ffb61a98f2..2143a9d4008 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -632,8 +632,8 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
:Statement(&main_lex, &main_mem_root, STMT_CONVENTIONAL_EXECUTION,
/* statement id */ 0),
rli_fake(0), rgi_fake(0), rgi_slave(NULL),
- protocol_text(this), protocol_binary(this),
- m_current_stage_key(0),
+ protocol_text(this), protocol_binary(this), initial_status_var(0),
+ m_current_stage_key(0), m_psi(0),
in_sub_stmt(0), log_all_errors(0),
binlog_unsafe_warning_flags(0),
binlog_table_maps(0),
@@ -643,6 +643,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
accessed_rows_and_keys(0),
m_digest(NULL),
m_statement_psi(NULL),
+ m_transaction_psi(NULL),
m_idle_psi(NULL),
col_access(NO_ACL),
thread_id(id),
@@ -743,8 +744,9 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
the destructor works OK in case of an error. The main_mem_root
will be re-initialized in init_for_queries().
*/
- init_sql_alloc(&main_mem_root, "THD::main_mem_root",
- ALLOC_ROOT_MIN_BLOCK_SIZE, 0, MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_thd_main_mem_root,
+ &main_mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0,
+ MYF(MY_THREAD_SPECIFIC));
/*
Allocation of user variables for binary logging is always done with main
@@ -756,7 +758,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
thread_stack= 0;
scheduler= thread_scheduler; // Will be fixed later
event_scheduler.data= 0;
- event_scheduler.m_psi= 0;
skip_wait_timeout= false;
catalog= (char*)"std"; // the only catalog we have for now
main_security_ctx.init();
@@ -843,12 +844,13 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
profiling.set_thd(this);
#endif
user_connect=(USER_CONN *)0;
- my_hash_init(&user_vars, system_charset_info, USER_VARS_HASH_SIZE, 0, 0,
- (my_hash_get_key) get_var_key,
+ my_hash_init(key_memory_user_var_entry, &user_vars, system_charset_info,
+ USER_VARS_HASH_SIZE, 0, 0, (my_hash_get_key) get_var_key,
(my_hash_free_key) free_user_var, HASH_THREAD_SPECIFIC);
- my_hash_init(&sequences, system_charset_info, SEQUENCES_HASH_SIZE, 0, 0,
- (my_hash_get_key) get_sequence_last_key,
- (my_hash_free_key) free_sequence_last, HASH_THREAD_SPECIFIC);
+ my_hash_init(PSI_INSTRUMENT_ME, &sequences, system_charset_info,
+ SEQUENCES_HASH_SIZE, 0, 0, (my_hash_get_key)
+ get_sequence_last_key, (my_hash_free_key) free_sequence_last,
+ HASH_THREAD_SPECIFIC);
sp_proc_cache= NULL;
sp_func_cache= NULL;
@@ -857,7 +859,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
/* For user vars replication*/
if (opt_bin_log)
- my_init_dynamic_array(&user_var_events,
+ my_init_dynamic_array(key_memory_user_var_entry, &user_var_events,
sizeof(BINLOG_USER_VAR_EVENT *), 16, 16, MYF(0));
else
bzero((char*) &user_var_events, sizeof(user_var_events));
@@ -885,7 +887,8 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
m_token_array= NULL;
if (max_digest_length > 0)
{
- m_token_array= (unsigned char*) my_malloc(max_digest_length,
+ m_token_array= (unsigned char*) my_malloc(PSI_INSTRUMENT_ME,
+ max_digest_length,
MYF(MY_WME|MY_THREAD_SPECIFIC));
}
@@ -1185,19 +1188,9 @@ void *thd_memdup(MYSQL_THD thd, const void* str, size_t size)
extern "C"
void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid)
{
-#ifdef WITH_WSREP
- if (!thd->wsrep_xid.is_null())
- {
- *xid = *(MYSQL_XID *) &thd->wsrep_xid;
- return;
- }
-#endif /* WITH_WSREP */
- *xid= thd->transaction.xid_state.is_explicit_XA() ?
- *(MYSQL_XID *) thd->transaction.xid_state.get_xid() :
- *(MYSQL_XID *) &thd->transaction.implicit_xid;
+ *xid = *(MYSQL_XID *) thd->get_xid();
}
-
extern "C"
my_time_t thd_TIME_to_gmt_sec(MYSQL_THD thd, const MYSQL_TIME *ltime,
unsigned int *errcode)
@@ -1448,12 +1441,13 @@ void THD::change_user(void)
init();
stmt_map.reset();
- my_hash_init(&user_vars, system_charset_info, USER_VARS_HASH_SIZE, 0, 0,
- (my_hash_get_key) get_var_key,
- (my_hash_free_key) free_user_var, 0);
- my_hash_init(&sequences, system_charset_info, SEQUENCES_HASH_SIZE, 0, 0,
- (my_hash_get_key) get_sequence_last_key,
- (my_hash_free_key) free_sequence_last, HASH_THREAD_SPECIFIC);
+ my_hash_init(key_memory_user_var_entry, &user_vars, system_charset_info,
+ USER_VARS_HASH_SIZE, 0, 0, (my_hash_get_key) get_var_key,
+ (my_hash_free_key) free_user_var, HASH_THREAD_SPECIFIC);
+ my_hash_init(key_memory_user_var_entry, &sequences, system_charset_info,
+ SEQUENCES_HASH_SIZE, 0, 0, (my_hash_get_key)
+ get_sequence_last_key, (my_hash_free_key) free_sequence_last,
+ HASH_THREAD_SPECIFIC);
sp_cache_clear(&sp_proc_cache);
sp_cache_clear(&sp_func_cache);
sp_cache_clear(&sp_package_spec_cache);
@@ -1490,7 +1484,8 @@ bool THD::set_db(const LEX_CSTRING *new_db)
const char *tmp= NULL;
if (new_db->str)
{
- if (!(tmp= my_strndup(new_db->str, new_db->length, MYF(MY_WME | ME_FATAL))))
+ if (!(tmp= my_strndup(key_memory_THD_db, new_db->str, new_db->length,
+ MYF(MY_WME | ME_FATAL))))
result= 1;
}
@@ -1682,6 +1677,8 @@ THD::~THD()
DBUG_ENTER("~THD()");
/* Make sure threads are not available via server_threads. */
assert_not_linked();
+ if (m_psi)
+ PSI_CALL_set_thread_THD(m_psi, 0);
/*
In error cases, thd may not be current thd. We have to fix this so
@@ -3929,12 +3926,12 @@ Statement_map::Statement_map() :
START_STMT_HASH_SIZE = 16,
START_NAME_HASH_SIZE = 16
};
- my_hash_init(&st_hash, &my_charset_bin, START_STMT_HASH_SIZE, 0, 0,
- get_statement_id_as_hash_key,
+ my_hash_init(key_memory_prepared_statement_map, &st_hash, &my_charset_bin,
+ START_STMT_HASH_SIZE, 0, 0, get_statement_id_as_hash_key,
delete_statement_as_hash_key, MYF(0));
- my_hash_init(&names_hash, system_charset_info, START_NAME_HASH_SIZE, 0, 0,
+ my_hash_init(key_memory_prepared_statement_map, &names_hash, system_charset_info, START_NAME_HASH_SIZE, 0, 0,
(my_hash_get_key) get_stmt_name_hash_key,
- NULL,MYF(0));
+ NULL, MYF(0));
}
@@ -4338,8 +4335,8 @@ void Security_context::skip_grants()
bool Security_context::set_user(char *user_arg)
{
- my_free((char*) user);
- user= my_strdup(user_arg, MYF(0));
+ my_free(const_cast<char*>(user));
+ user= my_strdup(key_memory_MPVIO_EXT_auth_info, user_arg, MYF(0));
return user == 0;
}
@@ -4827,6 +4824,7 @@ MYSQL_THD create_background_thd()
auto thd_mysysvar= pthread_getspecific(THR_KEY_mysys);
auto thd= new THD(0);
pthread_setspecific(THR_KEY_mysys, save_mysysvar);
+ thd->set_psi(PSI_CALL_get_thread());
/*
Workaround the adverse effect of incrementing thread_count
@@ -6601,7 +6599,8 @@ CPP_UNNAMED_NS_START
}
else
{
- m_memory= (uchar *) my_malloc(total_length, MYF(MY_WME));
+ m_memory= (uchar *) my_malloc(key_memory_Row_data_memory_memory,
+ total_length, MYF(MY_WME));
m_release_memory_on_destruction= TRUE;
}
}
@@ -7785,3 +7784,8 @@ bool THD::timestamp_to_TIME(MYSQL_TIME *ltime, my_time_t ts,
}
return 0;
}
+
+THD_list_iterator *THD_list_iterator::iterator()
+{
+ return &server_threads;
+}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 13b2659789d..acd304e24ea 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -106,7 +106,8 @@ enum enum_slave_exec_mode { SLAVE_EXEC_MODE_STRICT,
SLAVE_EXEC_MODE_LAST_BIT };
enum enum_slave_run_triggers_for_rbr { SLAVE_RUN_TRIGGERS_FOR_RBR_NO,
SLAVE_RUN_TRIGGERS_FOR_RBR_YES,
- SLAVE_RUN_TRIGGERS_FOR_RBR_LOGGING};
+ SLAVE_RUN_TRIGGERS_FOR_RBR_LOGGING,
+ SLAVE_RUN_TRIGGERS_FOR_RBR_ENFORCE};
enum enum_slave_type_conversions { SLAVE_TYPE_CONVERSIONS_ALL_LOSSY,
SLAVE_TYPE_CONVERSIONS_ALL_NON_LOSSY};
@@ -333,17 +334,40 @@ public:
class Alter_column :public Sql_alloc {
public:
- const char *name;
+ LEX_CSTRING name;
+ LEX_CSTRING new_name;
Virtual_column_info *default_value;
bool alter_if_exists;
- Alter_column(const char *par_name, Virtual_column_info *expr, bool par_exists)
- :name(par_name), default_value(expr), alter_if_exists(par_exists) {}
+ Alter_column(LEX_CSTRING par_name, Virtual_column_info *expr, bool par_exists)
+ :name(par_name), new_name{NULL, 0}, default_value(expr), alter_if_exists(par_exists) {}
+ Alter_column(LEX_CSTRING par_name, LEX_CSTRING _new_name)
+ :name(par_name), new_name(_new_name), default_value(NULL), alter_if_exists(false) {}
/**
Used to make a clone of this object for ALTER/CREATE TABLE
@sa comment for Key_part_spec::clone
*/
Alter_column *clone(MEM_ROOT *mem_root) const
{ return new (mem_root) Alter_column(*this); }
+ bool is_rename()
+ {
+ DBUG_ASSERT(!new_name.str || !default_value);
+ return new_name.str;
+ }
+};
+
+
+class Alter_rename_key : public Sql_alloc
+{
+public:
+ LEX_CSTRING old_name;
+ LEX_CSTRING new_name;
+
+ Alter_rename_key(LEX_CSTRING old_name_arg, LEX_CSTRING new_name_arg)
+ : old_name(old_name_arg), new_name(new_name_arg) {}
+
+ Alter_rename_key *clone(MEM_ROOT *mem_root) const
+ { return new (mem_root) Alter_rename_key(*this); }
+
};
@@ -936,6 +960,10 @@ typedef struct system_status_var
#define last_system_status_var questions
#define last_cleared_system_status_var local_memory_used
+/* Number of contiguous global status variables. */
+const int COUNT_GLOBAL_STATUS_VARS= (offsetof(STATUS_VAR, last_system_status_var) /
+ sizeof(ulong)) + 1;
+
/*
Global status variables
*/
@@ -993,6 +1021,39 @@ inline bool is_supported_parser_charset(CHARSET_INFO *cs)
return MY_TEST(cs->mbminlen == 1);
}
+/** THD registry */
+class THD_list_iterator
+{
+protected:
+ I_List<THD> threads;
+ mutable mysql_rwlock_t lock;
+
+public:
+
+ /**
+ Iterates registered threads.
+
+ @param action called for every element
+ @param argument opque argument passed to action
+
+ @return
+ @retval 0 iteration completed successfully
+ @retval 1 iteration was interrupted (action returned 1)
+ */
+ template <typename T> int iterate(my_bool (*action)(THD *thd, T *arg), T *arg= 0)
+ {
+ int res= 0;
+ mysql_rwlock_rdlock(&lock);
+ I_List_iterator<THD> it(threads);
+ while (auto tmp= it++)
+ if ((res= action(tmp, arg)))
+ break;
+ mysql_rwlock_unlock(&lock);
+ return res;
+ }
+ static THD_list_iterator *iterator();
+};
+
#ifdef MYSQL_SERVER
void free_tmp_table(THD *thd, TABLE *entry);
@@ -1905,9 +1966,8 @@ public:
m_reopen_array(NULL),
m_locked_tables_count(0)
{
- init_sql_alloc(&m_locked_tables_root, "Locked_tables_list",
- MEM_ROOT_BLOCK_SIZE, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_locked_table_list, &m_locked_tables_root,
+ MEM_ROOT_BLOCK_SIZE, 0, MYF(MY_THREAD_SPECIFIC));
}
void unlock_locked_tables(THD *thd);
void unlock_locked_table(THD *thd, MDL_ticket *mdl_ticket);
@@ -2348,9 +2408,22 @@ public:
*/
const char *proc_info;
+ void set_psi(PSI_thread *psi)
+ {
+ my_atomic_storeptr((void*volatile*)&m_psi, psi);
+ }
+
+ PSI_thread* get_psi()
+ {
+ return static_cast<PSI_thread*>(my_atomic_loadptr((void*volatile*)&m_psi));
+ }
+
private:
unsigned int m_current_stage_key;
+ /** Performance schema thread instrumentation for this session. */
+ PSI_thread *m_psi;
+
public:
void enter_stage(const PSI_stage_info *stage,
const char *calling_func,
@@ -2367,7 +2440,7 @@ public:
calling_line);
#endif
#ifdef HAVE_PSI_THREAD_INTERFACE
- MYSQL_SET_STAGE(m_current_stage_key, calling_file, calling_line);
+ m_stage_progress_psi= MYSQL_SET_STAGE(m_current_stage_key, calling_file, calling_line);
#endif
}
@@ -2666,9 +2739,8 @@ public:
{
bzero((char*)this, sizeof(*this));
implicit_xid.null();
- init_sql_alloc(&mem_root, "THD::transactions",
- ALLOC_ROOT_MIN_BLOCK_SIZE, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_thd_transactions, &mem_root,
+ ALLOC_ROOT_MIN_BLOCK_SIZE, 0, MYF(MY_THREAD_SPECIFIC));
}
} transaction;
Global_read_lock global_read_lock;
@@ -2966,6 +3038,8 @@ public:
PROFILING profiling;
#endif
+ /** Current stage progress instrumentation. */
+ PSI_stage_progress *m_stage_progress_psi;
/** Current statement digest. */
sql_digest_state *m_digest;
/** Current statement digest token array. */
@@ -2979,6 +3053,14 @@ public:
/** Current statement instrumentation state. */
PSI_statement_locker_state m_statement_state;
#endif /* HAVE_PSI_STATEMENT_INTERFACE */
+
+ /** Current transaction instrumentation. */
+ PSI_transaction_locker *m_transaction_psi;
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ /** Current transaction instrumentation state. */
+ PSI_transaction_locker_state m_transaction_state;
+#endif /* HAVE_PSI_TRANSACTION_INTERFACE */
+
/** Idle instrumentation. */
PSI_idle_locker *m_idle_psi;
#ifdef HAVE_PSI_IDLE_INTERFACE
@@ -4745,6 +4827,17 @@ public:
LF_PINS *xid_hash_pins;
bool fix_xid_hash_pins();
+ const XID *get_xid() const
+ {
+#ifdef WITH_WSREP
+ if (!wsrep_xid.is_null())
+ return &wsrep_xid;
+#endif /* WITH_WSREP */
+ return transaction.xid_state.is_explicit_XA() ?
+ transaction.xid_state.get_xid() :
+ &transaction.implicit_xid;
+ }
+
/* Members related to temporary tables. */
public:
/* Opened table states. */
@@ -6253,8 +6346,52 @@ public:
/* Structs used when sorting */
struct SORT_FIELD_ATTR
{
- uint length; /* Length of sort field */
- uint suffix_length; /* Length suffix (0-4) */
+ /*
+ If using mem-comparable fixed-size keys:
+ length of the mem-comparable image of the field, in bytes.
+
+ If using packed keys: still the same? Not clear what is the use of it.
+ */
+ uint length;
+
+ /*
+ For most datatypes, this is 0.
+ The exception are the VARBINARY columns.
+ For those columns, the comparison actually compares
+
+ (value_prefix(N), suffix=length(value))
+
+ Here value_prefix is either the whole value or its prefix if it was too
+ long, and the suffix is the length of the original value.
+ (this way, for values X and Y: if X=prefix(Y) then X compares as less
+ than Y
+ */
+ uint suffix_length;
+
+ /*
+ If using packed keys, number of bytes that are used to store the length
+ of the packed key.
+
+ */
+ uint length_bytes;
+
+ /* Max. length of the original value, in bytes */
+ uint original_length;
+ enum Type { FIXED_SIZE, VARIABLE_SIZE } type;
+ /*
+ TRUE : if the item or field is NULLABLE
+ FALSE : otherwise
+ */
+ bool maybe_null;
+ CHARSET_INFO *cs;
+ uint pack_sort_string(uchar *to, const LEX_CSTRING &str,
+ CHARSET_INFO *cs) const;
+ int compare_packed_fixed_size_vals(uchar *a, size_t *a_len,
+ uchar *b, size_t *b_len);
+ int compare_packed_varstrings(uchar *a, size_t *a_len,
+ uchar *b, size_t *b_len);
+ bool check_if_packing_possible(THD *thd) const;
+ bool is_variable_sized() { return type == VARIABLE_SIZE; }
};
@@ -6795,8 +6932,8 @@ inline int handler::ha_write_tmp_row(uchar *buf)
int error;
MYSQL_INSERT_ROW_START(table_share->db.str, table_share->table_name.str);
increment_statistics(&SSV::ha_tmp_write_count);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_WRITE_ROW, MAX_KEY, 0,
- { error= write_row(buf); })
+ TABLE_IO_WAIT(tracker, PSI_TABLE_WRITE_ROW, MAX_KEY, error,
+ { error= write_row(buf); })
MYSQL_INSERT_ROW_DONE(error);
return error;
}
@@ -6806,7 +6943,7 @@ inline int handler::ha_delete_tmp_row(uchar *buf)
int error;
MYSQL_DELETE_ROW_START(table_share->db.str, table_share->table_name.str);
increment_statistics(&SSV::ha_tmp_delete_count);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_DELETE_ROW, MAX_KEY, 0,
+ TABLE_IO_WAIT(tracker, PSI_TABLE_DELETE_ROW, MAX_KEY, error,
{ error= delete_row(buf); })
MYSQL_DELETE_ROW_DONE(error);
return error;
@@ -6817,13 +6954,12 @@ inline int handler::ha_update_tmp_row(const uchar *old_data, uchar *new_data)
int error;
MYSQL_UPDATE_ROW_START(table_share->db.str, table_share->table_name.str);
increment_statistics(&SSV::ha_tmp_update_count);
- TABLE_IO_WAIT(tracker, m_psi, PSI_TABLE_UPDATE_ROW, active_index, 0,
- { error= update_row(old_data, new_data);})
+ TABLE_IO_WAIT(tracker, PSI_TABLE_UPDATE_ROW, active_index, error,
+ { error= update_row(old_data, new_data);})
MYSQL_UPDATE_ROW_DONE(error);
return error;
}
-
extern pthread_attr_t *get_connection_attrib(void);
/**
@@ -7191,11 +7327,8 @@ private:
/** THD registry */
-class THD_list
+class THD_list: public THD_list_iterator
{
- I_List<THD> threads;
- mutable mysql_rwlock_t lock;
-
public:
/**
Constructor replacement.
@@ -7243,28 +7376,6 @@ public:
thd->unlink();
mysql_rwlock_unlock(&lock);
}
-
- /**
- Iterates registered threads.
-
- @param action called for every element
- @param argument opque argument passed to action
-
- @return
- @retval 0 iteration completed successfully
- @retval 1 iteration was interrupted (action returned 1)
- */
- template <typename T> int iterate(my_bool (*action)(THD *thd, T *arg), T *arg= 0)
- {
- int res= 0;
- mysql_rwlock_rdlock(&lock);
- I_List_iterator<THD> it(threads);
- while (auto tmp= it++)
- if ((res= action(tmp, arg)))
- break;
- mysql_rwlock_unlock(&lock);
- return res;
- }
};
extern THD_list server_threads;
diff --git a/sql/sql_cmd.h b/sql/sql_cmd.h
index 1f8f2dcabc9..ce34852117f 100644
--- a/sql/sql_cmd.h
+++ b/sql/sql_cmd.h
@@ -38,7 +38,7 @@ enum enum_sql_command {
SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS,
SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_STATUS,
SQLCOM_SHOW_ENGINE_LOGS, SQLCOM_SHOW_ENGINE_STATUS, SQLCOM_SHOW_ENGINE_MUTEX,
- SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT,
+ SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_BINLOG_STAT, SQLCOM_SHOW_SLAVE_STAT,
SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS,
SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_SHOW_TABLE_STATUS,
SQLCOM_SHOW_TRIGGERS,
diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc
index e2a3c482ae4..d5a90089da4 100644
--- a/sql/sql_connect.cc
+++ b/sql/sql_connect.cc
@@ -35,7 +35,6 @@
#include "sql_db.h" // mysql_change_db
#include "hostname.h" // inc_host_errors, ip_to_hostname,
// reset_host_errors
-#include "privilege.h" // acl_getroot, SUPER_ACL
#include "sql_callback.h"
#ifdef WITH_WSREP
@@ -81,8 +80,8 @@ int get_or_create_user_conn(THD *thd, const char *user,
{
/* First connection for user; Create a user connection object */
if (!(uc= ((struct user_conn*)
- my_malloc(sizeof(struct user_conn) + temp_len+1,
- MYF(MY_WME)))))
+ my_malloc(key_memory_user_conn,
+ sizeof(struct user_conn) + temp_len+1, MYF(MY_WME)))))
{
/* MY_WME ensures an error is set in THD. */
return_val= 1;
@@ -140,7 +139,7 @@ int check_for_max_user_connections(THD *thd, USER_CONN *uc)
if (global_system_variables.max_user_connections &&
!uc->user_resources.user_conn &&
global_system_variables.max_user_connections < uc->connections &&
- !(thd->security_ctx->master_access & SUPER_ACL))
+ !(thd->security_ctx->master_access & PRIV_IGNORE_MAX_USER_CONNECTIONS))
{
my_error(ER_TOO_MANY_USER_CONNECTIONS, MYF(0), uc->user);
error=1;
@@ -322,9 +321,9 @@ extern "C" void free_user(struct user_conn *uc)
void init_max_user_conn(void)
{
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- my_hash_init(&hash_user_connections, system_charset_info, max_connections,
- 0, 0, (my_hash_get_key) get_key_conn,
- (my_hash_free_key) free_user, 0);
+ my_hash_init(key_memory_user_conn, &hash_user_connections,
+ system_charset_info, max_connections, 0, 0, (my_hash_get_key)
+ get_key_conn, (my_hash_free_key) free_user, 0);
#endif
}
@@ -483,14 +482,14 @@ void init_user_stats(USER_STATS *user_stats,
void init_global_user_stats(void)
{
- my_hash_init(&global_user_stats, system_charset_info, max_connections,
+ my_hash_init(PSI_INSTRUMENT_ME, &global_user_stats, system_charset_info, max_connections,
0, 0, (my_hash_get_key) get_key_user_stats,
(my_hash_free_key) free_user_stats, 0);
}
void init_global_client_stats(void)
{
- my_hash_init(&global_client_stats, system_charset_info, max_connections,
+ my_hash_init(PSI_INSTRUMENT_ME, &global_client_stats, system_charset_info, max_connections,
0, 0, (my_hash_get_key) get_key_user_stats,
(my_hash_free_key) free_user_stats, 0);
}
@@ -509,8 +508,8 @@ extern "C" void free_table_stats(TABLE_STATS* table_stats)
void init_global_table_stats(void)
{
- my_hash_init(&global_table_stats, system_charset_info, max_connections,
- 0, 0, (my_hash_get_key) get_key_table_stats,
+ my_hash_init(PSI_INSTRUMENT_ME, &global_table_stats, system_charset_info,
+ max_connections, 0, 0, (my_hash_get_key) get_key_table_stats,
(my_hash_free_key) free_table_stats, 0);
}
@@ -528,8 +527,8 @@ extern "C" void free_index_stats(INDEX_STATS* index_stats)
void init_global_index_stats(void)
{
- my_hash_init(&global_index_stats, system_charset_info, max_connections,
- 0, 0, (my_hash_get_key) get_key_index_stats,
+ my_hash_init(PSI_INSTRUMENT_ME, &global_index_stats, system_charset_info,
+ max_connections, 0, 0, (my_hash_get_key) get_key_index_stats,
(my_hash_free_key) free_index_stats, 0);
}
@@ -571,7 +570,7 @@ static bool increment_count_by_name(const char *name, size_t name_length,
{
/* First connection for this user or client */
if (!(user_stats= ((USER_STATS*)
- my_malloc(sizeof(USER_STATS),
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(USER_STATS),
MYF(MY_WME | MY_ZEROFILL)))))
return TRUE; // Out of memory
@@ -880,7 +879,7 @@ int thd_set_peer_addr(THD *thd,
}
my_free((void *)thd->main_security_ctx.ip);
- if (!(thd->main_security_ctx.ip = my_strdup(ip, MYF(MY_WME))))
+ if (!(thd->main_security_ctx.ip = my_strdup(PSI_INSTRUMENT_ME, ip, MYF(MY_WME))))
{
/*
No error accounting per IP in host_cache,
@@ -1246,7 +1245,8 @@ void prepare_new_connection_state(THD* thd)
thd->set_command(COM_SLEEP);
thd->init_for_queries();
- if (opt_init_connect.length && !(sctx->master_access & SUPER_ACL))
+ if (opt_init_connect.length &&
+ !(sctx->master_access & PRIV_IGNORE_INIT_CONNECT))
{
execute_init_command(thd, &opt_init_connect, &LOCK_sys_init_connect);
if (unlikely(thd->is_error()))
@@ -1435,6 +1435,10 @@ end_thread:
!(connect= cache_thread(thd)))
break;
+ /* Create new instrumentation for the new THD job */
+ PSI_CALL_set_thread(PSI_CALL_new_thread(key_thread_one_connection, thd,
+ thd->thread_id));
+
if (!(connect->create_thd(thd)))
{
/* Out of resources. Free thread to get more resources */
@@ -1449,13 +1453,6 @@ end_thread:
*/
thd->store_globals();
- /*
- Create new instrumentation for the new THD job,
- and attach it to this running pthread.
- */
- PSI_CALL_set_thread(PSI_CALL_new_thread(key_thread_one_connection,
- thd, thd->thread_id));
-
/* reset abort flag for the thread */
thd->mysys_var->abort= 0;
thd->thr_create_utime= microsecond_interval_timer();
@@ -1576,5 +1573,14 @@ THD *CONNECT::create_thd(THD *thd)
thd->scheduler= scheduler;
thd->real_id= pthread_self(); /* Duplicates THD::store_globals() setting. */
+
+ /* Attach PSI instrumentation to the new THD */
+
+ PSI_thread *psi= PSI_CALL_get_thread();
+ PSI_CALL_set_thread_os_id(psi);
+ PSI_CALL_set_thread_THD(psi, thd);
+ PSI_CALL_set_thread_id(psi, thd->thread_id);
+ thd->set_psi(psi);
+
DBUG_RETURN(thd);
}
diff --git a/sql/sql_const.h b/sql/sql_const.h
index f7c820c727b..a3f0e35ac47 100644
--- a/sql/sql_const.h
+++ b/sql/sql_const.h
@@ -309,4 +309,6 @@
#define QUERY_PRIOR 6
#endif /* __WIN92__ */
+#define SP_PSI_STATEMENT_INFO_COUNT 19
+
#endif /* SQL_CONST_INCLUDED */
diff --git a/sql/sql_cte.cc b/sql/sql_cte.cc
index c7a0f9186e2..93344956468 100644
--- a/sql/sql_cte.cc
+++ b/sql/sql_cte.cc
@@ -21,6 +21,7 @@
#include "sql_view.h" // for make_valid_column_names
#include "sql_parse.h"
#include "sql_select.h"
+#include "sql_show.h" // append_definer, append_identifier
/**
@@ -944,9 +945,9 @@ err:
false otherwise
*/
-bool
-With_element::rename_columns_of_derived_unit(THD *thd,
- st_select_lex_unit *unit)
+bool
+With_element::process_columns_of_derived_unit(THD *thd,
+ st_select_lex_unit *unit)
{
if (unit->columns_are_renamed)
return false;
@@ -973,7 +974,7 @@ With_element::rename_columns_of_derived_unit(THD *thd,
while ((item= it++, name= nm++))
{
item->set_name(thd, *name);
- item->is_autogenerated_name= false;
+ item->common_flags&= ~IS_AUTO_GENERATED_NAME;
}
if (arena)
@@ -982,6 +983,43 @@ With_element::rename_columns_of_derived_unit(THD *thd,
else
make_valid_column_names(thd, select->item_list);
+ if (cycle_list)
+ {
+ List_iterator_fast<Item> it(select->item_list);
+ List_iterator_fast<Lex_ident_sys> nm(*cycle_list);
+ List_iterator_fast<Lex_ident_sys> nm_check(*cycle_list);
+ DBUG_ASSERT(cycle_list->elements != 0);
+ while (LEX_CSTRING *name= nm++)
+ {
+ Item *item;
+ /*
+ Check for uniqueness of each element in the cycle list:
+ It's sufficient to check that there is no duplicate of 'name'
+ among the elements that precede it.
+ */
+ LEX_CSTRING *check;
+ nm_check.rewind();
+ while ((check= nm_check++) && check != name)
+ {
+ if (check->length == name->length &&
+ strncmp(check->str, name->str, name->length) == 0)
+ {
+ my_error(ER_DUP_FIELDNAME, MYF(0), check->str);
+ return true;
+ }
+ }
+ /* Check that 'name' is the name of a column of the processed CTE */
+ while ((item= it++) &&
+ (item->name.length != name->length ||
+ strncmp(item->name.str, name->str, name->length) != 0));
+ if (item == NULL)
+ {
+ my_error(ER_BAD_FIELD_ERROR, MYF(0), name->str, "CYCLE clause");
+ return true;
+ }
+ item->common_flags|= IS_IN_WITH_CYCLE;
+ }
+ }
unit->columns_are_renamed= true;
return false;
@@ -1018,7 +1056,7 @@ bool With_element::prepare_unreferenced(THD *thd)
thd->lex->context_analysis_only|= CONTEXT_ANALYSIS_ONLY_DERIVED;
if (!spec->prepared &&
(spec->prepare(spec->derived, 0, 0) ||
- rename_columns_of_derived_unit(thd, spec) ||
+ process_columns_of_derived_unit(thd, spec) ||
check_duplicate_names(thd, first_sl->item_list, 1)))
rc= true;
@@ -1394,16 +1432,17 @@ bool st_select_lex::check_subqueries_with_recursive_references()
/**
@brief
Print this with clause
-
+
+ @param thd Thread handle
@param str Where to print to
- @param query_type The mode of printing
-
+ @param query_type The mode of printing
+
@details
- The method prints a string representation of this clause in the
+ The method prints a string representation of this clause in the
string str. The parameter query_type specifies the mode of printing.
-*/
+*/
-void With_clause::print(String *str, enum_query_type query_type)
+void With_clause::print(THD *thd, String *str, enum_query_type query_type)
{
/*
Any with clause contains just definitions of CTE tables.
@@ -1420,7 +1459,22 @@ void With_clause::print(String *str, enum_query_type query_type)
{
if (with_elem != with_list.first)
str->append(", ");
- with_elem->print(str, query_type);
+ with_elem->print(thd, str, query_type);
+ }
+}
+
+
+static void list_strlex_print(THD *thd, String *str, List<Lex_ident_sys> *list)
+{
+ List_iterator_fast<Lex_ident_sys> li(*list);
+ bool first= TRUE;
+ while(Lex_ident_sys *col_name= li++)
+ {
+ if (first)
+ first= FALSE;
+ else
+ str->append(',');
+ append_identifier(thd, str, col_name);
}
}
@@ -1428,38 +1482,37 @@ void With_clause::print(String *str, enum_query_type query_type)
/**
@brief
Print this with element
-
+
+ @param thd Thread handle
@param str Where to print to
- @param query_type The mode of printing
-
+ @param query_type The mode of printing
+
@details
- The method prints a string representation of this with element in the
+ The method prints a string representation of this with element in the
string str. The parameter query_type specifies the mode of printing.
*/
-void With_element::print(String *str, enum_query_type query_type)
+void With_element::print(THD *thd, String *str, enum_query_type query_type)
{
str->append(query_name);
if (column_list.elements)
{
List_iterator_fast<Lex_ident_sys> li(column_list);
str->append('(');
- for (LEX_CSTRING *col_name= li++; ; )
- {
- str->append(col_name);
- col_name= li++;
- if (!col_name)
- {
- str->append(')');
- break;
- }
- str->append(',');
- }
+ list_strlex_print(thd, str, &column_list);
+ str->append(')');
}
- str->append(STRING_WITH_LEN(" as "));
- str->append('(');
+ str->append(STRING_WITH_LEN(" as ("));
spec->print(str, query_type);
str->append(')');
+
+ if (cycle_list)
+ {
+ DBUG_ASSERT(cycle_list->elements != 0);
+ str->append(STRING_WITH_LEN(" CYCLE "));
+ list_strlex_print(thd, str, cycle_list);
+ str->append(STRING_WITH_LEN(" RESTRICT "));
+ }
}
@@ -1483,3 +1536,26 @@ bool With_element::instantiate_tmp_tables()
return false;
}
+void With_element::set_cycle_list(List<Lex_ident_sys> *cycle_list_arg)
+{
+ cycle_list= cycle_list_arg;
+
+ /*
+ If a CTE table with columns c1,...,cn is defined with a cycle
+ clause CYCLE(ci1,...,cik) then no two rows r1 and r2 from the
+ table shall have r1.ci1=r2.ci1 && ... && r1.cik=r2.cik.
+
+ If a cycle clause is used in the specification of a CTE then
+ each UNION ALL at the top level of the specification is interpreted
+ as a UNION DISTINCT over the cycle columns.
+ */
+ for (st_select_lex *sl= spec->first_select(); sl; sl= sl->next_select())
+ {
+ spec->union_distinct= sl;
+ if (sl != spec->first_select())
+ {
+ sl->distinct= TRUE;
+ sl->with_all_modifier= FALSE;
+ }
+ }
+}
diff --git a/sql/sql_cte.h b/sql/sql_cte.h
index 92aca5090f3..4c42dd23614 100644
--- a/sql/sql_cte.h
+++ b/sql/sql_cte.h
@@ -112,6 +112,7 @@ public:
always empty.
*/
List <Lex_ident_sys> column_list;
+ List <Lex_ident_sys> *cycle_list;
/* The query that specifies the table introduced by this with element */
st_select_lex_unit *spec;
/*
@@ -169,7 +170,7 @@ public:
sq_dep_map(0), work_dep_map(0), mutually_recursive(0),
top_level_dep_map(0), sq_rec_ref(NULL),
next_mutually_recursive(NULL), references(0),
- query_name(name), column_list(list), spec(unit),
+ query_name(name), column_list(list), cycle_list(0), spec(unit),
is_recursive(false), rec_outer_references(0), with_anchor(false),
level(0), rec_result(NULL)
{ unit->with_element= this; }
@@ -206,7 +207,7 @@ public:
void inc_references() { references++; }
- bool rename_columns_of_derived_unit(THD *thd, st_select_lex_unit *unit);
+ bool process_columns_of_derived_unit(THD *thd, st_select_lex_unit *unit);
bool prepare_unreferenced(THD *thd);
@@ -214,7 +215,7 @@ public:
table_map &unrestricted,
table_map &encountered);
- void print(String *str, enum_query_type query_type);
+ void print(THD *thd, String *str, enum_query_type query_type);
With_clause *get_owner() { return owner; }
@@ -259,6 +260,8 @@ public:
void prepare_for_next_iteration();
+ void set_cycle_list(List<Lex_ident_sys> *cycle_list_arg);
+
friend class With_clause;
};
@@ -353,7 +356,7 @@ public:
void add_unrestricted(table_map map) { unrestricted|= map; }
- void print(String *str, enum_query_type query_type);
+ void print(THD *thd, String *str, enum_query_type query_type);
friend class With_element;
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index ae7f26370fa..3ad7bea5661 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -186,9 +186,9 @@ bool my_dboptions_cache_init(void)
if (!dboptions_init)
{
dboptions_init= 1;
- error= my_hash_init(&dboptions, table_alias_charset,
- 32, 0, 0, (my_hash_get_key) dboptions_get_key,
- free_dbopt,0);
+ error= my_hash_init(key_memory_dboptions_hash, &dboptions,
+ table_alias_charset, 32, 0, 0, (my_hash_get_key)
+ dboptions_get_key, free_dbopt, 0);
}
return error;
}
@@ -218,9 +218,8 @@ void my_dbopt_cleanup(void)
{
mysql_rwlock_wrlock(&LOCK_dboptions);
my_hash_free(&dboptions);
- my_hash_init(&dboptions, table_alias_charset,
- 32, 0, 0, (my_hash_get_key) dboptions_get_key,
- free_dbopt,0);
+ my_hash_init(key_memory_dboptions_hash, &dboptions, table_alias_charset, 32,
+ 0, 0, (my_hash_get_key) dboptions_get_key, free_dbopt, 0);
mysql_rwlock_unlock(&LOCK_dboptions);
}
@@ -290,7 +289,7 @@ static my_bool put_dbopt(const char *dbname, Schema_specification_st *create)
/* Options are not in the hash, insert them */
char *tmp_name;
char *tmp_comment= NULL;
- if (!my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ if (!my_multi_malloc(key_memory_dboptions_hash, MYF(MY_WME | MY_ZEROFILL),
&opt, (uint) sizeof(*opt), &tmp_name, (uint) length+1,
&tmp_comment, (uint) DATABASE_COMMENT_MAXLEN+1,
NullS))
@@ -1148,9 +1147,9 @@ static bool find_db_tables_and_rm_known_files(THD *thd, MY_DIR *dirp,
(char*) table_list->table_name.str);
table_list->alias= table_list->table_name; // If lower_case_table_names=2
- table_list->mdl_request.init(MDL_key::TABLE, table_list->db.str,
- table_list->table_name.str, MDL_EXCLUSIVE,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table_list->mdl_request, MDL_key::TABLE,
+ table_list->db.str, table_list->table_name.str,
+ MDL_EXCLUSIVE, MDL_TRANSACTION);
/* Link into list */
(*tot_list_next_local)= table_list;
(*tot_list_next_global)= table_list;
@@ -1547,8 +1546,8 @@ uint mysql_change_db(THD *thd, const LEX_CSTRING *new_db_name,
TODO: fix check_db_name().
*/
- new_db_file_name.str= my_strndup(new_db_name->str, new_db_name->length,
- MYF(MY_WME));
+ new_db_file_name.str= my_strndup(key_memory_THD_db, new_db_name->str,
+ new_db_name->length, MYF(MY_WME));
new_db_file_name.length= new_db_name->length;
if (new_db_file_name.str == NULL)
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 6a4ce266af2..bef77e1a2e9 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -30,7 +30,6 @@
#include "lock.h" // unlock_table_name
#include "sql_view.h" // check_key_in_view, mysql_frm_type
#include "sql_parse.h" // mysql_init_select
-#include "sql_acl.h" // *_ACL
#include "filesort.h" // filesort
#include "sql_handler.h" // mysql_ha_rm_tables
#include "sql_select.h"
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index c713f1322dc..7d09c85a7c7 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -816,8 +816,8 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
if ((res= unit->prepare(derived, derived->derived_result, 0)))
goto exit;
if (derived->with &&
- (res= derived->with->rename_columns_of_derived_unit(thd, unit)))
- goto exit;
+ (res= derived->with->process_columns_of_derived_unit(thd, unit)))
+ goto exit;
lex->context_analysis_only&= ~CONTEXT_ANALYSIS_ONLY_DERIVED;
if ((res= check_duplicate_names(thd, unit->types, 0)))
goto exit;
diff --git a/sql/sql_error.cc b/sql/sql_error.cc
index 7e6ffb67b94..4045f30a6bd 100644
--- a/sql/sql_error.cc
+++ b/sql/sql_error.cc
@@ -506,7 +506,7 @@ void Warning_info::init()
{
/* Initialize sub structures */
DBUG_ASSERT(initialized == 0);
- init_sql_alloc(&m_warn_root, "Warning_info", WARN_ALLOC_BLOCK_SIZE,
+ init_sql_alloc(PSI_INSTRUMENT_ME, &m_warn_root, WARN_ALLOC_BLOCK_SIZE,
WARN_ALLOC_PREALLOC_SIZE, MYF(MY_THREAD_SPECIFIC));
initialized= 1;
}
diff --git a/sql/sql_explain.h b/sql/sql_explain.h
index bd8c8a4d499..041f77b6f42 100644
--- a/sql/sql_explain.h
+++ b/sql/sql_explain.h
@@ -342,7 +342,7 @@ class Explain_union : public Explain_node
{
public:
Explain_union(MEM_ROOT *root, bool is_analyze) :
- Explain_node(root),
+ Explain_node(root), union_members(PSI_INSTRUMENT_MEM),
is_recursive_cte(false),
fake_select_lex_explain(root, is_analyze)
{}
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 12119997430..d7adc35c5c9 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -289,10 +289,11 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, SQL_HANDLER *reopen)
/*
HASH entries are of type SQL_HANDLER
*/
- if (my_hash_init(&thd->handler_tables_hash, &my_charset_latin1,
- HANDLER_TABLES_HASH_SIZE, 0, 0,
- (my_hash_get_key) mysql_ha_hash_get_key,
- (my_hash_free_key) mysql_ha_hash_free, 0))
+ if (my_hash_init(key_memory_THD_handler_tables_hash,
+ &thd->handler_tables_hash, &my_charset_latin1,
+ HANDLER_TABLES_HASH_SIZE, 0, 0, (my_hash_get_key)
+ mysql_ha_hash_get_key, (my_hash_free_key)
+ mysql_ha_hash_free, 0))
{
DBUG_PRINT("exit",("ERROR"));
DBUG_RETURN(TRUE);
@@ -332,8 +333,8 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, SQL_HANDLER *reopen)
right from the start as open_tables() can't handle properly
back-off for such locks.
*/
- tables->mdl_request.init(MDL_key::TABLE, tables->db.str, tables->table_name.str,
- MDL_SHARED_READ, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&tables->mdl_request, MDL_key::TABLE, tables->db.str,
+ tables->table_name.str, MDL_SHARED_READ, MDL_TRANSACTION);
mdl_savepoint= thd->mdl_context.mdl_savepoint();
/* for now HANDLER can be used only for real TABLES */
@@ -384,14 +385,14 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, SQL_HANDLER *reopen)
/* copy data to sql_handler */
if (!(sql_handler= new SQL_HANDLER(thd)))
goto err;
- init_alloc_root(&sql_handler->mem_root, "sql_handler", 1024, 0,
+ init_alloc_root(PSI_INSTRUMENT_ME, &sql_handler->mem_root, 1024, 0,
MYF(MY_THREAD_SPECIFIC));
sql_handler->db.length= tables->db.length;
sql_handler->table_name.length= tables->table_name.length;
sql_handler->handler_name.length= tables->alias.length;
- if (!(my_multi_malloc(MY_WME,
+ if (!(my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&sql_handler->base_data,
(uint) sql_handler->db.length + 1,
&sql_handler->table_name.str,
diff --git a/sql/sql_hset.h b/sql/sql_hset.h
index aaecef9f0d4..b3d8165f6f6 100644
--- a/sql/sql_hset.h
+++ b/sql/sql_hset.h
@@ -31,18 +31,19 @@ public:
Constructs an empty hash. Does not allocate memory, it is done upon
the first insert. Thus does not cause or return errors.
*/
- Hash_set(uchar *(*K)(const T *, size_t *, my_bool),
+ Hash_set(PSI_memory_key psi_key, uchar *(*K)(const T *, size_t *, my_bool),
CHARSET_INFO *cs= &my_charset_bin)
{
my_hash_clear(&m_hash);
m_hash.get_key= (my_hash_get_key)K;
m_hash.charset= cs;
+ m_hash.array.m_psi_key= psi_key;
}
- Hash_set(CHARSET_INFO *charset, ulong default_array_elements,
+ Hash_set(PSI_memory_key psi_key, CHARSET_INFO *charset, ulong default_array_elements,
size_t key_offset, size_t key_length, my_hash_get_key get_key,
void (*free_element)(void*), uint flags)
{
- my_hash_init(&m_hash, charset, default_array_elements, key_offset,
+ my_hash_init(psi_key, &m_hash, charset, default_array_elements, key_offset,
key_length, get_key, free_element, flags);
}
/**
@@ -64,8 +65,8 @@ public:
*/
bool insert(T *value)
{
- my_hash_init_opt(&m_hash, m_hash.charset, START_SIZE, 0, 0,
- m_hash.get_key, 0, HASH_UNIQUE);
+ my_hash_init_opt(m_hash.array.m_psi_key, &m_hash, m_hash.charset,
+ START_SIZE, 0, 0, m_hash.get_key, 0, HASH_UNIQUE);
return my_hash_insert(&m_hash, reinterpret_cast<const uchar*>(value));
}
bool remove(T *value)
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 60b60ec1e54..708423c6214 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -67,7 +67,6 @@
#include "sp_head.h"
#include "sql_view.h" // check_key_in_view, insert_view_fields
#include "sql_table.h" // mysql_create_table_no_lock
-#include "sql_acl.h" // *_ACL, check_grant_all_columns
#include "sql_trigger.h"
#include "sql_select.h"
#include "sql_show.h"
@@ -554,8 +553,8 @@ bool open_and_lock_for_insert_delayed(THD *thd, TABLE_LIST *table_list)
if (thd->has_read_only_protection())
DBUG_RETURN(TRUE);
- protection_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_DML,
- MDL_STATEMENT);
+ MDL_REQUEST_INIT(&protection_request, MDL_key::BACKUP, "", "",
+ MDL_BACKUP_DML, MDL_STATEMENT);
if (thd->mdl_context.acquire_lock(&protection_request,
thd->variables.lock_wait_timeout))
@@ -2402,7 +2401,8 @@ bool delayed_get_table(THD *thd, MDL_request *grl_protection_request,
di->thd.variables.binlog_annotate_row_events= 0;
di->thd.set_db(&table_list->db);
- di->thd.set_query(my_strndup(table_list->table_name.str,
+ di->thd.set_query(my_strndup(PSI_INSTRUMENT_ME,
+ table_list->table_name.str,
table_list->table_name.length,
MYF(MY_WME | ME_FATAL)),
table_list->table_name.length, system_charset_info);
@@ -2421,8 +2421,8 @@ bool delayed_get_table(THD *thd, MDL_request *grl_protection_request,
We need the tickets so that they can be cloned in
handle_delayed_insert
*/
- di->grl_protection.init(MDL_key::BACKUP, "", "",
- MDL_BACKUP_DML, MDL_STATEMENT);
+ MDL_REQUEST_INIT(&di->grl_protection, MDL_key::BACKUP, "", "",
+ MDL_BACKUP_DML, MDL_STATEMENT);
di->grl_protection.ticket= grl_protection_request->ticket;
init_mdl_requests(&di->table_list);
di->table_list.mdl_request.ticket= table_list->mdl_request.ticket;
@@ -2731,7 +2731,8 @@ int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic,
if (query.str)
{
char *str;
- if (!(str= my_strndup(query.str, query.length, MYF(MY_WME))))
+ if (!(str= my_strndup(PSI_INSTRUMENT_ME, query.str, query.length,
+ MYF(MY_WME))))
goto err;
query.str= str;
}
@@ -2754,7 +2755,8 @@ int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic,
ip_len= strlen(thd->security_ctx->ip) + 1;
}
/* This can't be THREAD_SPECIFIC as it's freed in delayed thread */
- if (!(row->record= (char*) my_malloc(table->s->reclength +
+ if (!(row->record= (char*) my_malloc(PSI_INSTRUMENT_ME,
+ table->s->reclength +
user_len + host_len + ip_len,
MYF(MY_WME))))
goto err;
diff --git a/sql/sql_join_cache.cc b/sql/sql_join_cache.cc
index 3a509b3d750..b3d0d985582 100644
--- a/sql/sql_join_cache.cc
+++ b/sql/sql_join_cache.cc
@@ -937,7 +937,8 @@ int JOIN_CACHE::alloc_buffer()
{
size_t next_buff_size;
- if ((buff= (uchar*) my_malloc(buff_size, MYF(MY_THREAD_SPECIFIC))))
+ if ((buff= (uchar*) my_malloc(key_memory_JOIN_CACHE, buff_size,
+ MYF(MY_THREAD_SPECIFIC))))
break;
next_buff_size= buff_size > buff_size_decr ? buff_size-buff_size_decr : 0;
@@ -1013,11 +1014,11 @@ bool JOIN_CACHE::shrink_join_buffer_in_ratio(ulonglong n, ulonglong d)
int JOIN_CACHE::realloc_buffer()
{
- int rc;
free();
- rc= MY_TEST(!(buff= (uchar*) my_malloc(buff_size, MYF(MY_THREAD_SPECIFIC))));
+ buff= (uchar*) my_malloc(key_memory_JOIN_CACHE, buff_size,
+ MYF(MY_THREAD_SPECIFIC));
reset(TRUE);
- return rc;
+ return buff == NULL;
}
@@ -2084,8 +2085,13 @@ enum_nested_loop_state JOIN_CACHE::join_records(bool skip_last)
if (!join_tab->first_unmatched)
{
+ bool pfs_batch_update= join_tab->pfs_batch_update(join);
+ if (pfs_batch_update)
+ join_tab->table->file->start_psi_batch_mode();
/* Find all records from join_tab that match records from join buffer */
rc= join_matching_records(skip_last);
+ if (pfs_batch_update)
+ join_tab->table->file->end_psi_batch_mode();
if (rc != NESTED_LOOP_OK && rc != NESTED_LOOP_NO_MORE_ROWS)
goto finish;
if (outer_join_first_inner)
@@ -2809,12 +2815,12 @@ int JOIN_CACHE_HASHED::init_hash_table()
int JOIN_CACHE_HASHED::realloc_buffer()
{
- int rc;
free();
- rc= MY_TEST(!(buff= (uchar*) my_malloc(buff_size, MYF(MY_THREAD_SPECIFIC))));
+ buff= (uchar*) my_malloc(key_memory_JOIN_CACHE, buff_size,
+ MYF(MY_THREAD_SPECIFIC));
init_hash_table();
reset(TRUE);
- return rc;
+ return buff == NULL;
}
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index ea60d0cebd0..da255c2701d 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -511,7 +511,7 @@ void LEX::add_key_to_list(LEX_CSTRING *field_name,
}
-bool LEX::add_alter_list(const char *name, Virtual_column_info *expr,
+bool LEX::add_alter_list(LEX_CSTRING name, Virtual_column_info *expr,
bool exists)
{
MEM_ROOT *mem_root= thd->mem_root;
@@ -524,6 +524,17 @@ bool LEX::add_alter_list(const char *name, Virtual_column_info *expr,
}
+bool LEX::add_alter_list(LEX_CSTRING name, LEX_CSTRING new_name)
+{
+ Alter_column *ac= new (thd->mem_root) Alter_column(name, new_name);
+ if (unlikely(ac == NULL))
+ return true;
+ alter_info.alter_list.push_back(ac, thd->mem_root);
+ alter_info.flags|= ALTER_RENAME_COLUMN;
+ return false;
+}
+
+
void LEX::init_last_field(Column_definition *field,
const LEX_CSTRING *field_name,
const CHARSET_INFO *cs)
@@ -3503,10 +3514,74 @@ bool st_select_lex::setup_ref_array(THD *thd, uint order_group_num)
}
+/*
+ @brief
+ Print the whole statement
+
+ @param str Print into this string
+ @param query_type Flags describing how to print
+
+ @detail
+ The intent is to allow to eventually print back any query.
+
+ This is useful e.g. for storage engines that take over diferrent kinds of
+ queries
+*/
+
+void LEX::print(String *str, enum_query_type query_type)
+{
+ if (sql_command == SQLCOM_UPDATE)
+ {
+ SELECT_LEX *sel= first_select_lex();
+ str->append(STRING_WITH_LEN("UPDATE "));
+ if (ignore)
+ str->append(STRING_WITH_LEN("IGNORE "));
+ // table name
+ str->append(query_tables->alias);
+ str->append(STRING_WITH_LEN(" SET "));
+ // print item assignments
+ List_iterator<Item> it(sel->item_list);
+ List_iterator<Item> it2(value_list);
+ Item *col_ref, *value;
+ bool first= true;
+ while ((col_ref= it++) && (value= it2++))
+ {
+ if (first)
+ first= false;
+ else
+ str->append(STRING_WITH_LEN(", "));
+ col_ref->print(str, query_type);
+ str->append(STRING_WITH_LEN("="));
+ value->print(str, query_type);
+ }
+
+ str->append(STRING_WITH_LEN(" WHERE "));
+ sel->where->print(str, query_type);
+
+ if (sel->order_list.elements)
+ {
+ str->append(STRING_WITH_LEN(" ORDER BY "));
+ for (ORDER *ord= sel->order_list.first; ord; ord= ord->next)
+ {
+ if (ord != sel->order_list.first)
+ str->append(STRING_WITH_LEN(", "));
+ (*ord->item)->print(str, query_type);
+ }
+ }
+ if (sel->select_limit)
+ {
+ str->append(STRING_WITH_LEN(" LIMIT "));
+ sel->select_limit->print(str, query_type);
+ }
+ }
+ else
+ DBUG_ASSERT(0); // Not implemented yet
+}
+
void st_select_lex_unit::print(String *str, enum_query_type query_type)
{
if (with_clause)
- with_clause->print(str, query_type);
+ with_clause->print(thd, str, query_type);
for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select())
{
if (sl != first_select())
@@ -3751,12 +3826,12 @@ LEX::LEX()
default_used(0), is_lex_started(0), limit_rows_examined_cnt(ULONGLONG_MAX)
{
- init_dynamic_array2(&plugins, sizeof(plugin_ref), plugins_static_buffer,
- INITIAL_LEX_PLUGIN_LIST_SIZE,
+ init_dynamic_array2(PSI_INSTRUMENT_ME, &plugins, sizeof(plugin_ref),
+ plugins_static_buffer, INITIAL_LEX_PLUGIN_LIST_SIZE,
INITIAL_LEX_PLUGIN_LIST_SIZE, 0);
reset_query_tables_list(TRUE);
mi.init();
- init_dynamic_array2(&delete_gtid_domain, sizeof(uint32),
+ init_dynamic_array2(PSI_INSTRUMENT_ME, &delete_gtid_domain, sizeof(uint32),
gtid_domain_static_buffer,
initial_gtid_domain_buffer_size,
initial_gtid_domain_buffer_size, 0);
@@ -5584,8 +5659,8 @@ bool LEX::set_arena_for_set_stmt(Query_arena *backup)
mem_root_for_set_stmt= new MEM_ROOT();
if (unlikely(!(mem_root_for_set_stmt)))
DBUG_RETURN(1);
- init_sql_alloc(mem_root_for_set_stmt, "set_stmt",
- ALLOC_ROOT_SET, ALLOC_ROOT_SET, MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(PSI_INSTRUMENT_ME, mem_root_for_set_stmt, ALLOC_ROOT_SET,
+ ALLOC_ROOT_SET, MYF(MY_THREAD_SPECIFIC));
}
if (unlikely(!(arena_for_set_stmt= new(mem_root_for_set_stmt)
Query_arena_memroot(mem_root_for_set_stmt,
@@ -6181,7 +6256,7 @@ static bool is_old(const char *str)
bool LEX::is_trigger_new_or_old_reference(const LEX_CSTRING *name) const
{
// "name" is not necessarily NULL-terminated!
- return sphead && sphead->m_handler->type() == TYPE_ENUM_TRIGGER &&
+ return sphead && sphead->m_handler->type() == SP_TYPE_TRIGGER &&
name->length == 3 && (is_new(name->str) || is_old(name->str));
}
@@ -8934,7 +9009,7 @@ sp_package *LEX::create_package_start(THD *thd,
}
if (unlikely(set_command_with_check(command, options)))
return NULL;
- if (sph->type() == TYPE_ENUM_PACKAGE_BODY)
+ if (sph->type() == SP_TYPE_PACKAGE_BODY)
{
/*
If we start parsing a "CREATE PACKAGE BODY", we need to load
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 2d08aa6c79b..b2f0272a7d2 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -30,7 +30,7 @@
#include "sql_alter.h" // Alter_info
#include "sql_window.h"
#include "sql_trigger.h"
-#include "sp.h" // enum stored_procedure_type
+#include "sp.h" // enum enum_sp_type
#include "sql_tvc.h"
#include "item.h"
#include "sql_limit.h" // Select_limit_counters
@@ -510,11 +510,11 @@ struct LEX_MASTER_INFO
void init()
{
bzero(this, sizeof(*this));
- my_init_dynamic_array(&repl_ignore_server_ids,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &repl_ignore_server_ids,
sizeof(::server_id), 0, 16, MYF(0));
- my_init_dynamic_array(&repl_do_domain_ids,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &repl_do_domain_ids,
sizeof(ulong), 0, 16, MYF(0));
- my_init_dynamic_array(&repl_ignore_domain_ids,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &repl_ignore_domain_ids,
sizeof(ulong), 0, 16, MYF(0));
sql_delay= -1;
}
@@ -3264,6 +3264,7 @@ public:
void reset_arena_for_set_stmt(Query_arena *backup);
void free_arena_for_set_stmt();
+ void print(String *str, enum_query_type qtype);
List<Item_func_set_user_var> set_var_list; // in-query assignment list
List<Item_param> param_list;
List<LEX_CSTRING> view_list; // view list (list of field names in view)
@@ -4320,8 +4321,9 @@ public:
alter_info.check_constraint_list.push_back(constr);
return false;
}
- bool add_alter_list(const char *par_name, Virtual_column_info *expr,
+ bool add_alter_list(LEX_CSTRING par_name, Virtual_column_info *expr,
bool par_exists);
+ bool add_alter_list(LEX_CSTRING name, LEX_CSTRING new_name);
void set_command(enum_sql_command command,
DDL_options_st options)
{
diff --git a/sql/sql_list.h b/sql/sql_list.h
index 9d1c01a484d..91134bcbeb2 100644
--- a/sql/sql_list.h
+++ b/sql/sql_list.h
@@ -677,7 +677,8 @@ struct ilink
struct ilink **prev,*next;
static void *operator new(size_t size) throw ()
{
- return (void*)my_malloc((uint)size, MYF(MY_WME | MY_FAE | ME_FATAL));
+ return (void*)my_malloc(PSI_INSTRUMENT_ME,
+ (uint)size, MYF(MY_WME | MY_FAE | ME_FATAL));
}
static void operator delete(void* ptr_arg, size_t)
{
diff --git a/sql/sql_manager.cc b/sql/sql_manager.cc
index 2ad8d8a914a..a3d1a7242e4 100644
--- a/sql/sql_manager.cc
+++ b/sql/sql_manager.cc
@@ -51,7 +51,8 @@ bool mysql_manager_submit(void (*action)())
cb= &(*cb)->next;
if (!*cb)
{
- *cb= (struct handler_cb *)my_malloc(sizeof(struct handler_cb), MYF(MY_WME));
+ *cb= (struct handler_cb *)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(struct handler_cb), MYF(MY_WME));
if (!*cb)
result= TRUE;
else
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index dac5b025821..cb0d210b12c 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -56,13 +56,6 @@
#include "sql_rename.h" // mysql_rename_tables
#include "sql_tablespace.h" // mysql_alter_tablespace
#include "hostname.h" // hostname_cache_refresh
-#include "sql_acl.h" // *_ACL, check_grant, is_acl_user,
- // has_any_table_level_privileges,
- // mysql_drop_user, mysql_rename_user,
- // check_grant_routine,
- // mysql_routine_grant,
- // mysql_show_grants,
- // sp_grant_privileges, ...
#include "sql_test.h" // mysql_print_status
#include "sql_select.h" // handle_select, mysql_select,
// mysql_explain_union
@@ -101,6 +94,7 @@
#include "sql_bootstrap.h"
#include "sql_sequence.h"
#include "opt_trace.h"
+#include "mysql/psi/mysql_sp.h"
#include "my_json_writer.h"
@@ -679,7 +673,7 @@ void init_update_queries(void)
sql_command_flags[SQLCOM_SHOW_CREATE_USER]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_CREATE_DB]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_CREATE]= CF_STATUS_COMMAND;
- sql_command_flags[SQLCOM_SHOW_MASTER_STAT]= CF_STATUS_COMMAND;
+ sql_command_flags[SQLCOM_SHOW_BINLOG_STAT]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_SLAVE_STAT]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_CREATE_PROC]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_CREATE_FUNC]= CF_STATUS_COMMAND;
@@ -1010,7 +1004,8 @@ int bootstrap(MYSQL_FILE *file)
thd->thread_stack= (char*) &thd;
thd->store_globals();
- thd->security_ctx->user= (char*) my_strdup("boot", MYF(MY_WME));
+ thd->security_ctx->user= (char*) my_strdup(key_memory_MPVIO_EXT_auth_info,
+ "boot", MYF(MY_WME));
thd->security_ctx->priv_user[0]= thd->security_ctx->priv_host[0]=
thd->security_ctx->priv_role[0]= 0;
/*
@@ -1404,7 +1399,7 @@ static bool deny_updates_if_read_only_option(THD *thd, TABLE_LIST *all_tables)
LEX *lex= thd->lex;
/* Super user is allowed to do changes */
- if ((thd->security_ctx->master_access & SUPER_ACL) == SUPER_ACL)
+ if ((thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY) != NO_ACL)
DBUG_RETURN(FALSE);
/* Check if command doesn't update anything */
@@ -1444,10 +1439,10 @@ static bool deny_updates_if_read_only_option(THD *thd, TABLE_LIST *all_tables)
static my_bool wsrep_read_only_option(THD *thd, TABLE_LIST *all_tables)
{
int opt_readonly_saved = opt_readonly;
- privilege_t flag_saved= thd->security_ctx->master_access & SUPER_ACL;
+ privilege_t flag_saved= thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY;
opt_readonly = 0;
- thd->security_ctx->master_access &= ~SUPER_ACL;
+ thd->security_ctx->master_access &= ~PRIV_IGNORE_READ_ONLY;
my_bool ret = !deny_updates_if_read_only_option(thd, all_tables);
@@ -1464,7 +1459,7 @@ static void wsrep_copy_query(THD *thd)
if (thd->wsrep_retry_query) {
my_free(thd->wsrep_retry_query);
}
- thd->wsrep_retry_query = (char *)my_malloc(
+ thd->wsrep_retry_query = (char *)my_malloc(PSI_INSTRUMENT_ME,
thd->wsrep_retry_query_len + 1, MYF(0));
strncpy(thd->wsrep_retry_query, thd->query(), thd->wsrep_retry_query_len);
thd->wsrep_retry_query[thd->wsrep_retry_query_len] = '\0';
@@ -1908,8 +1903,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd->m_statement_psi= MYSQL_START_STATEMENT(&thd->m_statement_state,
com_statement_info[command].m_key,
thd->db.str, thd->db.length,
- thd->charset());
- THD_STAGE_INFO(thd, stage_init);
+ thd->charset(), NULL);
+ THD_STAGE_INFO(thd, stage_starting);
MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, beginning_of_next_stmt,
length);
@@ -2091,7 +2086,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
status_var_increment(thd->status_var.com_other);
thd->query_plan_flags|= QPLAN_ADMIN;
- if (check_global_access(thd, REPL_SLAVE_ACL))
+ if (check_global_access(thd, PRIV_COM_BINLOG_DUMP))
break;
/* TODO: The following has to be changed to an 8 byte integer */
@@ -2247,12 +2242,12 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
case COM_PROCESS_INFO:
status_var_increment(thd->status_var.com_stat[SQLCOM_SHOW_PROCESSLIST]);
if (!thd->security_ctx->priv_user[0] &&
- check_global_access(thd, PROCESS_ACL))
+ check_global_access(thd, PRIV_COM_PROCESS_INFO))
break;
general_log_print(thd, command, NullS);
mysqld_list_processes(thd,
- thd->security_ctx->master_access & PROCESS_ACL ?
- NullS : thd->security_ctx->priv_user, 0);
+ thd->security_ctx->master_access & PRIV_COM_PROCESS_INFO ?
+ NullS : thd->security_ctx->priv_user, 0);
break;
case COM_PROCESS_KILL:
{
@@ -2284,7 +2279,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
}
case COM_DEBUG:
status_var_increment(thd->status_var.com_other);
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_DEBUG))
break; /* purecov: inspected */
mysql_print_status();
general_log_print(thd, command, NullS);
@@ -2838,7 +2833,7 @@ bool sp_process_definer(THD *thd)
!my_strcasecmp(system_charset_info, d->host.str,
thd->security_ctx->priv_host);
if (!curuserhost && !currole &&
- check_global_access(thd, SUPER_ACL, false))
+ check_global_access(thd, PRIV_DEFINER_CLAUSE, false))
DBUG_RETURN(TRUE);
}
@@ -3062,7 +3057,7 @@ mysql_create_routine(THD *thd, LEX *lex)
const LEX_CSTRING *name= lex->sphead->name();
#ifdef HAVE_DLOPEN
- if (lex->sphead->m_handler->type() == TYPE_ENUM_FUNCTION)
+ if (lex->sphead->m_handler->type() == SP_TYPE_FUNCTION)
{
udf_func *udf = find_udf(name->str, name->length);
@@ -3826,7 +3821,7 @@ mysql_execute_command(THD *thd)
case SQLCOM_SHOW_EXPLAIN:
{
if (!thd->security_ctx->priv_user[0] &&
- check_global_access(thd,PROCESS_ACL))
+ check_global_access(thd, PRIV_STMT_SHOW_EXPLAIN))
break;
/*
@@ -3944,7 +3939,7 @@ mysql_execute_command(THD *thd)
#ifndef EMBEDDED_LIBRARY
case SQLCOM_PURGE:
{
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_PURGE_BINLOG))
goto error;
/* PURGE MASTER LOGS TO 'file' */
res = purge_master_logs(thd, lex->to_log);
@@ -3954,7 +3949,7 @@ mysql_execute_command(THD *thd)
{
Item *it;
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_PURGE_BINLOG))
goto error;
/* PURGE MASTER LOGS BEFORE 'data' */
it= (Item *)lex->value_list.head();
@@ -4001,16 +3996,23 @@ mysql_execute_command(THD *thd)
#ifdef HAVE_REPLICATION
case SQLCOM_SHOW_SLAVE_HOSTS:
{
- if (check_global_access(thd, REPL_SLAVE_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_SLAVE_HOSTS))
goto error;
res = show_slave_hosts(thd);
break;
}
- case SQLCOM_SHOW_RELAYLOG_EVENTS: /* fall through */
+ case SQLCOM_SHOW_RELAYLOG_EVENTS:
+ {
+ WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
+ if (check_global_access(thd, PRIV_STMT_SHOW_RELAYLOG_EVENTS))
+ goto error;
+ res = mysql_show_binlog_events(thd);
+ break;
+ }
case SQLCOM_SHOW_BINLOG_EVENTS:
{
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
- if (check_global_access(thd, REPL_SLAVE_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_BINLOG_EVENTS))
goto error;
res = mysql_show_binlog_events(thd);
break;
@@ -4047,7 +4049,7 @@ mysql_execute_command(THD *thd)
bool new_master= 0;
bool master_info_added;
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_CHANGE_MASTER))
goto error;
/*
In this code it's ok to use LOCK_active_mi as we are adding new things
@@ -4102,10 +4104,10 @@ mysql_execute_command(THD *thd)
break;
}
- case SQLCOM_SHOW_MASTER_STAT:
+ case SQLCOM_SHOW_BINLOG_STAT:
{
/* Accept one of two privileges */
- if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_BINLOG_STATUS))
goto error;
res = show_binlog_info(thd);
break;
@@ -4114,14 +4116,14 @@ mysql_execute_command(THD *thd)
#endif /* HAVE_REPLICATION */
case SQLCOM_SHOW_ENGINE_STATUS:
{
- if (check_global_access(thd, PROCESS_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_ENGINE_STATUS))
goto error;
res = ha_show_status(thd, lex->create_info.db_type, HA_ENGINE_STATUS);
break;
}
case SQLCOM_SHOW_ENGINE_MUTEX:
{
- if (check_global_access(thd, PROCESS_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_ENGINE_MUTEX))
goto error;
res = ha_show_status(thd, lex->create_info.db_type, HA_ENGINE_MUTEX);
break;
@@ -4282,7 +4284,7 @@ mysql_execute_command(THD *thd)
goto error;
#else
{
- if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
+ if (check_global_access(thd, PRIV_STMT_SHOW_BINARY_LOGS))
goto error;
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
res = show_binlogs(thd);
@@ -4414,7 +4416,7 @@ mysql_execute_command(THD *thd)
if (res)
break;
if (opt_readonly &&
- !(thd->security_ctx->master_access & SUPER_ACL) &&
+ !(thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY) &&
some_non_temp_table_to_be_updated(thd, all_tables))
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
@@ -4890,13 +4892,13 @@ mysql_execute_command(THD *thd)
}
case SQLCOM_SHOW_PROCESSLIST:
if (!thd->security_ctx->priv_user[0] &&
- check_global_access(thd,PROCESS_ACL))
+ check_global_access(thd, PRIV_STMT_SHOW_PROCESSLIST))
break;
mysqld_list_processes(thd,
- (thd->security_ctx->master_access & PROCESS_ACL ?
- NullS :
- thd->security_ctx->priv_user),
- lex->verbose);
+ (thd->security_ctx->master_access & PRIV_STMT_SHOW_PROCESSLIST ?
+ NullS :
+ thd->security_ctx->priv_user),
+ lex->verbose);
break;
case SQLCOM_SHOW_AUTHORS:
res= mysqld_show_authors(thd);
@@ -4940,8 +4942,9 @@ mysql_execute_command(THD *thd)
if (!(thd->client_capabilities & CLIENT_LOCAL_FILES) ||
!opt_local_infile)
{
- my_message(ER_NOT_ALLOWED_COMMAND, ER_THD(thd, ER_NOT_ALLOWED_COMMAND), MYF(0));
- goto error;
+ my_message(ER_LOAD_INFILE_CAPABILITY_DISABLED,
+ ER_THD(thd, ER_LOAD_INFILE_CAPABILITY_DISABLED), MYF(0));
+ goto error;
}
}
@@ -5615,12 +5618,18 @@ mysql_execute_command(THD *thd)
break; /* break super switch */
} /* end case group bracket */
case SQLCOM_COMPOUND:
+ {
+ sp_head *sp= lex->sphead;
DBUG_ASSERT(all_tables == 0);
DBUG_ASSERT(thd->in_sub_stmt == 0);
- lex->sphead->m_sql_mode= thd->variables.sql_mode;
+ sp->m_sql_mode= thd->variables.sql_mode;
+ sp->m_sp_share= MYSQL_GET_SP_SHARE(sp->m_handler->type(),
+ sp->m_db.str, static_cast<uint>(sp->m_db.length),
+ sp->m_name.str, static_cast<uint>(sp->m_name.length));
if (do_execute_sp(thd, lex->sphead))
goto error;
break;
+ }
case SQLCOM_ALTER_PROCEDURE:
case SQLCOM_ALTER_FUNCTION:
@@ -5801,7 +5810,7 @@ mysql_execute_command(THD *thd)
{
DBUG_PRINT("info", ("case SQLCOM_CREATE_SERVER"));
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_CREATE_SERVER))
break;
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
@@ -5814,7 +5823,7 @@ mysql_execute_command(THD *thd)
int error;
DBUG_PRINT("info", ("case SQLCOM_ALTER_SERVER"));
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_ALTER_SERVER))
break;
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
@@ -5834,7 +5843,7 @@ mysql_execute_command(THD *thd)
int err_code;
DBUG_PRINT("info", ("case SQLCOM_DROP_SERVER"));
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PRIV_STMT_DROP_SERVER))
break;
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
@@ -6179,6 +6188,7 @@ execute_show_status(THD *thd, TABLE_LIST *all_tables)
UINT_MAX, FALSE)))
res= execute_sqlcom_select(thd, all_tables);
+ thd->initial_status_var= NULL;
/* Don't log SHOW STATUS commands to slow query log */
thd->server_status&= ~(SERVER_QUERY_NO_INDEX_USED |
SERVER_QUERY_NO_GOOD_INDEX_USED);
@@ -7136,10 +7146,8 @@ bool check_some_access(THD *thd, privilege_t want_access, TABLE_LIST *table)
@param want_access Use should have any of these global rights
@warning
- One gets access right if one has ANY of the rights in want_access.
- This is useful as one in most cases only need one global right,
- but in some case we want to check if the user has SUPER or
- REPL_CLIENT_ACL rights.
+ Starting from 10.5.2 only one bit is allowed in want_access.
+ Access denied error is returned if want_access has multiple bits set.
@retval
0 ok
@@ -7151,7 +7159,7 @@ bool check_global_access(THD *thd, privilege_t want_access, bool no_errors)
{
#ifndef NO_EMBEDDED_ACCESS_CHECKS
char command[128];
- if ((thd->security_ctx->master_access & want_access))
+ if (thd->security_ctx->master_access & want_access)
return 0;
if (unlikely(!no_errors))
{
@@ -7365,11 +7373,11 @@ bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, size_t *yystacksize)
old_info= *yystacksize;
*yystacksize= set_zone((int)(*yystacksize)*2,MY_YACC_INIT,MY_YACC_MAX);
if (!(state->yacc_yyvs= (uchar*)
- my_realloc(state->yacc_yyvs,
+ my_realloc(key_memory_bison_stack, state->yacc_yyvs,
*yystacksize*sizeof(**yyvs),
MYF(MY_ALLOW_ZERO_PTR | MY_FREE_ON_ERROR))) ||
!(state->yacc_yyss= (uchar*)
- my_realloc(state->yacc_yyss,
+ my_realloc(key_memory_bison_stack, state->yacc_yyss,
*yystacksize*sizeof(**yyss),
MYF(MY_ALLOW_ZERO_PTR | MY_FREE_ON_ERROR))))
return 1;
@@ -8219,9 +8227,8 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
// Pure table aliases do not need to be locked:
if (ptr->db.str && !(table_options & TL_OPTION_ALIAS))
{
- ptr->mdl_request.init(MDL_key::TABLE, ptr->db.str, ptr->table_name.str,
- mdl_type,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&ptr->mdl_request, MDL_key::TABLE, ptr->db.str,
+ ptr->table_name.str, mdl_type, MDL_TRANSACTION);
}
DBUG_RETURN(ptr);
}
@@ -9090,11 +9097,11 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
*/
#ifdef WITH_WSREP
- if (((thd->security_ctx->master_access & SUPER_ACL) ||
+ if (((thd->security_ctx->master_access & PRIV_KILL_OTHER_USER_PROCESS) ||
thd->security_ctx->user_matches(tmp->security_ctx)) &&
!wsrep_thd_is_BF(tmp, false) && !tmp->wsrep_applier)
#else
- if ((thd->security_ctx->master_access & SUPER_ACL) ||
+ if ((thd->security_ctx->master_access & PRIV_KILL_OTHER_USER_PROCESS) ||
thd->security_ctx->user_matches(tmp->security_ctx))
#endif /* WITH_WSREP */
{
@@ -9147,7 +9154,8 @@ static my_bool kill_threads_callback(THD *thd, kill_threads_callback_arg *arg)
!strcmp(thd->security_ctx->host_or_ip, arg->user->host.str)) &&
!strcmp(thd->security_ctx->user, arg->user->user.str))
{
- if (!(arg->thd->security_ctx->master_access & SUPER_ACL) &&
+ if (!(arg->thd->security_ctx->master_access &
+ PRIV_KILL_OTHER_USER_PROCESS) &&
!arg->thd->security_ctx->user_matches(thd->security_ctx))
return 1;
if (!arg->threads_to_kill.push_back(thd, arg->thd->mem_root))
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 5885e3715bf..f722dc54fb4 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -4805,7 +4805,6 @@ static void check_datadir_altered_for_innodb(THD *thd,
uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
HA_CREATE_INFO *create_info,
- Alter_table_ctx *alter_ctx,
bool *partition_changed,
bool *fast_alter_table)
{
@@ -4900,8 +4899,8 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
object to allow fast_alter_partition_table to perform the changes.
*/
DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE,
- alter_ctx->db.str,
- alter_ctx->table_name.str,
+ table->s->db.str,
+ table->s->table_name.str,
MDL_INTENTION_EXCLUSIVE));
tab_part_info= table->part_info;
@@ -7501,7 +7500,7 @@ void append_row_to_str(String &str, const uchar *row, TABLE *table)
rec= row;
/* Create a new array of all read fields. */
- fields= (Field**) my_malloc(sizeof(void*) * (num_fields + 1),
+ fields= (Field**) my_malloc(PSI_INSTRUMENT_ME, sizeof(void*) * (num_fields + 1),
MYF(0));
if (!fields)
return;
diff --git a/sql/sql_partition.h b/sql/sql_partition.h
index 8732aacbbd7..58ba82dcd9f 100644
--- a/sql/sql_partition.h
+++ b/sql/sql_partition.h
@@ -262,7 +262,6 @@ bool set_part_state(Alter_info *alter_info, partition_info *tab_part_info,
enum partition_state part_state);
uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
HA_CREATE_INFO *create_info,
- Alter_table_ctx *alter_ctx,
bool *partition_changed,
bool *fast_alter_table);
char *generate_partition_syntax(THD *thd, partition_info *part_info,
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index bbfbdc3a22e..1d18b0ef392 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -28,7 +28,6 @@
#include "sql_table.h"
#include "sql_show.h" // remove_status_vars, add_status_vars
#include "strfunc.h" // find_set
-#include "sql_acl.h" // *_ACL
#include "records.h" // init_read_record, end_read_record
#include <my_pthread.h>
#include <my_getopt.h>
@@ -42,6 +41,12 @@
#include <mysql/plugin_function.h>
#include "sql_plugin_compat.h"
+static PSI_memory_key key_memory_plugin_mem_root;
+static PSI_memory_key key_memory_plugin_int_mem_root;
+static PSI_memory_key key_memory_mysql_plugin;
+static PSI_memory_key key_memory_mysql_plugin_dl;
+static PSI_memory_key key_memory_plugin_bookmark;
+
#ifdef HAVE_LINK_H
#include <link.h>
#endif
@@ -573,7 +578,7 @@ static my_bool read_mysql_plugin_info(struct st_plugin_dl *plugin_dl,
/* no op */;
cur= (struct st_maria_plugin*)
- my_malloc((i + 1) * sizeof(struct st_maria_plugin),
+ my_malloc(key_memory_mysql_plugin, (i + 1) * sizeof(struct st_maria_plugin),
MYF(MY_ZEROFILL|MY_WME));
if (!cur)
{
@@ -693,7 +698,7 @@ static my_bool read_maria_plugin_info(struct st_plugin_dl *plugin_dl,
/* no op */;
cur= (struct st_maria_plugin*)
- my_malloc((i + 1) * sizeof(struct st_maria_plugin),
+ my_malloc(key_memory_mysql_plugin, (i + 1) * sizeof(struct st_maria_plugin),
MYF(MY_ZEROFILL|MY_WME));
if (!cur)
{
@@ -818,7 +823,8 @@ static st_plugin_dl *plugin_dl_add(const LEX_CSTRING *dl, myf MyFlags)
if (plugin_dl.nbackups)
{
size_t bytes= plugin_dl.nbackups * sizeof(plugin_dl.ptr_backup[0]);
- plugin_dl.ptr_backup= (st_ptr_backup *)my_malloc(bytes, MYF(0));
+ plugin_dl.ptr_backup= (st_ptr_backup *)my_malloc(key_memory_mysql_plugin_dl,
+ bytes, MYF(0));
if (!plugin_dl.ptr_backup)
{
restore_ptr_backup(plugin_dl.nbackups, tmp_backup);
@@ -830,7 +836,8 @@ static st_plugin_dl *plugin_dl_add(const LEX_CSTRING *dl, myf MyFlags)
/* Duplicate and convert dll name */
plugin_dl.dl.length= dl->length * files_charset_info->mbmaxlen + 1;
- if (! (plugin_dl.dl.str= (char*) my_malloc(plugin_dl.dl.length, MYF(0))))
+ if (! (plugin_dl.dl.str= (char*) my_malloc(key_memory_mysql_plugin_dl,
+ plugin_dl.dl.length, MYF(0))))
{
my_error(ER_OUTOFMEMORY, MyFlags,
static_cast<int>(plugin_dl.dl.length));
@@ -977,7 +984,8 @@ static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref rc,
memory manager and/or valgrind to track locked references and
double unlocks to aid resolving reference counting problems.
*/
- if (!(plugin= (plugin_ref) my_malloc(sizeof(pi), MYF(MY_WME))))
+ if (!(plugin= (plugin_ref) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(pi),
+ MYF(MY_WME))))
DBUG_RETURN(NULL);
*plugin= pi;
@@ -1186,7 +1194,8 @@ static enum install_status plugin_add(MEM_ROOT *tmp_root, bool if_not_exists,
goto err;
if (my_hash_insert(&plugin_hash[plugin->type], (uchar*)tmp_plugin_ptr))
tmp_plugin_ptr->state= PLUGIN_IS_FREED;
- init_alloc_root(&tmp_plugin_ptr->mem_root, "plugin", 4096, 4096, MYF(0));
+ init_alloc_root(key_memory_plugin_int_mem_root, &tmp_plugin_ptr->mem_root,
+ 4096, 4096, MYF(0));
if (name->str)
DBUG_RETURN(INSTALL_GOOD); // all done
@@ -1541,6 +1550,15 @@ static PSI_mutex_info all_plugin_mutexes[]=
{ &key_LOCK_plugin, "LOCK_plugin", PSI_FLAG_GLOBAL}
};
+static PSI_memory_info all_plugin_memory[]=
+{
+ { &key_memory_plugin_mem_root, "plugin_mem_root", PSI_FLAG_GLOBAL},
+ { &key_memory_plugin_int_mem_root, "plugin_int_mem_root", 0},
+ { &key_memory_mysql_plugin_dl, "mysql_plugin_dl", 0},
+ { &key_memory_mysql_plugin, "mysql_plugin", 0},
+ { &key_memory_plugin_bookmark, "plugin_bookmark", PSI_FLAG_GLOBAL}
+};
+
static void init_plugin_psi_keys(void)
{
const char* category= "sql";
@@ -1551,7 +1569,12 @@ static void init_plugin_psi_keys(void)
count= array_elements(all_plugin_mutexes);
PSI_server->register_mutex(category, all_plugin_mutexes, count);
+
+ count= array_elements(all_plugin_memory);
+ mysql_memory_register(category, all_plugin_memory, count);
}
+#else
+static void init_plugin_psi_keys(void) {}
#endif /* HAVE_PSI_INTERFACE */
/*
@@ -1578,11 +1601,13 @@ int plugin_init(int *argc, char **argv, int flags)
dlopen_count =0;
- init_alloc_root(&plugin_mem_root, "plugin", 4096, 4096, MYF(0));
- init_alloc_root(&plugin_vars_mem_root, "plugin_vars", 4096, 4096, MYF(0));
- init_alloc_root(&tmp_root, "plugin_tmp", 4096, 4096, MYF(0));
+ init_plugin_psi_keys();
+
+ init_alloc_root(key_memory_plugin_mem_root, &plugin_mem_root, 4096, 4096, MYF(0));
+ init_alloc_root(key_memory_plugin_mem_root, &plugin_vars_mem_root, 4096, 4096, MYF(0));
+ init_alloc_root(PSI_NOT_INSTRUMENTED, &tmp_root, 4096, 4096, MYF(0));
- if (my_hash_init(&bookmark_hash, &my_charset_bin, 32, 0, 0,
+ if (my_hash_init(key_memory_plugin_bookmark, &bookmark_hash, &my_charset_bin, 32, 0, 0,
get_bookmark_hash_key, NULL, HASH_UNIQUE))
goto err;
@@ -1590,15 +1615,15 @@ int plugin_init(int *argc, char **argv, int flags)
The 80 is from 2016-04-27 when we had 71 default plugins
Big enough to avoid many mallocs even in future
*/
- if (my_init_dynamic_array(&plugin_dl_array,
+ if (my_init_dynamic_array(key_memory_mysql_plugin_dl, &plugin_dl_array,
sizeof(struct st_plugin_dl *), 16, 16, MYF(0)) ||
- my_init_dynamic_array(&plugin_array,
+ my_init_dynamic_array(key_memory_mysql_plugin, &plugin_array,
sizeof(struct st_plugin_int *), 80, 32, MYF(0)))
goto err;
for (i= 0; i < MYSQL_MAX_PLUGIN_TYPE_NUM; i++)
{
- if (my_hash_init(&plugin_hash[i], system_charset_info, 32, 0, 0,
+ if (my_hash_init(key_memory_plugin_mem_root, &plugin_hash[i], system_charset_info, 32, 0, 0,
get_plugin_hash_key, NULL, HASH_UNIQUE))
goto err;
}
@@ -2214,6 +2239,7 @@ bool mysql_install_plugin(THD *thd, const LEX_CSTRING *name,
mysql_audit_acquire_plugins(thd, event_class_mask);
mysql_mutex_lock(&LOCK_plugin);
+ DEBUG_SYNC(thd, "acquired_LOCK_plugin");
error= plugin_add(thd->mem_root, thd->lex->create_info.if_not_exists(),
name, &dl, MYF(0));
if (unlikely(error != INSTALL_GOOD))
@@ -2832,7 +2858,8 @@ static void update_func_str(THD *thd, struct st_mysql_sys_var *var,
{
char *old= *(char**) tgt;
if (value)
- *(char**) tgt= my_strdup(value, MYF(0));
+ *(char**) tgt= my_strdup(key_memory_global_system_variables,
+ value, MYF(0));
else
*(char**) tgt= 0;
my_free(old);
@@ -2976,10 +3003,12 @@ static st_bookmark *register_var(const char *plugin, const char *name,
if (new_size > global_variables_dynamic_size)
{
global_system_variables.dynamic_variables_ptr= (char*)
- my_realloc(global_system_variables.dynamic_variables_ptr, new_size,
+ my_realloc(key_memory_global_system_variables,
+ global_system_variables.dynamic_variables_ptr, new_size,
MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR));
max_system_variables.dynamic_variables_ptr= (char*)
- my_realloc(max_system_variables.dynamic_variables_ptr, new_size,
+ my_realloc(key_memory_global_system_variables,
+ max_system_variables.dynamic_variables_ptr, new_size,
MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR));
/*
Clear the new variable value space. This is required for string
@@ -3021,7 +3050,8 @@ void sync_dynamic_session_variables(THD* thd, bool global_lock)
uint idx;
thd->variables.dynamic_variables_ptr= (char*)
- my_realloc(thd->variables.dynamic_variables_ptr,
+ my_realloc(key_memory_THD_variables,
+ thd->variables.dynamic_variables_ptr,
global_variables_dynamic_size,
MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR));
@@ -3055,7 +3085,7 @@ void sync_dynamic_session_variables(THD* thd, bool global_lock)
{
char **pp= (char**) (thd->variables.dynamic_variables_ptr + v->offset);
if (*pp)
- *pp= my_strdup(*pp, MYF(MY_WME|MY_FAE));
+ *pp= my_strdup(key_memory_THD_variables, *pp, MYF(MY_WME|MY_FAE));
}
}
@@ -3912,7 +3942,7 @@ static int construct_options(MEM_ROOT *mem_root, struct st_plugin_int *tmp,
(opt->flags & PLUGIN_VAR_MEMALLOC))
{
char *def_val= *(char**)var_def_ptr(opt);
- *(char**)val= def_val ? my_strdup(def_val, MYF(0)) : NULL;
+ *(char**)val= def_val ? my_strdup(PSI_INSTRUMENT_ME, def_val, MYF(0)) : NULL;
}
else
memcpy(val, var_def_ptr(opt), var_storage_size(opt->flags));
@@ -4349,9 +4379,7 @@ int thd_setspecific(MYSQL_THD thd, MYSQL_THD_KEY_T key, void *value)
void plugin_mutex_init()
{
-#ifdef HAVE_PSI_INTERFACE
init_plugin_psi_keys();
-#endif
mysql_mutex_init(key_LOCK_plugin, &LOCK_plugin, MY_MUTEX_INIT_FAST);
}
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index dcf445f3cfb..98ffc842196 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -99,7 +99,6 @@ When one supplies long data for a placeholder:
#include "sql_insert.h" // upgrade_lock_type_for_insert, mysql_prepare_insert
#include "sql_update.h" // mysql_prepare_update
#include "sql_db.h" // mysql_opt_change_db, mysql_change_db
-#include "sql_acl.h" // *_ACL
#include "sql_derived.h" // mysql_derived_prepare,
// mysql_handle_derived
#include "sql_cte.h"
@@ -122,6 +121,7 @@ When one supplies long data for a placeholder:
#include "lock.h" // MYSQL_OPEN_FORCE_SHARED_MDL
#include "sql_handler.h"
#include "transaction.h" // trans_rollback_implicit
+#include "mysql/psi/mysql_ps.h" // MYSQL_EXECUTE_PS
#include "wsrep_mysqld.h"
/**
@@ -160,6 +160,7 @@ public:
};
THD *thd;
+ PSI_prepared_stmt* m_prepared_stmt;
Select_fetch_protocol_binary result;
Item_param **param_array;
Server_side_cursor *cursor;
@@ -1947,7 +1948,7 @@ static int mysql_test_show_slave_status(Prepared_statement *stmt,
/**
- Validate and prepare for execution SHOW MASTER STATUS statement.
+ Validate and prepare for execution SHOW BINLOG STATUS statement.
@param stmt prepared statement
@@ -1957,9 +1958,9 @@ static int mysql_test_show_slave_status(Prepared_statement *stmt,
TRUE error, error message is set in THD
*/
-static int mysql_test_show_master_status(Prepared_statement *stmt)
+static int mysql_test_show_binlog_status(Prepared_statement *stmt)
{
- DBUG_ENTER("mysql_test_show_master_status");
+ DBUG_ENTER("mysql_test_show_binlog_status");
THD *thd= stmt->thd;
List<Item> fields;
@@ -2408,8 +2409,8 @@ static bool check_prepared_statement(Prepared_statement *stmt)
}
break;
}
- case SQLCOM_SHOW_MASTER_STAT:
- if ((res= mysql_test_show_master_status(stmt)) == 2)
+ case SQLCOM_SHOW_BINLOG_STAT:
+ if ((res= mysql_test_show_binlog_status(stmt)) == 2)
{
/* Statement and field info has already been sent */
DBUG_RETURN(FALSE);
@@ -2664,6 +2665,11 @@ void mysqld_stmt_prepare(THD *thd, const char *packet, uint packet_length)
thd->protocol= &thd->protocol_binary;
+ /* Create PS table entry, set query text after rewrite. */
+ stmt->m_prepared_stmt= MYSQL_CREATE_PS(stmt, stmt->id,
+ thd->m_statement_psi,
+ stmt->name.str, stmt->name.length);
+
if (stmt->prepare(packet, packet_length))
{
/* Statement map deletes statement on erase */
@@ -2865,6 +2871,11 @@ void mysql_sql_stmt_prepare(THD *thd)
*/
Item_change_list_savepoint change_list_savepoint(thd);
+ /* Create PS table entry, set query text after rewrite. */
+ stmt->m_prepared_stmt= MYSQL_CREATE_PS(stmt, stmt->id,
+ thd->m_statement_psi,
+ stmt->name.str, stmt->name.length);
+
if (stmt->prepare(query.str, (uint) query.length))
{
/* Statement map deletes the statement on erase */
@@ -3260,6 +3271,8 @@ static void mysql_stmt_execute_common(THD *thd,
open_cursor= MY_TEST(cursor_flags & (ulong) CURSOR_TYPE_READ_ONLY);
thd->protocol= &thd->protocol_binary;
+ MYSQL_EXECUTE_PS(thd->m_statement_psi, stmt->m_prepared_stmt);
+
if (!bulk_op)
stmt->execute_loop(&expanded_query, open_cursor, packet, packet_end);
else
@@ -3369,6 +3382,8 @@ void mysql_sql_stmt_execute(THD *thd)
CALL p1('x');
*/
Item_change_list_savepoint change_list_savepoint(thd);
+ MYSQL_EXECUTE_PS(thd->m_statement_psi, stmt->m_prepared_stmt);
+
(void) stmt->execute_loop(&expanded_query, FALSE, NULL, NULL);
change_list_savepoint.rollback(thd);
thd->free_items(); // Free items created by execute_loop()
@@ -3787,6 +3802,7 @@ Prepared_statement::Prepared_statement(THD *thd_arg)
STMT_INITIALIZED,
((++thd_arg->statement_id_counter) & STMT_ID_MASK)),
thd(thd_arg),
+ m_prepared_stmt(NULL),
result(thd_arg),
param_array(0),
cursor(0),
@@ -3800,10 +3816,9 @@ Prepared_statement::Prepared_statement(THD *thd_arg)
read_types(0),
m_sql_mode(thd->variables.sql_mode)
{
- init_sql_alloc(&main_mem_root, "Prepared_statement",
- thd_arg->variables.query_alloc_block_size,
- thd_arg->variables.query_prealloc_size,
- MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_prepared_statement_main_mem_root,
+ &main_mem_root, thd_arg->variables.query_alloc_block_size,
+ thd_arg->variables.query_prealloc_size, MYF(MY_THREAD_SPECIFIC));
*last_error= '\0';
}
@@ -3869,6 +3884,9 @@ Prepared_statement::~Prepared_statement()
DBUG_ENTER("Prepared_statement::~Prepared_statement");
DBUG_PRINT("enter",("stmt: %p cursor: %p",
this, cursor));
+
+ MYSQL_DESTROY_PS(m_prepared_stmt);
+
delete cursor;
/*
We have to call free on the items even if cleanup is called as some items,
@@ -4102,6 +4120,8 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
state= Query_arena::STMT_PREPARED;
flags&= ~ (uint) IS_IN_USE;
+ MYSQL_SET_PS_TEXT(m_prepared_stmt, query(), query_length());
+
/*
Log COM_EXECUTE to the general log. Note, that in case of SQL
prepared statements this causes two records to be output:
@@ -4519,6 +4539,7 @@ Prepared_statement::reprepare()
if (likely(!error))
{
+ MYSQL_REPREPARE_PS(m_prepared_stmt);
swap_prepared_statement(&copy);
swap_parameter_array(param_array, copy.param_array, param_count);
#ifdef DBUG_ASSERT_EXISTS
@@ -4756,17 +4777,13 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor)
if (query_cache_send_result_to_client(thd, thd->query(),
thd->query_length()) <= 0)
{
- PSI_statement_locker *parent_locker;
MYSQL_QUERY_EXEC_START(thd->query(),
thd->thread_id,
thd->get_db(),
&thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip,
1);
- parent_locker= thd->m_statement_psi;
- thd->m_statement_psi= NULL;
error= mysql_execute_command(thd);
- thd->m_statement_psi= parent_locker;
MYSQL_QUERY_EXEC_DONE(error);
}
else
@@ -4879,7 +4896,11 @@ bool Prepared_statement::execute_immediate(const char *query, uint query_len)
set_sql_prepare();
name= execute_immediate_stmt_name; // for DBUG_PRINT etc
- if (unlikely(prepare(query, query_len)))
+
+ m_prepared_stmt= MYSQL_CREATE_PS(this, id, thd->m_statement_psi,
+ name.str, name.length);
+
+ if (prepare(query, query_len))
DBUG_RETURN(true);
if (param_count != thd->lex->prepared_stmt.param_count())
@@ -4889,6 +4910,7 @@ bool Prepared_statement::execute_immediate(const char *query, uint query_len)
DBUG_RETURN(true);
}
+ MYSQL_EXECUTE_PS(thd->m_statement_psi, m_prepared_stmt);
(void) execute_loop(&expanded_query, FALSE, NULL, NULL);
deallocate_immediate();
DBUG_RETURN(false);
@@ -5388,8 +5410,8 @@ bool Protocol_local::send_result_set_metadata(List<Item> *columns, uint)
{
DBUG_ASSERT(m_rset == 0 && !alloc_root_inited(&m_rset_root));
- init_sql_alloc(&m_rset_root, "send_result_set_metadata",
- MEM_ROOT_BLOCK_SIZE, 0, MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(PSI_INSTRUMENT_ME, &m_rset_root, MEM_ROOT_BLOCK_SIZE, 0,
+ MYF(MY_THREAD_SPECIFIC));
if (! (m_rset= new (&m_rset_root) List<Ed_row>))
return TRUE;
diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc
index cee55761a98..2a47aa846eb 100644
--- a/sql/sql_profile.cc
+++ b/sql/sql_profile.cc
@@ -200,7 +200,8 @@ void PROF_MEASUREMENT::set_label(const char *status_arg,
sizes[1]= (function_arg == NULL) ? 0 : strlen(function_arg) + 1;
sizes[2]= (file_arg == NULL) ? 0 : strlen(file_arg) + 1;
- allocated_status_memory= (char *) my_malloc(sizes[0] + sizes[1] + sizes[2], MYF(0));
+ allocated_status_memory= (char *) my_malloc(key_memory_PROFILE, sizes[0] +
+ sizes[1] + sizes[2], MYF(0));
DBUG_ASSERT(allocated_status_memory != NULL);
cursor= allocated_status_memory;
@@ -289,7 +290,7 @@ void QUERY_PROFILE::set_query_source(char *query_source_arg, size_t query_length
DBUG_ASSERT(query_source == NULL); /* we don't leak memory */
if (query_source_arg != NULL)
- query_source= my_strndup(query_source_arg, length, MYF(0));
+ query_source= my_strndup(key_memory_PROFILE, query_source_arg, length, MYF(0));
}
void QUERY_PROFILE::new_status(const char *status_arg,
diff --git a/sql/sql_profile.h b/sql/sql_profile.h
index b0b1642ee02..85018a2598b 100644
--- a/sql/sql_profile.h
+++ b/sql/sql_profile.h
@@ -54,6 +54,7 @@ int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table);
#include <sys/resource.h>
#endif
+extern PSI_memory_key key_memory_queue_item;
class PROF_MEASUREMENT;
class QUERY_PROFILE;
@@ -100,7 +101,8 @@ public:
{
struct queue_item *new_item;
- new_item= (struct queue_item *) my_malloc(sizeof(struct queue_item), MYF(0));
+ new_item= (struct queue_item *) my_malloc(key_memory_queue_item,
+ sizeof(struct queue_item), MYF(0));
new_item->payload= payload;
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 5bfa29b72c4..f11b3a35a80 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -24,7 +24,6 @@
#include "rpl_mi.h"
#include "rpl_rli.h"
#include "sql_repl.h"
-#include "sql_acl.h" // SUPER_ACL
#include "log_event.h"
#include "rpl_filter.h"
#include <my_dir.h>
@@ -1221,7 +1220,8 @@ check_slave_start_position(binlog_send_info *info, const char **errormsg,
if (!delete_list)
{
if (!(delete_list= (slave_connection_state::entry **)
- my_malloc(sizeof(*delete_list) * st->hash.records, MYF(MY_WME))))
+ my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(*delete_list) * st->hash.records, MYF(MY_WME))))
{
*errormsg= "Out of memory while checking slave start position";
err= ER_OUT_OF_RESOURCES;
@@ -1283,8 +1283,9 @@ gtid_find_binlog_file(slave_connection_state *state, char *out_name,
const char *errormsg= NULL;
char buf[FN_REFLEN];
- init_alloc_root(&memroot, "gtid_find_binlog_file",
- 8192, 0, MYF(MY_THREAD_SPECIFIC));
+ init_alloc_root(PSI_INSTRUMENT_ME, &memroot,
+ 10*(FN_REFLEN+sizeof(binlog_file_entry)), 0,
+ MYF(MY_THREAD_SPECIFIC));
if (!(list= get_binlog_list(&memroot)))
{
errormsg= "Out of memory while looking for GTID position in binlog";
@@ -3079,7 +3080,7 @@ int start_slave(THD* thd , Master_info* mi, bool net_report)
char relay_log_info_file_tmp[FN_REFLEN];
DBUG_ENTER("start_slave");
- if (check_access(thd, SUPER_ACL, any_db, NULL, NULL, 0, 0))
+ if (check_global_access(thd, PRIV_STMT_START_SLAVE))
DBUG_RETURN(-1);
create_logfile_name_with_suffix(master_info_file_tmp,
@@ -3282,7 +3283,7 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
DBUG_ENTER("stop_slave");
DBUG_PRINT("enter",("Connection: %s", mi->connection_name.str));
- if (check_access(thd, SUPER_ACL, any_db, NULL, NULL, 0, 0))
+ if (check_global_access(thd, PRIV_STMT_STOP_SLAVE))
DBUG_RETURN(-1);
THD_STAGE_INFO(thd, stage_killing_slave);
int thread_mask;
@@ -4215,7 +4216,7 @@ void show_binlog_info_get_fields(THD *thd, List<Item> *field_list)
/**
- Execute a SHOW MASTER STATUS statement.
+ Execute a SHOW BINLOG STATUS statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@@ -4307,8 +4308,7 @@ bool show_binlogs(THD* thd)
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE);
- init_alloc_root(&mem_root, "binlog_file_list", 8192, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_alloc_root(PSI_INSTRUMENT_ME, &mem_root, 8192, 0, MYF(MY_THREAD_SPECIFIC));
retry:
/*
The current mutex handling here is to ensure we get the current log position
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 09a15aaf7df..e8fd275c55b 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -43,7 +43,6 @@
#include "sql_base.h" // setup_wild, setup_fields, fill_record
#include "sql_parse.h" // check_stack_overrun
#include "sql_partition.h" // make_used_partitions_str
-#include "sql_acl.h" // *_ACL
#include "sql_test.h" // print_where, print_keyuse_array,
// print_sjm, print_plan, TEST_join
#include "records.h" // init_read_record, end_read_record
@@ -6769,7 +6768,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
/* set a barrier for the array of SARGABLE_PARAM */
(*sargables)[0].field= 0;
- if (my_init_dynamic_array2(keyuse, sizeof(KEYUSE),
+ if (my_init_dynamic_array2(thd->mem_root->m_psi_key, keyuse, sizeof(KEYUSE),
thd->alloc(sizeof(KEYUSE) * 20), 20, 64,
MYF(MY_THREAD_SPECIFIC)))
DBUG_RETURN(TRUE);
@@ -13495,8 +13494,7 @@ bool JOIN_TAB::preread_init()
if ((!derived->get_unit()->executed ||
derived->is_recursive_with_table() ||
derived->get_unit()->uncacheable) &&
- mysql_handle_single_derived(join->thd->lex,
- derived, DT_CREATE | DT_FILL))
+ mysql_handle_single_derived(join->thd->lex, derived, DT_CREATE | DT_FILL))
return TRUE;
if (!(derived->get_unit()->uncacheable & UNCACHEABLE_DEPENDENT) ||
@@ -13521,6 +13519,21 @@ bool JOIN_TAB::preread_init()
}
+bool JOIN_TAB::pfs_batch_update(JOIN *join)
+{
+ /*
+ Use PFS batch mode if
+ 1. tab is an inner-most table, or
+ 2. will read more than one row (not eq_ref or const access type)
+ 3. no subqueries
+ */
+
+ return join->join_tab + join->table_count - 1 == this && // 1
+ type != JT_EQ_REF && type != JT_CONST && type != JT_SYSTEM && // 2
+ (!select_cond || !select_cond->with_subquery()); // 3
+}
+
+
/**
Build a TABLE_REF structure for index lookup in the temporary table
@@ -18023,14 +18036,27 @@ class Create_tmp_table: public Data_type_statistics
ORDER *m_group;
bool m_distinct;
bool m_save_sum_fields;
+ bool m_with_cycle;
ulonglong m_select_options;
ha_rows m_rows_limit;
- uint m_hidden_field_count; // Remove this eventually
uint m_group_null_items;
- uint m_null_count;
- uint m_hidden_uneven_bit_length;
- uint m_hidden_null_count;
+
+ // counter for distinct/other fields
+ uint m_field_count[2];
+ // counter for distinct/other fields which can be NULL
+ uint m_null_count[2];
+ // counter for distinct/other blob fields
+ uint m_blobs_count[2];
+ // counter for "tails" of bit fields which do not fit in a byte
+ uint m_uneven_bit[2];
+
public:
+ enum counter {distinct, other};
+ /*
+ shows which field we are processing: distinct/other (set in processing
+ cycles)
+ */
+ counter current_counter;
Create_tmp_table(const TMP_TABLE_PARAM *param,
ORDER *group, bool distinct, bool save_sum_fields,
ulonglong select_options, ha_rows rows_limit)
@@ -18040,14 +18066,21 @@ public:
m_group(group),
m_distinct(distinct),
m_save_sum_fields(save_sum_fields),
+ m_with_cycle(false),
m_select_options(select_options),
m_rows_limit(rows_limit),
- m_hidden_field_count(param->hidden_field_count),
m_group_null_items(0),
- m_null_count(0),
- m_hidden_uneven_bit_length(0),
- m_hidden_null_count(0)
- { }
+ current_counter(other)
+ {
+ m_field_count[Create_tmp_table::distinct]= 0;
+ m_field_count[Create_tmp_table::other]= 0;
+ m_null_count[Create_tmp_table::distinct]= 0;
+ m_null_count[Create_tmp_table::other]= 0;
+ m_blobs_count[Create_tmp_table::distinct]= 0;
+ m_blobs_count[Create_tmp_table::other]= 0;
+ m_uneven_bit[Create_tmp_table::distinct]= 0;
+ m_uneven_bit[Create_tmp_table::other]= 0;
+ }
void add_field(TABLE *table, Field *field, uint fieldnr, bool force_not_null_cols);
@@ -18080,13 +18113,16 @@ void Create_tmp_table::add_field(TABLE *table, Field *field, uint fieldnr, bool
}
if (!(field->flags & NOT_NULL_FLAG))
- m_null_count++;
+ m_null_count[current_counter]++;
table->s->reclength+= field->pack_length();
// Assign it here, before update_data_type_statistics() changes m_blob_count
if (field->flags & BLOB_FLAG)
+ {
table->s->blob_field[m_blob_count]= fieldnr;
+ m_blobs_count[current_counter]++;
+ }
table->field[fieldnr]= field;
field->field_index= fieldnr;
@@ -18215,7 +18251,7 @@ TABLE *Create_tmp_table::start(THD *thd,
if (param->precomputed_group_by)
copy_func_count+= param->sum_func_count;
- init_sql_alloc(&own_root, "tmp_table", TABLE_ALLOC_BLOCK_SIZE, 0,
+ init_sql_alloc(key_memory_TABLE, &own_root, TABLE_ALLOC_BLOCK_SIZE, 0,
MYF(MY_THREAD_SPECIFIC));
if (!multi_alloc_root(&own_root,
@@ -18298,6 +18334,7 @@ bool Create_tmp_table::add_fields(THD *thd,
DBUG_ASSERT(table->s->blob_fields == 0);
const bool not_all_columns= !(m_select_options & TMP_TABLE_ALL_COLUMNS);
+ bool distinct_record_structure= m_distinct;
uint fieldnr= 0;
TABLE_SHARE *share= table->s;
Item **copy_func= param->items_to_copy;
@@ -18308,8 +18345,29 @@ bool Create_tmp_table::add_fields(THD *thd,
List_iterator_fast<Item> li(fields);
Item *item;
Field **tmp_from_field= m_from_field;
+ uint uneven_delta;
+ while (!m_with_cycle && (item= li++))
+ if (item->common_flags & IS_IN_WITH_CYCLE)
+ {
+ m_with_cycle= true;
+ /*
+ Following distinct_record_structure is (m_distinct || m_with_cycle)
+
+ Note: distinct_record_structure can be true even if m_distinct is
+ false, for example for incr_table in recursive CTE
+ (see select_union_recursive::create_result_table)
+ */
+ distinct_record_structure= true;
+ }
+ li.rewind();
while ((item=li++))
{
+ current_counter= (((param->hidden_field_count < (fieldnr + 1)) &&
+ distinct_record_structure &&
+ (!m_with_cycle ||
+ (item->common_flags & IS_IN_WITH_CYCLE)))?
+ distinct :
+ other);
Item::Type type= item->type();
if (type == Item::COPY_STR_ITEM)
{
@@ -18334,7 +18392,8 @@ bool Create_tmp_table::add_fields(THD *thd,
continue;
}
}
- if (item->const_item() && (int) m_hidden_field_count <= 0)
+ if (item->const_item() &&
+ param->hidden_field_count < (fieldnr + 1))
continue; // We don't have to store this
}
if (type == Item::SUM_FUNC_ITEM && !m_group && !m_save_sum_fields)
@@ -18351,7 +18410,7 @@ bool Create_tmp_table::add_fields(THD *thd,
create_tmp_field(table, arg, &copy_func,
tmp_from_field, &m_default_field[fieldnr],
m_group != 0, not_all_columns,
- m_distinct, false);
+ distinct_record_structure , false);
if (!new_field)
goto err; // Should be OOM
tmp_from_field++;
@@ -18363,7 +18422,10 @@ bool Create_tmp_table::add_fields(THD *thd,
arg= sum_item->set_arg(i, thd, tmp_item);
thd->mem_root= &table->mem_root;
+ uneven_delta= m_uneven_bit_length;
add_field(table, new_field, fieldnr++, param->force_not_null_cols);
+ uneven_delta= m_uneven_bit_length - uneven_delta;
+ m_field_count[current_counter]++;
if (!(new_field->flags & NOT_NULL_FLAG))
{
@@ -18373,6 +18435,8 @@ bool Create_tmp_table::add_fields(THD *thd,
*/
arg->maybe_null=1;
}
+ if (current_counter == distinct)
+ new_field->flags|= FIELD_PART_OF_TMP_UNIQUE;
}
}
}
@@ -18440,36 +18504,23 @@ bool Create_tmp_table::add_fields(THD *thd,
}
tmp_from_field++;
+ uneven_delta= m_uneven_bit_length;
add_field(table, new_field, fieldnr++, param->force_not_null_cols);
+ uneven_delta= m_uneven_bit_length - uneven_delta;
+ m_field_count[current_counter]++;
if (item->marker == 4 && item->maybe_null)
{
m_group_null_items++;
new_field->flags|= GROUP_FLAG;
}
+ if (current_counter == distinct)
+ new_field->flags|= FIELD_PART_OF_TMP_UNIQUE;
}
- if (!--m_hidden_field_count)
- {
- /*
- This was the last hidden field; Remember how many hidden fields could
- have null
- */
- m_hidden_null_count= m_null_count;
- /*
- We need to update hidden_field_count as we may have stored group
- functions with constant arguments
- */
- param->hidden_field_count= fieldnr;
- m_null_count= 0;
- /*
- On last hidden field we store uneven bit length in
- m_hidden_uneven_bit_length and proceed calculation of
- uneven bits for visible fields into m_uneven_bit_length.
- */
- m_hidden_uneven_bit_length= m_uneven_bit_length;
- m_uneven_bit_length= 0;
- }
+ m_uneven_bit[current_counter]+= uneven_delta;
}
+ DBUG_ASSERT(fieldnr == m_field_count[other] + m_field_count[distinct]);
+ DBUG_ASSERT(m_blob_count == m_blobs_count[other] + m_blobs_count[distinct]);
share->fields= fieldnr;
share->blob_fields= m_blob_count;
table->field[fieldnr]= 0; // End marker
@@ -18495,8 +18546,12 @@ bool Create_tmp_table::finalize(THD *thd,
DBUG_ENTER("Create_tmp_table::finalize");
DBUG_ASSERT(table);
- uint hidden_null_pack_length;
- uint null_pack_length;
+ uint null_pack_length[2];
+ uint null_pack_base[2];
+ uint null_counter[2]= {0, 0};
+
+ uint whole_null_pack_length;
+
bool use_packed_rows= false;
uchar *pos;
uchar *null_flags;
@@ -18547,16 +18602,21 @@ bool Create_tmp_table::finalize(THD *thd,
if (share->blob_fields == 0)
{
/* We need to ensure that first byte is not 0 for the delete link */
- if (param->hidden_field_count)
- m_hidden_null_count++;
+ if (m_field_count[other])
+ m_null_count[other]++;
else
- m_null_count++;
- }
- hidden_null_pack_length= (m_hidden_null_count + 7 +
- m_hidden_uneven_bit_length) / 8;
- null_pack_length= (hidden_null_pack_length +
- (m_null_count + m_uneven_bit_length + 7) / 8);
- share->reclength+= null_pack_length;
+ m_null_count[distinct]++;
+ }
+
+ null_pack_length[other]= (m_null_count[other] + 7 +
+ m_uneven_bit[other]) / 8;
+ null_pack_base[other]= 0;
+ null_pack_length[distinct]= (m_null_count[distinct] + 7 +
+ m_uneven_bit[distinct]) / 8;
+ null_pack_base[distinct]= null_pack_length[other];
+ whole_null_pack_length= null_pack_length[other] +
+ null_pack_length[distinct];
+ share->reclength+= whole_null_pack_length;
if (!share->reclength)
share->reclength= 1; // Dummy select
/* Use packed rows if there is blobs or a lot of space to gain */
@@ -18580,43 +18640,53 @@ bool Create_tmp_table::finalize(THD *thd,
recinfo=param->start_recinfo;
null_flags=(uchar*) table->record[0];
- pos=table->record[0]+ null_pack_length;
- if (null_pack_length)
+ pos=table->record[0]+ whole_null_pack_length;
+ if (whole_null_pack_length)
{
bzero((uchar*) recinfo,sizeof(*recinfo));
recinfo->type=FIELD_NORMAL;
- recinfo->length=null_pack_length;
+ recinfo->length= whole_null_pack_length;
recinfo++;
- bfill(null_flags,null_pack_length,255); // Set null fields
+ bfill(null_flags, whole_null_pack_length, 255); // Set null fields
table->null_flags= (uchar*) table->record[0];
- share->null_fields= m_null_count + m_hidden_null_count;
- share->null_bytes= share->null_bytes_for_compare= null_pack_length;
+ share->null_fields= m_null_count[other] + m_null_count[distinct];
+ share->null_bytes= share->null_bytes_for_compare= whole_null_pack_length;
+ }
+
+ if (share->blob_fields == 0)
+ {
+ null_counter[(m_field_count[other] ? other : distinct)]++;
}
- m_null_count= (share->blob_fields == 0) ? 1 : 0;
- m_hidden_field_count= param->hidden_field_count;
for (uint i= 0; i < share->fields; i++, recinfo++)
{
Field *field= table->field[i];
uint length;
bzero((uchar*) recinfo,sizeof(*recinfo));
+ current_counter= ((field->flags & FIELD_PART_OF_TMP_UNIQUE) ?
+ distinct :
+ other);
+
if (!(field->flags & NOT_NULL_FLAG))
{
- recinfo->null_bit= (uint8)1 << (m_null_count & 7);
- recinfo->null_pos= m_null_count/8;
- field->move_field(pos, null_flags + m_null_count/8,
- (uint8)1 << (m_null_count & 7));
- m_null_count++;
+
+ recinfo->null_bit= (uint8)1 << (null_counter[current_counter] & 7);
+ recinfo->null_pos= (null_pack_base[current_counter] +
+ null_counter[current_counter]/8);
+ field->move_field(pos, null_flags + recinfo->null_pos, recinfo->null_bit);
+ null_counter[current_counter]++;
}
else
field->move_field(pos,(uchar*) 0,0);
if (field->type() == MYSQL_TYPE_BIT)
{
/* We have to reserve place for extra bits among null bits */
- ((Field_bit*) field)->set_bit_ptr(null_flags + m_null_count / 8,
- m_null_count & 7);
- m_null_count+= (field->field_length & 7);
+ ((Field_bit*) field)->set_bit_ptr(null_flags +
+ null_pack_base[current_counter] +
+ null_counter[current_counter]/8,
+ null_counter[current_counter] & 7);
+ null_counter[current_counter]+= (field->field_length & 7);
}
field->reset();
@@ -18655,8 +18725,6 @@ bool Create_tmp_table::finalize(THD *thd,
/* Make entry for create table */
recinfo->length=length;
recinfo->type= field->tmp_engine_column_type(use_packed_rows);
- if (!--m_hidden_field_count)
- m_null_count= (m_null_count + 7) & ~7; // move to next byte
// fix table name in field entry
field->set_table_name(&table->alias);
@@ -18777,7 +18845,8 @@ bool Create_tmp_table::finalize(THD *thd,
m_group_buff <= param->group_buff + param->group_length);
}
- if (m_distinct && share->fields != param->hidden_field_count)
+ if (m_distinct && (share->fields != param->hidden_field_count ||
+ m_with_cycle))
{
uint i;
Field **reg_field;
@@ -18789,7 +18858,7 @@ bool Create_tmp_table::finalize(THD *thd,
*/
DBUG_PRINT("info",("hidden_field_count: %d", param->hidden_field_count));
- if (share->blob_fields)
+ if (m_blobs_count[distinct])
{
/*
Special mode for index creation in MyISAM used to support unique
@@ -18798,10 +18867,8 @@ bool Create_tmp_table::finalize(THD *thd,
*/
share->uniques= 1;
}
- null_pack_length-=hidden_null_pack_length;
- keyinfo->user_defined_key_parts=
- ((share->fields - param->hidden_field_count)+
- (share->uniques ? MY_TEST(null_pack_length) : 0));
+ keyinfo->user_defined_key_parts= m_field_count[distinct] +
+ (share->uniques ? MY_TEST(null_pack_length[distinct]) : 0);
keyinfo->ext_key_parts= keyinfo->user_defined_key_parts;
keyinfo->usable_key_parts= keyinfo->user_defined_key_parts;
table->distinct= 1;
@@ -18844,11 +18911,11 @@ bool Create_tmp_table::finalize(THD *thd,
blobs can distinguish NULL from 0. This extra field is not needed
when we do not use UNIQUE indexes for blobs.
*/
- if (null_pack_length && share->uniques)
+ if (null_pack_length[distinct] && share->uniques)
{
m_key_part_info->null_bit=0;
- m_key_part_info->offset=hidden_null_pack_length;
- m_key_part_info->length=null_pack_length;
+ m_key_part_info->offset= null_pack_base[distinct];
+ m_key_part_info->length= null_pack_length[distinct];
m_key_part_info->field= new Field_string(table->record[0],
(uint32) m_key_part_info->length,
(uchar*) 0,
@@ -18866,8 +18933,10 @@ bool Create_tmp_table::finalize(THD *thd,
/* Create a distinct key over the columns we are going to return */
for (i= param->hidden_field_count, reg_field= table->field + i ;
i < share->fields;
- i++, reg_field++, m_key_part_info++)
+ i++, reg_field++)
{
+ if (!((*reg_field)->flags & FIELD_PART_OF_TMP_UNIQUE))
+ continue;
m_key_part_info->field= *reg_field;
(*reg_field)->flags |= PART_KEY_FLAG;
if (m_key_part_info == keyinfo->key_part)
@@ -18904,6 +18973,8 @@ bool Create_tmp_table::finalize(THD *thd,
(ha_base_keytype) m_key_part_info->type == HA_KEYTYPE_VARTEXT1 ||
(ha_base_keytype) m_key_part_info->type == HA_KEYTYPE_VARTEXT2) ?
0 : FIELDFLAG_BINARY;
+
+ m_key_part_info++;
}
}
@@ -20446,6 +20517,10 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
if (join_tab->loosescan_match_tab)
join_tab->loosescan_match_tab->found_match= FALSE;
+ const bool pfs_batch_update= join_tab->pfs_batch_update(join);
+ if (pfs_batch_update)
+ join_tab->table->file->start_psi_batch_mode();
+
if (rc != NESTED_LOOP_NO_MORE_ROWS)
{
error= (*join_tab->read_first_record)(join_tab);
@@ -20497,6 +20572,9 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
join_tab->last_inner && !join_tab->found)
rc= evaluate_null_complemented_join_record(join, join_tab);
+ if (pfs_batch_update)
+ join_tab->table->file->end_psi_batch_mode();
+
if (rc == NESTED_LOOP_NO_MORE_ROWS)
rc= NESTED_LOOP_OK;
DBUG_RETURN(rc);
@@ -23952,21 +24030,21 @@ static int remove_dup_with_hash_index(THD *thd, TABLE *table,
Field **ptr;
DBUG_ENTER("remove_dup_with_hash_index");
- if (unlikely(!my_multi_malloc(MYF(MY_WME),
- &key_buffer,
- (uint) ((key_length + extra_length) *
- (long) file->stats.records),
- &field_lengths,
- (uint) (field_count*sizeof(*field_lengths)),
- NullS)))
+ if (!my_multi_malloc(key_memory_hash_index_key_buffer, MYF(MY_WME),
+ &key_buffer,
+ (uint) ((key_length + extra_length) *
+ (long) file->stats.records),
+ &field_lengths,
+ (uint) (field_count*sizeof(*field_lengths)),
+ NullS))
DBUG_RETURN(1);
for (ptr= first_field, field_length=field_lengths ; *ptr ; ptr++)
(*field_length++)= (*ptr)->sort_length();
- if (unlikely(my_hash_init(&hash, &my_charset_bin,
- (uint) file->stats.records, 0,
- key_length, (my_hash_get_key) 0, 0, 0)))
+ if (my_hash_init(key_memory_hash_index_key_buffer, &hash, &my_charset_bin,
+ (uint) file->stats.records, 0, key_length,
+ (my_hash_get_key) 0, 0, 0))
{
my_free(key_buffer);
DBUG_RETURN(1);
@@ -24002,7 +24080,7 @@ static int remove_dup_with_hash_index(THD *thd, TABLE *table,
field_length=field_lengths;
for (ptr= first_field ; *ptr ; ptr++)
{
- (*ptr)->make_sort_key(key_pos, *field_length);
+ (*ptr)->make_sort_key_part(key_pos, *field_length);
key_pos+= (*ptr)->maybe_null() + *field_length++;
}
/* Check if it exists before */
@@ -27481,7 +27559,7 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
else
str->append(',');
- if (is_subquery_function() && item->is_autogenerated_name)
+ if (is_subquery_function() && item->is_autogenerated_name())
{
/*
Do not print auto-generated aliases in subqueries. It has no purpose
@@ -27777,8 +27855,8 @@ JOIN::reoptimize(Item *added_where, table_map join_tables,
reset_query_plan();
if (!keyuse.buffer &&
- my_init_dynamic_array(&keyuse, sizeof(KEYUSE), 20, 64,
- MYF(MY_THREAD_SPECIFIC)))
+ my_init_dynamic_array(thd->mem_root->m_psi_key, &keyuse, sizeof(KEYUSE),
+ 20, 64, MYF(MY_THREAD_SPECIFIC)))
{
delete_dynamic(&added_keyuse);
return REOPT_ERROR;
diff --git a/sql/sql_select.h b/sql/sql_select.h
index e3501fb98c6..8b2df74702b 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -247,13 +247,13 @@ class SplM_opt_info;
typedef struct st_join_table {
TABLE *table;
TABLE_LIST *tab_list;
- KEYUSE *keyuse; /**< pointer to first used key */
+ KEYUSE *keyuse; /**< pointer to first used key */
KEY *hj_key; /**< descriptor of the used best hash join key
- not supported by any index */
+ not supported by any index */
SQL_SELECT *select;
COND *select_cond;
COND *on_precond; /**< part of on condition to check before
- accessing the first inner table */
+ accessing the first inner table */
QUICK_SELECT_I *quick;
/*
The value of select_cond before we've attempted to do Index Condition
@@ -635,6 +635,8 @@ typedef struct st_join_table {
ha_rows get_examined_rows();
bool preread_init();
+ bool pfs_batch_update(JOIN *join);
+
bool is_sjm_nest() { return MY_TEST(bush_children); }
/*
@@ -1095,7 +1097,7 @@ protected:
keyuse.buffer= NULL;
keyuse.malloc_flags= 0;
best_positions= 0; /* To detect errors */
- error= my_multi_malloc(MYF(MY_WME),
+ error= my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&best_positions,
sizeof(*best_positions) * (tables + 1),
&join_tab_keyuse,
diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc
index 8b2f49a5910..a5676b8989a 100644
--- a/sql/sql_sequence.cc
+++ b/sql/sql_sequence.cc
@@ -452,10 +452,9 @@ int SEQUENCE::read_initial_values(TABLE *table)
where we don't have a mdl lock on the table
*/
- mdl_request.init(MDL_key::TABLE,
- table->s->db.str,
- table->s->table_name.str,
- MDL_SHARED_READ, MDL_EXPLICIT);
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::TABLE, table->s->db.str,
+ table->s->table_name.str, MDL_SHARED_READ,
+ MDL_EXPLICIT);
mdl_requests.push_front(&mdl_request);
if (thd->mdl_context.acquire_locks(&mdl_requests,
thd->variables.lock_wait_timeout))
diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc
index 7913a7d2b9f..1d12e95bbbb 100644
--- a/sql/sql_servers.cc
+++ b/sql/sql_servers.cc
@@ -93,6 +93,8 @@ static uchar *servers_cache_get_key(FOREIGN_SERVER *server, size_t *length,
DBUG_RETURN((uchar*) server->server_name);
}
+static PSI_memory_key key_memory_servers;
+
#ifdef HAVE_PSI_INTERFACE
static PSI_rwlock_key key_rwlock_THR_LOCK_servers;
@@ -101,6 +103,11 @@ static PSI_rwlock_info all_servers_cache_rwlocks[]=
{ &key_rwlock_THR_LOCK_servers, "THR_LOCK_servers", PSI_FLAG_GLOBAL}
};
+static PSI_memory_info all_servers_cache_memory[]=
+{
+ { &key_memory_servers, "servers_cache", PSI_FLAG_GLOBAL}
+};
+
static void init_servers_cache_psi_keys(void)
{
const char* category= "sql";
@@ -111,6 +118,9 @@ static void init_servers_cache_psi_keys(void)
count= array_elements(all_servers_cache_rwlocks);
PSI_server->register_rwlock(category, all_servers_cache_rwlocks, count);
+
+ count= array_elements(all_servers_cache_memory);
+ mysql_memory_register(category, all_servers_cache_memory, count);
}
#endif /* HAVE_PSI_INTERFACE */
@@ -148,7 +158,7 @@ bool servers_init(bool dont_read_servers_table)
DBUG_RETURN(TRUE);
/* initialise our servers cache */
- if (my_hash_init(&servers_cache, system_charset_info, 32, 0, 0,
+ if (my_hash_init(key_memory_servers, &servers_cache, system_charset_info, 32, 0, 0,
(my_hash_get_key) servers_cache_get_key, 0, 0))
{
return_val= TRUE; /* we failed, out of memory? */
@@ -156,7 +166,7 @@ bool servers_init(bool dont_read_servers_table)
}
/* Initialize the mem root for data */
- init_sql_alloc(&mem, "servers", ACL_ALLOC_BLOCK_SIZE, 0,
+ init_sql_alloc(key_memory_servers, &mem, ACL_ALLOC_BLOCK_SIZE, 0,
MYF(MY_THREAD_SPECIFIC));
if (dont_read_servers_table)
@@ -206,7 +216,7 @@ static bool servers_load(THD *thd, TABLE_LIST *tables)
my_hash_reset(&servers_cache);
free_root(&mem, MYF(0));
- init_sql_alloc(&mem, "servers_load", ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(key_memory_servers, &mem, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
if (init_read_record(&read_record_info,thd,table=tables[0].table, NULL, NULL,
1,0, FALSE))
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 94a28e74eff..02f6278140c 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -480,7 +480,10 @@ static struct show_privileges_st sys_privileges[]=
{"Proxy", "Server Admin", "To make proxy user possible"},
{"References", "Databases,Tables", "To have references on tables"},
{"Reload", "Server Admin", "To reload or refresh tables, logs and privileges"},
- {"Replication client","Server Admin","To ask where the slave or master servers are"},
+ {"Binlog admin", "Server", "To purge binary logs"},
+ {"Binlog monitor", "Server", "To use SHOW BINLOG STATUS and SHOW BINARY LOG"},
+ {"Replication master admin", "Server", "To monitor connected slaves"},
+ {"Replication slave admin", "Server", "To start/monitor/stop slave and apply binlog events"},
{"Replication slave","Server Admin","To read binary log events from the master"},
{"Select", "Tables", "To retrieve rows from table"},
{"Show databases","Server Admin","To see all databases with SHOW DATABASES"},
@@ -490,6 +493,10 @@ static struct show_privileges_st sys_privileges[]=
{"Trigger","Tables", "To use triggers"},
{"Create tablespace", "Server Admin", "To create/alter/drop tablespaces"},
{"Update", "Tables", "To update existing rows"},
+ {"Set user","Server", "To create views and stored routines with a different definer"},
+ {"Federated admin", "Server", "To execute the CREATE SERVER, ALTER SERVER, DROP SERVER statements"},
+ {"Connection admin", "Server", "To bypass connection limits and kill other users' connections"},
+ {"Read_only admin", "Server", "To perform write operations even if @@read_only=ON"},
{"Usage","Server Admin","No privileges - allow connect only"},
{NullS, NullS, NullS}
};
@@ -571,8 +578,8 @@ static bool skip_ignored_dir_check= TRUE;
bool
ignore_db_dirs_init()
{
- return my_init_dynamic_array(&ignore_db_dirs_array, sizeof(LEX_CSTRING *),
- 0, 0, MYF(0));
+ return my_init_dynamic_array(key_memory_ignored_db, &ignore_db_dirs_array,
+ sizeof(LEX_STRING *), 0, 0, MYF(0));
}
@@ -620,8 +627,8 @@ push_ignored_db_dir(char *path)
return true;
// No need to normalize, it's only a directory name, not a path.
- if (!my_multi_malloc(0,
- &new_elt, sizeof(LEX_CSTRING),
+ if (!my_multi_malloc(key_memory_ignored_db, MYF(0),
+ &new_elt, sizeof(LEX_STRING),
&new_elt_buffer, path_len + 1,
NullS))
return true;
@@ -701,7 +708,7 @@ void ignore_db_dirs_append(const char *dirname_arg)
LEX_STRING *new_entry;
size_t len= strlen(dirname_arg);
- if (!my_multi_malloc(0,
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(0),
&new_entry, sizeof(LEX_STRING),
&new_entry_buf, len + 1,
NullS))
@@ -723,7 +730,7 @@ void ignore_db_dirs_append(const char *dirname_arg)
// Add one for comma and one for \0.
size_t newlen= curlen + len + 1 + 1;
char *new_db_dirs;
- if (!(new_db_dirs= (char*)my_malloc(newlen ,MYF(0))))
+ if (!(new_db_dirs= (char*)my_malloc(PSI_INSTRUMENT_ME, newlen, MYF(0))))
{
// This is not a critical condition
return;
@@ -749,12 +756,10 @@ ignore_db_dirs_process_additions()
skip_ignored_dir_check= TRUE;
- if (my_hash_init(&ignore_db_dirs_hash,
- lower_case_table_names ?
- character_set_filesystem : &my_charset_bin,
- 0, 0, 0, db_dirs_hash_get_key,
- dispose_db_dir,
- HASH_UNIQUE))
+ if (my_hash_init(key_memory_ignored_db, &ignore_db_dirs_hash,
+ lower_case_table_names ? character_set_filesystem :
+ &my_charset_bin, 0, 0, 0, db_dirs_hash_get_key,
+ dispose_db_dir, HASH_UNIQUE))
return true;
/* len starts from 1 because of the terminating zero. */
@@ -776,7 +781,8 @@ ignore_db_dirs_process_additions()
len--;
/* +1 the terminating zero */
- ptr= opt_ignore_db_dirs= (char *) my_malloc(len + 1, MYF(0));
+ ptr= opt_ignore_db_dirs= (char *) my_malloc(key_memory_ignored_db, len + 1,
+ MYF(0));
if (!ptr)
return true;
@@ -1976,6 +1982,14 @@ static void append_period(THD *thd, String *packet, const LEX_CSTRING &start,
packet->append(STRING_WITH_LEN(")"));
}
+int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet,
+ Table_specification_st *create_info_arg,
+ enum_with_db_name with_db_name)
+{
+ return show_create_table_ex(thd, table_list, NULL, NULL, packet,
+ create_info_arg, with_db_name);
+}
+
/*
Build a CREATE TABLE statement for a table.
@@ -1984,6 +1998,11 @@ static void append_period(THD *thd, String *packet, const LEX_CSTRING &start,
thd The thread
table_list A list containing one table to write statement
for.
+ force_db If not NULL, database name to use in the CREATE
+ TABLE statement.
+ force_name If not NULL, table name to use in the CREATE TABLE
+ statement. if NULL, the name from table_list will be
+ used.
packet Pointer to a string where statement will be
written.
create_info_arg Pointer to create information that can be used
@@ -2000,9 +2019,11 @@ static void append_period(THD *thd, String *packet, const LEX_CSTRING &start,
0 OK
*/
-int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet,
- Table_specification_st *create_info_arg,
- enum_with_db_name with_db_name)
+int show_create_table_ex(THD *thd, TABLE_LIST *table_list,
+ const char *force_db, const char *force_name,
+ String *packet,
+ Table_specification_st *create_info_arg,
+ enum_with_db_name with_db_name)
{
List<Item> field_list;
char tmp[MAX_FIELD_WIDTH], *for_str, def_value_buf[MAX_FIELD_WIDTH];
@@ -2052,41 +2073,55 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet,
packet->append(STRING_WITH_LEN("TABLE "));
if (create_info_arg && create_info_arg->if_not_exists())
packet->append(STRING_WITH_LEN("IF NOT EXISTS "));
- if (table_list->schema_table)
+
+ if (force_name)
{
- alias.str= table_list->schema_table->table_name;
- alias.length= strlen(alias.str);
+ if (force_db)
+ {
+ append_identifier(thd, packet, force_db, strlen(force_db));
+ packet->append(STRING_WITH_LEN("."));
+ }
+ append_identifier(thd, packet, force_name, strlen(force_name));
}
else
{
- if (lower_case_table_names == 2)
+ if (table_list->schema_table)
{
- alias.str= table->alias.c_ptr();
- alias.length= table->alias.length();
+ alias.str= table_list->schema_table->table_name;
+ alias.length= strlen(alias.str);
}
else
- alias= share->table_name;
- }
+ {
+ if (lower_case_table_names == 2)
+ {
+ alias.str= table->alias.c_ptr();
+ alias.length= table->alias.length();
+ }
+ else
+ alias= share->table_name;
+ }
- /*
- Print the database before the table name if told to do that. The
- database name is only printed in the event that it is different
- from the current database. The main reason for doing this is to
- avoid having to update gazillions of tests and result files, but
- it also saves a few bytes of the binary log.
- */
- if (with_db_name == WITH_DB_NAME)
- {
- const LEX_CSTRING *const db=
- table_list->schema_table ? &INFORMATION_SCHEMA_NAME : &table->s->db;
- if (!thd->db.str || cmp(db, &thd->db))
- {
- append_identifier(thd, packet, db);
- packet->append(STRING_WITH_LEN("."));
+ /*
+ Print the database before the table name if told to do that. The
+ database name is only printed in the event that it is different
+ from the current database. The main reason for doing this is to
+ avoid having to update gazillions of tests and result files, but
+ it also saves a few bytes of the binary log.
+ */
+ if (with_db_name == WITH_DB_NAME)
+ {
+ const LEX_CSTRING *const db=
+ table_list->schema_table ? &INFORMATION_SCHEMA_NAME : &table->s->db;
+ if (!thd->db.str || cmp(db, &thd->db))
+ {
+ append_identifier(thd, packet, db);
+ packet->append(STRING_WITH_LEN("."));
+ }
}
+
+ append_identifier(thd, packet, &alias);
}
- append_identifier(thd, packet, &alias);
packet->append(STRING_WITH_LEN(" (\n"));
/*
We need this to get default values from the table
@@ -3025,8 +3060,8 @@ int fill_show_explain(THD *thd, TABLE_LIST *table, COND *cond)
DBUG_ASSERT(cond==NULL);
thread_id= thd->lex->value_list.head()->val_int();
- calling_user= (thd->security_ctx->master_access & PROCESS_ACL) ? NullS :
- thd->security_ctx->priv_user;
+ calling_user= (thd->security_ctx->master_access & PRIV_STMT_SHOW_EXPLAIN) ?
+ NullS : thd->security_ctx->priv_user;
if ((tmp= find_thread_by_id(thread_id)))
{
@@ -3143,8 +3178,9 @@ static my_bool processlist_callback(THD *tmp, processlist_callback_arg *arg)
const char *val;
ulonglong max_counter;
bool got_thd_data;
- char *user= arg->thd->security_ctx->master_access & PROCESS_ACL ?
- NullS : arg->thd->security_ctx->priv_user;
+ char *user=
+ arg->thd->security_ctx->master_access & PRIV_STMT_SHOW_PROCESSLIST ?
+ NullS : arg->thd->security_ctx->priv_user;
if ((!tmp->vio_ok() && !tmp->system_thread) ||
(user && (tmp->system_thread || !tmp_sctx->user ||
@@ -3277,8 +3313,9 @@ int fill_schema_processlist(THD* thd, TABLE_LIST* tables, COND* cond)
Status functions
*****************************************************************************/
-static DYNAMIC_ARRAY all_status_vars;
+DYNAMIC_ARRAY all_status_vars;
static bool status_vars_inited= 0;
+ulonglong status_var_array_version= 0;
C_MODE_START
static int show_var_cmp(const void *var1, const void *var2)
@@ -3306,6 +3343,7 @@ static void shrink_var_array(DYNAMIC_ARRAY *array)
}
else // array is completely empty - delete it
delete_dynamic(array);
+ status_var_array_version++;
}
/*
@@ -3333,7 +3371,8 @@ int add_status_vars(SHOW_VAR *list)
if (status_vars_inited)
mysql_rwlock_wrlock(&LOCK_all_status_vars);
if (!all_status_vars.buffer && // array is not allocated yet - do it now
- my_init_dynamic_array(&all_status_vars, sizeof(SHOW_VAR), 250, 50, MYF(0)))
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &all_status_vars,
+ sizeof(SHOW_VAR), 250, 50, MYF(0)))
{
res= 1;
goto err;
@@ -3344,6 +3383,7 @@ int add_status_vars(SHOW_VAR *list)
all_status_vars.elements--; // but next insert_dynamic should overwite it
if (status_vars_inited)
sort_dynamic(&all_status_vars, show_var_cmp);
+ status_var_array_version++;
err:
if (status_vars_inited)
mysql_rwlock_unlock(&LOCK_all_status_vars);
@@ -3362,6 +3402,7 @@ void init_status_vars()
{
status_vars_inited=1;
sort_dynamic(&all_status_vars, show_var_cmp);
+ status_var_array_version++;
}
void reset_status_vars()
@@ -3388,6 +3429,7 @@ void reset_status_vars()
void free_status_vars()
{
delete_dynamic(&all_status_vars);
+ status_var_array_version++;
}
/*
@@ -3449,6 +3491,11 @@ void remove_status_vars(SHOW_VAR *list)
}
}
+/* Current version of the all_status_vars. */
+ulonglong get_status_vars_version(void)
+{
+ return status_var_array_version;
+}
/**
@brief Returns the value of a system or a status variable.
@@ -4738,8 +4785,9 @@ try_acquire_high_prio_shared_mdl_lock(THD *thd, TABLE_LIST *table,
bool can_deadlock)
{
bool error;
- table->mdl_request.init(MDL_key::TABLE, table->db.str, table->table_name.str,
- MDL_SHARED_HIGH_PRIO, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table->mdl_request, MDL_key::TABLE, table->db.str,
+ table->table_name.str, MDL_SHARED_HIGH_PRIO,
+ MDL_TRANSACTION);
if (can_deadlock)
{
@@ -4861,8 +4909,8 @@ static int fill_schema_table_from_frm(THD *thd, TABLE *table,
if (schema_table->i_s_requested_object & OPEN_TRIGGER_ONLY)
{
- init_sql_alloc(&tbl.mem_root, "fill_schema_table_from_frm",
- TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(key_memory_table_triggers_list,
+ &tbl.mem_root, TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0));
if (!Table_triggers_list::check_n_load(thd, db_name,
table_name, &tbl, 1))
{
@@ -5016,7 +5064,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
ST_SCHEMA_TABLE *schema_table= tables->schema_table;
IS_table_read_plan *plan= tables->is_table_read_plan;
enum enum_schema_tables schema_table_idx;
- Dynamic_array<LEX_CSTRING*> db_names;
+ Dynamic_array<LEX_CSTRING*> db_names(PSI_INSTRUMENT_MEM);
Item *partial_cond= plan->partial_cond;
int error= 1;
Open_tables_backup open_tables_state_backup;
@@ -5085,7 +5133,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
goto err;
/* Use tmp_mem_root to allocate data for opened tables */
- init_alloc_root(&tmp_mem_root, "get_all_tables", SHOW_ALLOC_BLOCK_SIZE,
+ init_alloc_root(PSI_INSTRUMENT_ME, &tmp_mem_root, SHOW_ALLOC_BLOCK_SIZE,
SHOW_ALLOC_BLOCK_SIZE, MY_THREAD_SPECIFIC);
for (size_t i=0; i < db_names.elements(); i++)
@@ -5100,7 +5148,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
acl_get(sctx->host, sctx->ip, sctx->priv_user, db_name->str, 0))
#endif
{
- Dynamic_array<LEX_CSTRING*> table_names;
+ Dynamic_array<LEX_CSTRING*> table_names(PSI_INSTRUMENT_MEM);
int res= make_table_name_list(thd, &table_names, lex,
&plan->lookup_field_vals, db_name);
if (unlikely(res == 2)) /* Not fatal error, continue */
@@ -5216,7 +5264,7 @@ int fill_schema_schemata(THD *thd, TABLE_LIST *tables, COND *cond)
*/
LOOKUP_FIELD_VALUES lookup_field_vals;
- Dynamic_array<LEX_CSTRING*> db_names;
+ Dynamic_array<LEX_CSTRING*> db_names(PSI_INSTRUMENT_MEM);
Schema_specification_st create;
TABLE *table= tables->table;
#ifndef NO_EMBEDDED_ACCESS_CHECKS
@@ -6200,11 +6248,11 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table,
proc_table->field[MYSQL_PROC_FIELD_NAME]->val_str_nopad(thd->mem_root, &name);
proc_table->field[MYSQL_PROC_FIELD_DEFINER]->val_str_nopad(thd->mem_root, &definer);
sql_mode= (sql_mode_t) proc_table->field[MYSQL_PROC_FIELD_SQL_MODE]->val_int();
- sph= Sp_handler::handler_mysql_proc((stored_procedure_type)
+ sph= Sp_handler::handler_mysql_proc((enum_sp_type)
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->
val_int());
- if (!sph || sph->type() == TYPE_ENUM_PACKAGE ||
- sph->type() == TYPE_ENUM_PACKAGE_BODY)
+ if (!sph || sph->type() == SP_TYPE_PACKAGE ||
+ sph->type() == SP_TYPE_PACKAGE_BODY)
DBUG_RETURN(0);
if (!full_access)
@@ -6215,7 +6263,7 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table,
proc_table->field[MYSQL_PROC_FIELD_PARAM_LIST]->val_str_nopad(thd->mem_root,
&params);
- if (sph->type() == TYPE_ENUM_FUNCTION)
+ if (sph->type() == SP_TYPE_FUNCTION)
proc_table->field[MYSQL_PROC_FIELD_RETURNS]->val_str_nopad(thd->mem_root,
&returns);
sp= sph->sp_load_for_information_schema(thd, proc_table, db, name,
@@ -6228,7 +6276,7 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table,
Sql_mode_save sql_mode_backup(thd);
thd->variables.sql_mode= sql_mode;
- if (sph->type() == TYPE_ENUM_FUNCTION)
+ if (sph->type() == SP_TYPE_FUNCTION)
{
restore_record(table, s->default_values);
table->field[0]->store(STRING_WITH_LEN("def"), cs);
@@ -6312,7 +6360,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
proc_table->field[MYSQL_PROC_FIELD_DB]->val_str_nopad(thd->mem_root, &db);
proc_table->field[MYSQL_PROC_FIELD_NAME]->val_str_nopad(thd->mem_root, &name);
proc_table->field[MYSQL_PROC_FIELD_DEFINER]->val_str_nopad(thd->mem_root, &definer);
- sph= Sp_handler::handler_mysql_proc((stored_procedure_type)
+ sph= Sp_handler::handler_mysql_proc((enum_sp_type)
proc_table->field[MYSQL_PROC_MYSQL_TYPE]->
val_int());
if (!sph)
@@ -6341,7 +6389,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
copy_field_as_string(table->field[4],
proc_table->field[MYSQL_PROC_MYSQL_TYPE]);
- if (sph->type() == TYPE_ENUM_FUNCTION)
+ if (sph->type() == SP_TYPE_FUNCTION)
{
sp_head *sp;
bool free_sp_head;
@@ -9504,7 +9552,8 @@ int initialize_schema_table(st_plugin_int *plugin)
ST_SCHEMA_TABLE *schema_table;
DBUG_ENTER("initialize_schema_table");
- if (!(schema_table= (ST_SCHEMA_TABLE *)my_malloc(sizeof(ST_SCHEMA_TABLE),
+ if (!(schema_table= (ST_SCHEMA_TABLE *)my_malloc(key_memory_ST_SCHEMA_TABLE,
+ sizeof(ST_SCHEMA_TABLE),
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(1);
/* Historical Requirement */
diff --git a/sql/sql_show.h b/sql/sql_show.h
index a98ba451088..80588cda8b5 100644
--- a/sql/sql_show.h
+++ b/sql/sql_show.h
@@ -83,6 +83,12 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet,
Table_specification_st *create_info_arg,
enum_with_db_name with_db_name);
+int show_create_table_ex(THD *thd, TABLE_LIST *table_list,
+ const char * forced_db, const char *forced_name,
+ String *packet,
+ Table_specification_st *create_info_arg,
+ enum_with_db_name with_db_name);
+
int copy_event_to_schema_table(THD *thd, TABLE *sch_table, TABLE *event_table);
bool append_identifier(THD *thd, String *packet, const char *name, size_t length);
@@ -113,6 +119,7 @@ bool append_definer(THD *thd, String *buffer, const LEX_CSTRING *definer_user,
const LEX_CSTRING *definer_host);
int add_status_vars(SHOW_VAR *list);
void remove_status_vars(SHOW_VAR *list);
+ulonglong get_status_vars_version(void);
void init_status_vars();
void free_status_vars();
void reset_status_vars();
diff --git a/sql/sql_sort.h b/sql/sql_sort.h
index 2c01b01b607..5b3f5a67d17 100644
--- a/sql/sql_sort.h
+++ b/sql/sql_sort.h
@@ -20,8 +20,8 @@
#include "my_base.h" /* ha_rows */
#include <my_sys.h> /* qsort2_cmp */
#include "queues.h"
+#include "sql_class.h"
-struct SORT_FIELD;
class Field;
struct TABLE;
@@ -156,6 +156,7 @@ public:
};
typedef Bounds_checked_array<SORT_ADDON_FIELD> Addon_fields_array;
+typedef Bounds_checked_array<SORT_FIELD> Sort_keys_array;
/**
This class wraps information about usage of addon fields.
@@ -182,7 +183,7 @@ public:
/// rr_unpack_from_tempfile needs an extra buffer when unpacking.
uchar *allocate_addon_buf(uint sz)
{
- m_addon_buf= (uchar *)my_malloc(sz, MYF(MY_WME | MY_THREAD_SPECIFIC));
+ m_addon_buf= (uchar *)my_malloc(PSI_INSTRUMENT_ME, sz, MYF(MY_WME | MY_THREAD_SPECIFIC));
if (m_addon_buf)
m_addon_buf_length= sz;
return m_addon_buf;
@@ -241,22 +242,263 @@ private:
bool m_using_packed_addons; ///< Are we packing the addon fields?
};
+/**
+ This class wraps information about usage of sort keys.
+ A Sort_keys object is used both during packing of data in the filesort
+ buffer, and later during unpacking in 'Filesort_info::unpack_addon_fields'.
+
+ @see SORT_FIELD struct.
+*/
+
+class Sort_keys :public Sql_alloc,
+ public Sort_keys_array
+{
+public:
+ Sort_keys(SORT_FIELD* arr, size_t count):
+ Sort_keys_array(arr, count),
+ m_using_packed_sortkeys(false),
+ size_of_packable_fields(0),
+ sort_length(0)
+ {
+ DBUG_ASSERT(!is_null());
+ }
+
+ bool using_packed_sortkeys() const
+ { return m_using_packed_sortkeys; }
+
+ void set_using_packed_sortkeys(bool val)
+ {
+ m_using_packed_sortkeys= val;
+ }
+ void set_size_of_packable_fields(uint len)
+ {
+ size_of_packable_fields= len;
+ }
+
+ uint get_size_of_packable_fields()
+ {
+ return size_of_packable_fields;
+ }
+
+ void set_sort_length(uint len)
+ {
+ sort_length= len;
+ }
+
+ uint get_sort_length()
+ {
+ return sort_length;
+ }
+
+ static void store_sortkey_length(uchar *p, uint sz)
+ {
+ int4store(p, sz - size_of_length_field);
+ }
+
+ static uint read_sortkey_length(uchar *p)
+ {
+ return size_of_length_field + uint4korr(p);
+ }
+
+ void increment_size_of_packable_fields(uint len)
+ {
+ size_of_packable_fields+= len;
+ }
+
+ void increment_original_sort_length(uint len)
+ {
+ sort_length+= len;
+ }
+
+ static const uint size_of_length_field= 4;
+
+private:
+ bool m_using_packed_sortkeys; // Are we packing sort keys
+ uint size_of_packable_fields; // Total length bytes for packable columns
+
+ /*
+ The length that would be needed if we stored non-packed mem-comparable
+ images of fields?
+ */
+ uint sort_length;
+};
+
+
+/**
+PACKED SORT KEYS
+
+Description
+
+In this optimization where we would like the pack the values of the sort key
+inside the sort buffer for each record.
+
+Contents:
+1. Background
+1.1 Implementation details
+2. Solution : Packed Sort Keys
+2.1 Packed key format
+2.2 Which format to use
+3. Special cases
+3.1 Handling very long strings
+3.2 Handling for long binary strings
+3.3 Handling very long strings with Packed sort keys
+4. Sort key columns in addon_fields
+
+1. Background
+Before this optimization of using packed sort keys, filesort() sorted the
+data using mem-comparable keys.
+
+That is, if we wanted to sort by
+
+ ORDER BY col1, col2, ... colN
+then the filesort code would for each row generate one "Sort Key"
+and then sort the rows by their Sort Keys.
+
+The Sort Keys are mem-comparable (that is, are compared by memcmp()) and
+they are of FIXED SIZE. The sort key has the same length regardless of
+what value it represents. This causes INEFFICIENT MEMORY USAGE.
+
+1.1 Implementation details
+
+make_sortkey() is the function that produces a sort key
+from a record.
+
+The function treats Field and Item objects differently.
+
+class Field has:
+
+a) void make_sort_key(uchar *buff, uint length);
+ make_sort_key is a non-virtual function which handles encoding of
+ SQL null values.
+
+b) virtual void sort_string(uchar *buff,uint length)=0;
+ sort_string produces mem-comparable image of the field value
+ for each datatype.
+
+For Items, Type_handler has a virtual function:
+
+ virtual void make_sort_key(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const= 0;
+ which various datatypes overload.
+
+
+2. SOLUTION: PACKED SORT KEYS
+
+Note that one can have mem-comparable keys are that are not fixed-size.
+MyRocks uses such encoding for example.
+
+However for this optimization it was decided to store the original
+(non-mem-comparable) values instead and use a datatype-aware
+key comparison function.
+
+2.1 Packed key format
+The keys are stored in a new variable-size data format called "packed".
+
+The format is as follows:
+
+ <sort_key_length><packed_value_1><packed_value2> ....... <packed_valueN>
+
+ format for a n-part sort key
+
+<sort_key_length> is the length of the whole key.
+Each packed value is encoded as follows:
+
+ <null_byte=0> // This is a an SQL NULL
+ [<null_byte=1>] <packed_value> // this a non-NULL value
+null_byte is present if the field/item is NULLable.
+SQL NULL is encoded as just one NULL-indicator byte. The value itself is omitted.
+
+The format of the packed_value depends on the datatype.
+For "non-packable" datatypes it is just their mem-comparable form, as before.
+
+The "packable" datatypes are currently variable-length strings and the
+packed format for them is (for binary blobs, see a note below):
+
+<length> <string>
+2.2 Which format to use
+
+The advantage of Packed Key Format is potential space savings for
+variable-length fields.
+
+The disadvantages are:
+
+a) It may actually take more space, because of sort_key_length and
+ length fields.
+b) The comparison function is more expensive.
+
+Currently the logic is: use Packed Key Format if we would save 128 or more
+bytes when constructing a sort key from values that have empty string
+for each packable component.
+
+3. SPECIAL CASES
+3.1 HANDLING VERY LONG STRINGS
+the size of sort key part was limited by @@max_sort_length variable.
+It is defined as:
+
+The number of bytes to use when sorting data values. The server uses only the
+first max_sort_length bytes of each value and ignores the rest.
+
+3.2 HANDLING VERY LONG BINARY STRINGS
+Long binary strings receive special treatment. A sort key for the long
+binary string is truncated at max_sort_length bytes like described above,
+but then a "suffix" is appended which contains the total length of the
+value before the truncation.
+
+3.3 HANDLING VERY LONG STRINGS WITH PACKED SORT KEY
+Truncating multi-byte string at N bytes is not safe because one can cut in the
+middle of a character. One is tempted to solve this by discarding the partial
+character but that's also not a good idea as in some collations multiple
+characters may produce one weight (this is called "contraction").
+
+This combination of circumstances:
+
+The string value is very long, so truncation is necessary
+The collation is "complex", so truncation is dangerous
+is deemed to be relatively rare so it was decided to just use
+the non-packed sort keys in this case.
+
+4. SORT KEY COLUMNS IN ADDON FIELDS
+Currently, each sort key column is actually stored twice
+1. as part of the sort key
+2. in the addon_fields
+This made total sense when sort key stored the mem-comparable image
+(from which one cannot restore the original value in general case).
+But since we now store the original value, we could also remove it from the
+addon_fields and further save space. This is still a limitation and needs
+to be fixed later
+
+@see Sort_keys
+
+**/
/**
- There are two record formats for sorting:
- |<key a><key b>...|<rowid>|
- / sort_length / ref_l /
+ The sort record format may use one of two formats for the non-sorted part of
+ the record:
+
+ 1. Use the rowid
+
+ |<sort_key>| <rowid> |
+ / / ref_length /
- or with "addon fields"
- |<key a><key b>...|<null bits>|<field a><field b>...|
- / sort_length / addon_length /
+ 2. Use "addon fields"
+
+ |<sort_key>|<null bits>|<field a><field b>...|
+ / / addon_length /
The packed format for "addon fields"
- |<key a><key b>...|<length>|<null bits>|<field a><field b>...|
- / sort_length / addon_length /
+
+ |<sort_key>|<length>|<null bits>|<field a><field b>...|
+ / / addon_length /
+
+ <sort_key> The key may use one of the two formats:
+ A. fixed-size mem-comparable form. The record is always
+ sort_length bytes long.
+ B. "PackedKeyFormat" - the records are variable-size.
<key> Fields are fixed-size, specially encoded with
Field::make_sort_key() so we can do byte-by-byte compare.
+
<length> Contains the *actual* packed length (after packing) of
everything after the sort keys.
The size of the length field is 2 bytes,
@@ -289,6 +531,7 @@ public:
*/
Bounds_checked_array<SORT_FIELD> local_sortorder;
Addon_fields *addon_fields; // Descriptors for companion fields.
+ Sort_keys *sort_keys;
bool using_pq;
uchar *unique_buff;
@@ -316,12 +559,59 @@ public:
return m_using_packed_addons;
}
+ bool using_packed_sortkeys() const
+ {
+ DBUG_ASSERT(m_using_packed_sortkeys ==
+ (sort_keys != NULL && sort_keys->using_packed_sortkeys()));
+ return m_using_packed_sortkeys;
+ }
+
/// Are we using "addon fields"?
bool using_addon_fields() const
{
return addon_fields != NULL;
}
+ uint32 get_result_length(uchar *plen)
+ {
+ if (!m_using_packed_addons)
+ return res_length;
+ return Addon_fields::read_addon_length(plen);
+ }
+
+ uint32 get_addon_length(uchar *plen)
+ {
+ if (using_packed_addons())
+ return Addon_fields::read_addon_length(plen);
+ else
+ return addon_length;
+ }
+
+ uint32 get_sort_length(uchar *plen)
+ {
+ if (using_packed_sortkeys())
+ return Sort_keys::read_sortkey_length(plen) +
+ /*
+ when addon fields are not present, then the sort_length also
+ includes the res_length. For packed keys here we add
+ the res_length
+ */
+ (using_addon_fields() ? 0: res_length);
+ else
+ return sort_length;
+ }
+
+ uint get_record_length(uchar *plen)
+ {
+ if (m_packed_format)
+ {
+ uint sort_len= get_sort_length(plen);
+ return sort_len + get_addon_length(plen + sort_len);
+ }
+ else
+ return rec_length;
+ }
+
/**
Getter for record length and result length.
@param record_start Pointer to record.
@@ -330,22 +620,46 @@ public:
*/
void get_rec_and_res_len(uchar *record_start, uint *recl, uint *resl)
{
- if (!using_packed_addons())
+ if (m_packed_format)
+ {
+ uint sort_len= get_sort_length(record_start);
+ uint addon_len= get_addon_length(record_start + sort_len);
+ *recl= sort_len + addon_len;
+ *resl= using_addon_fields() ? addon_len : res_length;
+ }
+ else
{
*recl= rec_length;
*resl= res_length;
- return;
}
- uchar *plen= record_start + sort_length;
- *resl= Addon_fields::read_addon_length(plen);
- DBUG_ASSERT(*resl <= res_length);
- const uchar *record_end= plen + *resl;
- *recl= static_cast<uint>(record_end - record_start);
+ }
+
+ void try_to_pack_sortkeys();
+
+ qsort2_cmp get_compare_function() const
+ {
+ return using_packed_sortkeys() ?
+ get_packed_keys_compare_ptr() :
+ get_ptr_compare(sort_length);
+ }
+ void* get_compare_argument(size_t *sort_len) const
+ {
+ return using_packed_sortkeys() ?
+ (void*) this :
+ (void*) sort_len;
+ }
+
+ bool is_packed_format() const
+ {
+ return m_packed_format;
}
private:
uint m_packable_length;
bool m_using_packed_addons; ///< caches the value of using_packed_addons()
+ /* caches the value of using_packed_sortkeys() */
+ bool m_using_packed_sortkeys;
+ bool m_packed_format;
};
typedef Bounds_checked_array<uchar> Sort_buffer;
@@ -353,7 +667,7 @@ typedef Bounds_checked_array<uchar> Sort_buffer;
int merge_many_buff(Sort_param *param, Sort_buffer sort_buffer,
Merge_chunk *buffpek, uint *maxbuffer, IO_CACHE *t_file);
ulong read_to_buffer(IO_CACHE *fromfile, Merge_chunk *buffpek,
- Sort_param *param);
+ Sort_param *param, bool packing_format);
bool merge_buffers(Sort_param *param,IO_CACHE *from_file,
IO_CACHE *to_file, Sort_buffer sort_buffer,
Merge_chunk *lastbuff, Merge_chunk *Fb,
diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc
index a94fb1196b4..55e8e52c052 100644
--- a/sql/sql_statistics.cc
+++ b/sql/sql_statistics.cc
@@ -1432,7 +1432,7 @@ public:
*/
bool init(uint n_keyparts)
{
- if (!(rowid_buf= (uchar*)my_malloc(rowid_size, MYF(0))))
+ if (!(rowid_buf= (uchar*)my_malloc(PSI_INSTRUMENT_ME, rowid_size, MYF(0))))
return true;
if (open_cached_file(&io_cache, mysql_tmpdir, TEMP_PREFIX,
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index 4ddc467794f..2fc6ae0ad7d 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -41,8 +41,8 @@ bool Binary_string::real_alloc(size_t length)
if (Alloced_length < arg_length)
{
free();
- if (!(Ptr=(char*) my_malloc(arg_length,MYF(MY_WME |
- (thread_specific ?
+ if (!(Ptr=(char*) my_malloc(PSI_INSTRUMENT_ME,
+ arg_length,MYF(MY_WME | (thread_specific ?
MY_THREAD_SPECIFIC : 0)))))
return TRUE;
DBUG_ASSERT(length < UINT_MAX32);
@@ -92,13 +92,13 @@ bool Binary_string::realloc_raw(size_t alloc_length)
return TRUE; /* Overflow */
if (alloced)
{
- if (!(new_ptr= (char*) my_realloc(Ptr,len,
+ if (!(new_ptr= (char*) my_realloc(PSI_INSTRUMENT_ME, Ptr,len,
MYF(MY_WME |
(thread_specific ?
MY_THREAD_SPECIFIC : 0)))))
return TRUE; // Signal error
}
- else if ((new_ptr= (char*) my_malloc(len,
+ else if ((new_ptr= (char*) my_malloc(PSI_INSTRUMENT_ME, len,
MYF(MY_WME |
(thread_specific ?
MY_THREAD_SPECIFIC : 0)))))
@@ -1236,3 +1236,25 @@ bool String::append_semi_hex(const char *s, uint len, CHARSET_INFO *cs)
str_length+= nbytes;
return false;
}
+
+// Shrink the buffer, but only if it is allocated on the heap.
+void Binary_string::shrink(size_t arg_length)
+{
+ if (!is_alloced())
+ return;
+ if (ALIGN_SIZE(arg_length + 1) < Alloced_length)
+ {
+ char* new_ptr;
+ if (!(new_ptr = (char*)my_realloc(STRING_PSI_MEMORY_KEY, Ptr, arg_length,
+ MYF(thread_specific ? MY_THREAD_SPECIFIC : 0))))
+ {
+ Alloced_length = 0;
+ real_alloc(arg_length);
+ }
+ else
+ {
+ Ptr = new_ptr;
+ Alloced_length = (uint32)arg_length;
+ }
+ }
+}
diff --git a/sql/sql_string.h b/sql/sql_string.h
index eb69d21eaeb..4eeac0a8a82 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -30,6 +30,13 @@
#include "sql_list.h"
class String;
+#ifdef MYSQL_SERVER
+extern PSI_memory_key key_memory_String_value;
+#define STRING_PSI_MEMORY_KEY key_memory_String_value
+#else
+#define STRING_PSI_MEMORY_KEY PSI_NOT_INSTRUMENTED
+#endif
+
typedef struct st_io_cache IO_CACHE;
typedef struct st_mem_root MEM_ROOT;
@@ -659,28 +666,8 @@ public:
return realloc_with_extra(arg_length);
}
// Shrink the buffer, but only if it is allocated on the heap.
- inline void shrink(size_t arg_length)
- {
- if (!is_alloced())
- return;
- if (ALIGN_SIZE(arg_length+1) < Alloced_length)
- {
- char *new_ptr;
- if (unlikely(!(new_ptr=(char*)
- my_realloc(Ptr,
- arg_length,MYF((thread_specific ?
- MY_THREAD_SPECIFIC : 0))))))
- {
- Alloced_length= 0;
- real_alloc(arg_length);
- }
- else
- {
- Ptr= new_ptr;
- Alloced_length= (uint32) arg_length;
- }
- }
- }
+ void shrink(size_t arg_length);
+
void move(Binary_string &s)
{
set_alloced(s.Ptr, s.str_length, s.Alloced_length);
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 240f001f7de..a499f91397a 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1127,8 +1127,8 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
ddl_log_entry->tmp_name));
handler_name.str= (char*)ddl_log_entry->handler_name;
handler_name.length= strlen(ddl_log_entry->handler_name);
- init_sql_alloc(&mem_root, "execute_ddl_log_action", TABLE_ALLOC_BLOCK_SIZE,
- 0, MYF(MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_gdl, &mem_root, TABLE_ALLOC_BLOCK_SIZE, 0,
+ MYF(MY_THREAD_SPECIFIC));
if (!strcmp(ddl_log_entry->handler_name, reg_ext))
frm_action= TRUE;
else
@@ -1162,7 +1162,7 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
}
#ifdef WITH_PARTITION_STORAGE_ENGINE
strxmov(to_path, ddl_log_entry->name, par_ext, NullS);
- (void) mysql_file_delete(key_file_partition, to_path, MYF(MY_WME));
+ (void) mysql_file_delete(key_file_partition_ddl_log, to_path, MYF(MY_WME));
#endif
}
else
@@ -1200,7 +1200,7 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
#ifdef WITH_PARTITION_STORAGE_ENGINE
strxmov(to_path, ddl_log_entry->name, par_ext, NullS);
strxmov(from_path, ddl_log_entry->from_name, par_ext, NullS);
- (void) mysql_file_rename(key_file_partition, from_path, to_path, MYF(MY_WME));
+ (void) mysql_file_rename(key_file_partition_ddl_log, from_path, to_path, MYF(MY_WME));
#endif
}
else
@@ -1297,7 +1297,7 @@ static bool get_free_ddl_log_entry(DDL_LOG_MEMORY_ENTRY **active_entry,
if (global_ddl_log.first_free == NULL)
{
- if (!(used_entry= (DDL_LOG_MEMORY_ENTRY*)my_malloc(
+ if (!(used_entry= (DDL_LOG_MEMORY_ENTRY*)my_malloc(key_memory_DDL_LOG_MEMORY_ENTRY,
sizeof(DDL_LOG_MEMORY_ENTRY), MYF(MY_WME))))
{
sql_print_error("Failed to allocate memory for ddl log free list");
@@ -6167,7 +6167,7 @@ drop_create_field:
for (f_ptr=table->field; *f_ptr; f_ptr++)
{
if (my_strcasecmp(system_charset_info,
- acol->name, (*f_ptr)->field_name.str) == 0)
+ acol->name.str, (*f_ptr)->field_name.str) == 0)
break;
}
if (unlikely(*f_ptr == NULL))
@@ -6175,7 +6175,7 @@ drop_create_field:
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_BAD_FIELD_ERROR,
ER_THD(thd, ER_BAD_FIELD_ERROR),
- acol->name, table->s->table_name.str);
+ acol->name.str, table->s->table_name.str);
it.remove();
if (alter_info->alter_list.is_empty())
{
@@ -6601,7 +6601,7 @@ static int compare_uint(const uint *s, const uint *t)
enum class Compare_keys : uint32_t
{
- Equal,
+ Equal= 0,
EqualButKeyPartLength,
EqualButComment,
NotEqual
@@ -7998,6 +7998,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
List<Create_field> new_create_list;
/* New key definitions are added here */
List<Key> new_key_list;
+ List<Alter_rename_key> rename_key_list(alter_info->alter_rename_key_list);
List_iterator<Alter_drop> drop_it(alter_info->drop_list);
List_iterator<Create_field> def_it(alter_info->create_list);
List_iterator<Alter_column> alter_it(alter_info->alter_list);
@@ -8138,24 +8139,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
continue;
}
- /*
- If we are doing a rename of a column, update all references in virtual
- column expressions, constraints and defaults to use the new column name
- */
- if (alter_info->flags & ALTER_RENAME_COLUMN)
- {
- if (field->vcol_info)
- field->vcol_info->expr->walk(&Item::rename_fields_processor, 1,
- &column_rename_param);
- if (field->check_constraint)
- field->check_constraint->expr->walk(&Item::rename_fields_processor, 1,
- &column_rename_param);
- if (field->default_value)
- field->default_value->expr->walk(&Item::rename_fields_processor, 1,
- &column_rename_param);
- table->m_needs_reopen= 1; // because new column name is on thd->mem_root
- }
-
/* Check if field is changed */
def_it.rewind();
while ((def=def_it++))
@@ -8229,19 +8212,61 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
while ((alter=alter_it++))
{
if (!my_strcasecmp(system_charset_info,field->field_name.str,
- alter->name))
+ alter->name.str))
break;
}
if (alter)
{
- if ((def->default_value= alter->default_value))
- def->flags&= ~NO_DEFAULT_VALUE_FLAG;
+ if (alter->is_rename())
+ {
+ def->change= alter->name;
+ def->field_name= alter->new_name;
+ column_rename_param.fields.push_back(def);
+ }
else
- def->flags|= NO_DEFAULT_VALUE_FLAG;
+ {
+ if ((def->default_value= alter->default_value))
+ def->flags&= ~NO_DEFAULT_VALUE_FLAG;
+ else
+ def->flags|= NO_DEFAULT_VALUE_FLAG;
+ }
alter_it.remove();
}
}
}
+
+ /*
+ If we are doing a rename of a column, update all references in virtual
+ column expressions, constraints and defaults to use the new column name
+ */
+ if (alter_info->flags & ALTER_RENAME_COLUMN)
+ {
+ alter_it.rewind();
+ Alter_column *alter;
+ while ((alter=alter_it++))
+ {
+ if (alter->is_rename())
+ {
+ my_error(ER_BAD_FIELD_ERROR, MYF(0), alter->name.str,
+ table->s->table_name.str);
+ goto err;
+ }
+ }
+ for (f_ptr=table->field ; (field= *f_ptr) ; f_ptr++)
+ {
+ if (field->vcol_info)
+ field->vcol_info->expr->walk(&Item::rename_fields_processor, 1,
+ &column_rename_param);
+ if (field->check_constraint)
+ field->check_constraint->expr->walk(&Item::rename_fields_processor, 1,
+ &column_rename_param);
+ if (field->default_value)
+ field->default_value->expr->walk(&Item::rename_fields_processor, 1,
+ &column_rename_param);
+ }
+ table->m_needs_reopen= 1; // because new column name is on thd->mem_root
+ }
+
dropped_sys_vers_fields &= VERS_SYSTEM_FIELD;
if ((dropped_sys_vers_fields ||
alter_info->flags & ALTER_DROP_PERIOD) &&
@@ -8357,7 +8382,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
while ((alter=alter_it++))
{
if (!my_strcasecmp(system_charset_info,def->field_name.str,
- alter->name))
+ alter->name.str))
break;
}
if (alter)
@@ -8372,7 +8397,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
if (unlikely(alter_info->alter_list.elements))
{
my_error(ER_BAD_FIELD_ERROR, MYF(0),
- alter_info->alter_list.head()->name, table->s->table_name.str);
+ alter_info->alter_list.head()->name.str, table->s->table_name.str);
goto err;
}
if (unlikely(!new_create_list.elements))
@@ -8422,6 +8447,39 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
continue;
}
+ /* If this index is to stay in the table check if it has to be renamed. */
+ List_iterator<Alter_rename_key> rename_key_it(rename_key_list);
+ Alter_rename_key *rename_key;
+
+ while ((rename_key= rename_key_it++))
+ {
+ if (!my_strcasecmp(system_charset_info, key_name, rename_key->old_name.str))
+ {
+ if (!my_strcasecmp(system_charset_info, key_name, primary_key_name))
+ {
+ my_error(ER_WRONG_NAME_FOR_INDEX, MYF(0), rename_key->old_name.str);
+ goto err;
+ }
+ else if (!my_strcasecmp(system_charset_info, rename_key->new_name.str,
+ primary_key_name))
+ {
+ my_error(ER_WRONG_NAME_FOR_INDEX, MYF(0), rename_key->new_name.str);
+ goto err;
+ }
+
+ key_name= rename_key->new_name.str;
+ rename_key_it.remove();
+ /*
+ If the user has explicitly renamed the key, we should no longer
+ treat it as generated. Otherwise this key might be automatically
+ dropped by mysql_prepare_create_table() and this will confuse
+ code in fill_alter_inplace_info().
+ */
+ key_info->flags&= ~HA_GENERATED_KEY;
+ break;
+ }
+ }
+
if (key_info->algorithm == HA_KEY_ALG_LONG_HASH)
{
setup_keyinfo_hash(key_info);
@@ -8748,6 +8806,13 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
}
}
+ if (rename_key_list.elements)
+ {
+ my_error(ER_KEY_DOES_NOT_EXITS, MYF(0), rename_key_list.head()->old_name.str,
+ table->s->table_name.str);
+ goto err;
+ }
+
if (!create_info->comment.str)
{
create_info->comment.str= table->s->comment.str;
@@ -9140,8 +9205,8 @@ static bool fk_prepare_copy_alter_table(THD *thd, TABLE *table,
ref_table= tbuf;
}
- mdl_request.init(MDL_key::TABLE, ref_db, ref_table, MDL_SHARED_NO_WRITE,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::TABLE, ref_db, ref_table,
+ MDL_SHARED_NO_WRITE, MDL_TRANSACTION);
if (thd->mdl_context.acquire_lock(&mdl_request,
thd->variables.lock_wait_timeout))
DBUG_RETURN(true);
@@ -9566,9 +9631,9 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
MDL_request_list mdl_requests;
MDL_request target_db_mdl_request;
- target_mdl_request.init(MDL_key::TABLE,
- alter_ctx.new_db.str, alter_ctx.new_name.str,
- MDL_EXCLUSIVE, MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&target_mdl_request, MDL_key::TABLE,
+ alter_ctx.new_db.str, alter_ctx.new_name.str,
+ MDL_EXCLUSIVE, MDL_TRANSACTION);
mdl_requests.push_front(&target_mdl_request);
/*
@@ -9578,9 +9643,9 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
*/
if (alter_ctx.is_database_changed())
{
- target_db_mdl_request.init(MDL_key::SCHEMA, alter_ctx.new_db.str, "",
- MDL_INTENTION_EXCLUSIVE,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&target_db_mdl_request, MDL_key::SCHEMA,
+ alter_ctx.new_db.str, "", MDL_INTENTION_EXCLUSIVE,
+ MDL_TRANSACTION);
mdl_requests.push_front(&target_db_mdl_request);
}
@@ -9827,8 +9892,7 @@ do_continue:;
bool fast_alter_partition= false;
{
if (prep_alter_part_table(thd, table, alter_info, create_info,
- &alter_ctx, &partition_changed,
- &fast_alter_partition))
+ &partition_changed, &fast_alter_partition))
{
DBUG_RETURN(true);
}
@@ -10680,6 +10744,8 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
to->file->extra(HA_EXTRA_PREPARE_FOR_ALTER_TABLE);
to->file->ha_start_bulk_insert(from->file->stats.records,
ignore ? 0 : HA_CREATE_UNIQUE_INDEX_BY_SORT);
+ mysql_stage_set_work_estimated(thd->m_stage_progress_psi, from->file->stats.records);
+
List_iterator<Create_field> it(create);
Create_field *def;
copy_end=copy;
@@ -10780,7 +10846,6 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
from->file->column_bitmaps_signal();
- THD_STAGE_INFO(thd, stage_copy_to_tmp_table);
/* Tell handler that we have values for all columns in the to table */
to->use_all_columns();
/* Add virtual columns to vcol_set to ensure they are updated */
@@ -10926,7 +10991,11 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
}
}
else
+ {
+ DEBUG_SYNC(thd, "copy_data_between_tables_before");
found_count++;
+ mysql_stage_set_work_completed(thd->m_stage_progress_psi, found_count);
+ }
thd->get_stmt_da()->inc_current_row_for_warning();
}
diff --git a/sql/sql_test.cc b/sql/sql_test.cc
index 07e2d5e084e..ffd42599527 100644
--- a/sql/sql_test.cc
+++ b/sql/sql_test.cc
@@ -466,7 +466,8 @@ static void display_table_locks(void)
void *saved_base;
DYNAMIC_ARRAY saved_table_locks;
- (void) my_init_dynamic_array(&saved_table_locks,sizeof(TABLE_LOCK_INFO),
+ (void) my_init_dynamic_array(key_memory_locked_thread_list,
+ &saved_table_locks, sizeof(TABLE_LOCK_INFO),
tc_records() + 20, 50, MYF(0));
mysql_mutex_lock(&THR_LOCK_lock);
for (list= thr_lock_thread_list; list; list= list_rest(list))
diff --git a/sql/sql_time.cc b/sql/sql_time.cc
index 8a9311ae577..c08e54bed87 100644
--- a/sql/sql_time.cc
+++ b/sql/sql_time.cc
@@ -830,7 +830,8 @@ DATE_TIME_FORMAT *date_time_format_copy(THD *thd, DATE_TIME_FORMAT *format)
if (thd)
new_format= (DATE_TIME_FORMAT *) thd->alloc(length);
else
- new_format= (DATE_TIME_FORMAT *) my_malloc(length, MYF(MY_WME));
+ new_format= (DATE_TIME_FORMAT *) my_malloc(key_memory_DATE_TIME_FORMAT,
+ length, MYF(MY_WME));
if (new_format)
{
/* Put format string after current pos */
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index 0ae3d58b11f..5b8ae46d33f 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -30,11 +30,11 @@
#include "sql_table.h" // build_table_filename,
// check_n_cut_mysql50_prefix
#include "sql_db.h" // get_default_db_collation
-#include "sql_acl.h" // *_ACL
#include "sql_handler.h" // mysql_ha_rm_tables
#include "sp_cache.h" // sp_invalidate_cache
#include <mysys_err.h>
#include "debug_sync.h"
+#include "mysql/psi/mysql_sp.h"
/*************************************************************************/
@@ -440,7 +440,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
*/
if (!trust_function_creators &&
(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()) &&
- !(thd->security_ctx->master_access & SUPER_ACL))
+ !(thd->security_ctx->master_access & PRIV_LOG_BIN_TRUSTED_SP_CREATOR))
{
my_error(ER_BINLOG_CREATE_ROUTINE_NEED_SUPER, MYF(0));
DBUG_RETURN(TRUE);
@@ -463,7 +463,8 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
*/
thd->lex->sql_command= backup.sql_command;
- if (opt_readonly && !(thd->security_ctx->master_access & SUPER_ACL) &&
+ if (opt_readonly &&
+ !(thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY) &&
!thd->slave_thread)
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
@@ -624,7 +625,13 @@ end:
thd->lex->restore_backup_query_tables_list(&backup);
if (!result)
+ {
my_ok(thd);
+ /* Drop statistics for this stored program from performance schema. */
+ MYSQL_DROP_SP(SP_TYPE_TRIGGER,
+ thd->lex->spname->m_db.str, static_cast<uint>(thd->lex->spname->m_db.length),
+ thd->lex->spname->m_name.str, static_cast<uint>(thd->lex->spname->m_name.length));
+ }
DBUG_RETURN(result);
#ifdef WITH_WSREP
@@ -1554,6 +1561,10 @@ bool Table_triggers_list::check_n_load(THD *thd, const LEX_CSTRING *db,
trigger->definer= *trg_definer;
}
+ sp->m_sp_share= MYSQL_GET_SP_SHARE(SP_TYPE_TRIGGER,
+ sp->m_db.str, static_cast<uint>(sp->m_db.length),
+ sp->m_name.str, static_cast<uint>(sp->m_name.length));
+
#ifndef DBUG_OFF
/*
Let us check that we correctly update trigger definitions when we
@@ -1813,8 +1824,8 @@ bool Table_triggers_list::drop_all_triggers(THD *thd, const LEX_CSTRING *db,
DBUG_ENTER("Triggers::drop_all_triggers");
table.reset();
- init_sql_alloc(&table.mem_root, "Triggers::drop_all_triggers", 8192, 0,
- MYF(0));
+ init_sql_alloc(key_memory_Table_trigger_dispatcher,
+ &table.mem_root, 8192, 0, MYF(0));
if (Table_triggers_list::check_n_load(thd, db, name, &table, 1))
{
@@ -1846,6 +1857,9 @@ bool Table_triggers_list::drop_all_triggers(THD *thd, const LEX_CSTRING *db,
*/
result= 1;
}
+ /* Drop statistics for this stored program from performance schema. */
+ MYSQL_DROP_SP(SP_TYPE_TRIGGER, db->str, static_cast<uint>(db->length),
+ trigger->name.str, static_cast<uint>(trigger->name.length));
}
}
}
@@ -2065,8 +2079,8 @@ bool Table_triggers_list::change_table_name(THD *thd, const LEX_CSTRING *db,
DBUG_ENTER("Triggers::change_table_name");
table.reset();
- init_sql_alloc(&table.mem_root, "Triggers::change_table_name", 8192, 0,
- MYF(0));
+ init_sql_alloc(key_memory_Table_trigger_dispatcher,
+ &table.mem_root, 8192, 0, MYF(0));
/*
This method interfaces the mysql server code protected by
diff --git a/sql/sql_type.h b/sql/sql_type.h
index ce87c8e9d93..f87e398bd71 100644
--- a/sql/sql_type.h
+++ b/sql/sql_type.h
@@ -23,6 +23,7 @@
#include "mysqld.h"
+#include "lex_string.h"
#include "sql_array.h"
#include "sql_const.h"
#include "sql_time.h"
@@ -86,6 +87,7 @@ class handler;
struct Schema_specification_st;
struct TABLE;
struct SORT_FIELD_ATTR;
+struct SORT_FIELD;
class Vers_history_point;
class Virtual_column_info;
class Conv_source;
@@ -137,6 +139,41 @@ enum column_definition_type_t
};
+class Send_field_extended_metadata
+{
+ LEX_CSTRING m_attr[MARIADB_FIELD_ATTR_LAST+1];
+public:
+ Send_field_extended_metadata()
+ {
+ bzero(this, sizeof(*this));
+ }
+ bool set_data_type_name(const LEX_CSTRING &str)
+ {
+ m_attr[MARIADB_FIELD_ATTR_DATA_TYPE_NAME]= str;
+ return false;
+ }
+ bool set_format_name(const LEX_CSTRING &str)
+ {
+ m_attr[MARIADB_FIELD_ATTR_FORMAT_NAME]= str;
+ return false;
+ }
+ bool has_extended_metadata() const
+ {
+ for (uint i= 0; i <= MARIADB_FIELD_ATTR_LAST; i++)
+ {
+ if (m_attr[i].str)
+ return true;
+ }
+ return false;
+ }
+ const LEX_CSTRING &attr(uint i) const
+ {
+ DBUG_ASSERT(i <= MARIADB_FIELD_ATTR_LAST);
+ return m_attr[i];
+ }
+};
+
+
class Data_type_statistics
{
public:
@@ -3332,6 +3369,14 @@ protected:
bool maybe_null, bool null_value,
bool unsigned_flag,
longlong value) const;
+ void store_sort_key_longlong(uchar *to, bool unsigned_flag,
+ longlong value) const;
+
+ uint make_packed_sort_key_longlong(uchar *to, bool maybe_null,
+ bool null_value, bool unsigned_flag,
+ longlong value,
+ const SORT_FIELD_ATTR *sort_field) const;
+
bool Item_func_or_sum_illegal_param(const char *name) const;
bool Item_func_or_sum_illegal_param(const Item_func_or_sum *) const;
bool check_null(const Item *item, st_value *value) const;
@@ -3426,6 +3471,11 @@ public:
return field_type();
}
virtual protocol_send_type_t protocol_send_type() const= 0;
+ virtual bool Item_append_extended_type_info(Send_field_extended_metadata *to,
+ const Item *item) const
+ {
+ return false;
+ }
virtual Item_result result_type() const= 0;
virtual Item_result cmp_type() const= 0;
virtual enum_dynamic_column_type
@@ -3752,12 +3802,25 @@ public:
const uchar *buffer,
LEX_CUSTRING *gis_options) const;
- virtual void make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const= 0;
- virtual void sortlength(THD *thd,
+ /*
+ Create a fixed size key part for a sort key
+ */
+ virtual void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const= 0;
+
+ /*
+ create a compact size key part for a sort key
+ */
+ virtual uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const=0;
+
+ virtual void sort_length(THD *thd,
const Type_std_attributes *item,
SORT_FIELD_ATTR *attr) const= 0;
+ virtual bool is_packable() const { return false; }
+
virtual uint32 max_display_length(const Item *item) const= 0;
virtual uint32 Item_decimal_notation_int_digits(const Item *item) const { return 0; }
@@ -4149,14 +4212,21 @@ public:
const Bit_addr &bit,
const Column_definition_attributes *attr,
uint32 flags) const override;
- void make_sort_key(uchar *to, Item *item,
- const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override
{
DBUG_ASSERT(0);
}
- void sortlength(THD *thd, const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override
+ {
+ DBUG_ASSERT(0);
+ return 0;
+ }
+ void sort_length(THD *thd, const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override
{
DBUG_ASSERT(0);
}
@@ -4481,11 +4551,15 @@ public:
bool subquery_type_allows_materialization(const Item *inner,
const Item *outer)
const override;
- void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override;
- void sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override;
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ void sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override;
bool Item_const_eq(const Item_const *a, const Item_const *b,
bool binary_cmp) const override;
bool Item_eq_value(THD *thd, const Type_cmp_attributes *attr,
@@ -4588,8 +4662,12 @@ public:
bool show_field) const override;
Field *make_num_distinct_aggregator_field(MEM_ROOT *, const Item *)
const override;
- void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override;
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
void
Column_definition_attributes_frm_pack(const Column_definition_attributes *at,
uchar *buff) const override;
@@ -4599,9 +4677,9 @@ public:
const uchar *buffer,
LEX_CUSTRING *gis_options)
const override;
- void sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override;
+ void sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override;
uint32 max_display_length(const Item *item) const override;
uint32 Item_decimal_notation_int_digits(const Item *item) const override;
Item *create_typecast_item(THD *thd, Item *item,
@@ -4838,14 +4916,18 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
- void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override;
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
void
Column_definition_attributes_frm_pack(const Column_definition_attributes *at,
uchar *buff) const override;
- void sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override;
+ void sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override;
bool Item_const_eq(const Item_const *a, const Item_const *b,
bool binary_cmp) const override;
bool Item_eq_value(THD *thd, const Type_cmp_attributes *attr,
@@ -4945,11 +5027,15 @@ public:
void
Column_definition_attributes_frm_pack(const Column_definition_attributes *at,
uchar *buff) const override;
- void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override;
- void sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override;
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ void sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override;
bool Item_const_eq(const Item_const *a, const Item_const *b,
bool binary_cmp) const override;
bool Item_param_set_from_value(THD *thd,
@@ -5034,11 +5120,16 @@ public:
const Type_handler *
type_handler_adjusted_to_max_octet_length(uint max_octet_length,
CHARSET_INFO *cs) const override;
- void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override;
- void sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override;
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ void sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override;
+ bool is_packable()const override { return true; }
bool union_element_finalize(const Item * item) const override;
uint calc_key_length(const Column_definition &def) const override;
bool Column_definition_prepare_stage1(THD *thd,
@@ -6230,11 +6321,15 @@ public:
cmp_item *make_cmp_item(THD *thd, CHARSET_INFO *cs) const override;
in_vector *make_in_vector(THD *thd, const Item_func_in *f, uint nargs)
const override;
- void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
- Sort_param *param) const override;
- void sortlength(THD *thd,
- const Type_std_attributes *item,
- SORT_FIELD_ATTR *attr) const override;
+ void make_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ uint make_packed_sort_key_part(uchar *to, Item *item,
+ const SORT_FIELD_ATTR *sort_field,
+ Sort_param *param) const override;
+ void sort_length(THD *thd,
+ const Type_std_attributes *item,
+ SORT_FIELD_ATTR *attr) const override;
bool Column_definition_fix_attributes(Column_definition *c) const override;
uint Item_decimal_scale(const Item *item) const override
{
@@ -7192,7 +7287,7 @@ private:
const Type_handler *handler2) const;
public:
Type_aggregator(bool is_commutative= false)
- :m_is_commutative(is_commutative)
+ :m_is_commutative(is_commutative), m_array(PSI_INSTRUMENT_MEM)
{ }
bool add(const Type_handler *handler1,
const Type_handler *handler2,
diff --git a/sql/sql_type_geom.cc b/sql/sql_type_geom.cc
index 3ca0eaabc3f..0dcde0009b0 100644
--- a/sql/sql_type_geom.cc
+++ b/sql/sql_type_geom.cc
@@ -34,6 +34,14 @@ Named_type_handler<Type_handler_geometrycollection> type_handler_geometrycollect
Type_collection_geometry type_collection_geometry;
+
+LEX_CSTRING Type_handler_geometry::extended_metadata_data_type_name() const
+{
+ return geometry_type() == GEOM_GEOMETRY ? null_clex_str :
+ name().lex_cstring();
+}
+
+
const Type_handler_geometry *
Type_handler_geometry::type_handler_geom_by_type(uint type)
{
diff --git a/sql/sql_type_geom.h b/sql/sql_type_geom.h
index a2baa5ae299..b1aa8063902 100644
--- a/sql/sql_type_geom.h
+++ b/sql/sql_type_geom.h
@@ -39,9 +39,16 @@ public:
Item * const *args,
uint start, uint end);
static const Type_handler_geometry *type_handler_geom_by_type(uint type);
+ LEX_CSTRING extended_metadata_data_type_name() const;
public:
virtual ~Type_handler_geometry() {}
enum_field_types field_type() const override { return MYSQL_TYPE_GEOMETRY; }
+ bool Item_append_extended_type_info(Send_field_extended_metadata *to,
+ const Item *item) const override
+ {
+ LEX_CSTRING tmp= extended_metadata_data_type_name();
+ return tmp.length ? to->set_data_type_name(tmp) : false;
+ }
bool is_param_long_data_type() const override { return true; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
uint32 calc_pack_length(uint32 length) const override;
@@ -361,6 +368,9 @@ public:
void make_send_field(Send_field *to) override
{
Field_longstr::make_send_field(to);
+ LEX_CSTRING tmp= m_type_handler->extended_metadata_data_type_name();
+ if (tmp.length)
+ to->set_data_type_name(tmp);
}
bool can_optimize_range(const Item_bool_func *cond,
const Item *item,
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 35c799d4a86..4da85de7852 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -110,6 +110,8 @@ extern "C" uchar* get_hash_key(const uchar *buff, size_t *length,
return (uchar*) udf->name.str;
}
+static PSI_memory_key key_memory_udf_mem;
+
#ifdef HAVE_PSI_INTERFACE
static PSI_rwlock_key key_rwlock_THR_LOCK_udf;
@@ -118,6 +120,11 @@ static PSI_rwlock_info all_udf_rwlocks[]=
{ &key_rwlock_THR_LOCK_udf, "THR_LOCK_udf", PSI_FLAG_GLOBAL}
};
+static PSI_memory_info all_udf_memory[]=
+{
+ { &key_memory_udf_mem, "udf_mem", PSI_FLAG_GLOBAL}
+};
+
static void init_udf_psi_keys(void)
{
const char* category= "sql";
@@ -128,6 +135,9 @@ static void init_udf_psi_keys(void)
count= array_elements(all_udf_rwlocks);
PSI_server->register_rwlock(category, all_udf_rwlocks, count);
+
+ count= array_elements(all_udf_memory);
+ mysql_memory_register(category, all_udf_memory, count);
}
#endif
@@ -154,10 +164,11 @@ void udf_init()
mysql_rwlock_init(key_rwlock_THR_LOCK_udf, &THR_LOCK_udf);
- init_sql_alloc(&mem, "udf", UDF_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(key_memory_udf_mem, &mem, UDF_ALLOC_BLOCK_SIZE, 0, MYF(0));
THD *new_thd = new THD(0);
if (!new_thd ||
- my_hash_init(&udf_hash,system_charset_info,32,0,0,get_hash_key, NULL, 0))
+ my_hash_init(key_memory_udf_mem,
+ &udf_hash,system_charset_info,32,0,0,get_hash_key, NULL, 0))
{
sql_print_error("Can't allocate memory for udf structures");
my_hash_free(&udf_hash);
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index d5d43e56875..f8025cdf701 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -257,6 +257,8 @@ int select_union_recursive::send_data(List<Item> &values)
write_err != HA_ERR_FOUND_DUPP_UNIQUE)
{
int err;
+ DBUG_ASSERT(incr_table->s->reclength == table->s->reclength ||
+ incr_table->s->reclength == table->s->reclength - MARIA_UNIQUE_HASH_LENGTH);
if ((err= incr_table->file->ha_write_tmp_row(table->record[0])))
{
bool is_duplicate;
@@ -1561,7 +1563,7 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
{
if (with_element)
{
- if (with_element->rename_columns_of_derived_unit(thd, this))
+ if (with_element->process_columns_of_derived_unit(thd, this))
goto err;
if (check_duplicate_names(thd, sl->item_list, 0))
goto err;
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 6d6958ba50b..d0a920fd473 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -35,7 +35,6 @@
#include "probes_mysql.h"
#include "debug_sync.h"
#include "key.h" // is_key_used
-#include "sql_acl.h" // *_ACL, check_grant
#include "records.h" // init_read_record,
// end_read_record
#include "filesort.h" // filesort
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index f47e910c0fe..b2e977151fd 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -27,7 +27,6 @@
#include "sql_show.h" // append_identifier
#include "sql_table.h" // build_table_filename
#include "sql_db.h" // mysql_opt_change_db, mysql_change_db
-#include "sql_acl.h" // *_ACL, check_grant
#include "sql_select.h"
#include "parse_file.h"
#include "sp_head.h"
@@ -138,7 +137,7 @@ bool check_duplicate_names(THD *thd, List<Item> &item_list, bool gen_unique_view
Item *check;
/* treat underlying fields like set by user names */
if (item->real_item()->type() == Item::FIELD_ITEM)
- item->is_autogenerated_name= FALSE;
+ item->common_flags&= ~IS_AUTO_GENERATED_NAME;
itc.rewind();
while ((check= itc++) && check != item)
{
@@ -146,9 +145,9 @@ bool check_duplicate_names(THD *thd, List<Item> &item_list, bool gen_unique_view
{
if (!gen_unique_view_name)
goto err;
- if (item->is_autogenerated_name)
+ if (item->is_autogenerated_name())
make_unique_view_field_name(thd, item, item_list, item);
- else if (check->is_autogenerated_name)
+ else if (check->is_autogenerated_name())
make_unique_view_field_name(thd, check, item_list, item);
else
goto err;
@@ -180,7 +179,7 @@ void make_valid_column_names(THD *thd, List<Item> &item_list)
for (uint column_no= 1; (item= it++); column_no++)
{
- if (!item->is_autogenerated_name || !check_column_name(item->name.str))
+ if (!item->is_autogenerated_name() || !check_column_name(item->name.str))
continue;
name_len= my_snprintf(buff, NAME_LEN, "Name_exp_%u", column_no);
item->orig_name= item->name.str;
@@ -566,7 +565,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
while ((item= it++, name= nm++))
{
item->set_name(thd, *name);
- item->is_autogenerated_name= FALSE;
+ item->common_flags&= ~IS_AUTO_GENERATED_NAME;
}
}
diff --git a/sql/sql_window.cc b/sql/sql_window.cc
index 7e319c96000..a9a1dccf9f6 100644
--- a/sql/sql_window.cc
+++ b/sql/sql_window.cc
@@ -778,10 +778,10 @@ public:
{
//DBUG_ASSERT(info->read_record == rr_from_tempfile);
rownum= 0;
- io_cache= (IO_CACHE*)my_malloc(sizeof(IO_CACHE), MYF(0));
+ io_cache= (IO_CACHE*)my_malloc(PSI_INSTRUMENT_ME, sizeof(IO_CACHE), MYF(0));
init_slave_io_cache(info->io_cache, io_cache);
- ref_buffer= (uchar*)my_malloc(ref_length, MYF(0));
+ ref_buffer= (uchar*)my_malloc(PSI_INSTRUMENT_ME, ref_length, MYF(0));
ref_buffer_valid= false;
}
}
@@ -2816,7 +2816,7 @@ bool compute_window_func(THD *thd,
List_iterator_fast<Group_bound_tracker> iter_part_trackers(partition_trackers);
ha_rows rownum= 0;
- uchar *rowid_buf= (uchar*) my_malloc(tbl->file->ref_length, MYF(0));
+ uchar *rowid_buf= (uchar*) my_malloc(PSI_INSTRUMENT_ME, tbl->file->ref_length, MYF(0));
while (true)
{
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index f24da3ed412..3f0f7251d5c 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -38,7 +38,6 @@
#include "sql_parse.h" /* comp_*_creator */
#include "sql_table.h" /* primary_key_name */
#include "sql_partition.h" /* partition_info, HASH_PARTITION */
-#include "sql_acl.h" /* *_ACL */
#include "sql_class.h" /* Key_part_spec, enum_filetype, Diag_condition_item_name */
#include "slave.h"
#include "lex_symbol.h"
@@ -835,6 +834,7 @@ End SQL_MODE_ORACLE_SPECIFIC */
%token <kwd> EXTENT_SIZE_SYM
%token <kwd> FAST_SYM
%token <kwd> FAULTS_SYM
+%token <kwd> FEDERATED_SYM /* MariaDB privilege */
%token <kwd> FILE_SYM
%token <kwd> FIRST_SYM /* SQL-2003-N */
%token <kwd> FIXED_SYM
@@ -931,6 +931,7 @@ End SQL_MODE_ORACLE_SPECIFIC */
%token <kwd> MIN_ROWS
%token <kwd> MODE_SYM
%token <kwd> MODIFY_SYM
+%token <kwd> MONITOR_SYM /* MariaDB privilege */
%token <kwd> MONTH_SYM /* SQL-2003-R */
%token <kwd> MUTEX_SYM
%token <kwd> MYSQL_SYM
@@ -1749,6 +1750,7 @@ End SQL_MODE_ORACLE_SPECIFIC */
comma_separated_ident_list
opt_with_column_list
with_column_list
+ opt_cycle
%type <vers_range_unit> opt_history_unit
%type <vers_history_point> history_point
@@ -7705,13 +7707,12 @@ alter_list_item:
}
| ALTER opt_column opt_if_exists_table_element field_ident SET DEFAULT column_default_expr
{
- if (unlikely(Lex->add_alter_list($4.str, $7, $3)))
+ if (unlikely(Lex->add_alter_list($4, $7, $3)))
MYSQL_YYABORT;
}
| ALTER opt_column opt_if_exists_table_element field_ident DROP DEFAULT
{
- if (unlikely(Lex->add_alter_list($4.str, (Virtual_column_info*) 0,
- $3)))
+ if (unlikely(Lex->add_alter_list($4, (Virtual_column_info*) 0, $3)))
MYSQL_YYABORT;
}
| RENAME opt_to table_ident
@@ -7728,6 +7729,21 @@ alter_list_item:
lex->name= $3->table;
lex->alter_info.flags|= ALTER_RENAME;
}
+ | RENAME COLUMN_SYM ident TO_SYM ident
+ {
+ if (unlikely(Lex->add_alter_list($3, $5)))
+ MYSQL_YYABORT;
+ }
+ | RENAME key_or_index field_ident TO_SYM field_ident
+ {
+ LEX *lex=Lex;
+ Alter_rename_key *ak= new (thd->mem_root)
+ Alter_rename_key($3, $5);
+ if (ak == NULL)
+ MYSQL_YYABORT;
+ lex->alter_info.alter_rename_key_list.push_back(ak);
+ lex->alter_info.flags|= ALTER_RENAME_INDEX;
+ }
| CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate
{
if (!$4)
@@ -9062,7 +9078,7 @@ select_item:
if (unlikely(Lex->sql_command == SQLCOM_CREATE_VIEW &&
check_column_name($4.str)))
my_yyabort_error((ER_WRONG_COLUMN_NAME, MYF(0), $4.str));
- $2->is_autogenerated_name= FALSE;
+ $2->common_flags&= ~IS_AUTO_GENERATED_NAME;
$2->set_name(thd, $4);
}
else if (!$2->name.str || $2->name.str == item_empty_name)
@@ -10624,7 +10640,7 @@ udf_expr:
*/
if ($4.str)
{
- $2->is_autogenerated_name= FALSE;
+ $2->common_flags&= ~IS_AUTO_GENERATED_NAME;
$2->set_name(thd, $4);
}
/*
@@ -12330,7 +12346,7 @@ int_num:
ulong_num:
opt_plus NUM { int error; $$= (ulong) my_strtoll10($2.str, (char**) 0, &error); }
- | HEX_NUM { $$= (ulong) strtol($1.str, (char**) 0, 16); }
+ | HEX_NUM { $$= strtoul($1.str, (char**) 0, 16); }
| opt_plus LONG_NUM { int error; $$= (ulong) my_strtoll10($2.str, (char**) 0, &error); }
| opt_plus ULONGLONG_NUM { int error; $$= (ulong) my_strtoll10($2.str, (char**) 0, &error); }
| opt_plus DECIMAL_NUM { int error; $$= (ulong) my_strtoll10($2.str, (char**) 0, &error); }
@@ -13605,9 +13621,13 @@ show_param:
MYSQL_YYABORT;
lex->table_type= TABLE_TYPE_SEQUENCE;
}
+ | BINLOG_SYM STATUS_SYM
+ {
+ Lex->sql_command = SQLCOM_SHOW_BINLOG_STAT;
+ }
| MASTER_SYM STATUS_SYM
{
- Lex->sql_command = SQLCOM_SHOW_MASTER_STAT;
+ Lex->sql_command = SQLCOM_SHOW_BINLOG_STAT;
}
| ALL SLAVES STATUS_SYM
{
@@ -14735,7 +14755,7 @@ with_list:
with_list_element:
query_name
opt_with_column_list
- AS '(' query_expression ')'
+ AS '(' query_expression ')' opt_cycle
{
LEX *lex= thd->lex;
const char *query_start= lex->sphead ? lex->sphead->m_tmp_query
@@ -14747,9 +14767,30 @@ with_list_element:
if (elem->set_unparsed_spec(thd, spec_start, $6.pos(),
spec_start - query_start))
MYSQL_YYABORT;
+ if ($7)
+ {
+ elem->set_cycle_list($7);
+ }
}
;
+opt_cycle:
+ /* empty */
+ { $$= NULL; }
+ |
+ CYCLE_SYM
+ {
+ if (!Lex->curr_with_clause->with_recursive)
+ {
+ thd->parse_error(ER_SYNTAX_ERROR, $1.pos());
+ }
+ }
+ comma_separated_ident_list RESTRICT
+ {
+ $$= $3;
+ }
+ ;
+
opt_with_column_list:
/* empty */
@@ -15476,6 +15517,7 @@ keyword_sp_var_and_label:
| FAST_SYM
| FOUND_SYM
| ENABLE_SYM
+ | FEDERATED_SYM
| FULL
| FILE_SYM
| FIRST_SYM
@@ -15554,6 +15596,7 @@ keyword_sp_var_and_label:
| MIN_ROWS
| MODIFY_SYM
| MODE_SYM
+ | MONITOR_SYM
| MONTH_SYM
| MUTEX_SYM
| MYSQL_SYM
@@ -16862,7 +16905,7 @@ object_privilege:
| CREATE TEMPORARY TABLES { $$= CREATE_TMP_ACL;}
| LOCK_SYM TABLES { $$= LOCK_TABLES_ACL; }
| REPLICATION SLAVE { $$= REPL_SLAVE_ACL; }
- | REPLICATION CLIENT_SYM { $$= REPL_CLIENT_ACL; }
+ | REPLICATION CLIENT_SYM { $$= BINLOG_MONITOR_ACL; /*Compatibility*/ }
| CREATE VIEW_SYM { $$= CREATE_VIEW_ACL; }
| SHOW VIEW_SYM { $$= SHOW_VIEW_ACL; }
| CREATE ROUTINE_SYM { $$= CREATE_PROC_ACL; }
@@ -16872,6 +16915,15 @@ object_privilege:
| TRIGGER_SYM { $$= TRIGGER_ACL; }
| CREATE TABLESPACE { $$= CREATE_TABLESPACE_ACL; }
| DELETE_SYM HISTORY_SYM { $$= DELETE_HISTORY_ACL; }
+ | SET USER_SYM { $$= SET_USER_ACL; }
+ | FEDERATED_SYM ADMIN_SYM { $$= FEDERATED_ADMIN_ACL; }
+ | CONNECTION_SYM ADMIN_SYM { $$= CONNECTION_ADMIN_ACL; }
+ | READ_SYM ONLY_SYM ADMIN_SYM { $$= READ_ONLY_ADMIN_ACL; }
+ | READ_ONLY_SYM ADMIN_SYM { $$= READ_ONLY_ADMIN_ACL; }
+ | BINLOG_SYM MONITOR_SYM { $$= BINLOG_MONITOR_ACL; }
+ | BINLOG_SYM ADMIN_SYM { $$= BINLOG_ADMIN_ACL; }
+ | REPLICATION MASTER_SYM ADMIN_SYM { $$= REPL_MASTER_ADMIN_ACL; }
+ | REPLICATION SLAVE ADMIN_SYM { $$= REPL_SLAVE_ADMIN_ACL; }
;
opt_and:
@@ -17539,7 +17591,10 @@ xid:
}
| text_string ',' text_string ',' ulong_num
{
- MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE);
+ MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE &&
+ $3->length() <= MAXBQUALSIZE &&
+ $5 <= static_cast<ulong>(
+ std::numeric_limits<int32_t>::max()));
if (unlikely(!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))))
MYSQL_YYABORT;
Lex->xid->set($5, $1->ptr(), $1->length(), $3->ptr(), $3->length());
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index 4ba866749ee..15b749dcb61 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -45,8 +45,7 @@
#include "mysqld.h"
#include "lock.h"
#include "sql_time.h" // known_date_time_formats
-#include "sql_acl.h" // SUPER_ACL,
- // mysql_user_table_is_in_short_password_format
+#include "sql_acl.h" // mysql_user_table_is_in_short_password_format
#include "derror.h" // read_texts
#include "sql_base.h" // close_cached_tables
#include "hostname.h" // host_cache_size
@@ -81,8 +80,7 @@
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
static Sys_var_mybool Sys_pfs_enabled(
- "performance_schema",
- "Enable the performance schema.",
+ "performance_schema", "Enable the performance schema.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_enabled),
CMD_LINE(OPT_ARG), DEFAULT(FALSE));
@@ -90,10 +88,9 @@ static Sys_var_long Sys_pfs_events_waits_history_long_size(
"performance_schema_events_waits_history_long_size",
"Number of rows in EVENTS_WAITS_HISTORY_LONG."
" Use 0 to disable, -1 for automated sizing.",
- PARSED_EARLY READ_ONLY
- GLOBAL_VAR(pfs_param.m_events_waits_history_long_sizing),
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_waits_history_long_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_events_waits_history_size(
"performance_schema_events_waits_history_size",
@@ -101,7 +98,7 @@ static Sys_var_long Sys_pfs_events_waits_history_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_waits_history_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_cond_classes(
"performance_schema_max_cond_classes",
@@ -116,7 +113,23 @@ static Sys_var_long Sys_pfs_max_cond_instances(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_cond_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_max_program_instances(
+ "performance_schema_max_program_instances",
+ "Maximum number of instrumented programs."
+ " Use 0 to disable, -1 for automated scaling.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_program_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_max_prepared_stmt_instances(
+ "performance_schema_max_prepared_statements_instances",
+ "Maximum number of instrumented prepared statements."
+ " Use 0 to disable, -1 for automated scaling.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_prepared_stmt_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_file_classes(
"performance_schema_max_file_classes",
@@ -138,7 +151,7 @@ static Sys_var_long Sys_pfs_max_file_instances(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_file_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_max_sockets(
"performance_schema_max_socket_instances",
@@ -146,16 +159,14 @@ static Sys_var_long Sys_pfs_max_sockets(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_socket_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_socket_classes(
"performance_schema_max_socket_classes",
"Maximum number of socket instruments.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_socket_class_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 256),
- DEFAULT(PFS_MAX_SOCKET_CLASS),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_MAX_SOCKET_CLASS), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_mutex_classes(
"performance_schema_max_mutex_classes",
@@ -170,7 +181,7 @@ static Sys_var_long Sys_pfs_max_mutex_instances(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_mutex_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 100*1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_rwlock_classes(
"performance_schema_max_rwlock_classes",
@@ -185,7 +196,7 @@ static Sys_var_long Sys_pfs_max_rwlock_instances(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_rwlock_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 100*1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_max_table_handles(
"performance_schema_max_table_handles",
@@ -193,7 +204,7 @@ static Sys_var_long Sys_pfs_max_table_handles(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_table_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_max_table_instances(
"performance_schema_max_table_instances",
@@ -201,7 +212,23 @@ static Sys_var_long Sys_pfs_max_table_instances(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_table_share_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_max_table_lock_stat(
+ "performance_schema_max_table_lock_stat",
+ "Maximum number of lock statistics for instrumented tables."
+ " Use 0 to disable, -1 for automated scaling.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_table_lock_stat_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_max_index_stat(
+ "performance_schema_max_index_stat",
+ "Maximum number of index statistics for instrumented tables."
+ " Use 0 to disable, -1 for automated scaling.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_index_stat_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_thread_classes(
"performance_schema_max_thread_classes",
@@ -216,23 +243,21 @@ static Sys_var_long Sys_pfs_max_thread_instances(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_thread_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1), BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
-static Sys_var_ulong Sys_pfs_setup_actors_size(
+static Sys_var_long Sys_pfs_setup_actors_size(
"performance_schema_setup_actors_size",
"Maximum number of rows in SETUP_ACTORS.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_setup_actor_sizing),
- CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 1024),
- DEFAULT(PFS_MAX_SETUP_ACTOR),
- BLOCK_SIZE(1));
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
-static Sys_var_ulong Sys_pfs_setup_objects_size(
+static Sys_var_long Sys_pfs_setup_objects_size(
"performance_schema_setup_objects_size",
"Maximum number of rows in SETUP_OBJECTS.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_setup_object_sizing),
- CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 1024*1024),
- DEFAULT(PFS_MAX_SETUP_OBJECT),
- BLOCK_SIZE(1));
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_accounts_size(
"performance_schema_accounts_size",
@@ -240,8 +265,7 @@ static Sys_var_long Sys_pfs_accounts_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_account_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_hosts_size(
"performance_schema_hosts_size",
@@ -249,8 +273,7 @@ static Sys_var_long Sys_pfs_hosts_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_host_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_users_size(
"performance_schema_users_size",
@@ -258,16 +281,14 @@ static Sys_var_long Sys_pfs_users_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_user_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_ulong Sys_pfs_max_stage_classes(
"performance_schema_max_stage_classes",
"Maximum number of stage instruments.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_stage_class_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 256),
- DEFAULT(PFS_MAX_STAGE_CLASS),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_MAX_STAGE_CLASS), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_events_stages_history_long_size(
"performance_schema_events_stages_history_long_size",
@@ -275,8 +296,7 @@ static Sys_var_long Sys_pfs_events_stages_history_long_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_stages_history_long_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_events_stages_history_size(
"performance_schema_events_stages_history_size",
@@ -284,26 +304,27 @@ static Sys_var_long Sys_pfs_events_stages_history_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_stages_history_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
/**
Variable performance_schema_max_statement_classes.
The default number of statement classes is the sum of:
+ - SQLCOM_END for all regular "statement/sql/...",
+ - SP_PSI_STATEMENT_INFO_COUNT for "statement/sp/...".
- (COM_END - mariadb gap) for all regular "statement/com/...",
- 1 for "statement/com/new_packet", for unknown enum_server_command
- 1 for "statement/com/Error", for invalid enum_server_command
- - SQLCOM_END for all regular "statement/sql/...",
- 1 for "statement/sql/error", for invalid enum_sql_command
- 1 for "statement/rpl/relay_log", for replicated statements.
+ - 1 for "statement/scheduler/event", for scheduled events.
*/
static Sys_var_ulong Sys_pfs_max_statement_classes(
"performance_schema_max_statement_classes",
"Maximum number of statement instruments.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_statement_class_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 256),
- DEFAULT((ulong) SQLCOM_END +
- (ulong) (COM_END -(COM_MDB_GAP_END - COM_MDB_GAP_BEG + 1)) + 4),
+ DEFAULT((ulong) SQLCOM_END + SP_PSI_STATEMENT_INFO_COUNT +
+ (ulong) (COM_END -(COM_MDB_GAP_END - COM_MDB_GAP_BEG + 1)) + 5),
BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_events_statements_history_long_size(
@@ -312,8 +333,7 @@ static Sys_var_long Sys_pfs_events_statements_history_long_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_statements_history_long_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_events_statements_history_size(
"performance_schema_events_statements_history_size",
@@ -321,8 +341,21 @@ static Sys_var_long Sys_pfs_events_statements_history_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_statements_history_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_ulong Sys_pfs_statement_stack_size(
+ "performance_schema_max_statement_stack",
+ "Number of rows per thread in EVENTS_STATEMENTS_CURRENT.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_statement_stack_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(1, 256),
+ DEFAULT(PFS_STATEMENTS_STACK_SIZE), BLOCK_SIZE(1));
+
+static Sys_var_ulong Sys_pfs_max_memory_classes(
+ "performance_schema_max_memory_classes",
+ "Maximum number of memory pool instruments.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_memory_class_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 1024),
+ DEFAULT(PFS_MAX_MEMORY_CLASS), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_digest_size(
"performance_schema_digests_size",
@@ -330,16 +363,30 @@ static Sys_var_long Sys_pfs_digest_size(
" Use 0 to disable, -1 for automated sizing.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_digest_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 200),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_events_transactions_history_long_size(
+ "performance_schema_events_transactions_history_long_size",
+ "Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG."
+ " Use 0 to disable, -1 for automated sizing.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_transactions_history_long_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024*1024),
+ DEFAULT(PFS_AUTOSIZE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_events_transactions_history_size(
+ "performance_schema_events_transactions_history_size",
+ "Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY."
+ " Use 0 to disable, -1 for automated sizing.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_events_transactions_history_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024),
+ DEFAULT(PFS_AUTOSIZE_VALUE), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_max_digest_length(
"performance_schema_max_digest_length",
"Maximum length considered for digest text, when stored in performance_schema tables.",
PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_max_digest_length),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 1024 * 1024),
- DEFAULT(1024),
- BLOCK_SIZE(1));
+ DEFAULT(1024), BLOCK_SIZE(1));
static Sys_var_long Sys_pfs_connect_attrs_size(
"performance_schema_session_connect_attrs_size",
@@ -348,8 +395,22 @@ static Sys_var_long Sys_pfs_connect_attrs_size(
PARSED_EARLY READ_ONLY
GLOBAL_VAR(pfs_param.m_session_connect_attrs_sizing),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 1024 * 1024),
- DEFAULT(-1),
- BLOCK_SIZE(1));
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_max_metadata_locks(
+ "performance_schema_max_metadata_locks",
+ "Maximum number of metadata locks."
+ " Use 0 to disable, -1 for automated scaling.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_metadata_lock_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(-1, 100*1024*1024),
+ DEFAULT(PFS_AUTOSCALE_VALUE), BLOCK_SIZE(1));
+
+static Sys_var_long Sys_pfs_max_sql_text_length(
+ "performance_schema_max_sql_text_length",
+ "Maximum length of displayed sql text.",
+ PARSED_EARLY READ_ONLY GLOBAL_VAR(pfs_param.m_max_sql_text_length),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 1024 * 1024),
+ DEFAULT(1024), BLOCK_SIZE(1));
#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
@@ -523,7 +584,8 @@ bool check_has_super(sys_var *self, THD *thd, set_var *var)
{
DBUG_ASSERT(self->scope() != sys_var::GLOBAL);// don't abuse check_has_super()
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- if (!(thd->security_ctx->master_access & SUPER_ACL))
+ if (!(thd->security_ctx->master_access &
+ PRIV_SET_RESTRICTED_SESSION_SYSTEM_VARIABLE))
{
my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), "SUPER");
return true;
@@ -1517,24 +1579,21 @@ static Sys_var_ulong Sys_slave_max_allowed_packet(
"The maximum packet length to sent successfully from the master to slave.",
GLOBAL_VAR(slave_max_allowed_packet), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(1024, MAX_MAX_ALLOWED_PACKET),
- DEFAULT(MAX_MAX_ALLOWED_PACKET),
- BLOCK_SIZE(1024));
+ DEFAULT(MAX_MAX_ALLOWED_PACKET), BLOCK_SIZE(1024));
static Sys_var_ulonglong Sys_max_binlog_cache_size(
"max_binlog_cache_size",
"Sets the total size of the transactional cache",
GLOBAL_VAR(max_binlog_cache_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(IO_SIZE, SIZE_T_MAX),
- DEFAULT((SIZE_T_MAX/IO_SIZE)*IO_SIZE),
- BLOCK_SIZE(IO_SIZE));
+ DEFAULT((SIZE_T_MAX/IO_SIZE)*IO_SIZE), BLOCK_SIZE(IO_SIZE));
static Sys_var_ulonglong Sys_max_binlog_stmt_cache_size(
"max_binlog_stmt_cache_size",
"Sets the total size of the statement cache",
GLOBAL_VAR(max_binlog_stmt_cache_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(IO_SIZE, SIZE_T_MAX),
- DEFAULT((SIZE_T_MAX/IO_SIZE)*IO_SIZE),
- BLOCK_SIZE(IO_SIZE));
+ DEFAULT((SIZE_T_MAX/IO_SIZE)*IO_SIZE), BLOCK_SIZE(IO_SIZE));
static bool fix_max_binlog_size(sys_var *self, THD *thd, enum_var_type type)
{
@@ -1935,7 +1994,8 @@ Sys_var_gtid_binlog_state::do_check(THD *thd, set_var *var)
my_error(ER_INCORRECT_GTID_STATE, MYF(0));
return true;
}
- if (!(data= (gtid_binlog_state_data *)my_malloc(sizeof(*data), MYF(0))))
+ if (!(data= (gtid_binlog_state_data *)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(*data), MYF(0))))
{
my_free(list);
my_error(ER_OUT_OF_RESOURCES, MYF(0));
@@ -3136,16 +3196,17 @@ static Sys_var_enum Slave_ddl_exec_mode(
slave_exec_mode_names, DEFAULT(SLAVE_EXEC_MODE_IDEMPOTENT));
static const char *slave_run_triggers_for_rbr_names[]=
- {"NO", "YES", "LOGGING", 0};
+ {"NO", "YES", "LOGGING", "ENFORCE", 0};
static Sys_var_enum Slave_run_triggers_for_rbr(
"slave_run_triggers_for_rbr",
"Modes for how triggers in row-base replication on slave side will be "
- "executed. Legal values are NO (default), YES and LOGGING. NO means "
+ "executed. Legal values are NO (default), YES, LOGGING and ENFORCE. NO means "
"that trigger for RBR will not be running on slave. YES and LOGGING "
"means that triggers will be running on slave, if there was not "
"triggers running on the master for the statement. LOGGING also means "
"results of that the executed triggers work will be written to "
- "the binlog.",
+ "the binlog. ENFORCE means that triggers will always be run on the slave, "
+ "even if there are triggers on the master. ENFORCE implies LOGGING.",
GLOBAL_VAR(slave_run_triggers_for_rbr), CMD_LINE(REQUIRED_ARG),
slave_run_triggers_for_rbr_names,
DEFAULT(SLAVE_RUN_TRIGGERS_FOR_RBR_NO));
@@ -3901,8 +3962,7 @@ static Sys_var_ulonglong Sys_tmp_disk_table_size(
"Max size for data for an internal temporary on-disk MyISAM or Aria table.",
SESSION_VAR(tmp_disk_table_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(1024, (ulonglong)~(intptr)0),
- DEFAULT((ulonglong)~(intptr)0),
- BLOCK_SIZE(1));
+ DEFAULT((ulonglong)~(intptr)0), BLOCK_SIZE(1));
static Sys_var_charptr Sys_version(
"version", "Server version number. It may also include a suffix "
@@ -4009,7 +4069,8 @@ static Sys_var_plugin Sys_enforce_storage_engine(
"enforce_storage_engine", "Force the use of a storage engine for new tables",
SESSION_VAR(enforced_table_plugin),
NO_CMD_LINE, MYSQL_STORAGE_ENGINE_PLUGIN,
- DEFAULT(&enforced_storage_engine), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_has_super));
+ DEFAULT(&enforced_storage_engine), NO_MUTEX_GUARD, NOT_IN_BINLOG,
+ ON_CHECK(check_has_super));
#ifdef HAVE_REPLICATION
@@ -4189,7 +4250,8 @@ static Sys_var_bit Sys_log_off(
"query log is done for the client. Only clients with the SUPER privilege "
"can update this variable.",
NO_SET_STMT SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_LOG_OFF,
- DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_has_super));
+ DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG,
+ ON_CHECK(check_has_super));
/**
This function sets the session variable thd->variables.sql_log_bin
@@ -5846,8 +5908,7 @@ static Sys_var_ulong Sys_host_cache_size(
"How many host names should be cached to avoid resolving.",
AUTO_SET GLOBAL_VAR(host_cache_size),
CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 65536),
- DEFAULT(HOST_CACHE_SIZE),
- BLOCK_SIZE(1),
+ DEFAULT(HOST_CACHE_SIZE), BLOCK_SIZE(1),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
ON_UPDATE(fix_host_cache_size));
@@ -6334,8 +6395,7 @@ static Sys_var_ulong Sys_log_tc_size(
READ_ONLY GLOBAL_VAR(opt_tc_log_size),
CMD_LINE(REQUIRED_ARG),
VALID_RANGE(my_getpagesize() * 3, ULONG_MAX),
- DEFAULT(my_getpagesize() * 6),
- BLOCK_SIZE(my_getpagesize()));
+ DEFAULT(my_getpagesize() * 6), BLOCK_SIZE(my_getpagesize()));
#endif
static Sys_var_ulonglong Sys_max_thread_mem(
diff --git a/sql/sys_vars.ic b/sql/sys_vars.ic
index f33f469b160..698062d9bed 100644
--- a/sql/sys_vars.ic
+++ b/sql/sys_vars.ic
@@ -529,7 +529,8 @@ public:
size_t len=var->save_result.string_value.length;
if (ptr)
{
- new_val= (char*)my_memdup(ptr, len+1, MYF(MY_WME));
+ new_val= (char*)my_memdup(key_memory_Sys_var_charptr_value,
+ ptr, len+1, MYF(MY_WME));
if (!new_val) return 0;
new_val[len]=0;
}
diff --git a/sql/table.cc b/sql/table.cc
index 718efa5767c..10c44013538 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -27,7 +27,6 @@
#include "strfunc.h" // unhex_type2
#include "sql_partition.h" // mysql_unpack_partition,
// fix_partition_func, partition_info
-#include "sql_acl.h" // *_ACL, acl_getroot_no_password
#include "sql_base.h"
#include "create_options.h"
#include "sql_trigger.h"
@@ -273,7 +272,7 @@ TABLE_CATEGORY get_table_category(const LEX_CSTRING *db,
if (is_infoschema_db(db))
return TABLE_CATEGORY_INFORMATION;
- if (lex_string_eq(&PERFORMANCE_SCHEMA_DB_NAME, db))
+ if (is_perfschema_db(db))
return TABLE_CATEGORY_PERFORMANCE;
if (lex_string_eq(&MYSQL_SCHEMA_NAME, db))
@@ -323,7 +322,8 @@ TABLE_SHARE *alloc_table_share(const char *db, const char *table_name,
path_length= build_table_filename(path, sizeof(path) - 1,
db, table_name, "", 0);
- init_sql_alloc(&mem_root, "table_share", TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(key_memory_table_share, &mem_root, TABLE_ALLOC_BLOCK_SIZE, 0,
+ MYF(0));
if (multi_alloc_root(&mem_root,
&share, sizeof(*share),
&key_buff, key_length,
@@ -349,7 +349,7 @@ TABLE_SHARE *alloc_table_share(const char *db, const char *table_name,
table_alias_charset->strnncoll(key, 6, "mysql", 6) == 0)
share->not_usable_by_query_cache= 1;
- init_sql_alloc(&share->stats_cb.mem_root, "share_stats",
+ init_sql_alloc(PSI_INSTRUMENT_ME, &share->stats_cb.mem_root,
TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0));
memcpy((char*) &share->mem_root, (char*) &mem_root, sizeof(mem_root));
@@ -411,8 +411,9 @@ void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key,
This can't be MY_THREAD_SPECIFIC for slaves as they are freed
during cleanup() from Relay_log_info::close_temporary_tables()
*/
- init_sql_alloc(&share->mem_root, "tmp_table_share", TABLE_ALLOC_BLOCK_SIZE,
- 0, MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC));
+ init_sql_alloc(key_memory_table_share, &share->mem_root,
+ TABLE_ALLOC_BLOCK_SIZE, 0,
+ MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC));
share->table_category= TABLE_CATEGORY_TEMPORARY;
share->tmp_table= INTERNAL_TMP_TABLE;
share->db.str= (char*) key;
@@ -676,7 +677,8 @@ enum open_frm_error open_table_def(THD *thd, TABLE_SHARE *share, uint flags)
frmlen= uint4korr(head+10);
set_if_smaller(frmlen, FRM_MAX_SIZE); // safety
- if (!(buf= (uchar*)my_malloc(frmlen, MYF(MY_THREAD_SPECIFIC|MY_WME))))
+ if (!(buf= (uchar*)my_malloc(PSI_INSTRUMENT_ME, frmlen,
+ MYF(MY_THREAD_SPECIFIC|MY_WME))))
goto err;
memcpy(buf, head, sizeof(head));
@@ -2195,10 +2197,9 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
use_hash= share->fields >= MAX_FIELDS_BEFORE_HASH;
if (use_hash)
- use_hash= !my_hash_init(&share->name_hash,
- system_charset_info,
- share->fields,0,0,
- (my_hash_get_key) get_field_name,0,0);
+ use_hash= !my_hash_init(PSI_INSTRUMENT_ME, &share->name_hash,
+ system_charset_info, share->fields, 0, 0,
+ (my_hash_get_key) get_field_name, 0, 0);
if (share->mysql_version >= 50700 && share->mysql_version < 100000 &&
vcol_screen_length)
@@ -3756,8 +3757,8 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share,
error= OPEN_FRM_NEEDS_REBUILD;
goto err;
}
- init_sql_alloc(&outparam->mem_root, "table", TABLE_ALLOC_BLOCK_SIZE, 0,
- MYF(0));
+ init_sql_alloc(key_memory_TABLE, &outparam->mem_root, TABLE_ALLOC_BLOCK_SIZE,
+ 0, MYF(0));
/*
We have to store the original alias in mem_root as constraints and virtual
@@ -6207,7 +6208,7 @@ bool TABLE_LIST::prepare_view_security_context(THD *thd)
}
else
{
- if (thd->security_ctx->master_access & SUPER_ACL)
+ if (thd->security_ctx->master_access & PRIV_REVEAL_MISSING_DEFINER)
{
my_error(ER_NO_SUCH_USER, MYF(0), definer.user.str, definer.host.str);
@@ -8219,11 +8220,10 @@ size_t max_row_length(TABLE *table, MY_BITMAP const *cols, const uchar *data)
void init_mdl_requests(TABLE_LIST *table_list)
{
for ( ; table_list ; table_list= table_list->next_global)
- table_list->mdl_request.init(MDL_key::TABLE,
- table_list->db.str, table_list->table_name.str,
- table_list->lock_type >= TL_WRITE_ALLOW_WRITE ?
- MDL_SHARED_WRITE : MDL_SHARED_READ,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&table_list->mdl_request, MDL_key::TABLE,
+ table_list->db.str, table_list->table_name.str,
+ table_list->lock_type >= TL_WRITE_ALLOW_WRITE
+ ? MDL_SHARED_WRITE : MDL_SHARED_READ, MDL_TRANSACTION);
}
diff --git a/sql/table.h b/sql/table.h
index 6ce92ee048e..ad3336b9bd9 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -1075,8 +1075,8 @@ private:
public:
Blob_mem_storage() :truncated_value(false)
{
- init_alloc_root(&storage, "Blob_mem_storage", MAX_FIELD_VARCHARLENGTH, 0,
- MYF(0));
+ init_alloc_root(key_memory_blob_mem_storage,
+ &storage, MAX_FIELD_VARCHARLENGTH, 0, MYF(0));
}
~ Blob_mem_storage()
{
@@ -2012,8 +2012,8 @@ struct TABLE_LIST
alias= (alias_arg ? *alias_arg : *table_name_arg);
lock_type= lock_type_arg;
updating= lock_type >= TL_WRITE_ALLOW_WRITE;
- mdl_request.init(MDL_key::TABLE, db.str, table_name.str, mdl_type,
- MDL_TRANSACTION);
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::TABLE, db.str, table_name.str,
+ mdl_type, MDL_TRANSACTION);
}
TABLE_LIST(TABLE *table_arg, thr_lock_type lock_type)
@@ -3060,9 +3060,12 @@ extern LEX_CSTRING MYSQL_PROC_NAME;
inline bool is_infoschema_db(const LEX_CSTRING *name)
{
- return (INFORMATION_SCHEMA_NAME.length == name->length &&
- !my_strcasecmp(system_charset_info,
- INFORMATION_SCHEMA_NAME.str, name->str));
+ return lex_string_eq(&INFORMATION_SCHEMA_NAME, name);
+}
+
+inline bool is_perfschema_db(const LEX_CSTRING *name)
+{
+ return lex_string_eq(&PERFORMANCE_SCHEMA_DB_NAME, name);
}
inline void mark_as_null_row(TABLE *table)
diff --git a/sql/table_cache.cc b/sql/table_cache.cc
index 8e5c3a8471d..d8786f72244 100644
--- a/sql/table_cache.cc
+++ b/sql/table_cache.cc
@@ -1257,10 +1257,10 @@ int tdc_iterate(THD *thd, my_hash_walk_action action, void *argument,
if (no_dups)
{
- init_alloc_root(&no_dups_argument.root, "no_dups", 4096, 4096,
- MYF(alloc_flags));
- my_hash_init(&no_dups_argument.hash, &my_charset_bin, tdc_records(), 0, 0,
- eliminate_duplicates_get_key, 0, hash_flags);
+ init_alloc_root(PSI_INSTRUMENT_ME, &no_dups_argument.root, 4096, 4096, MYF(alloc_flags));
+ my_hash_init(PSI_INSTRUMENT_ME, &no_dups_argument.hash, &my_charset_bin,
+ tdc_records(), 0, 0, eliminate_duplicates_get_key, 0,
+ hash_flags);
no_dups_argument.action= action;
no_dups_argument.argument= argument;
action= (my_hash_walk_action) eliminate_duplicates;
diff --git a/sql/temporary_tables.cc b/sql/temporary_tables.cc
index 2e0f0a4918e..c675b11741a 100644
--- a/sql/temporary_tables.cc
+++ b/sql/temporary_tables.cc
@@ -955,7 +955,8 @@ TMP_TABLE_SHARE *THD::create_temporary_table(LEX_CUSTRING *frm,
/* Create the table definition key for the temporary table. */
key_length= create_tmp_table_def_key(key_cache, db, table_name);
- if (!(share= (TMP_TABLE_SHARE *) my_malloc(sizeof(TMP_TABLE_SHARE) +
+ if (!(share= (TMP_TABLE_SHARE *) my_malloc(key_memory_table_share,
+ sizeof(TMP_TABLE_SHARE) +
strlen(path) + 1 + key_length,
MYF(MY_WME))))
{
@@ -1002,7 +1003,8 @@ TMP_TABLE_SHARE *THD::create_temporary_table(LEX_CUSTRING *frm,
if (!temporary_tables)
{
if ((temporary_tables=
- (All_tmp_tables_list *) my_malloc(sizeof(All_tmp_tables_list),
+ (All_tmp_tables_list *) my_malloc(key_memory_table_share,
+ sizeof(All_tmp_tables_list),
MYF(MY_WME))))
{
temporary_tables->empty();
@@ -1107,7 +1109,8 @@ TABLE *THD::open_temporary_table(TMP_TABLE_SHARE *share,
DBUG_ENTER("THD::open_temporary_table");
- if (!(table= (TABLE *) my_malloc(sizeof(TABLE), MYF(MY_WME))))
+ if (!(table= (TABLE *) my_malloc(key_memory_TABLE, sizeof(TABLE),
+ MYF(MY_WME))))
{
DBUG_RETURN(NULL); /* Out of memory */
}
diff --git a/sql/thr_malloc.cc b/sql/thr_malloc.cc
index d43e7c4c9b5..89ad359befa 100644
--- a/sql/thr_malloc.cc
+++ b/sql/thr_malloc.cc
@@ -58,11 +58,10 @@ extern "C" {
}
}
-void init_sql_alloc(MEM_ROOT *mem_root,
- const char *area_name __attribute__((unused)),
- uint block_size, uint pre_alloc, myf my_flags)
+void init_sql_alloc(PSI_memory_key key, MEM_ROOT *mem_root, uint block_size,
+ uint pre_alloc, myf my_flags)
{
- init_alloc_root(mem_root, area_name, block_size, pre_alloc, my_flags);
+ init_alloc_root(key, mem_root, block_size, pre_alloc, my_flags);
mem_root->error_handler=sql_alloc_error_handler;
}
diff --git a/sql/thr_malloc.h b/sql/thr_malloc.h
index a6ab5477d41..cc56666bcc9 100644
--- a/sql/thr_malloc.h
+++ b/sql/thr_malloc.h
@@ -18,8 +18,8 @@
typedef struct st_mem_root MEM_ROOT;
-void init_sql_alloc(MEM_ROOT *root, const char *area_name, uint block_size,
- uint pre_alloc_size, myf my_flags);
+void init_sql_alloc(PSI_memory_key key, MEM_ROOT *root, uint block_size, uint
+ pre_alloc_size, myf my_flags);
char *sql_strmake_with_convert(THD *thd, const char *str, size_t arg_length,
CHARSET_INFO *from_cs,
size_t max_res_length,
diff --git a/sql/threadpool_common.cc b/sql/threadpool_common.cc
index 0588562ae61..40b230e5392 100644
--- a/sql/threadpool_common.cc
+++ b/sql/threadpool_common.cc
@@ -151,7 +151,7 @@ static void thread_attach(THD* thd)
pthread_setspecific(THR_KEY_mysys,thd->mysys_var);
thd->thread_stack=(char*)&thd;
thd->store_globals();
- PSI_CALL_set_thread(thd->event_scheduler.m_psi);
+ PSI_CALL_set_thread(thd->get_psi());
mysql_socket_set_thread_owner(thd->net.vio->mysql_socket);
}
@@ -235,21 +235,13 @@ static THD* threadpool_add_connection(CONNECT *connect, void *scheduler_data)
pthread_setspecific(THR_KEY_mysys, 0);
my_thread_init();
st_my_thread_var* mysys_var= (st_my_thread_var *)pthread_getspecific(THR_KEY_mysys);
+ PSI_CALL_set_thread(PSI_CALL_new_thread(key_thread_one_connection, connect, 0));
if (!mysys_var ||!(thd= connect->create_thd(NULL)))
{
/* Out of memory? */
connect->close_and_delete();
if (mysys_var)
- {
-#ifdef HAVE_PSI_INTERFACE
- /*
- current PSI is still from worker thread.
- Set to 0, to avoid premature cleanup by my_thread_end
- */
- if (PSI_server) PSI_server->set_thread(0);
-#endif
my_thread_end();
- }
return NULL;
}
delete connect;
@@ -257,11 +249,6 @@ static THD* threadpool_add_connection(CONNECT *connect, void *scheduler_data)
thd->set_mysys_var(mysys_var);
thd->event_scheduler.data= scheduler_data;
- /* Create new PSI thread for use with the THD. */
- thd->event_scheduler.m_psi=
- PSI_CALL_new_thread(key_thread_one_connection, thd, thd->thread_id);
-
-
/* Login. */
thread_attach(thd);
re_init_net_server_extension(thd);
@@ -301,6 +288,7 @@ static void threadpool_remove_connection(THD *thd)
end_connection(thd);
close_connection(thd, 0);
unlink_thd(thd);
+ PSI_CALL_delete_current_thread(); // before THD is destroyed
delete thd;
/*
diff --git a/sql/threadpool_generic.cc b/sql/threadpool_generic.cc
index e11a0613425..e8e3497eae4 100644
--- a/sql/threadpool_generic.cc
+++ b/sql/threadpool_generic.cc
@@ -1532,7 +1532,8 @@ int TP_pool_generic::init()
DBUG_ENTER("TP_pool_generic::TP_pool_generic");
threadpool_max_size= MY_MAX(threadpool_size, 128);
all_groups= (thread_group_t *)
- my_malloc(sizeof(thread_group_t) * threadpool_max_size, MYF(MY_WME|MY_ZEROFILL));
+ my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(thread_group_t) * threadpool_max_size, MYF(MY_WME|MY_ZEROFILL));
if (!all_groups)
{
threadpool_max_size= 0;
diff --git a/sql/transaction.cc b/sql/transaction.cc
index f0426b1fcc4..82e04d35479 100644
--- a/sql/transaction.cc
+++ b/sql/transaction.cc
@@ -25,6 +25,8 @@
#include "debug_sync.h" // DEBUG_SYNC
#include "sql_acl.h"
#include "semisync_master.h"
+#include <pfs_transaction_provider.h>
+#include <mysql/psi/mysql_transaction.h>
#ifdef WITH_WSREP
#include "wsrep_trans_observer.h"
#endif /* WITH_WSREP */
@@ -161,7 +163,7 @@ bool trans_begin(THD *thd, uint flags)
compatibility.
*/
const bool user_is_super=
- MY_TEST(thd->security_ctx->master_access & SUPER_ACL);
+ MY_TEST(thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY);
if (opt_readonly && !user_is_super)
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
@@ -209,6 +211,23 @@ bool trans_begin(THD *thd, uint flags)
#endif //EMBEDDED_LIBRARY
res= ha_start_consistent_snapshot(thd);
}
+ /*
+ Register transaction start in performance schema if not done already.
+ We handle explicitly started transactions here, implicitly started
+ transactions (and single-statement transactions in autocommit=1 mode)
+ are handled in trans_register_ha().
+ We can't handle explicit transactions in the same way as implicit
+ because we want to correctly attribute statements which follow
+ BEGIN but do not touch any transactional tables.
+ */
+ if (thd->m_transaction_psi == NULL)
+ {
+ thd->m_transaction_psi= MYSQL_START_TRANSACTION(&thd->m_transaction_state,
+ NULL, 0, thd->tx_isolation,
+ thd->tx_read_only, false);
+ DEBUG_SYNC(thd, "after_set_transaction_psi_before_set_transaction_gtid");
+ //gtid_set_performance_schema_values(thd);
+ }
DBUG_RETURN(MY_TEST(res));
}
@@ -245,22 +264,18 @@ bool trans_commit(THD *thd)
if res is non-zero, then ha_commit_trans has rolled back the
transaction, so the hooks for rollback will be called.
*/
- if (res)
- {
#ifdef HAVE_REPLICATION
+ if (res)
repl_semisync_master.wait_after_rollback(thd, FALSE);
-#endif
- }
else
- {
-#ifdef HAVE_REPLICATION
repl_semisync_master.wait_after_commit(thd, FALSE);
#endif
- }
thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG);
thd->transaction.all.reset();
thd->lex->start_transaction_opt= 0;
+ /* The transaction should be marked as complete in P_S. */
+ DBUG_ASSERT(thd->m_transaction_psi == NULL);
trans_track_end_trx(thd);
DBUG_RETURN(MY_TEST(res));
@@ -305,6 +320,9 @@ bool trans_commit_implicit(THD *thd)
thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG);
thd->transaction.all.reset();
+ /* The transaction should be marked as complete in P_S. */
+ DBUG_ASSERT(thd->m_transaction_psi == NULL);
+
/*
Upon implicit commit, reset the current transaction
isolation level and access mode. We do not care about
@@ -349,6 +367,9 @@ bool trans_rollback(THD *thd)
thd->transaction.all.reset();
thd->lex->start_transaction_opt= 0;
+ /* The transaction should be marked as complete in P_S. */
+ DBUG_ASSERT(thd->m_transaction_psi == NULL);
+
trans_track_end_trx(thd);
DBUG_RETURN(MY_TEST(res));
@@ -395,7 +416,9 @@ bool trans_rollback_implicit(THD *thd)
thd->transaction.all.reset();
/* Rollback should clear transaction_rollback_request flag. */
- DBUG_ASSERT(! thd->transaction_rollback_request);
+ DBUG_ASSERT(!thd->transaction_rollback_request);
+ /* The transaction should be marked as complete in P_S. */
+ DBUG_ASSERT(thd->m_transaction_psi == NULL);
trans_track_end_trx(thd);
@@ -463,6 +486,10 @@ bool trans_commit_stmt(THD *thd)
#endif
}
+ /* In autocommit=1 mode the transaction should be marked as complete in P_S */
+ DBUG_ASSERT(thd->in_active_multi_stmt_transaction() ||
+ thd->m_transaction_psi == NULL);
+
thd->transaction.stmt.reset();
DBUG_RETURN(MY_TEST(res));
@@ -502,6 +529,10 @@ bool trans_rollback_stmt(THD *thd)
repl_semisync_master.wait_after_rollback(thd, FALSE);
#endif
+ /* In autocommit=1 mode the transaction should be marked as complete in P_S */
+ DBUG_ASSERT(thd->in_active_multi_stmt_transaction() ||
+ thd->m_transaction_psi == NULL);
+
thd->transaction.stmt.reset();
DBUG_RETURN(FALSE);
diff --git a/sql/tztime.cc b/sql/tztime.cc
index fbac2923a84..72db37fde9c 100644
--- a/sql/tztime.cc
+++ b/sql/tztime.cc
@@ -1543,6 +1543,8 @@ tz_init_table_list(TABLE_LIST *tz_tabs)
}
}
+static PSI_memory_key key_memory_tz_storage;
+
#ifdef HAVE_PSI_INTERFACE
static PSI_mutex_key key_tz_LOCK;
@@ -1551,6 +1553,11 @@ static PSI_mutex_info all_tz_mutexes[]=
{ & key_tz_LOCK, "tz_LOCK", PSI_FLAG_GLOBAL}
};
+static PSI_memory_info all_tz_memory[]=
+{
+ { &key_memory_tz_storage, "tz_storage", PSI_FLAG_GLOBAL}
+};
+
static void init_tz_psi_keys(void)
{
const char* category= "sql";
@@ -1561,6 +1568,9 @@ static void init_tz_psi_keys(void)
count= array_elements(all_tz_mutexes);
PSI_server->register_mutex(category, all_tz_mutexes, count);
+
+ count= array_elements(all_tz_memory);
+ mysql_memory_register(category, all_tz_memory, count);
}
#endif /* HAVE_PSI_INTERFACE */
@@ -1615,20 +1625,20 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap)
thd->store_globals();
/* Init all memory structures that require explicit destruction */
- if (my_hash_init(&tz_names, &my_charset_latin1, 20,
- 0, 0, (my_hash_get_key) my_tz_names_get_key, 0, 0))
+ if (my_hash_init(key_memory_tz_storage, &tz_names, &my_charset_latin1, 20, 0,
+ 0, (my_hash_get_key) my_tz_names_get_key, 0, 0))
{
sql_print_error("Fatal error: OOM while initializing time zones");
goto end;
}
- if (my_hash_init(&offset_tzs, &my_charset_latin1, 26, 0, 0,
- (my_hash_get_key)my_offset_tzs_get_key, 0, 0))
+ if (my_hash_init(key_memory_tz_storage, &offset_tzs, &my_charset_latin1, 26,
+ 0, 0, (my_hash_get_key)my_offset_tzs_get_key, 0, 0))
{
sql_print_error("Fatal error: OOM while initializing time zones");
my_hash_free(&tz_names);
goto end;
}
- init_sql_alloc(&tz_storage, "timezone_storage", 32 * 1024, 0, MYF(0));
+ init_sql_alloc(key_memory_tz_storage, &tz_storage, 32 * 1024, 0, MYF(0));
mysql_mutex_init(key_tz_LOCK, &tz_LOCK, MY_MUTEX_INIT_FAST);
tz_inited= 1;
@@ -2568,8 +2578,8 @@ scan_tz_dir(char * name_end, uint symlink_recursion_level, uint verbose)
}
else if (MY_S_ISREG(cur_dir->dir_entry[i].mystat->st_mode))
{
- init_alloc_root(&tz_storage, "timezone_storage", 32768, 0,
- MYF(MY_THREAD_SPECIFIC));
+ init_alloc_root(PSI_INSTRUMENT_ME, &tz_storage,
+ 32768, 0, MYF(MY_THREAD_SPECIFIC));
if (!tz_load(fullname, &tz_info, &tz_storage))
print_tz_as_sql(root_name_end + 1, &tz_info);
else
@@ -2758,7 +2768,7 @@ main(int argc, char **argv)
First argument is timezonefile.
The second is timezonename if opt_leap is not given
*/
- init_alloc_root(&tz_storage, "timezone_storage", 32768, 0, MYF(0));
+ init_alloc_root(PSI_INSTRUMENT_ME, &tz_storage, 32768, 0, MYF(0));
if (tz_load(argv[0], &tz_info, &tz_storage))
{
diff --git a/sql/uniques.cc b/sql/uniques.cc
index 931aa868199..4e327a4cc09 100644
--- a/sql/uniques.cc
+++ b/sql/uniques.cc
@@ -93,8 +93,8 @@ Unique::Unique(qsort_cmp2 comp_func, void * comp_func_fixed_arg,
init_tree(&tree, (max_in_memory_size / 16), 0, size, comp_func,
NULL, comp_func_fixed_arg, MYF(MY_THREAD_SPECIFIC));
/* If the following fail's the next add will also fail */
- my_init_dynamic_array(&file_ptrs, sizeof(Merge_chunk), 16, 16,
- MYF(MY_THREAD_SPECIFIC));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &file_ptrs, sizeof(Merge_chunk), 16,
+ 16, MYF(MY_THREAD_SPECIFIC));
/*
If you change the following, change it in get_max_elements function, too.
*/
@@ -531,7 +531,7 @@ static bool merge_walk(uchar *merge_buffer, size_t merge_buffer_size,
top->set_buffer(merge_buffer + (top - begin) * piece_size,
merge_buffer + (top - begin) * piece_size + piece_size);
top->set_max_keys(max_key_count_per_piece);
- bytes_read= read_to_buffer(file, top, &sort_param);
+ bytes_read= read_to_buffer(file, top, &sort_param, false);
if (unlikely(bytes_read == (ulong) -1))
goto end;
DBUG_ASSERT(bytes_read);
@@ -561,7 +561,7 @@ static bool merge_walk(uchar *merge_buffer, size_t merge_buffer_size,
/* save old_key not to overwrite it in read_to_buffer */
memcpy(save_key_buff, old_key, key_length);
old_key= save_key_buff;
- bytes_read= read_to_buffer(file, top, &sort_param);
+ bytes_read= read_to_buffer(file, top, &sort_param, false);
if (unlikely(bytes_read == (ulong) -1))
goto end;
else if (bytes_read) /* top->key, top->mem_count are reset */
@@ -609,7 +609,7 @@ static bool merge_walk(uchar *merge_buffer, size_t merge_buffer_size,
top->advance_current_key(key_length);
}
while (top->decrement_mem_count());
- bytes_read= read_to_buffer(file, top, &sort_param);
+ bytes_read= read_to_buffer(file, top, &sort_param, false);
if (unlikely(bytes_read == (ulong) -1))
goto end;
}
@@ -662,7 +662,8 @@ bool Unique::walk(TABLE *table, tree_walk_action action, void *walk_action_arg)
is needed when a piece of merge buffer is re-read, see merge_walk()
*/
size_t buff_sz= MY_MAX(MERGEBUFF2+1, max_in_memory_size/full_size+1) * full_size;
- if (!(merge_buffer = (uchar *)my_malloc(buff_sz, MYF(MY_WME))))
+ if (!(merge_buffer = (uchar *)my_malloc(key_memory_Unique_merge_buffer,
+ buff_sz, MYF(MY_THREAD_SPECIFIC|MY_WME))))
return 1;
if (buff_sz < full_size * (file_ptrs.elements + 1UL))
res= merge(table, merge_buffer, buff_sz,
@@ -782,7 +783,8 @@ bool Unique::get(TABLE *table)
{
/* Whole tree is in memory; Don't use disk if you don't need to */
if ((sort.record_pointers= (uchar*)
- my_malloc(size * tree.elements_in_tree, MYF(MY_THREAD_SPECIFIC))))
+ my_malloc(key_memory_Filesort_info_record_pointers,
+ size * tree.elements_in_tree, MYF(MY_THREAD_SPECIFIC))))
{
uchar *save_record_pointers= sort.record_pointers;
tree_walk_action action= min_dupl_count ?
@@ -801,7 +803,7 @@ bool Unique::get(TABLE *table)
if (flush())
DBUG_RETURN(1);
size_t buff_sz= (max_in_memory_size / full_size + 1) * full_size;
- if (!(sort_buffer= (uchar*) my_malloc(buff_sz,
+ if (!(sort_buffer= (uchar*) my_malloc(key_memory_Unique_sort_buffer, buff_sz,
MYF(MY_THREAD_SPECIFIC|MY_WME))))
DBUG_RETURN(1);
diff --git a/sql/unireg.cc b/sql/unireg.cc
index e4a43d3ace5..2aa46131efb 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -425,8 +425,8 @@ LEX_CUSTRING build_frm_image(THD *thd, const LEX_CSTRING &table,
DBUG_RETURN(frm);
}
- frm_ptr= (uchar*) my_malloc(frm.length, MYF(MY_WME | MY_ZEROFILL |
- MY_THREAD_SPECIFIC));
+ frm_ptr= (uchar*) my_malloc(PSI_INSTRUMENT_ME, frm.length,
+ MYF(MY_WME | MY_ZEROFILL | MY_THREAD_SPECIFIC));
if (!frm_ptr)
DBUG_RETURN(frm);
diff --git a/sql/wsrep_binlog.cc b/sql/wsrep_binlog.cc
index a81503a50da..f555480d2e0 100644
--- a/sql/wsrep_binlog.cc
+++ b/sql/wsrep_binlog.cc
@@ -64,7 +64,7 @@ int wsrep_write_cache_buf(IO_CACHE *cache, uchar **buf, size_t *buf_len)
wsrep_max_ws_size, total_length);
goto error;
}
- uchar* tmp= (uchar *)my_realloc(*buf, total_length,
+ uchar* tmp= (uchar *)my_realloc(PSI_INSTRUMENT_ME, *buf, total_length,
MYF(MY_ALLOW_ZERO_PTR));
if (!tmp)
{
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index ff01473e816..99e8f0a52ec 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -1270,7 +1270,7 @@ static bool wsrep_prepare_key_for_isolation(const char* db,
wsrep_key_arr_t* ka)
{
wsrep_key_t* tmp;
- tmp= (wsrep_key_t*)my_realloc(ka->keys,
+ tmp= (wsrep_key_t*)my_realloc(PSI_INSTRUMENT_ME, ka->keys,
(ka->keys_len + 1) * sizeof(wsrep_key_t),
MYF(MY_ALLOW_ZERO_PTR));
if (!tmp)
@@ -1280,7 +1280,7 @@ static bool wsrep_prepare_key_for_isolation(const char* db,
}
ka->keys= tmp;
if (!(ka->keys[ka->keys_len].key_parts= (wsrep_buf_t*)
- my_malloc(sizeof(wsrep_buf_t)*2, MYF(0))))
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(wsrep_buf_t)*2, MYF(0))))
{
WSREP_ERROR("Can't allocate memory for key_parts");
return false;
@@ -1916,7 +1916,7 @@ static int wsrep_create_sp(THD *thd, uchar** buf, size_t* buf_len)
log_query.set_charset(system_charset_info);
- if (sp->m_handler->type() == TYPE_ENUM_FUNCTION)
+ if (sp->m_handler->type() == SP_TYPE_FUNCTION)
{
sp_returns_type(thd, retstr, sp);
returns= retstr.lex_cstring();
diff --git a/sql/wsrep_sst.cc b/sql/wsrep_sst.cc
index d478ea486cd..0bb8a9eb675 100644
--- a/sql/wsrep_sst.cc
+++ b/sql/wsrep_sst.cc
@@ -245,7 +245,7 @@ static bool sst_auth_real_set (const char* value)
if (value)
{
- v= my_strdup(value, MYF(0));
+ v= my_strdup(PSI_INSTRUMENT_ME, value, MYF(0));
}
else // its NULL
{
@@ -263,7 +263,7 @@ static bool sst_auth_real_set (const char* value)
if (strlen(sst_auth_real))
{
if (wsrep_sst_auth) { my_free((void*) wsrep_sst_auth); }
- wsrep_sst_auth= my_strdup(WSREP_SST_AUTH_MASK, MYF(0));
+ wsrep_sst_auth= my_strdup(PSI_INSTRUMENT_ME, WSREP_SST_AUTH_MASK, MYF(0));
}
return 0;
}
@@ -414,7 +414,7 @@ static char* generate_name_value(const char* name, const char* value)
size_t name_len= strlen(name);
size_t value_len= strlen(value);
char* buf=
- (char*) my_malloc((name_len + value_len + 5) * sizeof(char), MYF(0));
+ (char*) my_malloc(PSI_INSTRUMENT_ME, (name_len + value_len + 5), MYF(0));
if (buf)
{
char* ref= buf;
@@ -449,11 +449,11 @@ static int generate_binlog_opt_val(char** ret)
*ret= strcmp(opt_bin_logname, "0") ?
generate_name_value(WSREP_SST_OPT_BINLOG,
opt_bin_logname) :
- my_strdup("", MYF(0));
+ my_strdup(PSI_INSTRUMENT_ME, "", MYF(0));
}
else
{
- *ret= my_strdup("", MYF(0));
+ *ret= my_strdup(PSI_INSTRUMENT_ME, "", MYF(0));
}
if (!*ret) return -ENOMEM;
return 0;
@@ -468,11 +468,11 @@ static int generate_binlog_index_opt_val(char** ret)
*ret= strcmp(opt_binlog_index_name, "0") ?
generate_name_value(WSREP_SST_OPT_BINLOG_INDEX,
opt_binlog_index_name) :
- my_strdup("", MYF(0));
+ my_strdup(PSI_INSTRUMENT_ME, "", MYF(0));
}
else
{
- *ret= my_strdup("", MYF(0));
+ *ret= my_strdup(PSI_INSTRUMENT_ME, "", MYF(0));
}
if (!*ret) return -ENOMEM;
return 0;
diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc
index 950e4aae34d..28dbe4096f7 100644
--- a/sql/wsrep_var.cc
+++ b/sql/wsrep_var.cc
@@ -30,17 +30,17 @@ ulong wsrep_reject_queries;
int wsrep_init_vars()
{
- wsrep_provider = my_strdup(WSREP_NONE, MYF(MY_WME));
- wsrep_provider_options= my_strdup("", MYF(MY_WME));
- wsrep_cluster_address = my_strdup("", MYF(MY_WME));
- wsrep_cluster_name = my_strdup(WSREP_CLUSTER_NAME, MYF(MY_WME));
- wsrep_node_name = my_strdup("", MYF(MY_WME));
- wsrep_node_address = my_strdup("", MYF(MY_WME));
- wsrep_node_incoming_address= my_strdup(WSREP_NODE_INCOMING_AUTO, MYF(MY_WME));
+ wsrep_provider = my_strdup(PSI_INSTRUMENT_ME, WSREP_NONE, MYF(MY_WME));
+ wsrep_provider_options= my_strdup(PSI_INSTRUMENT_ME, "", MYF(MY_WME));
+ wsrep_cluster_address = my_strdup(PSI_INSTRUMENT_ME, "", MYF(MY_WME));
+ wsrep_cluster_name = my_strdup(PSI_INSTRUMENT_ME, WSREP_CLUSTER_NAME, MYF(MY_WME));
+ wsrep_node_name = my_strdup(PSI_INSTRUMENT_ME, "", MYF(MY_WME));
+ wsrep_node_address = my_strdup(PSI_INSTRUMENT_ME, "", MYF(MY_WME));
+ wsrep_node_incoming_address= my_strdup(PSI_INSTRUMENT_ME, WSREP_NODE_INCOMING_AUTO, MYF(MY_WME));
if (wsrep_gtid_mode)
- wsrep_start_position = my_strdup(WSREP_START_POSITION_ZERO_GTID, MYF(MY_WME));
+ wsrep_start_position = my_strdup(PSI_INSTRUMENT_ME, WSREP_START_POSITION_ZERO_GTID, MYF(MY_WME));
else
- wsrep_start_position = my_strdup(WSREP_START_POSITION_ZERO, MYF(MY_WME));
+ wsrep_start_position = my_strdup(PSI_INSTRUMENT_ME, WSREP_START_POSITION_ZERO, MYF(MY_WME));
return 0;
}
@@ -50,7 +50,7 @@ static int get_provider_option_value(const char* opts,
{
int ret= 1;
ulong opt_value_tmp;
- char *opt_value_str, *s, *opts_copy= my_strdup(opts, MYF(MY_WME));
+ char *opt_value_str, *s, *opts_copy= my_strdup(PSI_INSTRUMENT_ME, opts, MYF(MY_WME));
if ((opt_value_str= strstr(opts_copy, opt_name)) == NULL)
goto end;
@@ -436,7 +436,7 @@ void wsrep_provider_init (const char* value)
}
if (wsrep_provider) my_free((void *)wsrep_provider);
- wsrep_provider= my_strdup(value, MYF(0));
+ wsrep_provider= my_strdup(PSI_INSTRUMENT_MEM, value, MYF(0));
}
bool wsrep_provider_options_check(sys_var *self, THD* thd, set_var* var)
@@ -466,7 +466,7 @@ void wsrep_provider_options_init(const char* value)
{
if (wsrep_provider_options && wsrep_provider_options != value)
my_free((void *)wsrep_provider_options);
- wsrep_provider_options= (value) ? my_strdup(value, MYF(0)) : NULL;
+ wsrep_provider_options= value ? my_strdup(PSI_INSTRUMENT_MEM, value, MYF(0)) : NULL;
}
bool wsrep_reject_queries_update(sys_var *self, THD* thd, enum_var_type type)
@@ -578,8 +578,8 @@ void wsrep_cluster_address_init (const char* value)
(wsrep_cluster_address) ? wsrep_cluster_address : "null",
(value) ? value : "null");
- my_free((void*) wsrep_cluster_address);
- wsrep_cluster_address= my_strdup(value ? value : "", MYF(0));
+ my_free(const_cast<char*>(wsrep_cluster_address));
+ wsrep_cluster_address= my_strdup(PSI_INSTRUMENT_MEM, safe_str(value), MYF(0));
}
/* wsrep_cluster_name cannot be NULL or an empty string. */
@@ -652,7 +652,7 @@ void wsrep_node_address_init (const char* value)
if (wsrep_node_address && strcmp(wsrep_node_address, value))
my_free ((void*)wsrep_node_address);
- wsrep_node_address= (value) ? my_strdup(value, MYF(0)) : NULL;
+ wsrep_node_address= value ? my_strdup(PSI_INSTRUMENT_MEM, value, MYF(0)) : NULL;
}
static void wsrep_slave_count_change_update ()
diff --git a/sql/xa.cc b/sql/xa.cc
index 3ead73fe1e1..4d9846d2f4d 100644
--- a/sql/xa.cc
+++ b/sql/xa.cc
@@ -19,10 +19,11 @@
#include "mariadb.h"
#include "sql_class.h"
#include "transaction.h"
-
+#include <pfs_transaction_provider.h>
+#include <mysql/psi/mysql_transaction.h>
/***************************************************************************
- Handling of XA id cacheing
+ Handling of XA id caching
***************************************************************************/
enum xa_states { XA_ACTIVE= 0, XA_IDLE, XA_PREPARED, XA_ROLLBACK_ONLY };
@@ -425,19 +426,25 @@ bool trans_xa_start(THD *thd)
if (not_equal)
my_error(ER_XAER_NOTA, MYF(0));
else
+ {
thd->transaction.xid_state.xid_cache_element->xa_state= XA_ACTIVE;
+ MYSQL_SET_TRANSACTION_XA_STATE(thd->m_transaction_psi, XA_ACTIVE);
+ }
DBUG_RETURN(not_equal);
}
/* TODO: JOIN is not supported yet. */
if (thd->lex->xa_opt != XA_NONE)
my_error(ER_XAER_INVAL, MYF(0));
+ else if (!thd->lex->xid->gtrid_length)
+ my_error(ER_XAER_INVAL, MYF(0));
else if (thd->transaction.xid_state.is_explicit_XA())
thd->transaction.xid_state.er_xaer_rmfail();
else if (thd->locked_tables_mode || thd->in_active_multi_stmt_transaction())
my_error(ER_XAER_OUTSIDE, MYF(0));
else if (!trans_begin(thd))
{
+ MYSQL_SET_TRANSACTION_XID(thd->m_transaction_psi, thd->lex->xid, XA_ACTIVE);
if (xid_cache_insert(thd, &thd->transaction.xid_state, thd->lex->xid))
{
trans_rollback(thd);
@@ -472,7 +479,10 @@ bool trans_xa_end(THD *thd)
else if (!thd->transaction.xid_state.xid_cache_element->xid.eq(thd->lex->xid))
my_error(ER_XAER_NOTA, MYF(0));
else if (!xa_trans_rolled_back(thd->transaction.xid_state.xid_cache_element))
+ {
thd->transaction.xid_state.xid_cache_element->xa_state= XA_IDLE;
+ MYSQL_SET_TRANSACTION_XA_STATE(thd->m_transaction_psi, XA_IDLE);
+ }
DBUG_RETURN(thd->is_error() ||
thd->transaction.xid_state.xid_cache_element->xa_state != XA_IDLE);
@@ -503,7 +513,10 @@ bool trans_xa_prepare(THD *thd)
my_error(ER_XA_RBROLLBACK, MYF(0));
}
else
+ {
thd->transaction.xid_state.xid_cache_element->xa_state= XA_PREPARED;
+ MYSQL_SET_TRANSACTION_XA_STATE(thd->m_transaction_psi, XA_PREPARED);
+ }
DBUG_RETURN(thd->is_error() ||
thd->transaction.xid_state.xid_cache_element->xa_state != XA_PREPARED);
@@ -527,6 +540,24 @@ bool trans_xa_commit(THD *thd)
if (!thd->transaction.xid_state.is_explicit_XA() ||
!thd->transaction.xid_state.xid_cache_element->xid.eq(thd->lex->xid))
{
+ if (thd->in_multi_stmt_transaction_mode())
+ {
+ /*
+ Not allow to commit from inside an not-"native" to xid
+ ongoing transaction: the commit effect can't be reversed.
+ */
+ my_error(ER_XAER_OUTSIDE, MYF(0));
+ DBUG_RETURN(TRUE);
+ }
+ if (thd->lex->xa_opt != XA_NONE)
+ {
+ /*
+ Not allow to commit with one phase a prepared xa out of compatibility
+ with the native commit branch's error out.
+ */
+ my_error(ER_XAER_INVAL, MYF(0));
+ DBUG_RETURN(TRUE);
+ }
if (thd->fix_xid_hash_pins())
{
my_error(ER_OUT_OF_RESOURCES, MYF(0));
@@ -556,10 +587,14 @@ bool trans_xa_commit(THD *thd)
if ((res= MY_TEST(r)))
my_error(r == 1 ? ER_XA_RBROLLBACK : ER_XAER_RMERR, MYF(0));
}
- else if (thd->transaction.xid_state.xid_cache_element->xa_state == XA_PREPARED &&
- thd->lex->xa_opt == XA_NONE)
+ else if (thd->transaction.xid_state.xid_cache_element->xa_state == XA_PREPARED)
{
MDL_request mdl_request;
+ if (thd->lex->xa_opt != XA_NONE)
+ {
+ my_error(ER_XAER_INVAL, MYF(0));
+ DBUG_RETURN(TRUE);
+ }
/*
Acquire metadata lock which will ensure that COMMIT is blocked
@@ -568,7 +603,7 @@ bool trans_xa_commit(THD *thd)
We allow FLUSHer to COMMIT; we assume FLUSHer knows what it does.
*/
- mdl_request.init(MDL_key::BACKUP, "", "", MDL_BACKUP_COMMIT,
+ MDL_REQUEST_INIT(&mdl_request, MDL_key::BACKUP, "", "", MDL_BACKUP_COMMIT,
MDL_TRANSACTION);
if (thd->mdl_context.acquire_lock(&mdl_request,
@@ -584,6 +619,16 @@ bool trans_xa_commit(THD *thd)
res= MY_TEST(ha_commit_one_phase(thd, 1));
if (res)
my_error(ER_XAER_RMERR, MYF(0));
+ else
+ {
+ /*
+ Since we don't call ha_commit_trans() for prepared transactions,
+ we need to explicitly mark the transaction as committed.
+ */
+ MYSQL_COMMIT_TRANSACTION(thd->m_transaction_psi);
+ }
+
+ thd->m_transaction_psi= NULL;
}
}
else
@@ -600,7 +645,8 @@ bool trans_xa_commit(THD *thd)
xid_cache_delete(thd, &thd->transaction.xid_state);
trans_track_end_trx(thd);
-
+ /* The transaction should be marked as complete in P_S. */
+ DBUG_ASSERT(thd->m_transaction_psi == NULL || res);
DBUG_RETURN(res);
}
@@ -621,6 +667,11 @@ bool trans_xa_rollback(THD *thd)
if (!thd->transaction.xid_state.is_explicit_XA() ||
!thd->transaction.xid_state.xid_cache_element->xid.eq(thd->lex->xid))
{
+ if (thd->in_multi_stmt_transaction_mode())
+ {
+ my_error(ER_XAER_OUTSIDE, MYF(0));
+ DBUG_RETURN(TRUE);
+ }
if (thd->fix_xid_hash_pins())
{
my_error(ER_OUT_OF_RESOURCES, MYF(0));
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc
index 0b352589fe3..259093d0f05 100644
--- a/storage/archive/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -278,7 +278,7 @@ int archive_discover(handlerton *hton, THD* thd, TABLE_SHARE *share)
if (frm_stream.frm_length == 0)
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
- frm_ptr= (uchar *)my_malloc(sizeof(char) * frm_stream.frm_length,
+ frm_ptr= (uchar *)my_malloc(PSI_INSTRUMENT_ME, frm_stream.frm_length,
MYF(MY_THREAD_SPECIFIC | MY_WME));
if (!frm_ptr)
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -705,7 +705,7 @@ int ha_archive::frm_copy(azio_stream *src, azio_stream *dst)
return 0;
}
- if (!(frm_ptr= (uchar *) my_malloc(src->frm_length,
+ if (!(frm_ptr= (uchar *) my_malloc(PSI_INSTRUMENT_ME, src->frm_length,
MYF(MY_THREAD_SPECIFIC | MY_WME))))
return HA_ERR_OUT_OF_MEM;
@@ -1214,8 +1214,8 @@ bool ha_archive::fix_rec_buff(unsigned int length)
if (length > record_buffer->length)
{
uchar *newptr;
- if (!(newptr=(uchar*) my_realloc((uchar*) record_buffer->buffer,
- length,
+ if (!(newptr=(uchar*) my_realloc(PSI_INSTRUMENT_ME,
+ (uchar*) record_buffer->buffer, length,
MYF(MY_ALLOW_ZERO_PTR))))
DBUG_RETURN(1);
record_buffer->buffer= newptr;
@@ -1889,16 +1889,14 @@ archive_record_buffer *ha_archive::create_record_buffer(unsigned int length)
{
DBUG_ENTER("ha_archive::create_record_buffer");
archive_record_buffer *r;
- if (!(r=
- (archive_record_buffer*) my_malloc(sizeof(archive_record_buffer),
- MYF(MY_WME))))
+ if (!(r= (archive_record_buffer*) my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(archive_record_buffer), MYF(MY_WME))))
{
DBUG_RETURN(NULL); /* purecov: inspected */
}
r->length= (int)length;
- if (!(r->buffer= (uchar*) my_malloc(r->length,
- MYF(MY_WME))))
+ if (!(r->buffer= (uchar*) my_malloc(PSI_INSTRUMENT_ME, r->length, MYF(MY_WME))))
{
my_free(r);
DBUG_RETURN(NULL); /* purecov: inspected */
diff --git a/storage/blackhole/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc
index c7803003398..15548350b20 100644
--- a/storage/blackhole/ha_blackhole.cc
+++ b/storage/blackhole/ha_blackhole.cc
@@ -323,9 +323,8 @@ static st_blackhole_share *get_share(const char *table_name)
my_hash_search(&blackhole_open_tables,
(uchar*) table_name, length)))
{
- if (!(share= (st_blackhole_share*) my_malloc(sizeof(st_blackhole_share) +
- length,
- MYF(MY_WME | MY_ZEROFILL))))
+ if (!(share= (st_blackhole_share*) my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(st_blackhole_share) + length, MYF(MY_WME | MY_ZEROFILL))))
goto error;
share->table_name_length= length;
@@ -404,7 +403,8 @@ static int blackhole_init(void *p)
mysql_mutex_init(bh_key_mutex_blackhole,
&blackhole_mutex, MY_MUTEX_INIT_FAST);
- (void) my_hash_init(&blackhole_open_tables, system_charset_info,32,0,0,
+ (void) my_hash_init(PSI_INSTRUMENT_ME, &blackhole_open_tables,
+ system_charset_info, 32, 0, 0,
(my_hash_get_key) blackhole_get_key,
(my_hash_free_key) blackhole_free_key, 0);
diff --git a/storage/cassandra/ha_cassandra.cc b/storage/cassandra/ha_cassandra.cc
index 410150b088f..cf151bb0c6f 100644
--- a/storage/cassandra/ha_cassandra.cc
+++ b/storage/cassandra/ha_cassandra.cc
@@ -242,7 +242,7 @@ static int cassandra_init_func(void *p)
cassandra_hton= (handlerton *)p;
mysql_mutex_init(ex_key_mutex_example, &cassandra_mutex, MY_MUTEX_INIT_FAST);
- (void) my_hash_init(&cassandra_open_tables,system_charset_info,32,0,0,
+ (void) my_hash_init(PSI_INSTRUMENT_ME, &cassandra_open_tables,system_charset_info,32,0,0,
(my_hash_get_key) cassandra_get_key,0,0);
cassandra_hton->create= cassandra_create_handler;
@@ -297,7 +297,7 @@ static CASSANDRA_SHARE *get_share(const char *table_name, TABLE *table)
length)))
{
if (!(share=(CASSANDRA_SHARE *)
- my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL), PSI_INSTRUMENT_ME,
&share, sizeof(*share),
&tmp_name, length+1,
NullS)))
@@ -865,7 +865,7 @@ static void alloc_strings_memroot(MEM_ROOT *mem_root)
The mem_root used to allocate UUID (of length 36 + \0) so make
appropriate allocated size
*/
- init_alloc_root(mem_root, "cassandra",
+ init_alloc_root(PSI_INSTRUMENT_ME, mem_root,
(36 + 1 + ALIGN_SIZE(sizeof(USED_MEM))) * 10 +
ALLOC_ROOT_MIN_BLOCK_SIZE,
(36 + 1 + ALIGN_SIZE(sizeof(USED_MEM))) * 10 +
@@ -1446,7 +1446,7 @@ bool ha_cassandra::setup_field_converters(Field **field_arg, uint n_fields)
size_t memsize= sizeof(ColumnDataConverter*) * n_fields +
(sizeof(LEX_STRING) + sizeof(CASSANDRA_TYPE_DEF))*
(dyncol_set ? max_non_default_fields : 0);
- if (!(field_converters= (ColumnDataConverter**)my_malloc(memsize, MYF(0))))
+ if (!(field_converters= (ColumnDataConverter**)my_malloc(PSI_INSTRUMENT_ME, memsize, MYF(0))))
DBUG_RETURN(true);
bzero(field_converters, memsize);
n_field_converters= n_fields;
@@ -1458,12 +1458,12 @@ bool ha_cassandra::setup_field_converters(Field **field_arg, uint n_fields)
special_type_field_names=
((LEX_STRING*)(special_type_field_converters + max_non_default_fields));
- if (my_init_dynamic_array(&dynamic_values,
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &dynamic_values,
sizeof(DYNAMIC_COLUMN_VALUE),
DYNCOL_USUAL, DYNCOL_DELTA, MYF(0)))
DBUG_RETURN(true);
else
- if (my_init_dynamic_array(&dynamic_names,
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &dynamic_names,
sizeof(LEX_STRING),
DYNCOL_USUAL, DYNCOL_DELTA,MYF(0)))
{
diff --git a/storage/connect/inihandl.cpp b/storage/connect/inihandl.cpp
index ab6d5db4f0a..c39c94fb30d 100644
--- a/storage/connect/inihandl.cpp
+++ b/storage/connect/inihandl.cpp
@@ -192,7 +192,7 @@ static void PROFILE_Save( FILE *file, PROFILESECTION *section )
}
for (key = section->key; key; key = key->next)
- if (key->name && key->name[0]) {
+ if (key->name[0]) {
fprintf(file, "%s", SVP(key->name));
if (key->value)
diff --git a/storage/connect/myconn.cpp b/storage/connect/myconn.cpp
index e07270aff8a..abb865cc61f 100644
--- a/storage/connect/myconn.cpp
+++ b/storage/connect/myconn.cpp
@@ -88,8 +88,8 @@ static MYSQL_RES *connect_use_result(MYSQL *mysql)
DBUG_RETURN(NULL);
} // endif status
- if (!(result = (MYSQL_RES*) my_malloc(sizeof(*result) +
- sizeof(ulong) * mysql->field_count,
+ if (!(result = (MYSQL_RES*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*result) + sizeof(ulong) * mysql->field_count,
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(NULL);
@@ -97,8 +97,8 @@ static MYSQL_RES *connect_use_result(MYSQL *mysql)
result->methods = mysql->methods;
/* Ptrs: to one row */
- if (!(result->row = (MYSQL_ROW)my_malloc(sizeof(result->row[0]) *
- (mysql->field_count+1), MYF(MY_WME)))) {
+ if (!(result->row = (MYSQL_ROW)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(result->row[0]) * (mysql->field_count+1), MYF(MY_WME)))) {
my_free(result);
DBUG_RETURN(NULL);
} // endif row
diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp
index 18d64677773..514951d8d2a 100644
--- a/storage/connect/odbconn.cpp
+++ b/storage/connect/odbconn.cpp
@@ -1289,7 +1289,6 @@ bool ODBConn::DriverConnect(DWORD Options)
#else // !__WIN__
HWND hWnd = (HWND)1;
#endif // !__WIN__
- PGLOBAL& g = m_G;
wConnectOption = SQL_DRIVER_NOPROMPT;
//else if (Options & forceOdbcDialog)
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index ac5a0eeb850..d9473a8b045 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -112,6 +112,11 @@ static uchar* tina_get_key(TINA_SHARE *share, size_t *length,
return (uchar*) share->table_name;
}
+static PSI_memory_key csv_key_memory_tina_share;
+static PSI_memory_key csv_key_memory_blobroot;
+static PSI_memory_key csv_key_memory_tina_set;
+static PSI_memory_key csv_key_memory_row;
+
#ifdef HAVE_PSI_INTERFACE
static PSI_mutex_key csv_key_mutex_tina, csv_key_mutex_TINA_SHARE_mutex;
@@ -132,6 +137,15 @@ static PSI_file_info all_tina_files[]=
{ &csv_key_file_update, "update", 0}
};
+static PSI_memory_info all_tina_memory[]=
+{
+ { &csv_key_memory_tina_share, "TINA_SHARE", PSI_FLAG_GLOBAL},
+ { &csv_key_memory_blobroot, "blobroot", 0},
+ { &csv_key_memory_tina_set, "tina_set", 0},
+ { &csv_key_memory_row, "row", 0},
+ { &csv_key_memory_Transparent_file, "Transparent_file", 0}
+};
+
static void init_tina_psi_keys(void)
{
const char* category= "csv";
@@ -142,6 +156,9 @@ static void init_tina_psi_keys(void)
count= array_elements(all_tina_files);
mysql_file_register(category, all_tina_files, count);
+
+ count= array_elements(all_tina_memory);
+ mysql_memory_register(category, all_tina_memory, count);
}
#endif /* HAVE_PSI_INTERFACE */
@@ -166,8 +183,9 @@ static int tina_init_func(void *p)
tina_hton= (handlerton *)p;
mysql_mutex_init(csv_key_mutex_tina, &tina_mutex, MY_MUTEX_INIT_FAST);
- (void) my_hash_init(&tina_open_tables,system_charset_info,32,0,0,
- (my_hash_get_key) tina_get_key,0,0);
+ (void) my_hash_init(csv_key_memory_tina_share, &tina_open_tables,
+ system_charset_info, 32, 0, 0, (my_hash_get_key)
+ tina_get_key, 0, 0);
tina_hton->db_type= DB_TYPE_CSV_DB;
tina_hton->create= tina_create_handler;
tina_hton->flags= (HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES |
@@ -204,14 +222,11 @@ static TINA_SHARE *get_share(const char *table_name, TABLE *table)
If share is not present in the hash, create a new share and
initialize its members.
*/
- if (!(share=(TINA_SHARE*) my_hash_search(&tina_open_tables,
- (uchar*) table_name,
- length)))
+ if (!(share=(TINA_SHARE*) my_hash_search(&tina_open_tables, (uchar*)
+ table_name, length)))
{
- if (!my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
- &share, sizeof(*share),
- &tmp_name, length+1,
- NullS))
+ if (!my_multi_malloc(csv_key_memory_tina_share, MYF(MY_WME | MY_ZEROFILL),
+ &share, sizeof(*share), &tmp_name, length+1, NullS))
{
mysql_mutex_unlock(&tina_mutex);
return NULL;
@@ -513,7 +528,8 @@ ha_tina::ha_tina(handlerton *hton, TABLE_SHARE *table_arg)
buffer.set((char*)byte_buffer, IO_SIZE, &my_charset_bin);
chain= chain_buffer;
file_buff= new Transparent_file();
- init_alloc_root(&blobroot, "ha_tina", BLOB_MEMROOT_ALLOC_SIZE, 0, MYF(0));
+ init_alloc_root(csv_key_memory_blobroot, &blobroot, BLOB_MEMROOT_ALLOC_SIZE,
+ 0, MYF(0));
}
@@ -627,14 +643,15 @@ int ha_tina::chain_append()
chain_size += DEFAULT_CHAIN_LENGTH;
if (chain_alloced)
{
- /* Must cast since my_malloc unlike malloc doesn't have a void ptr */
- if ((chain= (tina_set *) my_realloc((uchar*)chain,
- chain_size, MYF(MY_WME))) == NULL)
+ if ((chain= (tina_set *) my_realloc(csv_key_memory_tina_set,
+ (uchar*)chain, chain_size,
+ MYF(MY_WME))) == NULL)
return -1;
}
else
{
- tina_set *ptr= (tina_set *) my_malloc(chain_size * sizeof(tina_set),
+ tina_set *ptr= (tina_set *) my_malloc(csv_key_memory_tina_set,
+ chain_size * sizeof(tina_set),
MYF(MY_WME));
memcpy(ptr, chain, DEFAULT_CHAIN_LENGTH * sizeof(tina_set));
chain= ptr;
@@ -975,7 +992,8 @@ int ha_tina::open(const char *name, int mode, uint open_options)
*/
thr_lock_data_init(&share->lock, &lock, (void*) this);
ref_length= sizeof(my_off_t);
- init_alloc_root(&blobroot, "ha_tina", BLOB_MEMROOT_ALLOC_SIZE, 0, MYF(0));
+ init_alloc_root(csv_key_memory_blobroot, &blobroot, BLOB_MEMROOT_ALLOC_SIZE,
+ 0, MYF(0));
share->lock.get_status= tina_get_status;
share->lock.update_status= tina_update_status;
@@ -1528,7 +1546,8 @@ int ha_tina::repair(THD* thd, HA_CHECK_OPT* check_opt)
if (init_data_file())
DBUG_RETURN(HA_ERR_CRASHED_ON_REPAIR);
- if (!(buf= (uchar*) my_malloc(table->s->reclength, MYF(MY_WME))))
+ if (!(buf= (uchar*) my_malloc(csv_key_memory_row, table->s->reclength,
+ MYF(MY_WME))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
/*
Local_saved_data_file_length is initialized during the lock phase.
@@ -1742,7 +1761,8 @@ int ha_tina::check(THD* thd, HA_CHECK_OPT* check_opt)
if (init_data_file())
DBUG_RETURN(HA_ERR_CRASHED);
- if (!(buf= (uchar*) my_malloc(table->s->reclength, MYF(MY_WME))))
+ if (!(buf= (uchar*) my_malloc(csv_key_memory_row, table->s->reclength,
+ MYF(MY_WME))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
/*
diff --git a/storage/csv/transparent_file.cc b/storage/csv/transparent_file.cc
index 47d63f2caaf..443e61d08d8 100644
--- a/storage/csv/transparent_file.cc
+++ b/storage/csv/transparent_file.cc
@@ -23,9 +23,12 @@
#include "transparent_file.h"
#include "my_sys.h" // MY_WME, MY_ALLOW_ZERO_PTR, MY_SEEK_SET
+PSI_memory_key csv_key_memory_Transparent_file;
+
Transparent_file::Transparent_file() : lower_bound(0), buff_size(IO_SIZE)
{
- buff= (uchar *) my_malloc(buff_size*sizeof(uchar), MYF(MY_WME));
+ buff= (uchar *) my_malloc(csv_key_memory_Transparent_file,
+ buff_size*sizeof(uchar), MYF(MY_WME));
}
Transparent_file::~Transparent_file()
diff --git a/storage/csv/transparent_file.h b/storage/csv/transparent_file.h
index 024fc0e3a38..545643d0f17 100644
--- a/storage/csv/transparent_file.h
+++ b/storage/csv/transparent_file.h
@@ -18,6 +18,7 @@
#include <sys/stat.h>
#include <my_dir.h>
+extern PSI_memory_key csv_key_memory_Transparent_file;
class Transparent_file
{
diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc
index 2021e03bc62..b87c5c39c37 100644
--- a/storage/federated/ha_federated.cc
+++ b/storage/federated/ha_federated.cc
@@ -496,8 +496,8 @@ int federated_db_init(void *p)
if (mysql_mutex_init(fe_key_mutex_federated,
&federated_mutex, MY_MUTEX_INIT_FAST))
goto error;
- if (!my_hash_init(&federated_open_tables, &my_charset_bin, 32, 0, 0,
- (my_hash_get_key) federated_get_key, 0, 0))
+ if (!my_hash_init(PSI_INSTRUMENT_ME, &federated_open_tables, &my_charset_bin,
+ 32, 0, 0, (my_hash_get_key) federated_get_key, 0, 0))
{
DBUG_RETURN(FALSE);
}
@@ -1516,7 +1516,7 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table)
*/
query.length(0);
- init_alloc_root(&mem_root, "federated_share", 256, 0, MYF(0));
+ init_alloc_root(PSI_INSTRUMENT_ME, &mem_root, 256, 0, MYF(0));
mysql_mutex_lock(&federated_mutex);
@@ -1642,7 +1642,7 @@ int ha_federated::open(const char *name, int mode, uint test_if_locked)
ref_length= sizeof(MYSQL_RES *) + sizeof(MYSQL_ROW_OFFSET);
DBUG_PRINT("info", ("ref_length: %u", ref_length));
- my_init_dynamic_array(&results, sizeof(MYSQL_RES *), 4, 4, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &results, sizeof(MYSQL_RES *), 4, 4, MYF(0));
reset();
DBUG_RETURN(0);
diff --git a/storage/federatedx/federatedx_io_mysql.cc b/storage/federatedx/federatedx_io_mysql.cc
index cc4d8ca7c70..4fa4b2b6ae1 100644
--- a/storage/federatedx/federatedx_io_mysql.cc
+++ b/storage/federatedx/federatedx_io_mysql.cc
@@ -140,7 +140,7 @@ federatedx_io_mysql::federatedx_io_mysql(FEDERATEDX_SERVER *aserver)
bzero(&mysql, sizeof(MYSQL));
bzero(&savepoints, sizeof(DYNAMIC_ARRAY));
- my_init_dynamic_array(&savepoints, sizeof(SAVEPT), 16, 16, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &savepoints, sizeof(SAVEPT), 16, 16, MYF(0));
DBUG_VOID_RETURN;
}
diff --git a/storage/federatedx/federatedx_pushdown.cc b/storage/federatedx/federatedx_pushdown.cc
index 2bcee943308..2701436ccf5 100644
--- a/storage/federatedx/federatedx_pushdown.cc
+++ b/storage/federatedx/federatedx_pushdown.cc
@@ -182,6 +182,16 @@ create_federatedx_select_handler(THD* thd, SELECT_LEX *sel)
return 0;
}
+ /*
+ Currently, ha_federatedx_select_handler::init_scan just takes the
+ thd->query and sends it to the backend.
+ This obviously won't work if the SELECT uses an "INTO @var" or
+ "INTO OUTFILE". It is also unlikely to work if the select has some
+ other kind of side effect.
+ */
+ if (sel->uncacheable & UNCACHEABLE_SIDEEFFECT)
+ return NULL;
+
handler= new ha_federatedx_select_handler(thd, sel);
return handler;
@@ -285,9 +295,10 @@ int ha_federatedx_select_handler::end_scan()
DBUG_RETURN(0);
}
-
-void ha_federatedx_select_handler::print_error(int, unsigned long)
+\
+void ha_federatedx_select_handler::print_error(int error, myf error_flag)
{
+ select_handler::print_error(error, error_flag);
}
diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc
index eca580310ee..b76391dae4e 100644
--- a/storage/federatedx/ha_federatedx.cc
+++ b/storage/federatedx/ha_federatedx.cc
@@ -445,9 +445,9 @@ int federatedx_db_init(void *p)
if (mysql_mutex_init(fe_key_mutex_federatedx,
&federatedx_mutex, MY_MUTEX_INIT_FAST))
goto error;
- if (!my_hash_init(&federatedx_open_tables, &my_charset_bin, 32, 0, 0,
+ if (!my_hash_init(PSI_INSTRUMENT_ME, &federatedx_open_tables, &my_charset_bin, 32, 0, 0,
(my_hash_get_key) federatedx_share_get_key, 0, 0) &&
- !my_hash_init(&federatedx_open_servers, &my_charset_bin, 32, 0, 0,
+ !my_hash_init(PSI_INSTRUMENT_ME, &federatedx_open_servers, &my_charset_bin, 32, 0, 0,
(my_hash_get_key) federatedx_server_get_key, 0, 0))
{
DBUG_RETURN(FALSE);
@@ -1540,7 +1540,7 @@ static FEDERATEDX_SERVER *get_server(FEDERATEDX_SHARE *share, TABLE *table)
mysql_mutex_assert_owner(&federatedx_mutex);
- init_alloc_root(&mem_root, "federated", 4096, 4096, MYF(0));
+ init_alloc_root(PSI_INSTRUMENT_ME, &mem_root, 4096, 4096, MYF(0));
fill_server(&mem_root, &tmp_server, share, table ? table->s->table_charset : 0);
@@ -1598,7 +1598,7 @@ static FEDERATEDX_SHARE *get_share(const char *table_name, TABLE *table)
query.length(0);
bzero(&tmp_share, sizeof(tmp_share));
- init_alloc_root(&mem_root, "federated", 256, 0, MYF(0));
+ init_alloc_root(PSI_INSTRUMENT_ME, &mem_root, 256, 0, MYF(0));
mysql_mutex_lock(&federatedx_mutex);
@@ -1802,7 +1802,7 @@ int ha_federatedx::open(const char *name, int mode, uint test_if_locked)
DBUG_PRINT("info", ("ref_length: %u", ref_length));
- my_init_dynamic_array(&results, sizeof(FEDERATEDX_IO_RESULT*), 4, 4, MYF(0));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &results, sizeof(FEDERATEDX_IO_RESULT*), 4, 4, MYF(0));
reset();
@@ -3492,7 +3492,7 @@ int ha_federatedx::start_stmt(MYSQL_THD thd, thr_lock_type lock_type)
if (!txn->in_transaction())
{
txn->stmt_begin();
- trans_register_ha(thd, FALSE, ht);
+ trans_register_ha(thd, FALSE, ht, 0);
}
DBUG_RETURN(0);
}
@@ -3515,12 +3515,12 @@ int ha_federatedx::external_lock(MYSQL_THD thd, int lock_type)
if (!thd_test_options(thd, (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
{
txn->stmt_begin();
- trans_register_ha(thd, FALSE, ht);
+ trans_register_ha(thd, FALSE, ht, 0);
}
else
{
txn->txn_begin();
- trans_register_ha(thd, TRUE, ht);
+ trans_register_ha(thd, TRUE, ht, 0);
}
}
}
@@ -3538,7 +3538,7 @@ int ha_federatedx::savepoint_set(handlerton *hton, MYSQL_THD thd, void *sv)
if (txn && txn->has_connections())
{
if (txn->txn_begin())
- trans_register_ha(thd, TRUE, hton);
+ trans_register_ha(thd, TRUE, hton, 0);
txn->sp_acquire((ulong *) sv);
diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc
index e0e25442d71..ccfd6c69956 100644
--- a/storage/heap/ha_heap.cc
+++ b/storage/heap/ha_heap.cc
@@ -619,7 +619,8 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table,
for (key= parts= 0; key < keys; key++)
parts+= table_arg->key_info[key].user_defined_key_parts;
- if (!(keydef= (HP_KEYDEF*) my_malloc(keys * sizeof(HP_KEYDEF) +
+ if (!(keydef= (HP_KEYDEF*) my_malloc(hp_key_memory_HP_KEYDEF,
+ keys * sizeof(HP_KEYDEF) +
parts * sizeof(HA_KEYSEG),
MYF(MY_WME | MY_THREAD_SPECIFIC))))
return my_errno;
diff --git a/storage/heap/heapdef.h b/storage/heap/heapdef.h
index b3ceb617bd4..6136a90f0aa 100644
--- a/storage/heap/heapdef.h
+++ b/storage/heap/heapdef.h
@@ -103,8 +103,12 @@ extern uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
extern mysql_mutex_t THR_LOCK_heap;
+extern PSI_memory_key hp_key_memory_HP_SHARE;
+extern PSI_memory_key hp_key_memory_HP_INFO;
+extern PSI_memory_key hp_key_memory_HP_PTRS;
+extern PSI_memory_key hp_key_memory_HP_KEYDEF;
+
#ifdef HAVE_PSI_INTERFACE
-extern PSI_mutex_key hp_key_mutex_HP_SHARE_intern_lock;
void init_heap_psi_keys();
#endif /* HAVE_PSI_INTERFACE */
diff --git a/storage/heap/hp_block.c b/storage/heap/hp_block.c
index 395637db351..324efc8b4af 100644
--- a/storage/heap/hp_block.c
+++ b/storage/heap/hp_block.c
@@ -78,7 +78,7 @@ int hp_get_new_block(HP_SHARE *info, HP_BLOCK *block, size_t *alloc_length)
*/
*alloc_length= (sizeof(HP_PTRS) * ((i == block->levels) ? i : i - 1) +
(ulonglong)block->records_in_block * block->recbuffer);
- if (!(root=(HP_PTRS*) my_malloc(*alloc_length,
+ if (!(root=(HP_PTRS*) my_malloc(hp_key_memory_HP_PTRS, *alloc_length,
MYF(MY_WME |
(info->internal ?
MY_THREAD_SPECIFIC : 0)))))
diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c
index 8bd653f1b84..935c6f8d0fd 100644
--- a/storage/heap/hp_create.c
+++ b/storage/heap/hp_create.c
@@ -159,7 +159,8 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
keyinfo->get_key_length= hp_rb_key_length;
}
}
- if (!(share= (HP_SHARE*) my_malloc((uint) sizeof(HP_SHARE)+
+ if (!(share= (HP_SHARE*) my_malloc(hp_key_memory_HP_SHARE,
+ sizeof(HP_SHARE)+
keys*sizeof(HP_KEYDEF)+
key_segs*sizeof(HA_KEYSEG),
MYF(MY_ZEROFILL |
@@ -222,7 +223,7 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
share->create_time= (long) time((time_t*) 0);
share->internal= create_info->internal_table;
/* Must be allocated separately for rename to work */
- if (!(share->name= my_strdup(name,MYF(0))))
+ if (!(share->name= my_strdup(hp_key_memory_HP_SHARE, name, MYF(0))))
{
my_free(share);
goto err;
@@ -231,8 +232,6 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
if (!create_info->internal_table)
{
thr_lock_init(&share->lock);
- mysql_mutex_init(hp_key_mutex_HP_SHARE_intern_lock,
- &share->intern_lock, MY_MUTEX_INIT_FAST);
share->open_list.data= (void*) share;
heap_share_list= list_add(heap_share_list,&share->open_list);
}
@@ -361,7 +360,6 @@ void hp_free(HP_SHARE *share)
{
heap_share_list= list_delete(heap_share_list, &share->open_list);
thr_lock_delete(&share->lock);
- mysql_mutex_destroy(&share->intern_lock);
}
hp_clear(share); /* Remove blocks from memory */
my_free(share->name);
diff --git a/storage/heap/hp_open.c b/storage/heap/hp_open.c
index 65186d77e4f..272c4a3af23 100644
--- a/storage/heap/hp_open.c
+++ b/storage/heap/hp_open.c
@@ -30,8 +30,8 @@ HP_INFO *heap_open_from_share(HP_SHARE *share, int mode)
HP_INFO *info;
DBUG_ENTER("heap_open_from_share");
- if (!(info= (HP_INFO*) my_malloc(sizeof(HP_INFO) +
- 2 * share->max_key_length,
+ if (!(info= (HP_INFO*) my_malloc(hp_key_memory_HP_INFO,
+ sizeof(HP_INFO) + 2 * share->max_key_length,
MYF(MY_ZEROFILL +
(share->internal ?
MY_THREAD_SPECIFIC : 0)))))
diff --git a/storage/heap/hp_rename.c b/storage/heap/hp_rename.c
index 34e82bbc531..7343644b5d9 100644
--- a/storage/heap/hp_rename.c
+++ b/storage/heap/hp_rename.c
@@ -28,7 +28,8 @@ int heap_rename(const char *old_name, const char *new_name)
mysql_mutex_lock(&THR_LOCK_heap);
if ((info = hp_find_named_heap(old_name)))
{
- if (!(name_buff=(char*) my_strdup(new_name,MYF(MY_WME))))
+ if (!(name_buff=(char*) my_strdup(hp_key_memory_HP_SHARE,
+ new_name, MYF(MY_WME))))
{
mysql_mutex_unlock(&THR_LOCK_heap);
DBUG_RETURN(my_errno);
diff --git a/storage/heap/hp_static.c b/storage/heap/hp_static.c
index 9191e23b399..9a4410eead9 100644
--- a/storage/heap/hp_static.c
+++ b/storage/heap/hp_static.c
@@ -24,16 +24,19 @@
LIST *heap_open_list=0,*heap_share_list=0;
+PSI_memory_key hp_key_memory_HP_SHARE;
+PSI_memory_key hp_key_memory_HP_INFO;
+PSI_memory_key hp_key_memory_HP_PTRS;
+PSI_memory_key hp_key_memory_HP_KEYDEF;
+
#ifdef HAVE_PSI_INTERFACE
-PSI_mutex_key hp_key_mutex_HP_SHARE_intern_lock;
-static PSI_mutex_info all_heap_mutexes[]=
+static PSI_memory_info all_heap_memory[]=
{
- { & hp_key_mutex_HP_SHARE_intern_lock, "HP_SHARE::intern_lock", 0}
- /*
- Note:
- THR_LOCK_heap is part of mysys, not storage/heap.
- */
+ { & hp_key_memory_HP_SHARE, "HP_SHARE", 0},
+ { & hp_key_memory_HP_INFO, "HP_INFO", 0},
+ { & hp_key_memory_HP_PTRS, "HP_PTRS", 0},
+ { & hp_key_memory_HP_KEYDEF, "HP_KEYDEF", 0}
};
void init_heap_psi_keys()
@@ -44,8 +47,8 @@ void init_heap_psi_keys()
if (PSI_server == NULL)
return;
- count= array_elements(all_heap_mutexes);
- PSI_server->register_mutex(category, all_heap_mutexes, count);
+ count= array_elements(all_heap_memory);
+ mysql_memory_register(category, all_heap_memory, count);
}
#endif /* HAVE_PSI_INTERFACE */
diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt
index e4286aac6a0..3a6b1a25a96 100644
--- a/storage/innobase/CMakeLists.txt
+++ b/storage/innobase/CMakeLists.txt
@@ -26,7 +26,6 @@ SET(INNOBASE_SOURCES
btr/btr0bulk.cc
btr/btr0cur.cc
btr/btr0pcur.cc
- btr/btr0scrub.cc
btr/btr0sea.cc
btr/btr0defragment.cc
buf/buf0buddy.cc
@@ -84,6 +83,7 @@ SET(INNOBASE_SOURCES
log/log0log.cc
log/log0recv.cc
log/log0crypt.cc
+ log/log0sync.cc
mem/mem0mem.cc
mtr/mtr0mtr.cc
os/os0file.cc
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc
index af3e7a69aa4..cd2333b378b 100644
--- a/storage/innobase/btr/btr0btr.cc
+++ b/storage/innobase/btr/btr0btr.cc
@@ -1035,7 +1035,7 @@ btr_free_root_check(
@param[in,out] mtr mini-transaction
@return page number of the created root
@retval FIL_NULL if did not succeed */
-ulint
+uint32_t
btr_create(
ulint type,
fil_space_t* space,
@@ -1768,7 +1768,7 @@ void btr_set_instant(buf_block_t* root, const dict_index_t& index, mtr_t* mtr)
}
break;
default:
- ut_ad(!"wrong page type");
+ ut_ad("wrong page type" == 0);
/* fall through */
case FIL_PAGE_INDEX:
ut_ad(!page_is_comp(root->frame)
diff --git a/storage/innobase/btr/btr0bulk.cc b/storage/innobase/btr/btr0bulk.cc
index 4d73a6a4ac2..1171de544a7 100644
--- a/storage/innobase/btr/btr0bulk.cc
+++ b/storage/innobase/btr/btr0bulk.cc
@@ -270,9 +270,11 @@ no_data:
byte *bd= insert_rec;
const byte *rd= rec;
/* Skip any unchanged prefix of the record. */
- for (; *bd == *rd; cd++, bd++, rd++)
+ for (;; cd++, bd++, rd++)
if (bd == insert_rec_end)
goto no_data;
+ else if (*bd != *rd)
+ break;
/* Try to copy any data bytes of the preceding record. */
if (c_end - cd > 2)
@@ -951,7 +953,7 @@ BtrBulk::pageCommit(
/** Log free check */
inline void BtrBulk::logFreeCheck()
{
- if (log_sys.check_flush_or_checkpoint) {
+ if (log_sys.check_flush_or_checkpoint()) {
release();
log_free_check();
diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc
index fbb2fbe9b5d..adda8bca94c 100644
--- a/storage/innobase/btr/btr0cur.cc
+++ b/storage/innobase/btr/btr0cur.cc
@@ -691,7 +691,7 @@ bool btr_cur_instant_root_init(dict_index_t* index, const page_t* page)
switch (fil_page_get_type(page)) {
default:
- ut_ad(!"wrong page type");
+ ut_ad("wrong page type" == 0);
return true;
case FIL_PAGE_INDEX:
/* The field PAGE_INSTANT is guaranteed 0 on clustered
@@ -4105,21 +4105,30 @@ void btr_cur_upd_rec_in_place(rec_t *rec, const dict_index_t *index,
case REC_STATUS_NODE_PTR:
case REC_STATUS_INFIMUM:
case REC_STATUS_SUPREMUM:
- ut_ad(!"wrong record status in update");
+ ut_ad("wrong record status in update" == 0);
}
}
#endif /* UNIV_DEBUG */
- byte* info_bits = &rec[rec_offs_comp(offsets)
- ? -REC_NEW_INFO_BITS
- : -REC_OLD_INFO_BITS];
- compile_time_assert(REC_INFO_BITS_SHIFT == 0);
- if ((*info_bits & REC_INFO_BITS_MASK) == update->info_bits) {
- } else if (UNIV_LIKELY_NULL(block->page.zip.data)) {
+ static_assert(REC_INFO_BITS_SHIFT == 0, "compatibility");
+ if (UNIV_LIKELY_NULL(block->page.zip.data)) {
+ ut_ad(rec_offs_comp(offsets));
+ byte* info_bits = &rec[-REC_NEW_INFO_BITS];
+ const bool flip_del_mark = (*info_bits ^ update->info_bits)
+ & REC_INFO_DELETED_FLAG;
*info_bits &= ~REC_INFO_BITS_MASK;
*info_bits |= update->info_bits;
+
+ if (flip_del_mark) {
+ page_zip_rec_set_deleted(block, rec, update->info_bits
+ & REC_INFO_DELETED_FLAG, mtr);
+ }
} else {
- mtr->write<1>(*block, info_bits,
+ byte* info_bits = &rec[rec_offs_comp(offsets)
+ ? -REC_NEW_INFO_BITS
+ : -REC_OLD_INFO_BITS];
+
+ mtr->write<1,mtr_t::OPT>(*block, info_bits,
(*info_bits & ~REC_INFO_BITS_MASK)
| update->info_bits);
}
@@ -5862,7 +5871,7 @@ discard_page:
<< block->page.id
<< " in index " << index->name
<< " of " << index->table->name;
- ut_ad(!"MDEV-14637");
+ ut_ad("MDEV-14637" == 0);
}
}
}
@@ -6668,8 +6677,8 @@ btr_estimate_number_of_different_key_vals(
*/
if (index->stat_index_size > 1) {
n_sample_pages = (srv_stats_transient_sample_pages < index->stat_index_size) ?
- ut_min(static_cast<ulint>(index->stat_index_size),
- static_cast<ulint>(log2(index->stat_index_size)*srv_stats_transient_sample_pages))
+ ut_min(index->stat_index_size,
+ static_cast<ulint>(log2(index->stat_index_size)*double(srv_stats_transient_sample_pages)))
: index->stat_index_size;
}
diff --git a/storage/innobase/btr/btr0defragment.cc b/storage/innobase/btr/btr0defragment.cc
index aa3c33893c6..5348e9a6b27 100644
--- a/storage/innobase/btr/btr0defragment.cc
+++ b/storage/innobase/btr/btr0defragment.cc
@@ -666,8 +666,9 @@ btr_defragment_n_pages(
max_data_size = optimal_page_size;
}
- reserved_space = ut_min((ulint)(optimal_page_size
- * (1 - srv_defragment_fill_factor)),
+ reserved_space = ut_min(static_cast<ulint>(
+ static_cast<double>(optimal_page_size)
+ * (1 - srv_defragment_fill_factor)),
(data_size_per_rec
* srv_defragment_fill_factor_n_recs));
optimal_page_size -= reserved_space;
diff --git a/storage/innobase/btr/btr0scrub.cc b/storage/innobase/btr/btr0scrub.cc
deleted file mode 100644
index 711a7e98525..00000000000
--- a/storage/innobase/btr/btr0scrub.cc
+++ /dev/null
@@ -1,909 +0,0 @@
-// Copyright (c) 2014, Google Inc.
-// Copyright (c) 2017, 2020, MariaDB Corporation.
-
-/**************************************************//**
-@file btr/btr0scrub.cc
-Scrubbing of btree pages
-
-*******************************************************/
-
-#include "btr0btr.h"
-#include "btr0cur.h"
-#include "btr0scrub.h"
-#include "ibuf0ibuf.h"
-#include "fsp0fsp.h"
-#include "dict0dict.h"
-#include "mtr0mtr.h"
-
-/* used when trying to acquire dict-lock */
-UNIV_INTERN bool fil_crypt_is_closing(ulint space);
-
-/**
-* scrub data at delete time (e.g purge thread)
-*/
-my_bool srv_immediate_scrub_data_uncompressed = false;
-
-/**
-* background scrub uncompressed data
-*
-* if srv_immediate_scrub_data_uncompressed is enabled
-* this is only needed to handle "old" data
-*/
-my_bool srv_background_scrub_data_uncompressed = false;
-
-/**
-* backgrounds scrub compressed data
-*
-* reorganize compressed page for scrubbing
-* (only way to scrub compressed data)
-*/
-my_bool srv_background_scrub_data_compressed = false;
-
-/* check spaces once per hour */
-UNIV_INTERN uint srv_background_scrub_data_check_interval = (60 * 60);
-
-/* default to scrub spaces that hasn't been scrubbed in a week */
-UNIV_INTERN uint srv_background_scrub_data_interval = (7 * 24 * 60 * 60);
-
-/**
-* statistics for scrubbing by background threads
-*/
-static btr_scrub_stat_t scrub_stat;
-static ib_mutex_t scrub_stat_mutex;
-#ifdef UNIV_PFS_MUTEX
-UNIV_INTERN mysql_pfs_key_t scrub_stat_mutex_key;
-#endif
-
-#ifdef UNIV_DEBUG
-/**
-* srv_scrub_force_testing
-*
-* - force scrubbing using background threads even for uncompressed tables
-* - force pessimistic scrubbing (page split) even if not needed
-* (see test_pessimistic_scrub_pct)
-*/
-my_bool srv_scrub_force_testing = true;
-
-/**
-* Force pessimistic scrubbing in 50% of the cases (UNIV_DEBUG only)
-*/
-static int test_pessimistic_scrub_pct = 50;
-
-#endif
-static uint scrub_compression_level = page_zip_level;
-
-/**************************************************************//**
-Log a scrubbing failure */
-static
-void
-log_scrub_failure(
-/*===============*/
- dict_index_t* index, /*!< in: index */
- btr_scrub_t* scrub_data, /*!< in: data to store statistics on */
- buf_block_t* block, /*!< in: block */
- dberr_t err) /*!< in: error */
-{
- const char* reason = "unknown";
- switch(err) {
- case DB_UNDERFLOW:
- reason = "too few records on page";
- scrub_data->scrub_stat.page_split_failures_underflow++;
- break;
- case DB_INDEX_CORRUPT:
- reason = "unable to find index!";
- scrub_data->scrub_stat.page_split_failures_missing_index++;
- break;
- case DB_OUT_OF_FILE_SPACE:
- reason = "out of filespace";
- scrub_data->scrub_stat.page_split_failures_out_of_filespace++;
- break;
- default:
- ut_ad(0);
- reason = "unknown";
- scrub_data->scrub_stat.page_split_failures_unknown++;
- }
-
- ib::warn() << "Failed to scrub index " << index->name
- << " of table " << index->table->name
- << " page " << block->page.id << ": " << reason;
-}
-
-/****************************************************************
-Lock dict mutexes */
-static
-bool
-btr_scrub_lock_dict_func(ulint space_id, bool lock_to_close_table,
- const char * file, uint line)
-{
- time_t start = time(0);
- time_t last = start;
-
- /* FIXME: this is not the proper way of doing things. The
- dict_sys.mutex should not be held by any thread for longer
- than a few microseconds. It must not be held during I/O,
- for example. So, what is the purpose for this busy-waiting?
- This function should be rewritten as part of MDEV-8139:
- Fix scrubbing tests. */
-
- while (mutex_enter_nowait(&dict_sys.mutex)) {
- /* if we lock to close a table, we wait forever
- * if we don't lock to close a table, we check if space
- * is closing, and then instead give up
- */
- if (lock_to_close_table) {
- } else if (fil_space_t* space = fil_space_acquire(space_id)) {
- bool stopping = space->is_stopping();
- space->release();
- if (stopping) {
- return false;
- }
- } else {
- return false;
- }
-
- os_thread_sleep(250000);
-
- time_t now = time(0);
-
- if (now >= last + 30) {
- fprintf(stderr,
- "WARNING: %s:%u waited %ld seconds for"
- " dict_sys lock, space: " ULINTPF
- " lock_to_close_table: %d\n",
- file, line, long(now - start), space_id,
- lock_to_close_table);
-
- last = now;
- }
- }
-
- ut_ad(mutex_own(&dict_sys.mutex));
- return true;
-}
-
-#define btr_scrub_lock_dict(space, lock_to_close_table) \
- btr_scrub_lock_dict_func(space, lock_to_close_table, __FILE__, __LINE__)
-
-/****************************************************************
-Unlock dict mutexes */
-static
-void
-btr_scrub_unlock_dict()
-{
- dict_mutex_exit_for_mysql();
-}
-
-/****************************************************************
-Release reference to table
-*/
-static
-void
-btr_scrub_table_close(
-/*==================*/
- dict_table_t* table) /*!< in: table */
-{
- bool dict_locked = true;
- bool try_drop = false;
- table->stats_bg_flag &= ~BG_SCRUB_IN_PROGRESS;
- dict_table_close(table, dict_locked, try_drop);
-}
-
-/****************************************************************
-Release reference to table
-*/
-static
-void
-btr_scrub_table_close_for_thread(
- btr_scrub_t *scrub_data)
-{
- if (scrub_data->current_table == NULL) {
- return;
- }
-
- if (fil_space_t* space = fil_space_acquire(scrub_data->space)) {
- /* If tablespace is not marked as stopping perform
- the actual close. */
- if (!space->is_stopping()) {
- mutex_enter(&dict_sys.mutex);
- /* perform the actual closing */
- btr_scrub_table_close(scrub_data->current_table);
- mutex_exit(&dict_sys.mutex);
- }
- space->release();
- }
-
- scrub_data->current_table = NULL;
- scrub_data->current_index = NULL;
-}
-
-/**************************************************************//**
-Check if scrubbing is turned ON or OFF */
-static
-bool
-check_scrub_setting(
-/*=====================*/
- btr_scrub_t* scrub_data) /*!< in: scrub data */
-{
- if (scrub_data->compressed)
- return srv_background_scrub_data_compressed;
- else
- return srv_background_scrub_data_uncompressed;
-}
-
-#define IBUF_INDEX_ID (DICT_IBUF_ID_MIN + IBUF_SPACE_ID)
-
-/**************************************************************//**
-Check if a page needs scrubbing */
-UNIV_INTERN
-int
-btr_page_needs_scrubbing(
-/*=====================*/
- btr_scrub_t* scrub_data, /*!< in: scrub data */
- buf_block_t* block, /*!< in: block to check, latched */
- btr_scrub_page_allocation_status_t allocated) /*!< in: is block known
- to be allocated */
-{
- /**
- * Check if scrubbing has been turned OFF.
- *
- * at start of space, we check if scrubbing is ON or OFF
- * here we only check if scrubbing is turned OFF.
- *
- * Motivation is that it's only valueable to have a full table (space)
- * scrubbed.
- */
- if (!check_scrub_setting(scrub_data)) {
- bool before_value = scrub_data->scrubbing;
- scrub_data->scrubbing = false;
-
- if (before_value == true) {
- /* we toggle scrubbing from on to off */
- return BTR_SCRUB_TURNED_OFF;
- }
- }
-
- if (scrub_data->scrubbing == false) {
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- const page_t* page = buf_block_get_frame(block);
-
- if (allocated == BTR_SCRUB_PAGE_ALLOCATED) {
- if (fil_page_get_type(page) != FIL_PAGE_INDEX) {
- /* this function is called from fil-crypt-threads.
- * these threads iterate all pages of all tablespaces
- * and don't know about fil_page_type.
- * But scrubbing is only needed for index-pages. */
-
- /**
- * NOTE: scrubbing is also needed for UNDO pages,
- * but they are scrubbed at purge-time, since they are
- * uncompressed
- */
-
- /* if encountering page type not needing scrubbing
- release reference to table object */
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- if (!page_has_garbage(page)) {
- /* no garbage (from deleted/shrunken records) */
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- } else if (allocated == BTR_SCRUB_PAGE_FREE ||
- allocated == BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN) {
-
- switch (fil_page_get_type(page)) {
- case FIL_PAGE_INDEX:
- case FIL_PAGE_TYPE_ZBLOB:
- case FIL_PAGE_TYPE_ZBLOB2:
- break;
- default:
- /**
- * If this is a dropped page, we also need to scrub
- * BLOB pages
- */
-
- /* if encountering page type not needing scrubbing
- release reference to table object */
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
- }
-
- if (block->page.id.space() == TRX_SYS_SPACE
- && btr_page_get_index_id(page) == IBUF_INDEX_ID) {
- /* skip ibuf */
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- return BTR_SCRUB_PAGE;
-}
-
-/****************************************************************
-Handle a skipped page
-*/
-UNIV_INTERN
-void
-btr_scrub_skip_page(
-/*==================*/
- btr_scrub_t* scrub_data, /*!< in: data with scrub state */
- int needs_scrubbing) /*!< in: return code from
- btr_page_needs_scrubbing */
-{
- switch(needs_scrubbing) {
- case BTR_SCRUB_SKIP_PAGE:
- /* nothing todo */
- return;
- case BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE:
- btr_scrub_table_close_for_thread(scrub_data);
- return;
- case BTR_SCRUB_TURNED_OFF:
- case BTR_SCRUB_SKIP_PAGE_AND_COMPLETE_SPACE:
- btr_scrub_complete_space(scrub_data);
- return;
- }
-
- /* unknown value. should not happen */
- ut_a(0);
-}
-
-/****************************************************************
-Try to scrub a page.
-return DB_SUCCESS on success or DB_OVERFLOW on failure */
-static
-dberr_t
-btr_optimistic_scrub(
-/*==================*/
- btr_scrub_t* scrub_data, /*!< in: data with scrub state */
- buf_block_t* block, /*!< in: block to scrub */
- dict_index_t* index, /*!< in: index */
- mtr_t* mtr) /*!< in: mtr */
-{
-#ifdef UNIV_DEBUG
- if (srv_scrub_force_testing &&
- page_get_n_recs(buf_block_get_frame(block)) > 2 &&
- (rand() % 100) < test_pessimistic_scrub_pct) {
-
- log_scrub_failure(index, scrub_data, block, DB_OVERFLOW);
- return DB_OVERFLOW;
- }
-#endif
- if (!btr_page_reorganize_block(scrub_compression_level, block,
- index, mtr)) {
- return DB_OVERFLOW;
- }
-
- /* We play safe and reset the free bits */
- if (!dict_index_is_clust(index) &&
- block != NULL) {
- buf_frame_t* frame = buf_block_get_frame(block);
- if (frame &&
- page_is_leaf(frame)) {
-
- ibuf_reset_free_bits(block);
- }
- }
-
- scrub_data->scrub_stat.page_reorganizations++;
-
- return DB_SUCCESS;
-}
-
-/****************************************************************
-Try to scrub a page by splitting it
-return DB_SUCCESS on success
-DB_UNDERFLOW if page has too few records
-DB_OUT_OF_FILE_SPACE if we can't find space for split */
-static
-dberr_t
-btr_pessimistic_scrub(
-/*==================*/
- btr_scrub_t* scrub_data, /*!< in: data with scrub state */
- buf_block_t* block, /*!< in: block to scrub */
- dict_index_t* index, /*!< in: index */
- mtr_t* mtr) /*!< in: mtr */
-{
- page_t* page = buf_block_get_frame(block);
-
- if (page_get_n_recs(page) < 2) {
- /**
- * There is no way we can split a page with < 2 records
- */
- log_scrub_failure(index, scrub_data, block, DB_UNDERFLOW);
- return DB_UNDERFLOW;
- }
-
- /**
- * Splitting page needs new space, allocate it here
- * so that splitting won't fail due to this */
- ulint n_extents = 3;
- ulint n_reserved = 0;
- if (!fsp_reserve_free_extents(&n_reserved, index->table->space,
- n_extents, FSP_NORMAL, mtr)) {
- log_scrub_failure(index, scrub_data, block,
- DB_OUT_OF_FILE_SPACE);
- return DB_OUT_OF_FILE_SPACE;
- }
-
- /* read block variables */
- const uint32_t page_no = block->page.id.page_no();
- const uint32_t left_page_no = btr_page_get_prev(page);
- const uint32_t right_page_no = btr_page_get_next(page);
-
- /**
- * When splitting page, we need X-latches on left/right brothers
- * see e.g btr_cur_latch_leaves
- */
-
- if (left_page_no != FIL_NULL) {
- /**
- * pages needs to be locked left-to-right, release block
- * and re-lock. We still have x-lock on index
- * so this should be safe
- */
- mtr->release_block_at_savepoint(scrub_data->savepoint, block);
-
- btr_block_get(*index, left_page_no, RW_X_LATCH,
- page_is_leaf(page), mtr);
-
- /**
- * Refetch block and re-initialize page
- */
- block = btr_block_get(*index, page_no, RW_X_LATCH,
- page_is_leaf(page), mtr);
-
- page = buf_block_get_frame(block);
-
- /**
- * structure should be unchanged
- */
- ut_a(left_page_no == btr_page_get_prev(page));
- ut_a(right_page_no == btr_page_get_next(page));
- }
-
- if (right_page_no != FIL_NULL) {
- btr_block_get(*index, right_page_no, RW_X_LATCH,
- page_is_leaf(page), mtr);
- }
-
- /* arguments to btr_page_split_and_insert */
- mem_heap_t* heap = NULL;
- dtuple_t* entry = NULL;
- offset_t* offsets = NULL;
- ulint n_ext = 0;
- ulint flags = BTR_MODIFY_TREE;
-
- /**
- * position a cursor on first record on page
- */
- rec_t* rec = page_rec_get_next(page_get_infimum_rec(page));
- btr_cur_t cursor;
- btr_cur_position(index, rec, block, &cursor);
-
- /**
- * call split page with NULL as argument for entry to insert
- */
- if (dict_index_get_page(index) == page_no) {
- /* The page is the root page
- * NOTE: ibuf_reset_free_bits is called inside
- * btr_root_raise_and_insert */
- rec = btr_root_raise_and_insert(
- flags, &cursor, &offsets, &heap, entry, n_ext, mtr);
- } else {
- /* We play safe and reset the free bits
- * NOTE: need to call this prior to btr_page_split_and_insert */
- if (!dict_index_is_clust(index) &&
- block != NULL) {
- buf_frame_t* frame = buf_block_get_frame(block);
- if (frame &&
- page_is_leaf(frame)) {
-
- ibuf_reset_free_bits(block);
- }
- }
-
- rec = btr_page_split_and_insert(
- flags, &cursor, &offsets, &heap, entry, n_ext, mtr);
- }
-
- if (heap) {
- mem_heap_free(heap);
- }
-
- index->table->space->release_free_extents(n_reserved);
- scrub_data->scrub_stat.page_splits++;
- return DB_SUCCESS;
-}
-
-/****************************************************************
-Location index by id for a table
-return index or NULL */
-static
-dict_index_t*
-find_index(
-/*========*/
- dict_table_t* table, /*!< in: table */
- index_id_t index_id) /*!< in: index id */
-{
- if (table != NULL) {
- dict_index_t* index = dict_table_get_first_index(table);
- while (index != NULL) {
- if (index->id == index_id)
- return index;
- index = dict_table_get_next_index(index);
- }
- }
-
- return NULL;
-}
-
-/****************************************************************
-Check if table should be scrubbed
-*/
-static
-bool
-btr_scrub_table_needs_scrubbing(
-/*============================*/
- dict_table_t* table) /*!< in: table */
-{
- if (table == NULL)
- return false;
-
- if (table->stats_bg_flag & BG_STAT_SHOULD_QUIT) {
- return false;
- }
-
- if (table->to_be_dropped) {
- return false;
- }
-
- if (!table->is_readable()) {
- return false;
- }
-
- return true;
-}
-
-/****************************************************************
-Check if index should be scrubbed
-*/
-static
-bool
-btr_scrub_index_needs_scrubbing(
-/*============================*/
- dict_index_t* index) /*!< in: index */
-{
- if (index == NULL)
- return false;
-
- if (dict_index_is_ibuf(index)) {
- return false;
- }
-
- if (dict_index_is_online_ddl(index)) {
- return false;
- }
-
- return true;
-}
-
-/****************************************************************
-Get table and index and store it on scrub_data
-*/
-static
-void
-btr_scrub_get_table_and_index(
-/*=========================*/
- btr_scrub_t* scrub_data, /*!< in/out: scrub data */
- index_id_t index_id) /*!< in: index id */
-{
- /* first check if it's an index to current table */
- scrub_data->current_index = find_index(scrub_data->current_table,
- index_id);
-
- if (scrub_data->current_index != NULL) {
- /* yes it was */
- return;
- }
-
- if (!btr_scrub_lock_dict(scrub_data->space, false)) {
- btr_scrub_complete_space(scrub_data);
- return;
- }
-
- /* close current table (if any) */
- if (scrub_data->current_table != NULL) {
- btr_scrub_table_close(scrub_data->current_table);
- scrub_data->current_table = NULL;
- }
-
- /* open table based on index_id */
- dict_table_t* table = dict_table_open_on_index_id(index_id);
-
- if (table != NULL) {
- /* mark table as being scrubbed */
- table->stats_bg_flag |= BG_SCRUB_IN_PROGRESS;
-
- if (!btr_scrub_table_needs_scrubbing(table)) {
- btr_scrub_table_close(table);
- btr_scrub_unlock_dict();
- return;
- }
- }
-
- btr_scrub_unlock_dict();
- scrub_data->current_table = table;
- scrub_data->current_index = find_index(table, index_id);
-}
-
-/****************************************************************
-Handle free page */
-UNIV_INTERN
-int
-btr_scrub_free_page(
-/*====================*/
- btr_scrub_t* scrub_data, /*!< in/out: scrub data */
- buf_block_t* block, /*!< in: block to scrub */
- mtr_t* mtr) /*!< in: mtr */
-{
- // TODO(jonaso): scrub only what is actually needed
-
- {
- /* note: perform both the memset and setting of FIL_PAGE_TYPE
- * wo/ logging. so that if we crash before page is flushed
- * it will be found by scrubbing thread again
- */
- memset(buf_block_get_frame(block) + PAGE_HEADER, 0,
- srv_page_size - PAGE_HEADER);
-
- mach_write_to_2(buf_block_get_frame(block) + FIL_PAGE_TYPE,
- FIL_PAGE_TYPE_ALLOCATED);
- }
-
- page_create(block, mtr,
- dict_table_is_comp(scrub_data->current_table));
-
- mtr_commit(mtr);
-
- /* page doesn't need further processing => SKIP
- * and close table/index so that we don't keep references too long */
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
-}
-
-/****************************************************************
-Recheck if a page needs scrubbing, and if it does load appropriate
-table and index */
-UNIV_INTERN
-int
-btr_scrub_recheck_page(
-/*====================*/
- btr_scrub_t* scrub_data, /*!< inut: scrub data */
- buf_block_t* block, /*!< in: block */
- btr_scrub_page_allocation_status_t allocated, /*!< in: is block
- allocated or free */
- mtr_t* mtr) /*!< in: mtr */
-{
- /* recheck if page needs scrubbing (knowing allocation status) */
- int needs_scrubbing = btr_page_needs_scrubbing(
- scrub_data, block, allocated);
-
- if (needs_scrubbing != BTR_SCRUB_PAGE) {
- mtr_commit(mtr);
- return needs_scrubbing;
- }
-
- if (allocated == BTR_SCRUB_PAGE_FREE) {
- /** we don't need to load table/index for free pages
- * so scrub directly here */
- /* mtr is committed inside btr_scrub_page_free */
- return btr_scrub_free_page(scrub_data,
- block,
- mtr);
- }
-
- page_t* page = buf_block_get_frame(block);
- index_id_t index_id = btr_page_get_index_id(page);
-
- if (scrub_data->current_index == NULL ||
- scrub_data->current_index->id != index_id) {
-
- /**
- * commit mtr (i.e release locks on block)
- * and try to get table&index potentially loading it
- * from disk
- */
- mtr_commit(mtr);
- btr_scrub_get_table_and_index(scrub_data, index_id);
- } else {
- /* we already have correct index
- * commit mtr so that we can lock index before fetching page
- */
- mtr_commit(mtr);
- }
-
- /* check if table is about to be dropped */
- if (!btr_scrub_table_needs_scrubbing(scrub_data->current_table)) {
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- /* check if index is scrubbable */
- if (!btr_scrub_index_needs_scrubbing(scrub_data->current_index)) {
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- mtr_start(mtr);
- mtr_x_lock_index(scrub_data->current_index, mtr);
- /** set savepoint for X-latch of block */
- scrub_data->savepoint = mtr_set_savepoint(mtr);
- return BTR_SCRUB_PAGE;
-}
-
-/****************************************************************
-Perform actual scrubbing of page */
-UNIV_INTERN
-int
-btr_scrub_page(
-/*============*/
- btr_scrub_t* scrub_data, /*!< in/out: scrub data */
- buf_block_t* block, /*!< in: block */
- btr_scrub_page_allocation_status_t allocated, /*!< in: is block
- allocated or free */
- mtr_t* mtr) /*!< in: mtr */
-{
- /* recheck if page needs scrubbing (knowing allocation status) */
- int needs_scrubbing = BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
-
- if (block) {
- btr_page_needs_scrubbing(scrub_data, block, allocated);
- }
-
- if (!block || needs_scrubbing != BTR_SCRUB_PAGE) {
- mtr_commit(mtr);
- return needs_scrubbing;
- }
-
- if (allocated == BTR_SCRUB_PAGE_FREE) {
- /* mtr is committed inside btr_scrub_page_free */
- return btr_scrub_free_page(scrub_data,
- block,
- mtr);
- }
-
- /* check that table/index still match now that they are loaded */
-
- if (!scrub_data->current_table->space
- || scrub_data->current_table->space_id != scrub_data->space) {
- /* this is truncate table */
- mtr_commit(mtr);
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- if (scrub_data->current_index->table != scrub_data->current_table) {
- /* this is truncate table */
- mtr_commit(mtr);
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- if (scrub_data->current_index->page == FIL_NULL) {
- /* this is truncate table */
- mtr_commit(mtr);
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- buf_frame_t* frame = buf_block_get_frame(block);
-
- if (!frame || btr_page_get_index_id(frame) !=
- scrub_data->current_index->id) {
- /* page has been reallocated to new index */
- mtr_commit(mtr);
- return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE;
- }
-
- /* check if I can scrub (reorganize) page wo/ overflow */
- if (btr_optimistic_scrub(scrub_data,
- block,
- scrub_data->current_index,
- mtr) != DB_SUCCESS) {
-
- /**
- * Can't reorganize page...need to split it
- */
- btr_pessimistic_scrub(scrub_data,
- block,
- scrub_data->current_index,
- mtr);
- }
- mtr_commit(mtr);
-
- return BTR_SCRUB_SKIP_PAGE; // no further action needed
-}
-
-/**************************************************************//**
-Start iterating a space */
-UNIV_INTERN
-bool
-btr_scrub_start_space(
-/*===================*/
- ulint space, /*!< in: space */
- btr_scrub_t* scrub_data) /*!< in/out: scrub data */
-{
- scrub_data->space = space;
- scrub_data->current_table = NULL;
- scrub_data->current_index = NULL;
- if (fil_space_t* s = fil_space_acquire_silent(space)) {
- scrub_data->compressed = s->zip_size();
- s->release();
- } else {
- scrub_data->compressed = 0;
- }
- scrub_data->scrubbing = check_scrub_setting(scrub_data);
- return scrub_data->scrubbing;
-}
-
-/***********************************************************************
-Update global statistics with thread statistics */
-static
-void
-btr_scrub_update_total_stat(btr_scrub_t *scrub_data)
-{
- mutex_enter(&scrub_stat_mutex);
- scrub_stat.page_reorganizations +=
- scrub_data->scrub_stat.page_reorganizations;
- scrub_stat.page_splits +=
- scrub_data->scrub_stat.page_splits;
- scrub_stat.page_split_failures_underflow +=
- scrub_data->scrub_stat.page_split_failures_underflow;
- scrub_stat.page_split_failures_out_of_filespace +=
- scrub_data->scrub_stat.page_split_failures_out_of_filespace;
- scrub_stat.page_split_failures_missing_index +=
- scrub_data->scrub_stat.page_split_failures_missing_index;
- scrub_stat.page_split_failures_unknown +=
- scrub_data->scrub_stat.page_split_failures_unknown;
- mutex_exit(&scrub_stat_mutex);
-
- // clear stat
- memset(&scrub_data->scrub_stat, 0, sizeof(scrub_data->scrub_stat));
-}
-
-/** Complete iterating a space.
-@param[in,out] scrub_data scrub data */
-UNIV_INTERN
-void
-btr_scrub_complete_space(btr_scrub_t* scrub_data)
-{
- ut_ad(scrub_data->scrubbing);
- btr_scrub_table_close_for_thread(scrub_data);
- btr_scrub_update_total_stat(scrub_data);
-}
-
-/*********************************************************************
-Return scrub statistics */
-void
-btr_scrub_total_stat(btr_scrub_stat_t *stat)
-{
- mutex_enter(&scrub_stat_mutex);
- *stat = scrub_stat;
- mutex_exit(&scrub_stat_mutex);
-}
-
-/*********************************************************************
-Init global variables */
-UNIV_INTERN
-void
-btr_scrub_init()
-{
- mutex_create(LATCH_ID_SCRUB_STAT_MUTEX, &scrub_stat_mutex);
-
- memset(&scrub_stat, 0, sizeof(scrub_stat));
-}
-
-/*********************************************************************
-Cleanup globals */
-UNIV_INTERN
-void
-btr_scrub_cleanup()
-{
- mutex_free(&scrub_stat_mutex);
-}
-
diff --git a/storage/innobase/btr/btr0sea.cc b/storage/innobase/btr/btr0sea.cc
index 5522ba54b96..05294568a6e 100644
--- a/storage/innobase/btr/btr0sea.cc
+++ b/storage/innobase/btr/btr0sea.cc
@@ -962,7 +962,8 @@ fail:
}
ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
- ut_ad(!block->page.file_page_was_freed);
+ DBUG_ASSERT(block->page.status != buf_page_t::FREED);
+
buf_page_set_accessed(&block->page);
buf_block_buf_fix_inc(block, __FILE__, __LINE__);
mutex_exit(&block->mutex);
@@ -1313,7 +1314,7 @@ void btr_search_drop_page_hash_when_freed(const page_id_t page_id)
/* If AHI is still valid, page can't be in free state.
AHI is dropped when page is freed. */
- ut_ad(!block->page.file_page_was_freed);
+ DBUG_ASSERT(block->page.status != buf_page_t::FREED);
buf_block_dbg_add_level(block, SYNC_TREE_NODE_FROM_HASH);
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index 6e2c62a1e57..dc3233c4948 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -746,14 +746,13 @@ static void buf_page_check_lsn(bool check_lsn, const byte* read_buf)
{
#ifndef UNIV_INNOCHECKSUM
if (check_lsn && recv_lsn_checks_on) {
- lsn_t current_lsn;
+ const lsn_t current_lsn = log_sys.get_lsn();
const lsn_t page_lsn
= mach_read_from_8(read_buf + FIL_PAGE_LSN);
/* Since we are going to reset the page LSN during the import
phase it makes no sense to spam the log with error messages. */
-
- if (log_peek_lsn(&current_lsn) && current_lsn < page_lsn) {
+ if (current_lsn < page_lsn) {
const ulint space_id = mach_read_from_4(
read_buf + FIL_PAGE_SPACE_ID);
@@ -1356,13 +1355,11 @@ buf_block_init(buf_block_t* block, byte* frame)
block->page.state = BUF_BLOCK_NOT_USED;
block->page.buf_fix_count = 0;
block->page.io_fix = BUF_IO_NONE;
- block->page.init_on_flush = false;
block->page.real_size = 0;
block->page.write_size = 0;
block->modify_clock = 0;
block->page.slot = NULL;
-
- ut_d(block->page.file_page_was_freed = FALSE);
+ block->page.status = buf_page_t::NORMAL;
#ifdef BTR_CUR_HASH_ADAPT
block->index = NULL;
@@ -1436,12 +1433,11 @@ static buf_chunk_t* buf_chunk_init(buf_chunk_t* chunk, ulint mem_size)
#ifdef HAVE_LIBNUMA
if (srv_numa_interleave) {
struct bitmask *numa_mems_allowed = numa_get_mems_allowed();
- int st = mbind(chunk->mem, chunk->mem_size(),
- MPOL_INTERLEAVE,
- numa_mems_allowed->maskp,
- numa_mems_allowed->size,
- MPOL_MF_MOVE);
- if (st != 0) {
+ if (mbind(chunk->mem, chunk->mem_size(),
+ MPOL_INTERLEAVE,
+ numa_mems_allowed->maskp,
+ numa_mems_allowed->size,
+ MPOL_MF_MOVE)) {
ib::warn() << "Failed to set NUMA memory policy of"
" buffer pool page frames to MPOL_INTERLEAVE"
" (error: " << strerror(errno) << ").";
@@ -2430,7 +2426,7 @@ static void buf_pool_resize()
buf_resize_status("Withdrawing blocks to be shrunken.");
time_t withdraw_started = time(NULL);
- ulint message_interval = 60;
+ double message_interval = 60;
ulint retry_interval = 1;
withdraw_retry:
@@ -3212,58 +3208,64 @@ void buf_page_make_young(buf_page_t* bpage)
mutex_exit(&buf_pool->mutex);
}
-#ifdef UNIV_DEBUG
-/** Sets file_page_was_freed TRUE if the page is found in the buffer pool.
-This function should be called when we free a file page and want the
-debug version to check that it is not accessed any more unless
-reallocated.
+/** Mark the page status as FREED for the given tablespace id and
+page number. If the page is not in the buffer pool then ignore it.
+X-lock should be taken on the page before marking the page status
+as FREED. It avoids the concurrent flushing of freed page.
+Currently, this function only marks the page as FREED if it is
+in buffer pool.
@param[in] page_id page id
-@return control block if found in page hash table, otherwise NULL */
-buf_page_t* buf_page_set_file_page_was_freed(const page_id_t page_id)
+@param[in,out] mtr mini-transaction
+@param[in] file file name
+@param[in] line line where called */
+void buf_page_free(const page_id_t page_id,
+ mtr_t *mtr,
+ const char *file,
+ unsigned line)
{
- buf_page_t* bpage;
- rw_lock_t* hash_lock;
-
- bpage = buf_page_hash_get_s_locked(page_id, &hash_lock);
-
- if (bpage) {
- BPageMutex* block_mutex = buf_page_get_mutex(bpage);
- ut_ad(!buf_pool_watch_is_sentinel(bpage));
- mutex_enter(block_mutex);
- rw_lock_s_unlock(hash_lock);
- /* bpage->file_page_was_freed can already hold
- when this code is invoked from dict_drop_index_tree() */
- bpage->file_page_was_freed = TRUE;
- mutex_exit(block_mutex);
- }
+ ut_ad(mtr);
+ ut_ad(mtr->is_active());
+ buf_pool->stat.n_page_gets++;
+ rw_lock_t *hash_lock= buf_page_hash_lock_get(page_id);
+ rw_lock_s_lock(hash_lock);
+
+ /* page_hash can be changed. */
+ hash_lock= buf_page_hash_lock_s_confirm(hash_lock, page_id);
+ buf_block_t *block= reinterpret_cast<buf_block_t*>
+ (buf_page_hash_get_low(page_id));
+
+ if (!block || buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE)
+ {
+ /* FIXME: if block!=NULL, convert to BUF_BLOCK_FILE_PAGE,
+ but avoid buf_zip_decompress() */
+ /* FIXME: If block==NULL, introduce a separate data structure
+ to cover freed page ranges to augment buf_flush_freed_page() */
+ rw_lock_s_unlock(hash_lock);
+ return;
+ }
- return(bpage);
-}
+ block->fix();
+ mutex_enter(&block->mutex);
+ /* Now safe to release page_hash mutex */
+ rw_lock_s_unlock(hash_lock);
+ ut_ad(block->page.buf_fix_count > 0);
-/** Sets file_page_was_freed FALSE if the page is found in the buffer pool.
-This function should be called when we free a file page and want the
-debug version to check that it is not accessed any more unless
-reallocated.
-@param[in] page_id page id
-@return control block if found in page hash table, otherwise NULL */
-buf_page_t* buf_page_reset_file_page_was_freed(const page_id_t page_id)
-{
- buf_page_t* bpage;
- rw_lock_t* hash_lock;
+#ifdef UNIV_DEBUG
+ if (!fsp_is_system_temporary(page_id.space()))
+ {
+ ibool ret= rw_lock_s_lock_nowait(block->debug_latch, file, line);
+ ut_a(ret);
+ }
+#endif /* UNIV_DEBUG */
- bpage = buf_page_hash_get_s_locked(page_id, &hash_lock);
- if (bpage) {
- BPageMutex* block_mutex = buf_page_get_mutex(bpage);
- ut_ad(!buf_pool_watch_is_sentinel(bpage));
- mutex_enter(block_mutex);
- rw_lock_s_unlock(hash_lock);
- bpage->file_page_was_freed = FALSE;
- mutex_exit(block_mutex);
- }
+ mtr_memo_type_t fix_type= MTR_MEMO_PAGE_X_FIX;
+ rw_lock_x_lock_inline(&block->lock, 0, file, line);
+ mtr_memo_push(mtr, block, fix_type);
- return(bpage);
+ block->page.status= buf_page_t::FREED;
+ buf_block_dbg_add_level(block, SYNC_NO_ORDER_CHECK);
+ mutex_exit(&block->mutex);
}
-#endif /* UNIV_DEBUG */
/** Attempts to discard the uncompressed frame of a compressed page.
The caller should not be holding any mutexes when this function is called.
@@ -3383,7 +3385,7 @@ got_block:
rw_lock_s_unlock(hash_lock);
- ut_ad(!bpage->file_page_was_freed);
+ DBUG_ASSERT(bpage->status != buf_page_t::FREED);
buf_page_set_accessed(bpage);
@@ -4283,7 +4285,7 @@ evict_from_pool:
"btr_search_drop_page_hash_when_freed". */
ut_ad(mode == BUF_GET_POSSIBLY_FREED
|| mode == BUF_PEEK_IF_IN_POOL
- || !fix_block->page.file_page_was_freed);
+ || fix_block->page.status != buf_page_t::FREED);
/* Check if this is the first access to the page */
access_time = buf_page_is_accessed(&fix_block->page);
@@ -4473,10 +4475,6 @@ buf_page_optimistic_get(
ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
- ut_d(buf_page_mutex_enter(block));
- ut_ad(!block->page.file_page_was_freed);
- ut_d(buf_page_mutex_exit(block));
-
if (!access_time) {
/* In the case of a first access, try to apply linear
read-ahead */
@@ -4559,10 +4557,6 @@ buf_page_try_get_func(
ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
- ut_d(buf_page_mutex_enter(block));
- ut_d(ut_a(!block->page.file_page_was_freed));
- ut_d(buf_page_mutex_exit(block));
-
buf_block_dbg_add_level(block, SYNC_NO_ORDER_CHECK);
buf_pool->stat.n_page_gets++;
@@ -4589,10 +4583,8 @@ buf_page_init_low(
bpage->real_size = 0;
bpage->slot = NULL;
bpage->ibuf_exist = false;
-
+ bpage->status = buf_page_t::NORMAL;
HASH_INVALIDATE(bpage, hash);
-
- ut_d(bpage->file_page_was_freed = FALSE);
}
/** Inits a page to the buffer buf_pool.
@@ -4845,7 +4837,7 @@ buf_page_init_for_read(
bpage->state = BUF_BLOCK_ZIP_PAGE;
bpage->id = page_id;
- bpage->init_on_flush = false;
+ bpage->status = buf_page_t::NORMAL;
ut_d(bpage->in_page_hash = FALSE);
ut_d(bpage->in_zip_hash = FALSE);
@@ -4937,8 +4929,6 @@ buf_page_create(
if (block
&& buf_page_in_file(&block->page)
&& !buf_pool_watch_is_sentinel(&block->page)) {
- ut_d(block->page.file_page_was_freed = FALSE);
-
/* Page can be found in buf_pool */
mutex_exit(&buf_pool->mutex);
rw_lock_x_unlock(hash_lock);
@@ -4946,8 +4936,13 @@ buf_page_create(
buf_block_free(free_block);
if (!recv_recovery_is_on()) {
- return buf_page_get_with_no_latch(page_id, zip_size,
- mtr);
+ /* FIXME: Remove the redundant lookup and avoid
+ the unnecessary invocation of buf_zip_decompress().
+ We may have to convert buf_page_t to buf_block_t,
+ but we are going to initialize the page. */
+ return buf_page_get_gen(page_id, zip_size, RW_NO_LATCH,
+ block, BUF_GET_POSSIBLY_FREED,
+ __FILE__, __LINE__, mtr);
}
mutex_exit(&recv_sys.mutex);
@@ -6119,24 +6114,29 @@ void buf_stats_get_pool_info(buf_pool_info_t *pool_info)
pool_info->n_ra_pages_evicted = buf_pool->stat.n_ra_pages_evicted;
pool_info->page_made_young_rate =
- (buf_pool->stat.n_pages_made_young
- - buf_pool->old_stat.n_pages_made_young) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_pages_made_young
+ - buf_pool->old_stat.n_pages_made_young)
+ / time_elapsed;
pool_info->page_not_made_young_rate =
- (buf_pool->stat.n_pages_not_made_young
- - buf_pool->old_stat.n_pages_not_made_young) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_pages_not_made_young
+ - buf_pool->old_stat.n_pages_not_made_young)
+ / time_elapsed;
pool_info->pages_read_rate =
- (buf_pool->stat.n_pages_read
- - buf_pool->old_stat.n_pages_read) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_pages_read
+ - buf_pool->old_stat.n_pages_read)
+ / time_elapsed;
pool_info->pages_created_rate =
- (buf_pool->stat.n_pages_created
- - buf_pool->old_stat.n_pages_created) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_pages_created
+ - buf_pool->old_stat.n_pages_created)
+ / time_elapsed;
pool_info->pages_written_rate =
- (buf_pool->stat.n_pages_written
- - buf_pool->old_stat.n_pages_written) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_pages_written
+ - buf_pool->old_stat.n_pages_written)
+ / time_elapsed;
pool_info->n_page_get_delta = buf_pool->stat.n_page_gets
- buf_pool->old_stat.n_page_gets;
@@ -6154,17 +6154,20 @@ void buf_stats_get_pool_info(buf_pool_info_t *pool_info)
- buf_pool->old_stat.n_pages_not_made_young;
}
pool_info->pages_readahead_rnd_rate =
- (buf_pool->stat.n_ra_pages_read_rnd
- - buf_pool->old_stat.n_ra_pages_read_rnd) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_ra_pages_read_rnd
+ - buf_pool->old_stat.n_ra_pages_read_rnd)
+ / time_elapsed;
pool_info->pages_readahead_rate =
- (buf_pool->stat.n_ra_pages_read
- - buf_pool->old_stat.n_ra_pages_read) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_ra_pages_read
+ - buf_pool->old_stat.n_ra_pages_read)
+ / time_elapsed;
pool_info->pages_evicted_rate =
- (buf_pool->stat.n_ra_pages_evicted
- - buf_pool->old_stat.n_ra_pages_evicted) / time_elapsed;
+ static_cast<double>(buf_pool->stat.n_ra_pages_evicted
+ - buf_pool->old_stat.n_ra_pages_evicted)
+ / time_elapsed;
pool_info->unzip_lru_len = UT_LIST_GET_LEN(buf_pool->unzip_LRU);
@@ -6207,8 +6210,10 @@ buf_print_io_instance(
pool_info->lru_len,
pool_info->old_lru_len,
pool_info->flush_list_len,
- (((double) pool_info->flush_list_len) /
- (pool_info->lru_len + pool_info->free_list_len + 1.0)) * 100.0,
+ static_cast<double>(pool_info->flush_list_len)
+ / (static_cast<double>(pool_info->lru_len
+ + pool_info->free_list_len) + 1.0)
+ * 100.0,
srv_max_buf_pool_modified_pct,
pool_info->n_pend_reads,
pool_info->n_pending_flush_lru,
@@ -6233,8 +6238,9 @@ buf_print_io_instance(
pool_info->pages_written_rate);
if (pool_info->n_page_get_delta) {
- double hit_rate = double(pool_info->page_read_delta)
- / pool_info->n_page_get_delta;
+ double hit_rate = static_cast<double>(
+ pool_info->page_read_delta)
+ / static_cast<double>(pool_info->n_page_get_delta);
if (hit_rate > 1) {
hit_rate = 1;
@@ -6245,10 +6251,11 @@ buf_print_io_instance(
" young-making rate " ULINTPF " / 1000 not "
ULINTPF " / 1000\n",
ulint(1000 * (1 - hit_rate)),
- ulint(1000 * double(pool_info->young_making_delta)
- / pool_info->n_page_get_delta),
+ ulint(1000
+ * double(pool_info->young_making_delta)
+ / double(pool_info->n_page_get_delta)),
ulint(1000 * double(pool_info->not_young_making_delta)
- / pool_info->n_page_get_delta));
+ / double(pool_info->n_page_get_delta)));
} else {
fputs("No buffer pool page gets since the last printout\n",
file);
diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc
index a5383f48233..2b3e5528cfc 100644
--- a/storage/innobase/buf/buf0dump.cc
+++ b/storage/innobase/buf/buf0dump.cc
@@ -643,15 +643,10 @@ buf_load()
fil_space_t* space = fil_space_acquire_silent(cur_space_id);
ulint zip_size = space ? space->zip_size() : 0;
- /* JAN: TODO: MySQL 5.7 PSI
-#ifdef HAVE_PSI_STAGE_INTERFACE
- PSI_stage_progress* pfs_stage_progress
+ PSI_stage_progress* pfs_stage_progress __attribute__((unused))
= mysql_set_stage(srv_stage_buffer_pool_load.m_key);
- #endif*/ /* HAVE_PSI_STAGE_INTERFACE */
- /*
mysql_stage_set_work_estimated(pfs_stage_progress, dump_n);
mysql_stage_set_work_completed(pfs_stage_progress, 0);
- */
for (i = 0; i < dump_n && !SHUTTING_DOWN(); i++) {
@@ -701,14 +696,11 @@ buf_load()
"Buffer pool(s) load aborted on request");
/* Premature end, set estimated = completed = i and
end the current stage event. */
- /*
+
mysql_stage_set_work_estimated(pfs_stage_progress, i);
- mysql_stage_set_work_completed(pfs_stage_progress,
- i);
- */
-#ifdef HAVE_PSI_STAGE_INTERFACE
- /* mysql_end_stage(); */
-#endif /* HAVE_PSI_STAGE_INTERFACE */
+ mysql_stage_set_work_completed(pfs_stage_progress, i);
+
+ mysql_end_stage();
return;
}
@@ -749,11 +741,9 @@ buf_load()
}
/* Make sure that estimated = completed when we end. */
- /* mysql_stage_set_work_completed(pfs_stage_progress, dump_n); */
+ mysql_stage_set_work_completed(pfs_stage_progress, dump_n);
/* End the stage progress event. */
-#ifdef HAVE_PSI_STAGE_INTERFACE
- /* mysql_end_stage(); */
-#endif /* HAVE_PSI_STAGE_INTERFACE */
+ mysql_end_stage();
}
/** Abort a currently running buffer pool load. */
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index d74b41b0e8e..c2a9cbcfa16 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -870,8 +870,9 @@ static void buf_tmp_reserve_compression_buf(buf_tmp_buffer_t* slot)
static byte* buf_tmp_page_encrypt(ulint offset, const byte* s, byte* d)
{
/* Calculate the start offset in a page */
- uint srclen= srv_page_size - (FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION +
- FIL_PAGE_FCRC32_CHECKSUM);
+ uint srclen= static_cast<uint>(srv_page_size) -
+ (FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION +
+ FIL_PAGE_FCRC32_CHECKSUM);
const byte* src= s + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION;
byte* dst= d + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION;
@@ -897,6 +898,10 @@ a page is written to disk.
(may be src_frame or an encrypted/compressed copy of it) */
static byte* buf_page_encrypt(fil_space_t* space, buf_page_t* bpage, byte* s)
{
+ if (bpage->status == buf_page_t::FREED) {
+ return s;
+ }
+
ut_ad(space->id == bpage->id.space());
bpage->real_size = srv_page_size;
@@ -1022,6 +1027,57 @@ not_compressed:
return d;
}
+/** The following function deals with freed page during flushing.
+ i) Writing zeros to the file asynchronously if scrubbing is enabled
+ ii) Punch the hole to the file synchoronously if page_compressed is
+ enabled for the tablespace
+This function also resets the IO_FIX to IO_NONE and making the
+page status as NORMAL. It initiates the write to the file only after
+releasing the page from flush list and its associated mutex.
+@param[in,out] bpage freed buffer page
+@param[in] space tablespace object of the freed page */
+static void buf_flush_freed_page(buf_page_t *bpage, fil_space_t *space)
+{
+ ut_ad(buf_page_in_file(bpage));
+ const bool uncompressed= buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE;
+ BPageMutex *block_mutex= uncompressed
+ ? &reinterpret_cast<buf_block_t*>(bpage)->mutex
+ : &buf_pool->zip_mutex;
+
+ mutex_enter(&buf_pool->mutex);
+ mutex_enter(block_mutex);
+
+ buf_page_set_io_fix(bpage, BUF_IO_NONE);
+ bpage->status= buf_page_t::NORMAL;
+ buf_flush_write_complete(bpage, false);
+
+ if (uncompressed)
+ rw_lock_sx_unlock_gen(&reinterpret_cast<buf_block_t*>(bpage)->lock,
+ BUF_IO_WRITE);
+
+ buf_pool->stat.n_pages_written++;
+ mutex_exit(&buf_pool->mutex);
+ const page_id_t page_id(bpage->id);
+ const auto zip_size= bpage->zip_size();
+ mutex_exit(block_mutex);
+
+ const bool punch_hole=
+#if defined(HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE) || defined(_WIN32)
+ space->is_compressed() ||
+#endif
+ false;
+
+ ut_ad(space->id == page_id.space());
+ ut_ad(space->zip_size() == zip_size);
+
+ if (punch_hole || srv_immediate_scrub_data_uncompressed)
+ fil_io(IORequestWrite, punch_hole, page_id, zip_size, 0,
+ zip_size ? zip_size : srv_page_size,
+ const_cast<byte*>(field_ref_zero), nullptr, false, punch_hole);
+
+ space->release_for_io();
+}
+
/********************************************************************//**
Does an asynchronous write of a buffer page. NOTE: when the
doublewrite buffer is used, we must call
@@ -1084,6 +1140,12 @@ buf_flush_write_block_low(
frame = ((buf_block_t*) bpage)->frame;
}
+ /* Skip the encryption and compression for the
+ freed page */
+ if (bpage->status == buf_page_t::FREED) {
+ break;
+ }
+
byte* page = reinterpret_cast<const buf_block_t*>(bpage)->frame;
if (full_crc32) {
@@ -1111,8 +1173,13 @@ buf_flush_write_block_low(
ut_ad(space->atomic_write_supported);
}
- const bool use_doublewrite = !bpage->init_on_flush
- && space->use_doublewrite();
+ if (bpage->status == buf_page_t::FREED) {
+ buf_flush_freed_page(bpage, space);
+ return;
+ }
+
+ const bool use_doublewrite = bpage->status != buf_page_t::INIT_ON_FLUSH
+ && space->use_doublewrite();
if (!use_doublewrite) {
ulint type = IORequest::WRITE;
@@ -1191,17 +1258,14 @@ bool buf_flush_page(buf_page_t* bpage, buf_flush_t flush_type, bool sync)
ut_ad(buf_flush_ready_for_flush(bpage, flush_type));
- bool is_uncompressed;
-
- is_uncompressed = (buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE);
+ bool is_uncompressed = (buf_page_get_state(bpage)
+ == BUF_BLOCK_FILE_PAGE);
ut_ad(is_uncompressed == (block_mutex != &buf_pool->zip_mutex));
- ibool flush;
rw_lock_t* rw_lock;
bool no_fix_count = bpage->buf_fix_count == 0;
if (!is_uncompressed) {
- flush = TRUE;
rw_lock = NULL;
} else if (!(no_fix_count || flush_type == BUF_FLUSH_LIST)
|| (!no_fix_count
@@ -1211,61 +1275,55 @@ bool buf_flush_page(buf_page_t* bpage, buf_flush_t flush_type, bool sync)
/* For table residing in temporary tablespace sync is done
using IO_FIX and so before scheduling for flush ensure that
page is not fixed. */
- flush = FALSE;
+ return false;
} else {
rw_lock = &reinterpret_cast<buf_block_t*>(bpage)->lock;
- if (flush_type != BUF_FLUSH_LIST) {
- flush = rw_lock_sx_lock_nowait(rw_lock, BUF_IO_WRITE);
- } else {
- /* Will SX lock later */
- flush = TRUE;
+ if (flush_type != BUF_FLUSH_LIST
+ && !rw_lock_sx_lock_nowait(rw_lock, BUF_IO_WRITE)) {
+ return false;
}
}
- if (flush) {
-
- /* We are committed to flushing by the time we get here */
+ /* We are committed to flushing by the time we get here */
- buf_page_set_io_fix(bpage, BUF_IO_WRITE);
+ buf_page_set_io_fix(bpage, BUF_IO_WRITE);
- buf_page_set_flush_type(bpage, flush_type);
+ buf_page_set_flush_type(bpage, flush_type);
- if (buf_pool->n_flush[flush_type] == 0) {
- os_event_reset(buf_pool->no_flush[flush_type]);
- }
-
- ++buf_pool->n_flush[flush_type];
- ut_ad(buf_pool->n_flush[flush_type] != 0);
+ if (buf_pool->n_flush[flush_type] == 0) {
+ os_event_reset(buf_pool->no_flush[flush_type]);
+ }
- mutex_exit(block_mutex);
+ ++buf_pool->n_flush[flush_type];
+ ut_ad(buf_pool->n_flush[flush_type] != 0);
- mutex_exit(&buf_pool->mutex);
+ mutex_exit(block_mutex);
- if (flush_type == BUF_FLUSH_LIST
- && is_uncompressed
- && !rw_lock_sx_lock_nowait(rw_lock, BUF_IO_WRITE)) {
+ mutex_exit(&buf_pool->mutex);
- if (!fsp_is_system_temporary(bpage->id.space())) {
- /* avoiding deadlock possibility involves
- doublewrite buffer, should flush it, because
- it might hold the another block->lock. */
- buf_dblwr_flush_buffered_writes();
- } else {
- buf_dblwr_sync_datafiles();
- }
+ if (flush_type == BUF_FLUSH_LIST
+ && is_uncompressed
+ && !rw_lock_sx_lock_nowait(rw_lock, BUF_IO_WRITE)) {
- rw_lock_sx_lock_gen(rw_lock, BUF_IO_WRITE);
+ if (!fsp_is_system_temporary(bpage->id.space())) {
+ /* avoiding deadlock possibility involves
+ doublewrite buffer, should flush it, because
+ it might hold the another block->lock. */
+ buf_dblwr_flush_buffered_writes();
+ } else {
+ buf_dblwr_sync_datafiles();
}
- /* Even though bpage is not protected by any mutex at this
- point, it is safe to access bpage, because it is io_fixed and
- oldest_modification != 0. Thus, it cannot be relocated in the
- buffer pool or removed from flush_list or LRU_list. */
-
- buf_flush_write_block_low(bpage, flush_type, sync);
+ rw_lock_sx_lock_gen(rw_lock, BUF_IO_WRITE);
}
- return(flush);
+ /* Even though bpage is not protected by any mutex at this
+ point, it is safe to access bpage, because it is io_fixed and
+ oldest_modification != 0. Thus, it cannot be relocated in the
+ buffer pool or removed from flush_list or LRU_list. */
+
+ buf_flush_write_block_low(bpage, flush_type, sync);
+ return true;
}
# if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
@@ -2183,9 +2241,9 @@ af_get_pct_for_dirty()
/* 1 + is there to avoid division by zero (in case the buffer
pool (including the flush_list) was emptied while we are
looking at it) */
- double dirty_pct = double(100 * dirty)
- / (1 + UT_LIST_GET_LEN(buf_pool->LRU)
- + UT_LIST_GET_LEN(buf_pool->free));
+ double dirty_pct = 100 * static_cast<double>(dirty)
+ / static_cast<double>(1 + UT_LIST_GET_LEN(buf_pool->LRU)
+ + UT_LIST_GET_LEN(buf_pool->free));
ut_a(srv_max_dirty_pages_pct_lwm
<= srv_max_buf_pool_modified_pct);
@@ -2219,8 +2277,9 @@ af_get_pct_for_lsn(
{
lsn_t max_async_age;
lsn_t lsn_age_factor;
- lsn_t af_lwm = (lsn_t) ((srv_adaptive_flushing_lwm
- * log_get_capacity()) / 100);
+ lsn_t af_lwm = static_cast<lsn_t>(
+ srv_adaptive_flushing_lwm
+ * static_cast<double>(log_get_capacity()) / 100);
if (age < af_lwm) {
/* No adaptive flushing. */
@@ -2242,10 +2301,11 @@ af_get_pct_for_lsn(
lsn_age_factor = (age * 100) / max_async_age;
ut_ad(srv_max_io_capacity >= srv_io_capacity);
- return(static_cast<ulint>(
- ((srv_max_io_capacity / srv_io_capacity)
- * (lsn_age_factor * sqrt((double)lsn_age_factor)))
- / 7.5));
+ return static_cast<ulint>(
+ (static_cast<double>(srv_max_io_capacity / srv_io_capacity
+ * lsn_age_factor)
+ * sqrt(static_cast<double>(lsn_age_factor))
+ / 7.5));
}
/*********************************************************************//**
@@ -2273,14 +2333,7 @@ page_cleaner_flush_pages_recommendation(ulint last_pages_in)
ulint pct_for_lsn = 0;
ulint pct_total = 0;
- cur_lsn = log_get_lsn_nowait();
-
- /* log_get_lsn_nowait tries to get log_sys.mutex with
- mutex_enter_nowait, if this does not succeed function
- returns 0, do not use that value to update stats. */
- if (cur_lsn == 0) {
- return(0);
- }
+ cur_lsn = log_sys.get_lsn();
if (prev_lsn == 0) {
/* First time around. */
@@ -2301,7 +2354,7 @@ page_cleaner_flush_pages_recommendation(ulint last_pages_in)
/* We update our variables every srv_flushing_avg_loops
iterations to smooth out transition in workload. */
if (++n_iterations >= srv_flushing_avg_loops
- || time_elapsed >= srv_flushing_avg_loops) {
+ || time_elapsed >= static_cast<double>(srv_flushing_avg_loops)) {
if (time_elapsed < 1) {
time_elapsed = 1;
@@ -2310,7 +2363,7 @@ page_cleaner_flush_pages_recommendation(ulint last_pages_in)
avg_page_rate = static_cast<ulint>(
((static_cast<double>(sum_pages)
/ time_elapsed)
- + avg_page_rate) / 2);
+ + static_cast<double>(avg_page_rate)) / 2);
/* How much LSN we have generated since last call. */
lsn_rate = static_cast<lsn_t>(
@@ -2431,7 +2484,8 @@ page_cleaner_flush_pages_recommendation(ulint last_pages_in)
pages_for_lsn = std::min<ulint>(
pages_for_lsn, srv_max_io_capacity * 2);
- n_pages = (PCT_IO(pct_total) + avg_page_rate + pages_for_lsn) / 3;
+ n_pages = (ulint(double(srv_io_capacity) * double(pct_total) / 100.0)
+ + avg_page_rate + pages_for_lsn) / 3;
if (n_pages > srv_max_io_capacity) {
n_pages = srv_max_io_capacity;
@@ -2939,7 +2993,7 @@ static os_thread_ret_t DECLARE_THREAD(buf_flush_page_cleaner)(void*)
} else if (ret_sleep == OS_SYNC_TIME_EXCEEDED) {
/* no activity, slept enough */
- buf_flush_lists(PCT_IO(100), LSN_MAX, &n_flushed);
+ buf_flush_lists(srv_io_capacity, LSN_MAX, &n_flushed);
n_flushed_last += n_flushed;
diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc
index 710edb59764..c1cc6ca1096 100644
--- a/storage/innobase/dict/dict0dict.cc
+++ b/storage/innobase/dict/dict0dict.cc
@@ -844,7 +844,7 @@ is_unaccessible:
mutex_exit(&dict_sys.mutex);
{
MDL_request request;
- request.init(MDL_key::TABLE, db_buf, tbl_buf, MDL_SHARED, MDL_EXPLICIT);
+ MDL_REQUEST_INIT(&request,MDL_key::TABLE, db_buf, tbl_buf, MDL_SHARED, MDL_EXPLICIT);
if (trylock
? mdl_context->try_acquire_lock(&request)
: mdl_context->acquire_lock(&request,
@@ -955,15 +955,17 @@ dict_table_open_on_id(table_id_t table_id, bool dict_locked,
/********************************************************************//**
Looks for column n position in the clustered index.
@return position in internal representation of the clustered index */
-ulint
+unsigned
dict_table_get_nth_col_pos(
/*=======================*/
const dict_table_t* table, /*!< in: table */
ulint n, /*!< in: column number */
ulint* prefix_col_pos)
{
- return(dict_index_get_nth_col_pos(dict_table_get_first_index(table),
- n, prefix_col_pos));
+ ulint pos= dict_index_get_nth_col_pos(dict_table_get_first_index(table),
+ n, prefix_col_pos);
+ DBUG_ASSERT(pos <= dict_index_t::MAX_N_FIELDS);
+ return static_cast<unsigned>(pos);
}
/********************************************************************//**
diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc
index 811c9a0dc03..4cd7d3cbf3b 100644
--- a/storage/innobase/dict/dict0mem.cc
+++ b/storage/innobase/dict/dict0mem.cc
@@ -302,7 +302,7 @@ dict_mem_table_add_col(
ulint len) /*!< in: precision */
{
dict_col_t* col;
- ulint i;
+ unsigned i;
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
ut_ad(!heap == !name);
@@ -370,7 +370,6 @@ dict_mem_table_add_v_col(
ulint num_base)
{
dict_v_col_t* v_col;
- ulint i;
ut_ad(table);
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
@@ -378,7 +377,7 @@ dict_mem_table_add_v_col(
ut_ad(prtype & DATA_VIRTUAL);
- i = table->n_v_def++;
+ unsigned i = table->n_v_def++;
table->n_t_def++;
@@ -412,7 +411,8 @@ dict_mem_table_add_v_col(
v_col->base_col = NULL;
}
- v_col->num_base = num_base;
+ v_col->num_base = static_cast<unsigned>(num_base)
+ & dict_index_t::MAX_N_FIELDS;
/* Initialize the index list for virtual columns */
ut_ad(v_col->v_indexes.empty());
@@ -704,8 +704,7 @@ dict_mem_fill_column_struct(
ulint prtype, /*!< in: precise type */
ulint col_len) /*!< in: column length */
{
- ulint mbminlen;
- ulint mbmaxlen;
+ unsigned mbminlen, mbmaxlen;
column->ind = (unsigned int) col_pos;
column->ord_part = 0;
@@ -1202,7 +1201,7 @@ inline void dict_index_t::reconstruct_fields()
}
fields = tfields;
- n_core_null_bytes = UT_BITS_IN_BYTES(n_core_null);
+ n_core_null_bytes = static_cast<byte>(UT_BITS_IN_BYTES(n_core_null));
}
/** Reconstruct dropped or reordered columns.
@@ -1326,7 +1325,7 @@ dict_index_t::vers_history_row(
} else {
ib::error() << "foreign constraints: secondary index is out of "
"sync";
- ut_ad(!"secondary index is out of sync");
+ ut_ad("secondary index is out of sync" == 0);
error = true;
}
mtr.commit();
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc
index bd3f08a8d97..99398dc9f0b 100644
--- a/storage/innobase/fil/fil0crypt.cc
+++ b/storage/innobase/fil/fil0crypt.cc
@@ -37,7 +37,6 @@ Modified Jan Lindström jan.lindstrom@mariadb.com
#include "mtr0mtr.h"
#include "mtr0log.h"
#include "ut0ut.h"
-#include "btr0scrub.h"
#include "fsp0fsp.h"
#include "fil0pagecompress.h"
#include <my_crypt.h>
@@ -79,20 +78,12 @@ UNIV_INTERN uint srv_n_fil_crypt_iops = 100; // 10ms per iop
static uint srv_alloc_time = 3; // allocate iops for 3s at a time
static uint n_fil_crypt_iops_allocated = 0;
-/** Variables for scrubbing */
-extern uint srv_background_scrub_data_interval;
-extern uint srv_background_scrub_data_check_interval;
-
#define DEBUG_KEYROTATION_THROTTLING 0
/** Statistics variables */
static fil_crypt_stat_t crypt_stat;
static ib_mutex_t crypt_stat_mutex;
-/** Is background scrubbing enabled, defined on btr0scrub.cc */
-extern my_bool srv_background_scrub_data_uncompressed;
-extern my_bool srv_background_scrub_data_compressed;
-
/***********************************************************************
Check if a key needs rotation given a key_state
@param[in] crypt_data Encryption information
@@ -1165,9 +1156,6 @@ struct rotate_thread_t {
fil_crypt_stat_t crypt_stat; // statistics
- btr_scrub_t scrub_data; /* thread local data used by btr_scrub-functions
- * when iterating pages of tablespace */
-
/** @return whether this thread should terminate */
bool should_shutdown() const {
switch (srv_shutdown_state) {
@@ -1266,20 +1254,7 @@ fil_crypt_space_needs_rotation(
key_state->key_version,
key_state->rotate_key_age);
- crypt_data->rotate_state.scrubbing.is_active =
- btr_scrub_start_space(space->id, &state->scrub_data);
-
- time_t diff = time(0) - crypt_data->rotate_state.scrubbing.
- last_scrub_completed;
-
- bool need_scrubbing =
- (srv_background_scrub_data_uncompressed ||
- srv_background_scrub_data_compressed) &&
- crypt_data->rotate_state.scrubbing.is_active
- && diff >= 0
- && ulint(diff) >= srv_background_scrub_data_interval;
-
- if (need_key_rotation == false && need_scrubbing == false) {
+ if (need_key_rotation == false) {
break;
}
@@ -1728,69 +1703,6 @@ fil_crypt_get_page_throttle_func(
return block;
}
-
-/***********************************************************************
-Get block and allocation status
-
-note: innodb locks fil_space_latch and then block when allocating page
-but locks block and then fil_space_latch when freeing page.
-
-@param[in,out] state Rotation state
-@param[in] offset Page offset
-@param[in,out] mtr Minitransaction
-@param[out] allocation_status Allocation status
-@param[out] sleeptime_ms Sleep time
-@return block or NULL
-*/
-static
-buf_block_t*
-btr_scrub_get_block_and_allocation_status(
- rotate_thread_t* state,
- ulint offset,
- mtr_t* mtr,
- btr_scrub_page_allocation_status_t *allocation_status,
- ulint* sleeptime_ms)
-{
- mtr_t local_mtr;
- buf_block_t *block = NULL;
- fil_space_t* space = state->space;
-
- ut_ad(space->referenced());
-
- mtr_start(&local_mtr);
-
- *allocation_status = fseg_page_is_free(space, (uint32_t)offset) ?
- BTR_SCRUB_PAGE_FREE :
- BTR_SCRUB_PAGE_ALLOCATED;
-
- if (*allocation_status == BTR_SCRUB_PAGE_FREE) {
- /* this is easy case, we lock fil_space_latch first and
- then block */
- block = fil_crypt_get_page_throttle(state,
- offset, mtr,
- sleeptime_ms);
- mtr_commit(&local_mtr);
- } else {
- /* page is allocated according to xdes */
-
- /* release fil_space_latch *before* fetching block */
- mtr_commit(&local_mtr);
-
- /* NOTE: when we have locked dict_index_get_lock(),
- * it's safe to release fil_space_latch and then fetch block
- * as dict_index_get_lock() is needed to make tree modifications
- * such as free-ing a page
- */
-
- block = fil_crypt_get_page_throttle(state,
- offset, mtr,
- sleeptime_ms);
- }
-
- return block;
-}
-
-
/***********************************************************************
Rotate one page
@param[in,out] key_state Key state
@@ -1829,7 +1741,6 @@ fil_crypt_rotate_page(
offset, &mtr,
&sleeptime_ms)) {
bool modified = false;
- int needs_scrubbing = BTR_SCRUB_SKIP_PAGE;
byte* frame = buf_block_get_frame(block);
const lsn_t block_lsn = mach_read_from_8(FIL_PAGE_LSN + frame);
uint kv = buf_page_get_key_version(frame, space->flags);
@@ -1885,74 +1796,11 @@ fil_crypt_rotate_page(
state->min_key_version_found = kv;
}
}
-
- needs_scrubbing = btr_page_needs_scrubbing(
- &state->scrub_data, block,
- BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN);
}
mtr.commit();
lsn_t end_lsn = mtr.commit_lsn();
- if (needs_scrubbing == BTR_SCRUB_PAGE) {
- mtr.start();
- /*
- * refetch page and allocation status
- */
- btr_scrub_page_allocation_status_t allocated;
-
- block = btr_scrub_get_block_and_allocation_status(
- state, offset, &mtr,
- &allocated,
- &sleeptime_ms);
-
- if (block) {
- mtr.set_named_space(space);
-
- /* get required table/index and index-locks */
- needs_scrubbing = btr_scrub_recheck_page(
- &state->scrub_data, block, allocated, &mtr);
-
- if (needs_scrubbing == BTR_SCRUB_PAGE) {
- /* we need to refetch it once more now that we have
- * index locked */
- block = btr_scrub_get_block_and_allocation_status(
- state, offset, &mtr,
- &allocated,
- &sleeptime_ms);
-
- needs_scrubbing = btr_scrub_page(&state->scrub_data,
- block, allocated,
- &mtr);
- }
-
- /* NOTE: mtr is committed inside btr_scrub_recheck_page()
- * and/or btr_scrub_page. This is to make sure that
- * locks & pages are latched in corrected order,
- * the mtr is in some circumstances restarted.
- * (mtr_commit() + mtr_start())
- */
- }
- }
-
- if (needs_scrubbing != BTR_SCRUB_PAGE) {
- /* if page didn't need scrubbing it might be that cleanups
- are needed. do those outside of any mtr to prevent deadlocks.
-
- the information what kinds of cleanups that are needed are
- encoded inside the needs_scrubbing, but this is opaque to
- this function (except the value BTR_SCRUB_PAGE) */
- btr_scrub_skip_page(&state->scrub_data, needs_scrubbing);
- }
-
- if (needs_scrubbing == BTR_SCRUB_TURNED_OFF) {
- /* if we just detected that scrubbing was turned off
- * update global state to reflect this */
- ut_ad(crypt_data);
- mutex_enter(&crypt_data->mutex);
- crypt_data->rotate_state.scrubbing.is_active = false;
- mutex_exit(&crypt_data->mutex);
- }
if (modified) {
/* if we modified page, we take lsn from mtr */
@@ -2137,31 +1985,14 @@ static void fil_crypt_complete_rotate_space(rotate_thread_t* state)
crypt_data->rotate_state.flushing = true;
crypt_data->min_key_version =
crypt_data->rotate_state.min_key_version_found;
- }
-
- /* inform scrubbing */
- crypt_data->rotate_state.scrubbing.is_active = false;
- mutex_exit(&crypt_data->mutex);
-
- /* all threads must call btr_scrub_complete_space wo/ mutex held */
- if (state->scrub_data.scrubbing) {
- btr_scrub_complete_space(&state->scrub_data);
- if (should_flush) {
- /* only last thread updates last_scrub_completed */
- ut_ad(crypt_data);
- mutex_enter(&crypt_data->mutex);
- crypt_data->rotate_state.scrubbing.
- last_scrub_completed = time(0);
- mutex_exit(&crypt_data->mutex);
- }
- }
-
- if (should_flush) {
+ mutex_exit(&crypt_data->mutex);
fil_crypt_flush_space(state);
mutex_enter(&crypt_data->mutex);
crypt_data->rotate_state.flushing = false;
mutex_exit(&crypt_data->mutex);
+ } else {
+ mutex_exit(&crypt_data->mutex);
}
} else {
mutex_enter(&crypt_data->mutex);
@@ -2194,8 +2025,6 @@ DECLARE_THREAD(fil_crypt_thread)(void*)
key_state_t new_state;
- time_t wait_start = time(0);
-
while (!thr.should_shutdown()) {
/* wait for key state changes
@@ -2213,17 +2042,6 @@ DECLARE_THREAD(fil_crypt_thread)(void*)
* a space*/
break;
}
-
- time_t waited = time(0) - wait_start;
-
- /* Break if we have waited the background scrub
- internal and background scrubbing is enabled */
- if (waited >= 0
- && ulint(waited) >= srv_background_scrub_data_check_interval
- && (srv_background_scrub_data_uncompressed
- || srv_background_scrub_data_compressed)) {
- break;
- }
}
recheck = false;
@@ -2429,10 +2247,7 @@ fil_crypt_set_rotation_iops(
/*********************************************************************
Adjust encrypt tables
@param[in] val New setting for innodb-encrypt-tables */
-UNIV_INTERN
-void
-fil_crypt_set_encrypt_tables(
- uint val)
+void fil_crypt_set_encrypt_tables(ulong val)
{
mutex_enter(&fil_system.mutex);
@@ -2604,45 +2419,6 @@ fil_crypt_total_stat(
mutex_exit(&crypt_stat_mutex);
}
-/*********************************************************************
-Get scrub status for a space (used by information_schema)
-
-@param[in] space Tablespace
-@param[out] status Scrub status */
-UNIV_INTERN
-void
-fil_space_get_scrub_status(
- const fil_space_t* space,
- struct fil_space_scrub_status_t* status)
-{
- memset(status, 0, sizeof(*status));
-
- ut_ad(space->referenced());
- fil_space_crypt_t* crypt_data = space->crypt_data;
-
- status->space = space->id;
-
- if (crypt_data != NULL) {
- status->compressed = FSP_FLAGS_GET_ZIP_SSIZE(space->flags) > 0;
- mutex_enter(&crypt_data->mutex);
- status->last_scrub_completed =
- crypt_data->rotate_state.scrubbing.last_scrub_completed;
- if (crypt_data->rotate_state.active_threads > 0 &&
- crypt_data->rotate_state.scrubbing.is_active) {
- status->scrubbing = true;
- status->current_scrub_started =
- crypt_data->rotate_state.start_time;
- status->current_scrub_active_threads =
- crypt_data->rotate_state.active_threads;
- status->current_scrub_page_number =
- crypt_data->rotate_state.next_offset;
- status->current_scrub_max_page_number =
- crypt_data->rotate_state.max_offset;
- }
-
- mutex_exit(&crypt_data->mutex);
- }
-}
#endif /* UNIV_INNOCHECKSUM */
/**
@@ -2715,6 +2491,6 @@ bool fil_space_verify_crypt_checksum(const byte* page, ulint zip_size)
|| checksum == buf_calc_page_new_checksum(page);
}
- ut_ad(!"unhandled innodb_checksum_algorithm");
+ ut_ad("unhandled innodb_checksum_algorithm" == 0);
return false;
}
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index d9c35afd001..8e029737441 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -1814,23 +1814,19 @@ fil_create_directory_for_tablename(
/** Write a log record about a file operation.
@param type file operation
-@param space_id tablespace identifier
@param first_page_no first page number in the file
@param path file path
@param new_path new file path for type=FILE_RENAME */
-inline void mtr_t::log_file_op(mfile_type_t type,
- ulint space_id, ulint first_page_no,
+inline void mtr_t::log_file_op(mfile_type_t type, ulint space_id,
const char *path, const char *new_path)
{
- ut_ad(first_page_no == 0 || type == FILE_CREATE);
ut_ad((new_path != nullptr) == (type == FILE_RENAME));
ut_ad(!(byte(type) & 15));
/* fil_name_parse() requires that there be at least one path
separator and that the file path end with ".ibd". */
ut_ad(strchr(path, OS_PATH_SEPARATOR) != NULL);
- ut_ad(first_page_no /* trimming an undo tablespace */ ||
- !strcmp(&path[strlen(path) - strlen(DOT_IBD)], DOT_IBD));
+ ut_ad(!strcmp(&path[strlen(path) - strlen(DOT_IBD)], DOT_IBD));
set_modified();
if (m_log_mode != MTR_LOG_ALL)
@@ -1841,10 +1837,10 @@ inline void mtr_t::log_file_op(mfile_type_t type,
const size_t new_len= type == FILE_RENAME ? 1 + strlen(new_path) : 0;
ut_ad(len > 0);
byte *const log_ptr= m_log.open(1 + 3/*length*/ + 5/*space_id*/ +
- 5/*first_page_no*/);
+ 1/*page_no=0*/);
byte *end= log_ptr + 1;
end= mlog_encode_varint(end, space_id);
- end= mlog_encode_varint(end, first_page_no);
+ *end++= 0;
if (UNIV_LIKELY(end + len + new_len >= &log_ptr[16]))
{
*log_ptr= type;
@@ -1855,7 +1851,7 @@ inline void mtr_t::log_file_op(mfile_type_t type,
total_len++;
end= mlog_encode_varint(log_ptr + 1, total_len);
end= mlog_encode_varint(end, space_id);
- end= mlog_encode_varint(end, first_page_no);
+ *end++= 0;
}
else
{
@@ -1877,7 +1873,6 @@ inline void mtr_t::log_file_op(mfile_type_t type,
/** Write redo log for renaming a file.
@param[in] space_id tablespace id
-@param[in] first_page_no first page number in the file
@param[in] old_name tablespace file name
@param[in] new_name tablespace file name after renaming
@param[in,out] mtr mini-transaction */
@@ -1885,13 +1880,12 @@ static
void
fil_name_write_rename_low(
ulint space_id,
- ulint first_page_no,
const char* old_name,
const char* new_name,
mtr_t* mtr)
{
ut_ad(!is_predefined_tablespace(space_id));
- mtr->log_file_op(FILE_RENAME, space_id, first_page_no, old_name, new_name);
+ mtr->log_file_op(FILE_RENAME, space_id, old_name, new_name);
}
/** Write redo log for renaming a file.
@@ -1906,46 +1900,28 @@ fil_name_write_rename(
{
mtr_t mtr;
mtr.start();
- fil_name_write_rename_low(space_id, 0, old_name, new_name, &mtr);
+ fil_name_write_rename_low(space_id, old_name, new_name, &mtr);
mtr.commit();
log_write_up_to(mtr.commit_lsn(), true);
}
/** Write FILE_MODIFY for a file.
@param[in] space_id tablespace id
-@param[in] first_page_no first page number in the file
@param[in] name tablespace file name
@param[in,out] mtr mini-transaction */
static
void
fil_name_write(
ulint space_id,
- ulint first_page_no,
const char* name,
mtr_t* mtr)
{
ut_ad(!is_predefined_tablespace(space_id));
- mtr->log_file_op(FILE_MODIFY, space_id, first_page_no, name);
-}
-/** Write FILE_MODIFY for a file.
-@param[in] space tablespace
-@param[in] first_page_no first page number in the file
-@param[in] file tablespace file
-@param[in,out] mtr mini-transaction */
-static
-void
-fil_name_write(
- const fil_space_t* space,
- ulint first_page_no,
- const fil_node_t* file,
- mtr_t* mtr)
-{
- fil_name_write(space->id, first_page_no, file->name, mtr);
+ mtr->log_file_op(FILE_MODIFY, space_id, name);
}
/** Replay a file rename operation if possible.
@param[in] space_id tablespace identifier
-@param[in] first_page_no first page number in the file
@param[in] name old file name
@param[in] new_name new file name
@return whether the operation was successfully applied
@@ -1954,12 +1930,9 @@ name was successfully renamed to new_name) */
bool
fil_op_replay_rename(
ulint space_id,
- ulint first_page_no,
const char* name,
const char* new_name)
{
- ut_ad(first_page_no == 0);
-
/* In order to replay the rename, the following must hold:
* The new name is not already used.
* A tablespace exists with the old name.
@@ -2341,7 +2314,7 @@ fil_delete_tablespace(
mtr_t mtr;
mtr.start();
- mtr.log_file_op(FILE_DELETE, id, 0, path);
+ mtr.log_file_op(FILE_DELETE, id, path);
mtr.commit();
/* Even if we got killed shortly after deleting the
tablespace file, the record must have already been
@@ -2420,17 +2393,6 @@ fil_space_t* fil_truncate_prepare(ulint space_id)
return space;
}
-/** Write log about an undo tablespace truncate operation. */
-void fil_truncate_log(fil_space_t* space, ulint size, mtr_t* mtr)
-{
- /* Write a record with the new size, so that recovery and
- backup will ignore any preceding redo log records for writing
- pages that are after the new end of the tablespace. */
- ut_ad(UT_LIST_GET_LEN(space->chain) == 1);
- const fil_node_t *file= UT_LIST_GET_FIRST(space->chain);
- mtr->log_file_op(FILE_CREATE, space->id, size, file->name);
-}
-
/*******************************************************************//**
Allocates and builds a file name from a path, a table or tablespace name
and a suffix. The string must be freed by caller with ut_free().
@@ -2921,7 +2883,7 @@ err_exit:
false, true);
mtr_t mtr;
mtr.start();
- mtr.log_file_op(FILE_CREATE, space_id, 0, node->name);
+ mtr.log_file_op(FILE_CREATE, space_id, node->name);
mtr.commit();
node->find_metadata(file);
@@ -3930,6 +3892,8 @@ inline void IORequest::set_fil_node(fil_node_t* node)
@param[in] message message for aio handler if non-sync aio
used, else ignored
@param[in] ignore whether to ignore out-of-bounds page_id
+@param[in] punch_hole punch the hole to the file for page_compressed
+ tablespace
@return DB_SUCCESS, or DB_TABLESPACE_DELETED
if we are trying to do i/o on a tablespace which does not exist */
dberr_t
@@ -3942,7 +3906,8 @@ fil_io(
ulint len,
void* buf,
void* message,
- bool ignore)
+ bool ignore,
+ bool punch_hole)
{
os_offset_t offset;
IORequest req_type(type);
@@ -4121,13 +4086,20 @@ fil_io(
|| !fil_is_user_tablespace_id(page_id.space())
|| offset == page_id.page_no() * zip_size);
- /* Queue the aio request */
- dberr_t err = os_aio(
- req_type,
- mode, name, node->handle, buf, offset, len,
- space->purpose != FIL_TYPE_TEMPORARY
- && srv_read_only_mode,
- node, message);
+ dberr_t err = DB_SUCCESS;
+
+ if (punch_hole) {
+ /* Punch the hole to the file */
+ err = os_file_punch_hole(node->handle, offset, len);
+ } else {
+ /* Queue the aio request */
+ err = os_aio(
+ req_type,
+ mode, name, node->handle, buf, offset, len,
+ space->purpose != FIL_TYPE_TEMPORARY
+ && srv_read_only_mode,
+ node, message);
+ }
/* We an try to recover the page from the double write buffer if
the decompression fails or the page is corrupt. */
@@ -4192,8 +4164,8 @@ void fil_aio_callback(os_aio_userdata_t *data)
}
ulint offset = bpage->id.page_no();
- if (dblwr && bpage->init_on_flush) {
- bpage->init_on_flush = false;
+ if (dblwr && bpage->status == buf_page_t::INIT_ON_FLUSH) {
+ bpage->status = buf_page_t::NORMAL;
dblwr = false;
}
dberr_t err = buf_page_io_complete(bpage, dblwr);
@@ -4455,80 +4427,6 @@ fil_delete_file(
}
}
-/** Generate redo log for swapping two .ibd files
-@param[in] old_table old table
-@param[in] new_table new table
-@param[in] tmp_name temporary table name
-@param[in,out] mtr mini-transaction
-@return innodb error code */
-dberr_t
-fil_mtr_rename_log(
- const dict_table_t* old_table,
- const dict_table_t* new_table,
- const char* tmp_name,
- mtr_t* mtr)
-{
- ut_ad(old_table->space != fil_system.temp_space);
- ut_ad(new_table->space != fil_system.temp_space);
- ut_ad(old_table->space->id == old_table->space_id);
- ut_ad(new_table->space->id == new_table->space_id);
-
- /* If neither table is file-per-table,
- there will be no renaming of files. */
- if (!old_table->space_id && !new_table->space_id) {
- return(DB_SUCCESS);
- }
-
- const bool has_data_dir = DICT_TF_HAS_DATA_DIR(old_table->flags);
-
- if (old_table->space_id) {
- char* tmp_path = fil_make_filepath(
- has_data_dir ? old_table->data_dir_path : NULL,
- tmp_name, IBD, has_data_dir);
- if (tmp_path == NULL) {
- return(DB_OUT_OF_MEMORY);
- }
-
- const char* old_path = old_table->space->chain.start->name;
- /* Temp filepath must not exist. */
- dberr_t err = fil_rename_tablespace_check(
- old_path, tmp_path, !old_table->space);
- if (err != DB_SUCCESS) {
- ut_free(tmp_path);
- return(err);
- }
-
- fil_name_write_rename_low(
- old_table->space_id, 0, old_path, tmp_path, mtr);
-
- ut_free(tmp_path);
- }
-
- if (new_table->space_id) {
- const char* new_path = new_table->space->chain.start->name;
- char* old_path = fil_make_filepath(
- has_data_dir ? old_table->data_dir_path : NULL,
- old_table->name.m_name, IBD, has_data_dir);
-
- /* Destination filepath must not exist unless this ALTER
- TABLE starts and ends with a file_per-table tablespace. */
- if (!old_table->space_id) {
- dberr_t err = fil_rename_tablespace_check(
- new_path, old_path, !new_table->space);
- if (err != DB_SUCCESS) {
- ut_free(old_path);
- return(err);
- }
- }
-
- fil_name_write_rename_low(
- new_table->space_id, 0, new_path, old_path, mtr);
- ut_free(old_path);
- }
-
- return DB_SUCCESS;
-}
-
#ifdef UNIV_DEBUG
/** Check that a tablespace is valid for mtr_commit().
@param[in] space persistent tablespace that has been changed */
@@ -4562,7 +4460,7 @@ fil_names_write(
mtr_t* mtr)
{
ut_ad(UT_LIST_GET_LEN(space->chain) == 1);
- fil_name_write(space, 0, UT_LIST_GET_FIRST(space->chain), mtr);
+ fil_name_write(space->id, UT_LIST_GET_FIRST(space->chain)->name, mtr);
}
/** Note that a non-predefined persistent tablespace has been modified
@@ -4574,12 +4472,12 @@ fil_names_dirty(
{
ut_ad(log_mutex_own());
ut_ad(recv_recovery_is_on());
- ut_ad(log_sys.lsn != 0);
+ ut_ad(log_sys.get_lsn() != 0);
ut_ad(space->max_lsn == 0);
ut_d(fil_space_validate_for_mtr_commit(space));
UT_LIST_ADD_LAST(fil_system.named_spaces, space);
- space->max_lsn = log_sys.lsn;
+ space->max_lsn = log_sys.get_lsn();
}
/** Write FILE_MODIFY records when a non-predefined persistent
@@ -4590,7 +4488,7 @@ void fil_names_dirty_and_write(fil_space_t* space)
{
ut_ad(log_mutex_own());
ut_d(fil_space_validate_for_mtr_commit(space));
- ut_ad(space->max_lsn == log_sys.lsn);
+ ut_ad(space->max_lsn == log_sys.get_lsn());
UT_LIST_ADD_LAST(fil_system.named_spaces, space);
mtr_t mtr;
@@ -4602,7 +4500,7 @@ void fil_names_dirty_and_write(fil_space_t* space)
char bogus_name[] = "./test/bogus file.ibd";
os_normalize_path(bogus_name);
fil_name_write(
- SRV_SPACE_ID_UPPER_BOUND, 0,
+ SRV_SPACE_ID_UPPER_BOUND,
bogus_name, &mtr);
});
@@ -4632,11 +4530,6 @@ fil_names_clear(
ut_ad(log_mutex_own());
ut_ad(lsn);
- if (log_sys.append_on_checkpoint) {
- mtr_write_log(log_sys.append_on_checkpoint);
- do_write = true;
- }
-
mtr.start();
for (fil_space_t* space = UT_LIST_GET_FIRST(fil_system.named_spaces);
diff --git a/storage/innobase/fil/fil0pagecompress.cc b/storage/innobase/fil/fil0pagecompress.cc
index e6f23c852dc..bea8877215a 100644
--- a/storage/innobase/fil/fil0pagecompress.cc
+++ b/storage/innobase/fil/fil0pagecompress.cc
@@ -86,13 +86,13 @@ static ulint fil_page_compress_low(
byte* out_buf,
ulint header_len,
ulint comp_algo,
- ulint comp_level)
+ unsigned comp_level)
{
ulint write_size = srv_page_size - header_len;
switch (comp_algo) {
default:
- ut_ad(!"unknown compression method");
+ ut_ad("unknown compression method" == 0);
/* fall through */
case PAGE_UNCOMPRESSED:
return 0;
@@ -211,7 +211,8 @@ static ulint fil_page_compress_for_full_crc32(
ulint write_size = fil_page_compress_low(
buf, out_buf, header_len,
- fil_space_t::get_compression_algo(flags), comp_level);
+ fil_space_t::get_compression_algo(flags),
+ static_cast<unsigned>(comp_level));
if (write_size == 0) {
fail:
@@ -459,7 +460,9 @@ static bool fil_page_decompress_low(
return LZ4_decompress_safe(
reinterpret_cast<const char*>(buf) + header_len,
reinterpret_cast<char*>(tmp_buf),
- actual_size, srv_page_size) == int(srv_page_size);
+ static_cast<int>(actual_size),
+ static_cast<int>(srv_page_size)) ==
+ static_cast<int>(srv_page_size);
#endif /* HAVE_LZ4 */
#ifdef HAVE_LZO
case PAGE_LZO_ALGORITHM:
@@ -488,12 +491,12 @@ static bool fil_page_decompress_low(
#ifdef HAVE_BZIP2
case PAGE_BZIP2_ALGORITHM:
{
- unsigned int dst_pos = srv_page_size;
+ uint dst_pos = static_cast<uint>(srv_page_size);
return BZ_OK == BZ2_bzBuffToBuffDecompress(
reinterpret_cast<char*>(tmp_buf),
&dst_pos,
reinterpret_cast<char*>(buf) + header_len,
- actual_size, 1, 0)
+ static_cast<uint>(actual_size), 1, 0)
&& dst_pos == srv_page_size;
}
#endif /* HAVE_BZIP2 */
diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc
index 6eefabdfe52..f9fdc4f3af3 100644
--- a/storage/innobase/fsp/fsp0fsp.cc
+++ b/storage/innobase/fsp/fsp0fsp.cc
@@ -160,8 +160,8 @@ inline void xdes_set_free(const buf_block_t &block, xdes_t *descr,
ut_ad(!(~*b & 0xaa));
/* Clear or set XDES_FREE_BIT. */
byte val= free
- ? *b | 1 << (index & 7)
- : *b & ~(1 << (index & 7));
+ ? static_cast<byte>(*b | 1 << (index & 7))
+ : static_cast<byte>(*b & ~(1 << (index & 7)));
mtr->write<1>(block, b, val);
}
@@ -520,7 +520,7 @@ void fil_space_t::modify_check(const mtr_t& mtr) const
return;
}
- ut_ad(!"invalid log mode");
+ ut_ad("invalid log mode" == 0);
}
#endif
@@ -554,8 +554,10 @@ void fsp_header_init(fil_space_t* space, ulint size, mtr_t* mtr)
const ulint zip_size = space->zip_size();
mtr_x_lock_space(space, mtr);
+
+ const auto savepoint = mtr->get_savepoint();
buf_block_t* block = buf_page_create(page_id, zip_size, mtr);
- buf_page_get(page_id, zip_size, RW_SX_LATCH, mtr);
+ mtr->sx_latch_at_savepoint(savepoint, block);
buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
space->size_in_header = size;
@@ -873,16 +875,12 @@ fsp_fill_free_list(
pages should be ignored. */
if (i > 0) {
- const page_id_t page_id(space->id, i);
-
- block = buf_page_create(
- page_id, zip_size, mtr);
-
- buf_page_get(
- page_id, zip_size, RW_SX_LATCH, mtr);
+ const auto savepoint = mtr->get_savepoint();
+ block= buf_page_create(page_id_t(space->id, i),
+ zip_size, mtr);
+ mtr->sx_latch_at_savepoint(savepoint, block);
buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
-
fsp_init_file_page(space, block, mtr);
mtr->write<2>(*block,
FIL_PAGE_TYPE + block->frame,
@@ -900,17 +898,11 @@ fsp_fill_free_list(
ibuf_mtr.start();
ibuf_mtr.set_named_space(space);
- const page_id_t page_id(
- space->id,
- i + FSP_IBUF_BITMAP_OFFSET);
-
block = buf_page_create(
- page_id, zip_size, &ibuf_mtr);
-
- buf_page_get(
- page_id, zip_size, RW_SX_LATCH,
- &ibuf_mtr);
-
+ page_id_t(space->id,
+ i + FSP_IBUF_BITMAP_OFFSET),
+ zip_size, &ibuf_mtr);
+ ibuf_mtr.sx_latch_at_savepoint(0, block);
buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
fsp_init_file_page(space, block, &ibuf_mtr);
@@ -1060,8 +1052,7 @@ fsp_alloc_from_free_frag(buf_block_t *header, buf_block_t *xdes, xdes_t *descr,
@param[in,out] space tablespace
@param[in] offset page number of the allocated page
@param[in] rw_latch RW_SX_LATCH, RW_X_LATCH
-@param[in,out] mtr mini-transaction of the allocation
-@param[in,out] init_mtr mini-transaction for initializing the page
+@param[in,out] mtr mini-transaction
@return block, initialized */
static
buf_block_t*
@@ -1069,13 +1060,13 @@ fsp_page_create(
fil_space_t* space,
page_no_t offset,
rw_lock_type_t rw_latch,
- mtr_t* mtr,
- mtr_t* init_mtr)
+ mtr_t* mtr)
{
buf_block_t* block = buf_page_create(page_id_t(space->id, offset),
- space->zip_size(), init_mtr);
+ space->zip_size(), mtr);
- /* Mimic buf_page_get(), but avoid the buf_pool->page_hash lookup. */
+ /* The latch may already have been acquired, so we cannot invoke
+ mtr_t::x_latch_at_savepoint() or mtr_t::sx_latch_at_savepoint(). */
mtr_memo_type_t memo;
if (rw_latch == RW_X_LATCH) {
@@ -1087,9 +1078,9 @@ fsp_page_create(
memo = MTR_MEMO_PAGE_SX_FIX;
}
- mtr_memo_push(init_mtr, block, memo);
+ mtr_memo_push(mtr, block, memo);
buf_block_buf_fix_inc(block, __FILE__, __LINE__);
- fsp_init_file_page(space, block, init_mtr);
+ fsp_init_file_page(space, block, mtr);
return(block);
}
@@ -1202,7 +1193,7 @@ fsp_alloc_free_page(
}
fsp_alloc_from_free_frag(block, xdes, descr, free, mtr);
- return fsp_page_create(space, page_no, rw_latch, mtr, init_mtr);
+ return fsp_page_create(space, page_no, rw_latch, init_mtr);
}
/** Frees a single page of a space.
@@ -2233,7 +2224,7 @@ got_hinted_page:
xdes, mtr);
}
- return fsp_page_create(space, ret_page, rw_latch, mtr, init_mtr);
+ return fsp_page_create(space, ret_page, rw_latch, init_mtr);
}
/**********************************************************************//**
@@ -2642,7 +2633,7 @@ fseg_free_page_func(
fseg_free_page_low(seg_inode, iblock, space, offset, ahi, mtr);
- ut_d(buf_page_set_file_page_was_freed(page_id_t(space->id, offset)));
+ buf_page_free(page_id_t(space->id, offset), mtr, __FILE__, __LINE__);
DBUG_VOID_RETURN;
}
@@ -2747,13 +2738,13 @@ fseg_free_extent(
fsp_free_extent(space, page, mtr);
-#ifdef UNIV_DEBUG
for (ulint i = 0; i < FSP_EXTENT_SIZE; i++) {
-
- buf_page_set_file_page_was_freed(
- page_id_t(space->id, first_page_in_extent + i));
+ if (!xdes_is_free(descr, i)) {
+ buf_page_free(
+ page_id_t(space->id, first_page_in_extent + i),
+ mtr, __FILE__, __LINE__);
+ }
}
-#endif /* UNIV_DEBUG */
}
#ifndef BTR_CUR_HASH_ADAPT
diff --git a/storage/innobase/fsp/fsp0sysspace.cc b/storage/innobase/fsp/fsp0sysspace.cc
index 22da0f62391..f0dea8ebde2 100644
--- a/storage/innobase/fsp/fsp0sysspace.cc
+++ b/storage/innobase/fsp/fsp0sysspace.cc
@@ -912,6 +912,8 @@ SysTablespace::open_or_create(
if (!space) {
return DB_ERROR;
}
+ ut_ad(!space->is_compressed());
+ ut_ad(space->full_crc32());
} else {
ut_ad(!fil_system.sys_space);
ut_ad(space_id() == TRX_SYS_SPACE);
diff --git a/storage/innobase/fts/fts0ast.cc b/storage/innobase/fts/fts0ast.cc
index e22613a265b..a2834f5e7e5 100644
--- a/storage/innobase/fts/fts0ast.cc
+++ b/storage/innobase/fts/fts0ast.cc
@@ -24,10 +24,10 @@ Full Text Search parser helper file.
Created 2007/3/16 Sunny Bains.
***********************************************************************/
+#include "row0sel.h"
#include "fts0ast.h"
#include "fts0pars.h"
#include "fts0fts.h"
-#include "row0sel.h"
/* The FTS ast visit pass. */
enum fts_ast_visit_pass_t {
diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc
index ddab1deaa26..a27499822b7 100644
--- a/storage/innobase/fts/fts0fts.cc
+++ b/storage/innobase/fts/fts0fts.cc
@@ -1280,7 +1280,7 @@ fts_cache_node_add_positions(
} else if (new_size < 48) {
new_size = 48;
} else {
- new_size = (ulint)(1.2 * new_size);
+ new_size = new_size * 6 / 5;
}
ilist = static_cast<byte*>(ut_malloc_nokey(new_size));
@@ -4176,7 +4176,8 @@ fts_sync_commit(
<< ": SYNC time: "
<< (time(NULL) - sync->start_time)
<< " secs: elapsed "
- << (double) n_nodes / elapsed_time
+ << static_cast<double>(n_nodes)
+ / static_cast<double>(elapsed_time)
<< " ins/sec";
}
@@ -5268,7 +5269,9 @@ fts_update_doc_id(
clust_index = dict_table_get_first_index(table);
- ufield->field_no = dict_col_get_clust_pos(col, clust_index);
+ ufield->field_no = static_cast<unsigned>(
+ dict_col_get_clust_pos(col, clust_index))
+ & dict_index_t::MAX_N_FIELDS;
dict_col_copy_type(col, dfield_get_type(&ufield->new_val));
/* It is possible we update record that has
diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc
index f64e146c030..afd2e894017 100644
--- a/storage/innobase/fts/fts0que.cc
+++ b/storage/innobase/fts/fts0que.cc
@@ -3497,8 +3497,9 @@ fts_query_calculate_idf(
word_freq->idf = log10(1.0001);
} else {
word_freq->idf = log10(
- total_docs
- / (double) word_freq->doc_count);
+ static_cast<double>(total_docs)
+ / static_cast<double>(
+ word_freq->doc_count));
}
}
diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc
index a4dfb9fa453..06f335efbd4 100644
--- a/storage/innobase/gis/gis0rtree.cc
+++ b/storage/innobase/gis/gis0rtree.cc
@@ -1850,5 +1850,6 @@ err_exit:
}
area /= n_recs;
- return ha_rows(dict_table_get_n_rows(index->table) * area);
+ return ha_rows(static_cast<double>(dict_table_get_n_rows(index->table))
+ * area);
}
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index a36cc87a201..d054657ccb4 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -213,14 +213,8 @@ static char* innodb_version_str = (char*) INNODB_VERSION_STR;
extern uint srv_fil_crypt_rotate_key_age;
extern uint srv_n_fil_crypt_iops;
-extern my_bool srv_immediate_scrub_data_uncompressed;
-extern my_bool srv_background_scrub_data_uncompressed;
-extern my_bool srv_background_scrub_data_compressed;
-extern uint srv_background_scrub_data_interval;
-extern uint srv_background_scrub_data_check_interval;
#ifdef UNIV_DEBUG
my_bool innodb_evict_tables_on_commit_debug;
-extern my_bool srv_scrub_force_testing;
#endif
/** Note we cannot use rec_format_enum because we do not allow
@@ -1081,23 +1075,6 @@ static SHOW_VAR innodb_status_variables[]= {
{"encryption_n_temp_blocks_decrypted",
&export_vars.innodb_n_temp_blocks_decrypted, SHOW_LONGLONG},
- /* scrubing */
- {"scrub_background_page_reorganizations",
- &export_vars.innodb_scrub_page_reorganizations, SHOW_SIZE_T},
- {"scrub_background_page_splits", &export_vars.innodb_scrub_page_splits,
- SHOW_SIZE_T},
- {"scrub_background_page_split_failures_underflow",
- &export_vars.innodb_scrub_page_split_failures_underflow, SHOW_SIZE_T},
- {"scrub_background_page_split_failures_out_of_filespace",
- &export_vars.innodb_scrub_page_split_failures_out_of_filespace,SHOW_SIZE_T},
- {"scrub_background_page_split_failures_missing_index",
- &export_vars.innodb_scrub_page_split_failures_missing_index, SHOW_SIZE_T},
- {"scrub_background_page_split_failures_unknown",
- &export_vars.innodb_scrub_page_split_failures_unknown, SHOW_SIZE_T},
- {"scrub_log", &export_vars.innodb_scrub_log, SHOW_LONGLONG},
- {"encryption_num_key_requests", &export_vars.innodb_encryption_key_requests,
- SHOW_LONGLONG},
-
{NullS, NullS, SHOW_LONG}
};
@@ -2007,8 +1984,8 @@ void
innobase_get_cset_width(
/*====================*/
ulint cset, /*!< in: MySQL charset-collation code */
- ulint* mbminlen, /*!< out: minimum length of a char (in bytes) */
- ulint* mbmaxlen) /*!< out: maximum length of a char (in bytes) */
+ unsigned*mbminlen, /*!< out: minimum length of a char (in bytes) */
+ unsigned*mbmaxlen) /*!< out: maximum length of a char (in bytes) */
{
CHARSET_INFO* cs;
ut_ad(cset <= MAX_CHAR_COLL_NUM);
@@ -2809,19 +2786,15 @@ innobase_register_trx(
THD* thd, /* in: MySQL thd (connection) object */
trx_t* trx) /* in: transaction to register */
{
- /* JAN: TODO: MySQL 5.7 PSI
- const ulonglong trx_id = static_cast<const ulonglong>(
+ const ulonglong trx_id = static_cast<ulonglong>(
trx_get_id_for_print(trx));
- trans_register_ha(thd, FALSE, hton, &trx_id);
- */
- trans_register_ha(thd, FALSE, hton);
+ trans_register_ha(thd, FALSE, hton, trx_id);
if (!trx_is_registered_for_2pc(trx)
&& thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) {
- //trans_register_ha(thd, TRUE, hton, &trx_id);
- trans_register_ha(thd, TRUE, hton);
+ trans_register_ha(thd, TRUE, hton, trx_id);
}
trx_register_for_2pc(trx);
@@ -3432,7 +3405,16 @@ static const char* innodb_log_compressed_pages_msg
static my_bool innodb_log_optimize_ddl;
static const char* innodb_log_optimize_ddl_msg
= "The parameter innodb_log_optimize_ddl is deprecated and has no effect.";
-
+/** Deprecated parameter with no effect */
+static my_bool innodb_scrub_log;
+/** Deprecation message for innodb_scrub_log */
+static const char* innodb_scrub_log_msg
+= "The parameter innodb_scrub_log is deprecated and has no effect.";
+/** Deprecated parameter with no effect */
+static ulonglong innodb_scrub_log_speed;
+/** Deprecation message for innodb_scrub_log_speed */
+static const char* innodb_scrub_log_speed_msg
+= "The parameter innodb_scrub_log_speed is deprecated and has no effect.";
/** Deprecated parameter with no effect */
static ulong innodb_undo_logs;
/** Deprecation message for innodb_undo_logs */
@@ -3446,6 +3428,26 @@ static const char* innodb_page_cleaners_msg
= "The parameter innodb_page_cleaners is deprecated and has no effect.";
ulong srv_n_log_files;
+
+static my_bool innodb_background_scrub_data_uncompressed;
+
+static const char* innodb_background_scrub_data_uncompressed_msg
+= "The parameter innodb_background_scrub_data_uncompressed is deprecated and has no effect.";
+
+static my_bool innodb_background_scrub_data_compressed;
+
+static const char* innodb_background_scrub_data_compressed_msg
+= "The parameter innodb_background_scrub_data_compressed is deprecated and has no effect.";
+
+static uint innodb_background_scrub_data_check_interval;
+
+static const char* innodb_background_scrub_data_check_interval_msg
+= "The parameter innodb_background_scrub_data_check_interval is deprecated and has no effect.";
+
+static uint innodb_background_scrub_data_interval;
+
+static const char* innodb_background_scrub_data_interval_msg
+= "The parameter innodb_background_scrub_data_interval is deprecated and has no effect.";
} // namespace deprecated
/** Initialize, validate and normalize the InnoDB startup parameters.
@@ -3761,6 +3763,16 @@ static int innodb_init_params()
deprecated::innodb_log_optimize_ddl = FALSE;
}
+ if (UNIV_UNLIKELY(deprecated::innodb_scrub_log)) {
+ sql_print_warning(deprecated::innodb_scrub_log_msg);
+ deprecated::innodb_scrub_log = FALSE;
+ }
+
+ if (UNIV_UNLIKELY(deprecated::innodb_scrub_log_speed != 256)) {
+ sql_print_warning(deprecated::innodb_scrub_log_speed_msg);
+ deprecated::innodb_scrub_log_speed = 256;
+ }
+
if (UNIV_UNLIKELY(deprecated::innodb_buffer_pool_instances)) {
sql_print_warning("The parameter innodb_buffer_pool_instances"
" is deprecated and has no effect.");
@@ -4538,7 +4550,7 @@ innobase_checkpoint_request(
/* Do the allocation outside of lock to reduce contention. The normal
case is that not everything is flushed, so we will need to enqueue. */
entry = static_cast<struct pending_checkpoint *>
- (my_malloc(sizeof(*entry), MYF(MY_WME)));
+ (my_malloc(PSI_INSTRUMENT_ME, sizeof(*entry), MYF(MY_WME)));
if (!entry) {
sql_print_error("Failed to allocate %u bytes."
" Commit checkpoint will be skipped.",
@@ -5390,13 +5402,12 @@ innobase_match_index_columns(
One hidden assumption here is that the index column sequences
are matched up between those in mysql and InnoDB. */
for (; key_part != key_end; ++key_part) {
- ulint col_type;
- ibool is_unsigned;
- ulint mtype = innodb_idx_fld->col->mtype;
+ unsigned is_unsigned;
+ auto mtype = innodb_idx_fld->col->mtype;
/* Need to translate to InnoDB column type before
comparison. */
- col_type = get_innobase_type_from_mysql_type(
+ auto col_type = get_innobase_type_from_mysql_type(
&is_unsigned, key_part->field);
/* Ignore InnoDB specific system columns. */
@@ -6047,7 +6058,7 @@ no_such_table:
}
/* Index block size in InnoDB: used by MySQL in query optimization */
- stats.block_size = srv_page_size;
+ stats.block_size = static_cast<uint>(srv_page_size);
if (m_prebuilt->table == NULL
|| m_prebuilt->table->is_temporary()
@@ -6262,7 +6273,7 @@ wsrep_innobase_mysql_sort(
int mysql_type, /* in: MySQL type */
uint charset_number, /* in: number of the charset */
unsigned char* str, /* in: data field */
- unsigned int str_length, /* in: data field length,
+ ulint str_length, /* in: data field length,
not UNIV_SQL_NULL */
unsigned int buf_length) /* in: total str buffer length */
@@ -6287,7 +6298,7 @@ wsrep_innobase_mysql_sort(
case MYSQL_TYPE_VARCHAR:
{
uchar tmp_str[REC_VERSION_56_MAX_INDEX_COL_LEN] = {'\0'};
- uint tmp_length = REC_VERSION_56_MAX_INDEX_COL_LEN;
+ ulint tmp_length = REC_VERSION_56_MAX_INDEX_COL_LEN;
/* Use the charset number to pick the right charset struct for
the comparison. Since the MySQL function get_charset may be
@@ -6314,13 +6325,13 @@ wsrep_innobase_mysql_sort(
memcpy(tmp_str, str, str_length);
tmp_length = charset->strnxfrm(str, str_length,
- str_length, tmp_str,
+ uint(str_length), tmp_str,
tmp_length, 0);
DBUG_ASSERT(tmp_length <= str_length);
if (wsrep_protocol_version < 3) {
tmp_length = charset->strnxfrm(
str, str_length,
- str_length, tmp_str, tmp_length, 0);
+ uint(str_length), tmp_str, tmp_length, 0);
DBUG_ASSERT(tmp_length <= str_length);
} else {
/* strnxfrm will expand the destination string,
@@ -6329,7 +6340,7 @@ wsrep_innobase_mysql_sort(
*/
tmp_length = charset->strnxfrm(
str, buf_length,
- str_length, tmp_str, str_length, 0);
+ uint(str_length), tmp_str, str_length, 0);
DBUG_ASSERT(tmp_length <= buf_length);
ret_length = tmp_length;
}
@@ -6556,22 +6567,18 @@ VARCHAR and the new true VARCHAR in >= 5.0.3 by the 'prtype'.
ENUM and SET, and unsigned integer types are 'unsigned types'
@param[in] f MySQL Field
@return DATA_BINARY, DATA_VARCHAR, ... */
-ulint
-get_innobase_type_from_mysql_type(
- ulint* unsigned_flag,
- const void* f)
+unsigned
+get_innobase_type_from_mysql_type(unsigned *unsigned_flag, const Field *field)
{
- const class Field* field = reinterpret_cast<const class Field*>(f);
-
/* The following asserts try to check that the MySQL type code fits in
8 bits: this is used in ibuf and also when DATA_NOT_NULL is ORed to
the type */
- DBUG_ASSERT((ulint)MYSQL_TYPE_STRING < 256);
- DBUG_ASSERT((ulint)MYSQL_TYPE_VAR_STRING < 256);
- DBUG_ASSERT((ulint)MYSQL_TYPE_DOUBLE < 256);
- DBUG_ASSERT((ulint)MYSQL_TYPE_FLOAT < 256);
- DBUG_ASSERT((ulint)MYSQL_TYPE_DECIMAL < 256);
+ static_assert(MYSQL_TYPE_STRING < 256, "compatibility");
+ static_assert(MYSQL_TYPE_VAR_STRING < 256, "compatibility");
+ static_assert(MYSQL_TYPE_DOUBLE < 256, "compatibility");
+ static_assert(MYSQL_TYPE_FLOAT < 256, "compatibility");
+ static_assert(MYSQL_TYPE_DECIMAL < 256, "compatibility");
if (field->flags & UNSIGNED_FLAG) {
@@ -6676,8 +6683,8 @@ innobase_read_from_2_little_endian(
/*******************************************************************//**
Stores a key value for a row to a buffer.
@return key value length as stored in buff */
-UNIV_INTERN
-uint
+static
+uint16_t
wsrep_store_key_val_for_row(
/*=========================*/
THD* thd,
@@ -6687,7 +6694,7 @@ wsrep_store_key_val_for_row(
format) */
uint buff_len,/*!< in: buffer length */
const uchar* record,
- ibool* key_is_null)/*!< out: full key was null */
+ bool* key_is_null)/*!< out: full key was null */
{
KEY* key_info = table->key_info + keynr;
KEY_PART_INFO* key_part = key_info->key_part;
@@ -6700,19 +6707,19 @@ wsrep_store_key_val_for_row(
DBUG_ENTER("wsrep_store_key_val_for_row");
memset(buff, 0, buff_len);
- *key_is_null = TRUE;
+ *key_is_null = true;
for (; key_part != end; key_part++) {
uchar sorted[REC_VERSION_56_MAX_INDEX_COL_LEN] = {'\0'};
- ibool part_is_null = FALSE;
+ bool part_is_null = false;
if (key_part->null_bit) {
if (buff_space > 0) {
if (record[key_part->null_offset]
& key_part->null_bit) {
*buff = 1;
- part_is_null = TRUE;
+ part_is_null = true;
} else {
*buff = 0;
}
@@ -6723,7 +6730,7 @@ wsrep_store_key_val_for_row(
wsrep_thd_query(thd));
}
}
- if (!part_is_null) *key_is_null = FALSE;
+ if (!part_is_null) *key_is_null = false;
field = key_part->field;
mysql_type = field->type();
@@ -6973,7 +6980,7 @@ wsrep_store_key_val_for_row(
ut_a(buff <= buff_start + buff_len);
- DBUG_RETURN((uint)(buff - buff_start));
+ DBUG_RETURN(static_cast<uint16_t>(buff - buff_start));
}
#endif /* WITH_WSREP */
/**************************************************************//**
@@ -8041,7 +8048,7 @@ calc_row_difference(
ibool changes_fts_doc_col = FALSE;
trx_t* const trx = prebuilt->trx;
doc_id_t doc_id = FTS_NULL_DOC_ID;
- ulint num_v = 0;
+ unsigned num_v = 0;
const bool skip_virtual = ha_innobase::omits_virtual_cols(*table->s);
ut_ad(!srv_read_only_mode);
@@ -8273,9 +8280,11 @@ calc_row_difference(
num_v++;
ut_ad(field != table->found_next_number_field);
} else {
- ufield->field_no = dict_col_get_clust_pos(
- &prebuilt->table->cols[i - num_v],
- clust_index);
+ ufield->field_no = static_cast<unsigned>(
+ dict_col_get_clust_pos(
+ &prebuilt->table->cols
+ [i - num_v],
+ clust_index));
ufield->old_v_val = NULL;
if (field != table->found_next_number_field
|| dfield_is_null(&ufield->new_val)) {
@@ -8524,7 +8533,7 @@ ha_innobase::update_row(
+ MAX_REF_PARTS * 3;
m_upd_buf = reinterpret_cast<uchar*>(
- my_malloc(//PSI_INSTRUMENT_ME,
+ my_malloc(PSI_INSTRUMENT_ME,
m_upd_buf_size,
MYF(MY_WME)));
@@ -9665,7 +9674,7 @@ ha_innobase::ft_init_ext(
/* Allocate FTS handler, and instantiate it before return */
fts_hdl = reinterpret_cast<NEW_FT_INFO*>(
- my_malloc(/*PSI_INSTRUMENT_ME,*/ sizeof(NEW_FT_INFO), MYF(0)));
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(NEW_FT_INFO), MYF(0)));
fts_hdl->please = const_cast<_ft_vft*>(&ft_vft_result);
fts_hdl->could_you = const_cast<_ft_vft_ext*>(&ft_vft_ext_result);
@@ -9904,7 +9913,7 @@ wsrep_append_foreign_key(
THD* thd = (THD*)trx->mysql_thd;
ulint rcode = DB_SUCCESS;
char cache_key[513] = {'\0'};
- int cache_key_len=0;
+ size_t cache_key_len=0;
if (!wsrep_on(trx->mysql_thd) ||
wsrep_thd_is_local(trx->mysql_thd) == false) {
@@ -10178,12 +10187,11 @@ ha_innobase::wsrep_append_keys(
}
if (wsrep_protocol_version == 0) {
- uint len;
char keyval[WSREP_MAX_SUPPORTED_KEY_LENGTH+1] = {'\0'};
char *key = &keyval[0];
- ibool is_null;
+ bool is_null;
- len = wsrep_store_key_val_for_row(
+ auto len = wsrep_store_key_val_for_row(
thd, table, 0, key, WSREP_MAX_SUPPORTED_KEY_LENGTH,
record0, &is_null);
@@ -10240,15 +10248,15 @@ ha_innobase::wsrep_append_keys(
referenced_by_foreign_key2(tab, idx)) ||
(!tab && referenced_by_foreign_key()))) {
- ibool is_null0;
- uint len0 = wsrep_store_key_val_for_row(
+ bool is_null0;
+ auto len0 = wsrep_store_key_val_for_row(
thd, table, i, key0,
WSREP_MAX_SUPPORTED_KEY_LENGTH,
record0, &is_null0);
if (record1) {
- ibool is_null1;
- uint len1 = wsrep_store_key_val_for_row(
+ bool is_null1;
+ auto len1= wsrep_store_key_val_for_row(
thd, table, i, key1,
WSREP_MAX_SUPPORTED_KEY_LENGTH,
record1, &is_null1);
@@ -10381,20 +10389,17 @@ create_table_check_doc_id_col(
wrong type/name/size */
{
for (ulint i = 0; i < form->s->fields; i++) {
- const Field* field;
- ulint col_type;
- ulint col_len;
- ulint unsigned_type;
-
- field = form->field[i];
+ const Field* field = form->field[i];
if (!field->stored_in_db()) {
continue;
}
- col_type = get_innobase_type_from_mysql_type(
+ unsigned unsigned_type;
+
+ auto col_type = get_innobase_type_from_mysql_type(
&unsigned_type, field);
- col_len = field->pack_length();
+ auto col_len = field->pack_length();
if (innobase_strcasecmp(field->field_name.str,
FTS_DOC_ID_COL_NAME) == 0) {
@@ -10472,7 +10477,7 @@ innodb_base_col_setup(
const Field* field,
dict_v_col_t* v_col)
{
- ulint n = 0;
+ unsigned n = 0;
prepare_vcol_for_base_setup(table, field, v_col);
@@ -10549,10 +10554,8 @@ int
create_table_info_t::create_table_def()
{
dict_table_t* table;
- ulint col_type;
- ulint col_len;
ulint nulls_allowed;
- ulint unsigned_type;
+ unsigned unsigned_type;
ulint binary_type;
ulint long_true_varchar;
ulint charset_no;
@@ -10657,7 +10660,7 @@ create_table_info_t::create_table_def()
}
}
- col_type = get_innobase_type_from_mysql_type(
+ auto col_type = get_innobase_type_from_mysql_type(
&unsigned_type, field);
if (!col_type) {
@@ -10670,7 +10673,11 @@ create_table_info_t::create_table_def()
" the table with an appropriate"
" column type.",
table->name.m_name, field->field_name.str);
- goto err_col;
+err_col:
+ dict_mem_table_free(table);
+ mem_heap_free(heap);
+ ut_ad(trx_state_eq(m_trx, TRX_STATE_NOT_STARTED));
+ DBUG_RETURN(HA_ERR_GENERIC);
}
nulls_allowed = field->real_maybe_null() ? 0 : DATA_NOT_NULL;
@@ -10703,7 +10710,7 @@ create_table_info_t::create_table_def()
}
}
- col_len = field->pack_length();
+ auto col_len = field->pack_length();
/* The MySQL pack length contains 1 or 2 bytes length field
for a true VARCHAR. Let us subtract that, so that the InnoDB
@@ -10725,11 +10732,7 @@ create_table_info_t::create_table_def()
if (dict_col_name_is_reserved(field->field_name.str)){
my_error(ER_WRONG_COLUMN_NAME, MYF(0),
field->field_name.str);
-err_col:
- dict_mem_table_free(table);
- mem_heap_free(heap);
- ut_ad(trx_state_eq(m_trx, TRX_STATE_NOT_STARTED));
- DBUG_RETURN(HA_ERR_GENERIC);
+ goto err_col;
}
ulint is_virtual = !field->stored_in_db() ? DATA_VIRTUAL : 0;
@@ -10948,7 +10951,7 @@ create_index(
ind_type |= DICT_UNIQUE;
}
- field_lengths = (ulint*) my_malloc(//PSI_INSTRUMENT_ME,
+ field_lengths = (ulint*) my_malloc(PSI_INSTRUMENT_ME,
key->user_defined_key_parts * sizeof *
field_lengths, MYF(MY_FAE));
@@ -10961,8 +10964,7 @@ create_index(
for (ulint i = 0; i < key->user_defined_key_parts; i++) {
KEY_PART_INFO* key_part = key->key_part + i;
ulint prefix_len;
- ulint col_type;
- ulint is_unsigned;
+ unsigned is_unsigned;
/* (The flag HA_PART_KEY_SEG denotes in MySQL a
@@ -10982,7 +10984,7 @@ create_index(
const char* field_name = key_part->field->field_name.str;
- col_type = get_innobase_type_from_mysql_type(
+ auto col_type = get_innobase_type_from_mysql_type(
&is_unsigned, key_part->field);
if (DATA_LARGE_MTYPE(col_type)
@@ -11759,7 +11761,7 @@ index_bad:
@param[in] str string which might include 'MERGE_THRESHOLD='
@return value parsed. 0 means not found or invalid value. */
static
-ulint
+unsigned
innobase_parse_merge_threshold(
THD* thd,
const char* str)
@@ -11779,7 +11781,7 @@ innobase_parse_merge_threshold(
lint ret = atoi(pos);
if (ret > 0 && ret <= 50) {
- return(static_cast<ulint>(ret));
+ return(static_cast<unsigned>(ret));
}
push_warning_printf(
@@ -11802,8 +11804,8 @@ innobase_parse_hint_from_comment(
dict_table_t* table,
const TABLE_SHARE* table_share)
{
- ulint merge_threshold_table;
- ulint merge_threshold_index[MAX_KEY];
+ unsigned merge_threshold_table;
+ unsigned merge_threshold_index[MAX_KEY];
bool is_found[MAX_KEY];
if (table_share->comment.str != NULL) {
@@ -12122,7 +12124,7 @@ foreign_push_index_error(trx_t* trx, const char* operation,
col_name);
return;
}
- DBUG_ASSERT(!"unknown error");
+ DBUG_ASSERT("unknown error" == 0);
}
/** Find column or virtual column in table by its name.
@@ -13629,7 +13631,7 @@ innobase_drop_database(
}
ptr++;
- namebuf = (char*) my_malloc(/*PSI_INSTRUMENT_ME,*/ (uint) len + 2, MYF(0));
+ namebuf = (char*) my_malloc(PSI_INSTRUMENT_ME, (uint) len + 2, MYF(0));
memcpy(namebuf, ptr, len);
namebuf[len] = '/';
@@ -13786,8 +13788,8 @@ int ha_innobase::truncate()
HA_CREATE_INFO info;
mem_heap_t* heap = mem_heap_create(1000);
dict_table_t* ib_table = m_prebuilt->table;
- const time_t update_time = ib_table->update_time;
- const ulint stored_lock = m_prebuilt->stored_select_lock_type;
+ const auto update_time = ib_table->update_time;
+ const auto stored_lock = m_prebuilt->stored_select_lock_type;
info.init();
update_create_info_from_table(&info, table);
@@ -14349,11 +14351,12 @@ innodb_rec_per_key(
rec_per_key calculation */
rec_per_key
= static_cast<rec_per_key_t>(records - n_null)
- / (n_diff - n_null);
+ / static_cast<rec_per_key_t>(n_diff - n_null);
}
} else {
DEBUG_SYNC_C("after_checking_for_0");
- rec_per_key = static_cast<rec_per_key_t>(records) / n_diff;
+ rec_per_key = static_cast<rec_per_key_t>(records)
+ / static_cast<rec_per_key_t>(n_diff);
}
if (rec_per_key < 1.0) {
@@ -14559,7 +14562,6 @@ ha_innobase::info_low(
}
if (flag & HA_STATUS_CONST) {
- ulong i;
/* Verify the number of index in InnoDB and MySQL
matches up. If m_prebuilt->clust_index_was_generated
holds, InnoDB defines GEN_CLUST_INDEX internally */
@@ -14608,7 +14610,7 @@ ha_innobase::info_low(
ut_a(ib_table->stat_initialized);
- for (i = 0; i < table->s->keys; i++) {
+ for (uint i = 0; i < table->s->keys; i++) {
ulong j;
dict_index_t* index = innobase_get_index(i);
@@ -15233,7 +15235,7 @@ ha_innobase::update_table_comment(
flen = 64000 - 3 - length;
}
/* allocate buffer for the full string */
- str = (char*) my_malloc(length + flen + 3, MYF(0));
+ str = (char*) my_malloc(PSI_INSTRUMENT_ME, length + flen + 3, MYF(0));
if (str) {
char* pos = str + length;
if (length) {
@@ -15278,14 +15280,8 @@ ha_innobase::get_foreign_key_create_info(void)
m_prebuilt->trx->op_info = "";
/* Allocate buffer for the string */
- char* fk_str = (char*) my_malloc(str.length() + 1, MYF(0));
-
- /* JAN: TODO: MySQL 5.7
- fk_str = reinterpret_cast<char*>(
+ char *fk_str = reinterpret_cast<char*>(
my_malloc(PSI_INSTRUMENT_ME, str.length() + 1, MYF(0)));
- */
-
-
if (fk_str) {
memcpy(fk_str, str.c_str(), str.length());
@@ -16158,7 +16154,7 @@ innodb_show_status(
/* allocate buffer for the string, and
read the contents of the temporary file */
- if (!(str = (char*) my_malloc(//PSI_INSTRUMENT_ME,
+ if (!(str = (char*) my_malloc(PSI_INSTRUMENT_ME,
usable_len + 1, MYF(0)))) {
mutex_exit(&srv_monitor_file_mutex);
DBUG_RETURN(1);
@@ -18089,7 +18085,7 @@ innodb_monitor_validate(
by InnoDB, so we can access it in another callback
function innodb_monitor_update() and free it appropriately */
if (name) {
- monitor_name = my_strdup(//PSI_INSTRUMENT_ME,
+ monitor_name = my_strdup(PSI_INSTRUMENT_ME,
name, MYF(0));
} else {
return(1);
@@ -18590,14 +18586,12 @@ checkpoint_now_set(THD*, st_mysql_sys_var*, void*, const void* save)
while (log_sys.last_checkpoint_lsn
+ SIZE_OF_FILE_CHECKPOINT
- + (log_sys.append_on_checkpoint != NULL
- ? log_sys.append_on_checkpoint->size() : 0)
- < log_sys.lsn) {
+ < log_sys.get_lsn()) {
log_make_checkpoint();
log_sys.log.flush_data_only();
}
- dberr_t err = fil_write_flushed_lsn(log_sys.lsn);
+ dberr_t err = fil_write_flushed_lsn(log_sys.get_lsn());
if (err != DB_SUCCESS) {
ib::warn() << "Checkpoint set failed " << err;
@@ -18908,6 +18902,56 @@ innodb_undo_logs_warn(THD* thd, st_mysql_sys_var*, void*, const void*)
deprecated::innodb_undo_logs_msg);
}
+/** Issue a deprecation warning for SET GLOBAL innodb_scrub_log_speed.
+@param[in,out] thd client connection */
+static void
+innodb_scrub_log_speed_warn(THD* thd, st_mysql_sys_var*, void*, const void*)
+{
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED,
+ deprecated::innodb_scrub_log_speed_msg);
+}
+
+static void
+innodb_background_scrub_data_uncompressed_warn(THD* thd, st_mysql_sys_var*,
+ void*, const void*)
+{
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED,
+ deprecated::innodb_background_scrub_data_uncompressed_msg);
+}
+
+static void
+innodb_background_scrub_data_compressed_warn(THD* thd, st_mysql_sys_var*,
+ void*, const void*)
+{
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED,
+ deprecated::innodb_background_scrub_data_compressed_msg);
+}
+
+static void
+innodb_background_scrub_data_check_interval_warn(
+ THD* thd, st_mysql_sys_var*, void*, const void*)
+{
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED,
+ deprecated::innodb_background_scrub_data_check_interval_msg);
+}
+
+static void
+innodb_background_scrub_data_interval_warn(
+ THD* thd, st_mysql_sys_var*, void*, const void*)
+{
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED,
+ deprecated::innodb_background_scrub_data_interval_msg);
+}
+
static SHOW_VAR innodb_status_variables_export[]= {
{"Innodb", (char*) &show_innodb_vars, SHOW_FUNC},
{NullS, NullS, SHOW_LONG}
@@ -18934,14 +18978,9 @@ wsrep_abort_slave_trx(
}
/*******************************************************************//**
This function is used to kill one transaction in BF. */
-UNIV_INTERN
int
-wsrep_innobase_kill_one_trx(
-/*========================*/
- void * const bf_thd_ptr,
- const trx_t * const bf_trx,
- trx_t *victim_trx,
- ibool signal)
+wsrep_innobase_kill_one_trx(THD *bf_thd_ptr, const trx_t *bf_trx,
+ trx_t *victim_trx, bool signal)
{
ut_ad(lock_mutex_own());
ut_ad(trx_mutex_own(victim_trx));
@@ -19190,14 +19229,10 @@ static MYSQL_SYSVAR_ULONG(purge_batch_size, srv_purge_batch_size,
1, /* Minimum value */
5000, 0); /* Maximum value */
-static MYSQL_SYSVAR_ULONG(purge_threads, srv_n_purge_threads,
+static MYSQL_SYSVAR_UINT(purge_threads, srv_n_purge_threads,
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
- "Purge threads can be from 1 to 32. Default is 4.",
- NULL, NULL,
- 4, /* Default setting */
- 1, /* Minimum value */
- srv_max_purge_threads,/* Maximum value */
- 0);
+ "Number of tasks for purging transaction history",
+ NULL, NULL, 4, 1, 32, 0);
static MYSQL_SYSVAR_ULONG(sync_array_size, srv_sync_array_size,
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
@@ -20125,8 +20160,7 @@ static MYSQL_SYSVAR_ENUM(encrypt_tables, srv_encrypt_tables,
static MYSQL_SYSVAR_UINT(encryption_threads, srv_n_fil_crypt_threads,
PLUGIN_VAR_RQCMDARG,
- "Number of threads performing background key rotation and "
- "scrubbing",
+ "Number of threads performing background key rotation ",
NULL,
innodb_encryption_threads_update,
srv_n_fil_crypt_threads, 0, UINT_MAX32, 0);
@@ -20149,18 +20183,15 @@ static MYSQL_SYSVAR_UINT(encryption_rotation_iops, srv_n_fil_crypt_iops,
innodb_encryption_rotation_iops_update,
srv_n_fil_crypt_iops, 0, UINT_MAX32, 0);
-static MYSQL_SYSVAR_BOOL(scrub_log, srv_scrub_log,
+static MYSQL_SYSVAR_BOOL(scrub_log, deprecated::innodb_scrub_log,
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
- "Enable background redo log scrubbing",
+ innodb_deprecated_ignored,
0, 0, 0);
-static MYSQL_SYSVAR_ULONGLONG(scrub_log_speed, innodb_scrub_log_speed,
+static MYSQL_SYSVAR_ULONGLONG(scrub_log_speed, deprecated::innodb_scrub_log_speed,
PLUGIN_VAR_OPCMDARG,
- "Background redo log scrubbing speed in bytes/sec",
- NULL, NULL,
- 256, /* 256 bytes/sec, corresponds to 2000 ms scrub_log_interval */
- 1, /* min */
- 50000, 0); /* 50Kbyte/sec, corresponds to 10 ms scrub_log_interval */
+ innodb_deprecated_ignored, NULL, innodb_scrub_log_speed_warn,
+ 256, 1, 50000, 0);
static MYSQL_SYSVAR_BOOL(encrypt_log, srv_encrypt_log,
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
@@ -20174,47 +20205,24 @@ static MYSQL_SYSVAR_BOOL(immediate_scrub_data_uncompressed,
NULL, NULL, FALSE);
static MYSQL_SYSVAR_BOOL(background_scrub_data_uncompressed,
- srv_background_scrub_data_uncompressed,
- 0,
- "Enable scrubbing of uncompressed data by "
- "background threads (same as encryption_threads)",
- NULL, NULL, FALSE);
+ deprecated::innodb_background_scrub_data_uncompressed,
+ PLUGIN_VAR_OPCMDARG, innodb_deprecated_ignored, NULL,
+ innodb_background_scrub_data_uncompressed_warn, FALSE);
static MYSQL_SYSVAR_BOOL(background_scrub_data_compressed,
- srv_background_scrub_data_compressed,
- 0,
- "Enable scrubbing of compressed data by "
- "background threads (same as encryption_threads)",
- NULL, NULL, FALSE);
+ deprecated::innodb_background_scrub_data_compressed,
+ PLUGIN_VAR_OPCMDARG, innodb_deprecated_ignored, NULL,
+ innodb_background_scrub_data_compressed_warn, FALSE);
static MYSQL_SYSVAR_UINT(background_scrub_data_check_interval,
- srv_background_scrub_data_check_interval,
- 0,
- "check if spaces needs scrubbing every "
- "innodb_background_scrub_data_check_interval "
- "seconds",
- NULL, NULL,
- srv_background_scrub_data_check_interval,
- 1,
- UINT_MAX32, 0);
+ deprecated::innodb_background_scrub_data_check_interval,
+ 0, innodb_deprecated_ignored, NULL,
+ innodb_background_scrub_data_check_interval_warn, 0, 0, 0, 0);
static MYSQL_SYSVAR_UINT(background_scrub_data_interval,
- srv_background_scrub_data_interval,
- 0,
- "scrub spaces that were last scrubbed longer than "
- " innodb_background_scrub_data_interval seconds ago",
- NULL, NULL,
- srv_background_scrub_data_interval,
- 1,
- UINT_MAX32, 0);
-
-#ifdef UNIV_DEBUG
-static MYSQL_SYSVAR_BOOL(debug_force_scrubbing,
- srv_scrub_force_testing,
- 0,
- "Perform extra scrubbing to increase test exposure",
- NULL, NULL, FALSE);
-#endif /* UNIV_DEBUG */
+ deprecated::innodb_background_scrub_data_interval,
+ 0, innodb_deprecated_ignored, NULL,
+ innodb_background_scrub_data_interval_warn, 0, 0, 0, 0);
static MYSQL_SYSVAR_BOOL(encrypt_temporary_tables, innodb_encrypt_temporary_tables,
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
@@ -20419,9 +20427,6 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(background_scrub_data_compressed),
MYSQL_SYSVAR(background_scrub_data_interval),
MYSQL_SYSVAR(background_scrub_data_check_interval),
-#ifdef UNIV_DEBUG
- MYSQL_SYSVAR(debug_force_scrubbing),
-#endif
MYSQL_SYSVAR(buf_dump_status_frequency),
MYSQL_SYSVAR(background_thread),
MYSQL_SYSVAR(encrypt_temporary_tables),
@@ -20476,8 +20481,7 @@ i_s_innodb_sys_datafiles,
i_s_innodb_sys_virtual,
i_s_innodb_mutexes,
i_s_innodb_sys_semaphore_waits,
-i_s_innodb_tablespaces_encryption,
-i_s_innodb_tablespaces_scrubbing
+i_s_innodb_tablespaces_encryption
maria_declare_plugin_end;
/** @brief Initialize the default value of innodb_commit_concurrency.
@@ -21602,7 +21606,7 @@ ib_push_warning(
char *buf;
va_start(args, format);
- buf = (char *)my_malloc(MAX_BUF_SIZE, MYF(MY_WME));
+ buf = (char *)my_malloc(PSI_INSTRUMENT_ME, MAX_BUF_SIZE, MYF(MY_WME));
vsprintf(buf,format, args);
push_warning_printf(
@@ -21633,7 +21637,7 @@ ib_push_warning(
if (thd) {
va_start(args, format);
- buf = (char *)my_malloc(MAX_BUF_SIZE, MYF(MY_WME));
+ buf = (char *)my_malloc(PSI_INSTRUMENT_ME, MAX_BUF_SIZE, MYF(MY_WME));
vsprintf(buf,format, args);
push_warning_printf(
@@ -21662,7 +21666,7 @@ ib_foreign_warn(trx_t* trx, /*!< in: trx */
char* buf;
static FILE* ef = dict_foreign_err_file;
static const size_t MAX_BUF_SIZE = 4 * 1024;
- buf = (char*)my_malloc(MAX_BUF_SIZE, MYF(MY_WME));
+ buf = (char*)my_malloc(PSI_INSTRUMENT_ME, MAX_BUF_SIZE, MYF(MY_WME));
if (!buf) {
return;
}
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index c644ce9593f..12dc0aea0d9 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -46,7 +46,6 @@ Smart ALTER TABLE
#include "row0row.h"
#include "row0upd.h"
#include "trx0trx.h"
-#include "trx0roll.h"
#include "handler0alter.h"
#include "srv0mon.h"
#include "srv0srv.h"
@@ -339,7 +338,7 @@ found_nullable:
goto found_j;
}
}
- DBUG_ASSERT(!"no such col");
+ DBUG_ASSERT("no such col" == 0);
found_j:
std::swap(index.fields[j],
index.fields[k]);
@@ -498,7 +497,7 @@ inline bool dict_table_t::instant_column(const dict_table_t& table,
/* Preserve the default values of previously instantly added
columns, or copy the new default values to this->heap. */
- for (ulint i = 0; i < ulint(table.n_cols); i++) {
+ for (unsigned i = 0; i < table.n_cols; i++) {
dict_col_t& c = cols[i];
if (const dict_col_t* o = find(old_cols, col_map, n_cols, i)) {
@@ -867,12 +866,12 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx
/** whether the order of the clustered index is unchanged */
bool skip_pk_sort;
/** number of virtual columns to be added */
- ulint num_to_add_vcol;
+ unsigned num_to_add_vcol;
/** virtual columns to be added */
dict_v_col_t* add_vcol;
const char** add_vcol_name;
/** number of virtual columns to be dropped */
- ulint num_to_drop_vcol;
+ unsigned num_to_drop_vcol;
/** virtual columns to be dropped */
dict_v_col_t* drop_vcol;
const char** drop_vcol_name;
@@ -2022,7 +2021,7 @@ ha_innobase::check_if_supported_inplace_alter(
const Field* field = table->field[i];
const dict_col_t* col = dict_table_get_nth_col(
m_prebuilt->table, icol);
- ulint unsigned_flag;
+ unsigned unsigned_flag;
if (!field->stored_in_db()) {
continue;
@@ -3330,6 +3329,14 @@ innobase_check_index_keys(
}
}
+ for (const Alter_inplace_info::Rename_key_pair& pair :
+ info->rename_keys) {
+ if (0 == strcmp(key.name.str,
+ pair.old_key->name.str)) {
+ goto name_ok;
+ }
+ }
+
my_error(ER_WRONG_NAME_FOR_INDEX, MYF(0),
key.name.str);
return(ER_WRONG_NAME_FOR_INDEX);
@@ -3341,7 +3348,7 @@ name_ok:
= key.key_part[i];
const Field* field
= key_part1.field;
- ibool is_unsigned;
+ unsigned is_unsigned;
switch (get_innobase_type_from_mysql_type(
&is_unsigned, field)) {
@@ -3410,9 +3417,8 @@ innobase_create_index_field_def(
index_field_t* index_field)
{
const Field* field;
- ibool is_unsigned;
- ulint col_type;
- ulint num_v = 0;
+ unsigned is_unsigned;
+ unsigned num_v = 0;
DBUG_ENTER("innobase_create_index_field_def");
@@ -3426,7 +3432,7 @@ innobase_create_index_field_def(
}
}
- col_type = get_innobase_type_from_mysql_type(
+ auto col_type = get_innobase_type_from_mysql_type(
&is_unsigned, field);
if ((index_field->is_v_col = !field->stored_in_db())) {
@@ -4761,8 +4767,7 @@ prepare_inplace_add_virtual(
const TABLE* table)
{
ha_innobase_inplace_ctx* ctx;
- ulint i = 0;
- ulint j = 0;
+ unsigned i = 0, j = 0;
ctx = static_cast<ha_innobase_inplace_ctx*>
(ha_alter_info->handler_ctx);
@@ -4785,14 +4790,12 @@ prepare_inplace_add_virtual(
continue;
}
- ulint is_unsigned;
- ulint charset_no;
- ulint col_type
- = get_innobase_type_from_mysql_type(
- &is_unsigned, field);
+ unsigned is_unsigned;
+ auto col_type = get_innobase_type_from_mysql_type(
+ &is_unsigned, field);
- ulint col_len = field->pack_length();
- ulint field_type = (ulint) field->type();
+ auto col_len = field->pack_length();
+ unsigned field_type = field->type() | is_unsigned;
if (!field->real_maybe_null()) {
field_type |= DATA_NOT_NULL;
@@ -4802,12 +4805,10 @@ prepare_inplace_add_virtual(
field_type |= DATA_BINARY_TYPE;
}
- if (is_unsigned) {
- field_type |= DATA_UNSIGNED;
- }
+ unsigned charset_no;
if (dtype_is_string_type(col_type)) {
- charset_no = (ulint) field->charset()->number;
+ charset_no = field->charset()->number;
DBUG_EXECUTE_IF(
"ib_alter_add_virtual_fail",
@@ -4872,8 +4873,7 @@ prepare_inplace_drop_virtual(
const TABLE* table)
{
ha_innobase_inplace_ctx* ctx;
- ulint i = 0;
- ulint j = 0;
+ unsigned i = 0, j = 0;
ctx = static_cast<ha_innobase_inplace_ctx*>
(ha_alter_info->handler_ctx);
@@ -4899,17 +4899,13 @@ prepare_inplace_drop_virtual(
continue;
}
- ulint col_len;
- ulint is_unsigned;
- ulint field_type;
- ulint charset_no;
+ unsigned is_unsigned;
- ulint col_type
- = get_innobase_type_from_mysql_type(
- &is_unsigned, field);
+ auto col_type = get_innobase_type_from_mysql_type(
+ &is_unsigned, field);
- col_len = field->pack_length();
- field_type = (ulint) field->type();
+ auto col_len = field->pack_length();
+ unsigned field_type = field->type() | is_unsigned;
if (!field->real_maybe_null()) {
field_type |= DATA_NOT_NULL;
@@ -4919,12 +4915,10 @@ prepare_inplace_drop_virtual(
field_type |= DATA_BINARY_TYPE;
}
- if (is_unsigned) {
- field_type |= DATA_UNSIGNED;
- }
+ unsigned charset_no = 0;
if (dtype_is_string_type(col_type)) {
- charset_no = (ulint) field->charset()->number;
+ charset_no = field->charset()->number;
DBUG_EXECUTE_IF(
"ib_alter_add_virtual_fail",
@@ -5093,7 +5087,7 @@ static bool innobase_add_one_virtual(
return true;
}
- for (ulint i = 0; i < unsigned{vcol->num_base}; i++) {
+ for (unsigned i = 0; i < vcol->num_base; i++) {
if (innobase_insert_sys_virtual(
table, pos, vcol->base_col[i]->ind, trx)) {
return true;
@@ -5366,7 +5360,7 @@ innobase_drop_virtual_try(
ctx = static_cast<ha_innobase_inplace_ctx*>
(ha_alter_info->handler_ctx);
- for (ulint i = 0; i < ctx->num_to_drop_vcol; i++) {
+ for (unsigned i = 0; i < ctx->num_to_drop_vcol; i++) {
ulint pos = dict_create_v_col_pos(
ctx->drop_vcol[i].v_pos - i,
@@ -5726,7 +5720,7 @@ add_all_virtual:
&mtr);
DBUG_ASSERT(root);
if (fil_page_get_type(root->frame) != FIL_PAGE_TYPE_INSTANT) {
- DBUG_ASSERT(!"wrong page type");
+ DBUG_ASSERT("wrong page type" == 0);
err = DB_CORRUPTION;
goto func_exit;
}
@@ -5815,7 +5809,7 @@ empty_table:
index->set_modified(mtr);
if (buf_block_t* root = btr_root_block_get(index, RW_SX_LATCH, &mtr)) {
if (fil_page_get_type(root->frame) != FIL_PAGE_INDEX) {
- DBUG_ASSERT(!"wrong page type");
+ DBUG_ASSERT("wrong page type" == 0);
goto err_exit;
}
@@ -6039,7 +6033,7 @@ prepare_inplace_alter_table_dict(
for (ulint i = 0; i < ctx->num_to_add_vcol; i++) {
/* Set mbminmax for newly added column */
dict_col_t& col = ctx->add_vcol[i].m_col;
- ulint mbminlen, mbmaxlen;
+ unsigned mbminlen, mbmaxlen;
dtype_get_mblen(col.mtype, col.prtype,
&mbminlen, &mbmaxlen);
col.mbminlen = mbminlen;
@@ -6235,15 +6229,11 @@ new_clustered_failed:
for (uint i = 0; i < altered_table->s->fields; i++) {
const Field* field = altered_table->field[i];
- ulint is_unsigned;
- ulint field_type
- = (ulint) field->type();
- ulint col_type
- = get_innobase_type_from_mysql_type(
- &is_unsigned, field);
- ulint charset_no;
- ulint col_len;
- const bool is_virtual = !field->stored_in_db();
+ unsigned is_unsigned;
+ auto col_type = get_innobase_type_from_mysql_type(
+ &is_unsigned, field);
+ unsigned field_type = field->type() | is_unsigned;
+ const bool is_virtual = !field->stored_in_db();
/* we assume in dtype_form_prtype() that this
fits in two bytes */
@@ -6257,10 +6247,6 @@ new_clustered_failed:
field_type |= DATA_BINARY_TYPE;
}
- if (is_unsigned) {
- field_type |= DATA_UNSIGNED;
- }
-
if (altered_table->versioned()) {
if (i == altered_table->s->vers.start_fieldno) {
field_type |= DATA_VERS_START;
@@ -6273,8 +6259,10 @@ new_clustered_failed:
}
}
+ unsigned charset_no;
+
if (dtype_is_string_type(col_type)) {
- charset_no = (ulint) field->charset()->number;
+ charset_no = field->charset()->number;
if (charset_no > MAX_CHAR_COLL_NUM) {
my_error(ER_WRONG_KEY_COLUMN, MYF(0), "InnoDB",
@@ -6285,7 +6273,7 @@ new_clustered_failed:
charset_no = 0;
}
- col_len = field->pack_length();
+ auto col_len = field->pack_length();
/* The MySQL pack length contains 1 or 2 bytes
length field for a true VARCHAR. Let us
@@ -8976,7 +8964,7 @@ processed_field:
}
/** Convert field type and length to InnoDB format */
-static void get_type(const Field& f, ulint& prtype, ulint& mtype, ulint& len)
+static void get_type(const Field& f, uint& prtype, uint& mtype, uint& len)
{
mtype = get_innobase_type_from_mysql_type(&prtype, &f);
len = f.pack_length();
@@ -9045,7 +9033,7 @@ innobase_rename_or_enlarge_column_try(
n_base = 0;
}
- ulint prtype, mtype, len;
+ unsigned prtype, mtype, len;
get_type(f, prtype, mtype, len);
DBUG_ASSERT(!dtype_is_string_type(col->mtype)
|| col->mbminlen == f.charset()->mbminlen);
@@ -9199,7 +9187,7 @@ innobase_rename_or_enlarge_columns_cache(
DBUG_ASSERT(col->mbminlen
== (is_string
? (*af)->charset()->mbminlen : 0));
- ulint prtype, mtype, len;
+ unsigned prtype, mtype, len;
get_type(**af, prtype, mtype, len);
DBUG_ASSERT(is_string == dtype_is_string_type(mtype));
@@ -9763,13 +9751,16 @@ commit_try_rebuild(
/* We can now rename the old table as a temporary table,
rename the new temporary table as the old table and drop the
- old table. First, we only do this in the data dictionary
- tables. The actual renaming will be performed in
- commit_cache_rebuild(), once the data dictionary transaction
- has been successfully committed. */
+ old table. */
+ char* old_name= mem_heap_strdup(ctx->heap, user_table->name.m_name);
- error = row_merge_rename_tables_dict(
- user_table, rebuilt_table, ctx->tmp_name, trx);
+ error = row_rename_table_for_mysql(user_table->name.m_name,
+ ctx->tmp_name, trx, false, false);
+ if (error == DB_SUCCESS) {
+ error = row_rename_table_for_mysql(rebuilt_table->name.m_name,
+ old_name, trx,
+ false, false);
+ }
/* We must be still holding a table handle. */
DBUG_ASSERT(user_table->get_ref_count() == 1);
@@ -9826,38 +9817,6 @@ rename_indexes_try(
return false;
}
-/** Apply the changes made during commit_try_rebuild(),
-to the data dictionary cache and the file system.
-@param ctx In-place ALTER TABLE context */
-inline MY_ATTRIBUTE((nonnull))
-void
-commit_cache_rebuild(
-/*=================*/
- ha_innobase_inplace_ctx* ctx)
-{
- dberr_t error;
-
- DBUG_ENTER("commit_cache_rebuild");
- DEBUG_SYNC_C("commit_cache_rebuild");
- DBUG_ASSERT(ctx->need_rebuild());
- DBUG_ASSERT(!ctx->old_table->space == !ctx->new_table->space);
-
- const char* old_name = mem_heap_strdup(
- ctx->heap, ctx->old_table->name.m_name);
-
- /* We already committed and redo logged the renames,
- so this must succeed. */
- error = dict_table_rename_in_cache(
- ctx->old_table, ctx->tmp_name, false);
- ut_a(error == DB_SUCCESS);
-
- error = dict_table_rename_in_cache(
- ctx->new_table, old_name, false);
- ut_a(error == DB_SUCCESS);
-
- DBUG_VOID_RETURN;
-}
-
/** Set of column numbers */
typedef std::set<ulint, std::less<ulint>, ut_allocator<ulint> > col_set;
@@ -10113,9 +10072,9 @@ commit_try_norebuild(
DBUG_RETURN(true);
}
- ulint n_col = unsigned(ctx->old_table->n_cols)
+ unsigned n_col = ctx->old_table->n_cols
- DATA_N_SYS_COLS;
- ulint n_v_col = unsigned(ctx->old_table->n_v_cols)
+ unsigned n_v_col = ctx->old_table->n_v_cols
+ ctx->num_to_add_vcol - ctx->num_to_drop_vcol;
if (innodb_update_cols(
@@ -10605,7 +10564,6 @@ ha_innobase::commit_inplace_alter_table(
bool commit)
{
ha_innobase_inplace_ctx*ctx0;
- struct mtr_buf_copy_t logs;
ctx0 = static_cast<ha_innobase_inplace_ctx*>
(ha_alter_info->handler_ctx);
@@ -10752,8 +10710,6 @@ ha_innobase::commit_inplace_alter_table(
or lock waits can happen in it during the data dictionary operation. */
row_mysql_lock_data_dictionary(trx);
- ut_ad(log_append_on_checkpoint(NULL) == NULL);
-
/* Prevent the background statistics collection from accessing
the tables. */
for (;;) {
@@ -10844,33 +10800,6 @@ ha_innobase::commit_inplace_alter_table(
} else if (!new_clustered) {
trx_commit_for_mysql(trx);
} else {
- mtr_t mtr;
- mtr_start(&mtr);
-
- for (inplace_alter_handler_ctx** pctx = ctx_array;
- *pctx; pctx++) {
- ha_innobase_inplace_ctx* ctx
- = static_cast<ha_innobase_inplace_ctx*>(*pctx);
-
- DBUG_ASSERT(ctx->need_rebuild());
- /* Check for any possible problems for any
- file operations that will be performed in
- commit_cache_rebuild(), and if none, generate
- the redo log for these operations. */
- dberr_t error = fil_mtr_rename_log(
- ctx->old_table, ctx->new_table, ctx->tmp_name,
- &mtr);
- if (error != DB_SUCCESS) {
- /* Out of memory or a problem will occur
- when renaming files. */
- fail = true;
- my_error_innodb(error, ctx->old_table->name.m_name,
- ctx->old_table->flags);
- }
- DBUG_INJECT_CRASH("ib_commit_inplace_crash",
- crash_inject_count++);
- }
-
/* Test what happens on crash if the redo logs
are flushed to disk here. The log records
about the rename should not be committed, and
@@ -10882,34 +10811,11 @@ ha_innobase::commit_inplace_alter_table(
ut_ad(!trx->fts_trx);
if (fail) {
- mtr.set_log_mode(MTR_LOG_NO_REDO);
- mtr_commit(&mtr);
trx_rollback_for_mysql(trx);
} else {
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE));
ut_ad(trx->has_logged());
-
- if (mtr.get_log()->size() > 0) {
- ut_ad((*mtr.get_log()->front()->begin()
- & 0xf0) == FILE_RENAME);
- /* Append the FILE_RENAME
- records on checkpoint, as a separate
- mini-transaction before the one that
- contains the FILE_CHECKPOINT marker. */
- mtr.get_log()->for_each_block(logs);
- logs.m_buf.push(field_ref_zero, 1);
- log_append_on_checkpoint(&logs.m_buf);
- }
-
- /* The following call commits the
- mini-transaction, making the data dictionary
- transaction committed at mtr.end_lsn. The
- transaction becomes 'durable' by the time when
- log_buffer_flush_to_disk() returns. In the
- logical sense the commit in the file-based
- data structures happens here. */
-
- trx_commit_low(trx, &mtr);
+ trx_commit(trx);
}
/* If server crashes here, the dictionary in
@@ -10986,9 +10892,6 @@ ha_innobase::commit_inplace_alter_table(
DBUG_PRINT("to_be_dropped",
("table: %s", ctx->old_table->name.m_name));
- /* Rename the tablespace files. */
- commit_cache_rebuild(ctx);
-
if (innobase_update_foreign_cache(ctx, m_user_thd)
!= DB_SUCCESS
&& m_prebuilt->trx->check_foreigns) {
@@ -11022,8 +10925,6 @@ foreign_fail:
crash_inject_count++);
}
- log_append_on_checkpoint(NULL);
-
/* Tell the InnoDB server that there might be work for
utility threads: */
diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc
index 12d0a7cab9a..33ac0b47dc4 100644
--- a/storage/innobase/handler/i_s.cc
+++ b/storage/innobase/handler/i_s.cc
@@ -2112,7 +2112,8 @@ i_s_metrics_fill(
if (time_diff != 0) {
OK(fields[METRIC_AVG_VALUE_RESET]->store(
static_cast<double>(
- MONITOR_VALUE(count) / time_diff)));
+ MONITOR_VALUE(count))
+ / time_diff));
fields[METRIC_AVG_VALUE_RESET]->set_notnull();
} else {
fields[METRIC_AVG_VALUE_RESET]->set_null();
@@ -4620,12 +4621,8 @@ static int i_s_innodb_fill_buffer_lru(THD *thd, TABLE_LIST *tables, Item *)
lru_len = UT_LIST_GET_LEN(buf_pool->LRU);
/* Print error message if malloc fail */
- info_buffer = (buf_page_info_t*) my_malloc(
- lru_len * sizeof *info_buffer, MYF(MY_WME));
- /* JAN: TODO: MySQL 5.7 PSI
info_buffer = (buf_page_info_t*) my_malloc(PSI_INSTRUMENT_ME,
lru_len * sizeof *info_buffer, MYF(MY_WME));
- */
if (!info_buffer) {
status = 1;
@@ -7160,228 +7157,6 @@ UNIV_INTERN struct st_maria_plugin i_s_innodb_tablespaces_encryption =
};
namespace Show {
-/** TABLESPACES_SCRUBBING ********************************************/
-/* Fields of the table INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING */
-static ST_FIELD_INFO innodb_tablespaces_scrubbing_fields_info[] =
-{
-#define TABLESPACES_SCRUBBING_SPACE 0
- Column("SPACE", ULonglong(), NOT_NULL),
-
-#define TABLESPACES_SCRUBBING_NAME 1
- Column("NAME", Varchar(MAX_FULL_NAME_LEN + 1), NULLABLE),
-
-#define TABLESPACES_SCRUBBING_COMPRESSED 2
- Column("COMPRESSED", ULong(1), NOT_NULL),
-
-#define TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED 3
- Column("LAST_SCRUB_COMPLETED", Datetime(0), NULLABLE),
-
-#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_STARTED 4
- Column("CURRENT_SCRUB_STARTED", Datetime(0), NULLABLE),
-
-#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_ACTIVE_THREADS 5
- Column("CURRENT_SCRUB_ACTIVE_THREADS", ULong(), NULLABLE),
-
-#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_PAGE_NUMBER 6
- Column("CURRENT_SCRUB_PAGE_NUMBER", ULonglong(),NOT_NULL),
-
-#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_MAX_PAGE_NUMBER 7
- Column("CURRENT_SCRUB_MAX_PAGE_NUMBER", ULonglong(), NOT_NULL),
-
-#define TABLESPACES_SCRUBBING_ON_SSD 8
- Column("ON_SSD", ULong(1), NOT_NULL),
-
- CEnd()
-};
-} // namespace Show
-
-/**********************************************************************//**
-Function to fill INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING
-with information collected by scanning SYS_TABLESPACES table and
-fil_space.
-@param[in] thd Thread handle
-@param[in] space Tablespace
-@param[in] table_to_fill I_S table
-@return 0 on success */
-static
-int
-i_s_dict_fill_tablespaces_scrubbing(
- THD* thd,
- fil_space_t* space,
- TABLE* table_to_fill)
-{
- Field** fields;
- struct fil_space_scrub_status_t status;
-
- DBUG_ENTER("i_s_dict_fill_tablespaces_scrubbing");
-
- fields = table_to_fill->field;
-
- fil_space_get_scrub_status(space, &status);
-
- OK(fields[TABLESPACES_SCRUBBING_SPACE]->store(space->id, true));
-
- OK(field_store_string(fields[TABLESPACES_SCRUBBING_NAME],
- space->name));
-
- OK(fields[TABLESPACES_SCRUBBING_COMPRESSED]->store(
- status.compressed ? 1 : 0, true));
-
- if (status.last_scrub_completed == 0) {
- fields[TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED]->set_null();
- } else {
- fields[TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED]
- ->set_notnull();
- OK(field_store_time_t(
- fields[TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED],
- status.last_scrub_completed));
- }
-
- int field_numbers[] = {
- TABLESPACES_SCRUBBING_CURRENT_SCRUB_STARTED,
- TABLESPACES_SCRUBBING_CURRENT_SCRUB_ACTIVE_THREADS,
- TABLESPACES_SCRUBBING_CURRENT_SCRUB_PAGE_NUMBER,
- TABLESPACES_SCRUBBING_CURRENT_SCRUB_MAX_PAGE_NUMBER };
-
- if (status.scrubbing) {
- for (uint i = 0; i < array_elements(field_numbers); i++) {
- fields[field_numbers[i]]->set_notnull();
- }
-
- OK(field_store_time_t(
- fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_STARTED],
- status.current_scrub_started));
- OK(fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_ACTIVE_THREADS]
- ->store(status.current_scrub_active_threads, true));
- OK(fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_PAGE_NUMBER]
- ->store(status.current_scrub_page_number, true));
- OK(fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_MAX_PAGE_NUMBER]
- ->store(status.current_scrub_max_page_number, true));
- } else {
- for (uint i = 0; i < array_elements(field_numbers); i++) {
- fields[field_numbers[i]]->set_null();
- }
- }
-
- OK(fields[TABLESPACES_SCRUBBING_ON_SSD]->store(!space->is_rotational(),
- true));
- OK(schema_table_store_record(thd, table_to_fill));
-
- DBUG_RETURN(0);
-}
-/*******************************************************************//**
-Function to populate INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING table.
-Loop through each record in TABLESPACES_SCRUBBING, and extract the column
-information and fill the INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING table.
-@return 0 on success */
-static
-int
-i_s_tablespaces_scrubbing_fill_table(
-/*===========================*/
- THD* thd, /*!< in: thread */
- TABLE_LIST* tables, /*!< in/out: tables to fill */
- Item* ) /*!< in: condition (not used) */
-{
- DBUG_ENTER("i_s_tablespaces_scrubbing_fill_table");
- RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name.str);
-
- /* deny access to user without SUPER_ACL privilege */
- if (check_global_access(thd, SUPER_ACL)) {
- DBUG_RETURN(0);
- }
-
- mutex_enter(&fil_system.mutex);
-
- for (fil_space_t* space = UT_LIST_GET_FIRST(fil_system.space_list);
- space; space = UT_LIST_GET_NEXT(space_list, space)) {
- if (space->purpose == FIL_TYPE_TABLESPACE
- && !space->is_stopping()) {
- space->acquire();
- mutex_exit(&fil_system.mutex);
- if (int err = i_s_dict_fill_tablespaces_scrubbing(
- thd, space, tables->table)) {
- space->release();
- DBUG_RETURN(err);
- }
- mutex_enter(&fil_system.mutex);
- space->release();
- }
- }
-
- mutex_exit(&fil_system.mutex);
- DBUG_RETURN(0);
-}
-/*******************************************************************//**
-Bind the dynamic table INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING
-@return 0 on success */
-static
-int
-innodb_tablespaces_scrubbing_init(
-/*========================*/
- void* p) /*!< in/out: table schema object */
-{
- ST_SCHEMA_TABLE* schema;
-
- DBUG_ENTER("innodb_tablespaces_scrubbing_init");
-
- schema = (ST_SCHEMA_TABLE*) p;
-
- schema->fields_info = Show::innodb_tablespaces_scrubbing_fields_info;
- schema->fill_table = i_s_tablespaces_scrubbing_fill_table;
-
- DBUG_RETURN(0);
-}
-
-UNIV_INTERN struct st_maria_plugin i_s_innodb_tablespaces_scrubbing =
-{
- /* the plugin type (a MYSQL_XXX_PLUGIN value) */
- /* int */
- STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
-
- /* pointer to type-specific plugin descriptor */
- /* void* */
- STRUCT_FLD(info, &i_s_info),
-
- /* plugin name */
- /* const char* */
- STRUCT_FLD(name, "INNODB_TABLESPACES_SCRUBBING"),
-
- /* plugin author (for SHOW PLUGINS) */
- /* const char* */
- STRUCT_FLD(author, "Google Inc"),
-
- /* general descriptive text (for SHOW PLUGINS) */
- /* const char* */
- STRUCT_FLD(descr, "InnoDB TABLESPACES_SCRUBBING"),
-
- /* the plugin license (PLUGIN_LICENSE_XXX) */
- /* int */
- STRUCT_FLD(license, PLUGIN_LICENSE_BSD),
-
- /* the function to invoke when plugin is loaded */
- /* int (*)(void*); */
- STRUCT_FLD(init, innodb_tablespaces_scrubbing_init),
-
- /* the function to invoke when plugin is unloaded */
- /* int (*)(void*); */
- STRUCT_FLD(deinit, i_s_common_deinit),
-
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- STRUCT_FLD(version, INNODB_VERSION_SHORT),
-
- /* struct st_mysql_show_var* */
- STRUCT_FLD(status_vars, NULL),
-
- /* struct st_mysql_sys_var** */
- STRUCT_FLD(system_vars, NULL),
-
- /* Maria extension */
- STRUCT_FLD(version_info, INNODB_VERSION_STR),
- STRUCT_FLD(maturity, MariaDB_PLUGIN_MATURITY_STABLE)
-};
-
-namespace Show {
/** INNODB_MUTEXES *********************************************/
/* Fields of the dynamic table INFORMATION_SCHEMA.INNODB_MUTEXES */
static ST_FIELD_INFO innodb_mutexes_fields_info[] =
diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc
index 94a5af0015c..66db3c0c832 100644
--- a/storage/innobase/ibuf/ibuf0ibuf.cc
+++ b/storage/innobase/ibuf/ibuf0ibuf.cc
@@ -1948,8 +1948,6 @@ ibuf_remove_free_page(void)
const page_id_t page_id(IBUF_SPACE_ID, page_no);
- ut_d(buf_page_reset_file_page_was_freed(page_id));
-
ibuf_enter(&mtr);
mutex_enter(&ibuf_mutex);
@@ -1982,7 +1980,7 @@ ibuf_remove_free_page(void)
ibuf_bitmap_page_set_bits<IBUF_BITMAP_IBUF>(
bitmap_page, page_id, srv_page_size, false, &mtr);
- ut_d(buf_page_set_file_page_was_freed(page_id));
+ buf_page_free(page_id, &mtr, __FILE__, __LINE__);
ibuf_mtr_commit(&mtr);
}
@@ -2556,7 +2554,7 @@ ulint ibuf_merge_all()
#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
ulint sum_bytes = 0;
- ulint n_pages = PCT_IO(100);
+ ulint n_pages = srv_io_capacity;
for (ulint sum_pages = 0; sum_pages < n_pages; ) {
ulint n_pag2;
diff --git a/storage/innobase/include/btr0btr.h b/storage/innobase/include/btr0btr.h
index bc6c896cdf5..6eb07d6c225 100644
--- a/storage/innobase/include/btr0btr.h
+++ b/storage/innobase/include/btr0btr.h
@@ -337,7 +337,7 @@ btr_node_ptr_get_child_page_no(
@param[in,out] mtr mini-transaction
@return page number of the created root
@retval FIL_NULL if did not succeed */
-ulint
+uint32_t
btr_create(
ulint type,
fil_space_t* space,
diff --git a/storage/innobase/include/btr0scrub.h b/storage/innobase/include/btr0scrub.h
deleted file mode 100644
index feaf61784d0..00000000000
--- a/storage/innobase/include/btr0scrub.h
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2014 Google
-
-#ifndef btr0scrub_h
-#define btr0scrub_h
-
-#include "dict0dict.h"
-
-/**
- * enum describing page allocation status
- */
-enum btr_scrub_page_allocation_status_t {
- BTR_SCRUB_PAGE_FREE,
- BTR_SCRUB_PAGE_ALLOCATED,
- BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN
-};
-
-/**
-* constants returned by btr_page_needs_scrubbing & btr_scrub_recheck_page
-*/
-#define BTR_SCRUB_PAGE 1 /* page should be scrubbed */
-#define BTR_SCRUB_SKIP_PAGE 2 /* no scrub & no action */
-#define BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE 3 /* no scrub & close table */
-#define BTR_SCRUB_SKIP_PAGE_AND_COMPLETE_SPACE 4 /* no scrub & complete space */
-#define BTR_SCRUB_TURNED_OFF 5 /* we detected that scrubbing
- was disabled by global
- variable */
-
-/**************************************************************//**
-struct for keeping scrub statistics. */
-struct btr_scrub_stat_t {
- /* page reorganizations */
- ulint page_reorganizations;
- /* page splits */
- ulint page_splits;
- /* scrub failures */
- ulint page_split_failures_underflow;
- ulint page_split_failures_out_of_filespace;
- ulint page_split_failures_missing_index;
- ulint page_split_failures_unknown;
-};
-
-/**************************************************************//**
-struct for thread local scrub state. */
-struct btr_scrub_t {
-
- /* current space */
- ulint space;
-
- /* is scrubbing enabled for this space */
- bool scrubbing;
-
- /* is current space compressed */
- bool compressed;
-
- dict_table_t* current_table;
- dict_index_t* current_index;
- /* savepoint for X_LATCH of block */
- ulint savepoint;
-
- /* statistic counters */
- btr_scrub_stat_t scrub_stat;
-};
-
-/*********************************************************************
-Init scrub global variables */
-UNIV_INTERN
-void
-btr_scrub_init();
-
-/*********************************************************************
-Cleanup scrub globals */
-UNIV_INTERN
-void
-btr_scrub_cleanup();
-
-/***********************************************************************
-Return crypt statistics */
-UNIV_INTERN
-void
-btr_scrub_total_stat(
-/*==================*/
- btr_scrub_stat_t *stat); /*!< out: stats to update */
-
-/**************************************************************//**
-Check if a page needs scrubbing
-* @return BTR_SCRUB_PAGE if page should be scrubbed
-* else btr_scrub_skip_page should be called
-* with this return value (and without any latches held)
-*/
-UNIV_INTERN
-int
-btr_page_needs_scrubbing(
-/*=====================*/
- btr_scrub_t* scrub_data, /*!< in: scrub data */
- buf_block_t* block, /*!< in: block to check, latched */
- btr_scrub_page_allocation_status_t allocated); /*!< in: is block
- allocated, free or
- unknown */
-
-/****************************************************************
-Recheck if a page needs scrubbing, and if it does load appropriate
-table and index
-* @return BTR_SCRUB_PAGE if page should be scrubbed
-* else btr_scrub_skip_page should be called
-* with this return value (and without any latches held)
-*/
-UNIV_INTERN
-int
-btr_scrub_recheck_page(
-/*====================*/
- btr_scrub_t* scrub_data, /*!< inut: scrub data */
- buf_block_t* block, /*!< in: block */
- btr_scrub_page_allocation_status_t allocated, /*!< in: is block
- allocated or free */
- mtr_t* mtr); /*!< in: mtr */
-
-/****************************************************************
-Perform actual scrubbing of page */
-UNIV_INTERN
-int
-btr_scrub_page(
-/*============*/
- btr_scrub_t* scrub_data, /*!< in/out: scrub data */
- buf_block_t* block, /*!< in: block */
- btr_scrub_page_allocation_status_t allocated, /*!< in: is block
- allocated or free */
- mtr_t* mtr); /*!< in: mtr */
-
-/****************************************************************
-Perform cleanup needed for a page not needing scrubbing */
-UNIV_INTERN
-void
-btr_scrub_skip_page(
-/*============*/
- btr_scrub_t* scrub_data, /*!< in/out: scrub data */
- int needs_scrubbing); /*!< in: return value from
- btr_page_needs_scrubbing or
- btr_scrub_recheck_page which encodes what kind
- of cleanup is needed */
-
-/****************************************************************
-Start iterating a space
-* @return true if scrubbing is turned on */
-UNIV_INTERN
-bool
-btr_scrub_start_space(
-/*===================*/
- ulint space, /*!< in: space */
- btr_scrub_t* scrub_data); /*!< in/out: scrub data */
-
-/** Complete iterating a space.
-@param[in,out] scrub_data scrub data */
-UNIV_INTERN
-void
-btr_scrub_complete_space(btr_scrub_t* scrub_data);
-
-#endif
diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
index 3432ef12df9..3afb6e49431 100644
--- a/storage/innobase/include/buf0buf.h
+++ b/storage/innobase/include/buf0buf.h
@@ -372,10 +372,7 @@ FILE_PAGE (the other is buf_page_get_gen).
@param[in,out] mtr mini-transaction
@return pointer to the block, page bufferfixed */
buf_block_t*
-buf_page_create(
- const page_id_t page_id,
- ulint zip_size,
- mtr_t* mtr);
+buf_page_create(const page_id_t page_id, ulint zip_size, mtr_t *mtr);
/********************************************************************//**
Releases a compressed-only page acquired with buf_page_get_zip(). */
@@ -402,24 +399,17 @@ buf_page_make_young(
/*================*/
buf_page_t* bpage); /*!< in: buffer block of a file page */
-#ifdef UNIV_DEBUG
-/** Sets file_page_was_freed TRUE if the page is found in the buffer pool.
-This function should be called when we free a file page and want the
-debug version to check that it is not accessed any more unless
-reallocated.
-@param[in] page_id page id
-@return control block if found in page hash table, otherwise NULL */
-buf_page_t* buf_page_set_file_page_was_freed(const page_id_t page_id);
-
-/** Sets file_page_was_freed FALSE if the page is found in the buffer pool.
-This function should be called when we free a file page and want the
-debug version to check that it is not accessed any more unless
-reallocated.
-@param[in] page_id page id
-@return control block if found in page hash table, otherwise NULL */
-buf_page_t* buf_page_reset_file_page_was_freed(const page_id_t page_id);
+/** Mark the page status as FREED for the given tablespace id and
+page number. If the page is not in buffer pool then ignore it.
+@param[in] page_id page_id
+@param[in,out] mtr mini-transaction
+@param[in] file file name
+@param[in] line line where called */
+void buf_page_free(const page_id_t page_id,
+ mtr_t *mtr,
+ const char *file,
+ unsigned line);
-#endif /* UNIV_DEBUG */
/********************************************************************//**
Reads the freed_page_clock of a buffer block.
@return freed_page_clock */
@@ -1244,13 +1234,6 @@ public:
if written again we check is TRIM
operation needed. */
- /** whether the page will be (re)initialized at the time it will
- be written to the file, that is, whether the doublewrite buffer
- can be safely skipped. Protected under similar conditions as
- buf_block_t::frame. Can be set while holding buf_block_t::lock
- X-latch and reset during page flush, while io_fix is in effect. */
- bool init_on_flush;
-
ulint real_size; /*!< Real size of the page
Normal pages == srv_page_size
page compressed pages, payload
@@ -1365,17 +1348,25 @@ public:
and bytes allocated for recv_sys.pages,
the field is protected by
recv_sys_t::mutex. */
-# ifdef UNIV_DEBUG
- ibool file_page_was_freed;
- /*!< this is set to TRUE when
- fsp frees a page in buffer pool;
- protected by buf_pool->zip_mutex
- or buf_block_t::mutex. */
-# endif /* UNIV_DEBUG */
/** Change buffer entries for the page exist.
Protected by io_fix==BUF_IO_READ or by buf_block_t::lock. */
bool ibuf_exist;
+ /** Block initialization status. Can be modified while holding io_fix
+ or buf_block_t::lock X-latch */
+ enum {
+ /** the page was read normally and should be flushed normally */
+ NORMAL = 0,
+ /** the page was (re)initialized, and the doublewrite buffer can be
+ skipped on the next flush */
+ INIT_ON_FLUSH,
+ /** the page was freed and need to be flushed.
+ For page_compressed, page flush will punch a hole to free space.
+ Else if innodb_immediate_scrub_data_uncompressed, the page will
+ be overwritten with zeroes. */
+ FREED
+ } status;
+
void fix() { buf_fix_count++; }
uint32_t unfix()
{
diff --git a/storage/innobase/include/data0type.h b/storage/innobase/include/data0type.h
index 0e496085113..edeee0c8f07 100644
--- a/storage/innobase/include/data0type.h
+++ b/storage/innobase/include/data0type.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
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
@@ -330,9 +330,9 @@ dtype_get_mblen(
/*============*/
ulint mtype, /*!< in: main type */
ulint prtype, /*!< in: precise type (and collation) */
- ulint* mbminlen, /*!< out: minimum length of a
+ unsigned* mbminlen, /*!< out: minimum length of a
multi-byte character */
- ulint* mbmaxlen); /*!< out: maximum length of a
+ unsigned* mbmaxlen); /*!< out: maximum length of a
multi-byte character */
/**
Get the charset-collation code for string types.
@@ -399,7 +399,7 @@ dtype_get_mbmaxlen(
Returns the size of a fixed size data type, 0 if not a fixed size type.
@return fixed size, or 0 */
UNIV_INLINE
-ulint
+unsigned
dtype_get_fixed_size_low(
/*=====================*/
ulint mtype, /*!< in: main type */
@@ -415,7 +415,7 @@ dtype_get_fixed_size_low(
Returns the minimum size of a data type.
@return minimum size */
UNIV_INLINE
-ulint
+unsigned
dtype_get_min_size_low(
/*===================*/
ulint mtype, /*!< in: main type */
diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic
index 037a71a9345..f5a1eb22d66 100644
--- a/storage/innobase/include/data0type.ic
+++ b/storage/innobase/include/data0type.ic
@@ -72,9 +72,9 @@ dtype_get_mblen(
/*============*/
ulint mtype, /*!< in: main type */
ulint prtype, /*!< in: precise type (and collation) */
- ulint* mbminlen, /*!< out: minimum length of a
+ unsigned*mbminlen, /*!< out: minimum length of a
multi-byte character */
- ulint* mbmaxlen) /*!< out: maximum length of a
+ unsigned*mbmaxlen) /*!< out: maximum length of a
multi-byte character */
{
if (dtype_is_string_type(mtype)) {
@@ -96,12 +96,11 @@ dtype_set_mblen(
/*============*/
dtype_t* type) /*!< in/out: type */
{
- ulint mbminlen;
- ulint mbmaxlen;
+ unsigned mbminlen, mbmaxlen;
dtype_get_mblen(type->mtype, type->prtype, &mbminlen, &mbmaxlen);
- type->mbminlen = mbminlen;
- type->mbmaxlen = mbmaxlen;
+ type->mbminlen = mbminlen & 7;
+ type->mbmaxlen = mbmaxlen & 7;
ut_ad(dtype_validate(type));
}
@@ -429,7 +428,7 @@ dtype_sql_name(
Returns the size of a fixed size data type, 0 if not a fixed size type.
@return fixed size, or 0 */
UNIV_INLINE
-ulint
+unsigned
dtype_get_fixed_size_low(
/*=====================*/
ulint mtype, /*!< in: main type */
@@ -465,15 +464,15 @@ dtype_get_fixed_size_low(
case DATA_INT:
case DATA_FLOAT:
case DATA_DOUBLE:
- return(len);
+ return static_cast<unsigned>(len);
case DATA_MYSQL:
if (prtype & DATA_BINARY_TYPE) {
- return(len);
+ return static_cast<unsigned>(len);
} else if (!comp) {
- return(len);
+ return static_cast<unsigned>(len);
} else {
#ifdef UNIV_DEBUG
- ulint i_mbminlen, i_mbmaxlen;
+ unsigned i_mbminlen, i_mbmaxlen;
innobase_get_cset_width(
dtype_get_charset_coll(prtype),
@@ -483,7 +482,7 @@ dtype_get_fixed_size_low(
ut_ad(i_mbmaxlen == mbmaxlen);
#endif /* UNIV_DEBUG */
if (mbminlen == mbmaxlen) {
- return(len);
+ return static_cast<unsigned>(len);
}
}
/* Treat as variable-length. */
@@ -506,7 +505,7 @@ dtype_get_fixed_size_low(
Returns the minimum size of a data type.
@return minimum size */
UNIV_INLINE
-ulint
+unsigned
dtype_get_min_size_low(
/*===================*/
ulint mtype, /*!< in: main type */
@@ -539,20 +538,21 @@ dtype_get_min_size_low(
case DATA_INT:
case DATA_FLOAT:
case DATA_DOUBLE:
- return(len);
+ return static_cast<unsigned>(len);
case DATA_MYSQL:
if (prtype & DATA_BINARY_TYPE) {
- return(len);
+ return static_cast<unsigned>(len);
} else {
if (mbminlen == mbmaxlen) {
- return(len);
+ return static_cast<unsigned>(len);
}
/* this is a variable-length character set */
ut_a(mbminlen > 0);
ut_a(mbmaxlen > mbminlen);
ut_a(len % mbmaxlen == 0);
- return(len * mbminlen / mbmaxlen);
+ return static_cast<unsigned>(
+ len * mbminlen / mbmaxlen);
}
case DATA_VARCHAR:
case DATA_BINARY:
diff --git a/storage/innobase/include/dict0crea.h b/storage/innobase/include/dict0crea.h
index 1935e58f9eb..13706d6bfad 100644
--- a/storage/innobase/include/dict0crea.h
+++ b/storage/innobase/include/dict0crea.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
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
@@ -272,7 +272,7 @@ struct ind_node_t{
/*----------------------*/
/* Local storage for this graph node */
ulint state; /*!< node execution state */
- ulint page_no; /* root page number of the index */
+ uint32_t page_no; /* root page number of the index */
dict_table_t* table; /*!< table which owns the index */
dtuple_t* ind_row; /* index definition row built */
ulint field_no; /* next field definition to insert */
diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h
index 4a2ca2b3daa..508ef001057 100644
--- a/storage/innobase/include/dict0dict.h
+++ b/storage/innobase/include/dict0dict.h
@@ -189,7 +189,7 @@ dict_table_close_and_drop(
Gets the minimum number of bytes per character.
@return minimum multi-byte char size, in bytes */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_mbminlen(
/*==================*/
const dict_col_t* col) /*!< in: column */
@@ -198,7 +198,7 @@ dict_col_get_mbminlen(
Gets the maximum number of bytes per character.
@return maximum multi-byte char size, in bytes */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_mbmaxlen(
/*==================*/
const dict_col_t* col) /*!< in: column */
@@ -254,7 +254,7 @@ dict_col_type_assert_equal(
Returns the minimum size of the column.
@return minimum size */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_min_size(
/*==================*/
const dict_col_t* col) /*!< in: column */
@@ -272,7 +272,7 @@ dict_col_get_max_size(
Returns the size of a fixed size column, 0 if not a fixed size column.
@return fixed size, or 0 */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_fixed_size(
/*====================*/
const dict_col_t* col, /*!< in: column */
@@ -283,7 +283,7 @@ Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column.
For fixed length types it is the fixed length of the type, otherwise 0.
@return SQL null storage size in ROW_FORMAT=REDUNDANT */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_sql_null_size(
/*=======================*/
const dict_col_t* col, /*!< in: column */
@@ -293,7 +293,7 @@ dict_col_get_sql_null_size(
Gets the column number.
@return col->ind, table column position (starting from 0) */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_no(
/*============*/
const dict_col_t* col) /*!< in: column */
@@ -700,7 +700,7 @@ dictionary cache.
@return number of user-defined (e.g., not ROW_ID) non-virtual
columns of a table */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_n_user_cols(
/*=======================*/
const dict_table_t* table) /*!< in: table */
@@ -710,7 +710,7 @@ Gets the number of all non-virtual columns (also system) in a table
in the dictionary cache.
@return number of columns of a table */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_n_cols(
/*==================*/
const dict_table_t* table) /*!< in: table */
@@ -720,7 +720,7 @@ dict_table_get_n_cols(
@param[in] table the table to check
@return number of virtual columns of a table */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_n_v_cols(
const dict_table_t* table);
@@ -799,7 +799,7 @@ dict_col_t*
dict_table_get_sys_col(
/*===================*/
const dict_table_t* table, /*!< in: table */
- ulint sys) /*!< in: DATA_ROW_ID, ... */
+ unsigned sys) /*!< in: DATA_ROW_ID, ... */
MY_ATTRIBUTE((nonnull, warn_unused_result));
#else /* UNIV_DEBUG */
#define dict_table_get_nth_col(table, pos) (&(table)->cols[pos])
@@ -824,18 +824,18 @@ dict_table_get_col_name(const dict_table_t* table, ulint col_nr)
Gets the given system column number of a table.
@return column number */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_sys_col_no(
/*======================*/
const dict_table_t* table, /*!< in: table */
- ulint sys) /*!< in: DATA_ROW_ID, ... */
+ unsigned sys) /*!< in: DATA_ROW_ID, ... */
MY_ATTRIBUTE((nonnull, warn_unused_result));
/********************************************************************//**
Returns the minimum data size of an index record.
@return minimum data size in bytes */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_min_size(
/*====================*/
const dict_index_t* index) /*!< in: index */
@@ -1006,7 +1006,7 @@ Gets the number of fields in the internal representation of an index,
including fields added by the dictionary system.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_fields(
/*====================*/
const dict_index_t* index) /*!< in: an internal
@@ -1021,7 +1021,7 @@ we do not take multiversioning into account: in the B-tree use the value
returned by dict_index_get_n_unique_in_tree.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_unique(
/*====================*/
const dict_index_t* index) /*!< in: an internal representation
@@ -1033,7 +1033,7 @@ which uniquely determine the position of an index entry in the index, if
we also take multiversioning into account.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_unique_in_tree(
/*============================*/
const dict_index_t* index) /*!< in: an internal representation
@@ -1051,7 +1051,7 @@ include page no field.
@param[in] index index
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_unique_in_tree_nonleaf(
const dict_index_t* index)
MY_ATTRIBUTE((nonnull, warn_unused_result));
@@ -1062,7 +1062,7 @@ unique, but this function returns the number of fields the user defined
in the index as ordering fields.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_ordering_defined_by_user(
/*======================================*/
const dict_index_t* index) /*!< in: an internal representation
@@ -1150,7 +1150,7 @@ dict_index_get_nth_field_pos(
/********************************************************************//**
Looks for column n position in the clustered index.
@return position in internal representation of the clustered index */
-ulint
+unsigned
dict_table_get_nth_col_pos(
/*=======================*/
const dict_table_t* table, /*!< in: table */
@@ -1274,7 +1274,7 @@ dict_index_build_data_tuple(
Gets the page number of the root of the index tree.
@return page number */
UNIV_INLINE
-ulint
+uint32_t
dict_index_get_page(
/*================*/
const dict_index_t* tree) /*!< in: index */
diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic
index e24085ecefe..b5550263a49 100644
--- a/storage/innobase/include/dict0dict.ic
+++ b/storage/innobase/include/dict0dict.ic
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2013, 2019, MariaDB Corporation.
+Copyright (c) 2013, 2020, MariaDB Corporation.
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
@@ -31,7 +31,7 @@ Created 1/8/1996 Heikki Tuuri
Gets the minimum number of bytes per character.
@return minimum multi-byte char size, in bytes */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_mbminlen(
/*==================*/
const dict_col_t* col) /*!< in: column */
@@ -42,7 +42,7 @@ dict_col_get_mbminlen(
Gets the maximum number of bytes per character.
@return maximum multi-byte char size, in bytes */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_mbmaxlen(
/*==================*/
const dict_col_t* col) /*!< in: column */
@@ -93,7 +93,7 @@ dict_col_type_assert_equal(
Returns the minimum size of the column.
@return minimum size */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_min_size(
/*==================*/
const dict_col_t* col) /*!< in: column */
@@ -116,7 +116,7 @@ dict_col_get_max_size(
Returns the size of a fixed size column, 0 if not a fixed size column.
@return fixed size, or 0 */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_fixed_size(
/*====================*/
const dict_col_t* col, /*!< in: column */
@@ -130,7 +130,7 @@ Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column.
For fixed length types it is the fixed length of the type, otherwise 0.
@return SQL null storage size in ROW_FORMAT=REDUNDANT */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_sql_null_size(
/*=======================*/
const dict_col_t* col, /*!< in: column */
@@ -143,7 +143,7 @@ dict_col_get_sql_null_size(
Gets the column number.
@return col->ind, table column position (starting from 0) */
UNIV_INLINE
-ulint
+unsigned
dict_col_get_no(
/*============*/
const dict_col_t* col) /*!< in: column */
@@ -247,7 +247,7 @@ dictionary cache.
@return number of user-defined (e.g., not ROW_ID) non-virtual
columns of a table */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_n_user_cols(
/*=======================*/
const dict_table_t* table) /*!< in: table */
@@ -264,7 +264,7 @@ Gets the number of all non-virtual columns (also system) in a table
in the dictionary cache.
@return number of non-virtual columns of a table */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_n_cols(
/*==================*/
const dict_table_t* table) /*!< in: table */
@@ -277,7 +277,7 @@ dict_table_get_n_cols(
@param[in] table the table to check
@return number of virtual columns of a table */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_n_v_cols(
const dict_table_t* table)
{
@@ -296,7 +296,7 @@ dict_table_has_indexed_v_cols(
const dict_table_t* table)
{
- for (ulint i = 0; i < table->n_v_cols; i++) {
+ for (unsigned i = 0; i < table->n_v_cols; i++) {
const dict_v_col_t* col = dict_table_get_nth_v_col(table, i);
if (col->m_col.ord_part) {
return(true);
@@ -399,7 +399,7 @@ dict_col_t*
dict_table_get_sys_col(
/*===================*/
const dict_table_t* table, /*!< in: table */
- ulint sys) /*!< in: DATA_ROW_ID, ... */
+ unsigned sys) /*!< in: DATA_ROW_ID, ... */
{
dict_col_t* col;
col = dict_table_get_nth_col(table,
@@ -415,11 +415,11 @@ dict_table_get_sys_col(
Gets the given system column number of a table.
@return column number */
UNIV_INLINE
-ulint
+unsigned
dict_table_get_sys_col_no(
/*======================*/
const dict_table_t* table, /*!< in: table */
- ulint sys) /*!< in: DATA_ROW_ID, ... */
+ unsigned sys) /*!< in: DATA_ROW_ID, ... */
{
ut_ad(sys < DATA_N_SYS_COLS);
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
@@ -710,7 +710,7 @@ Gets the number of fields in the internal representation of an index,
including fields added by the dictionary system.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_fields(
/*====================*/
const dict_index_t* index) /*!< in: an internal
@@ -728,7 +728,7 @@ we do not take multiversioning into account: in the B-tree use the value
returned by dict_index_get_n_unique_in_tree.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_unique(
/*====================*/
const dict_index_t* index) /*!< in: an internal representation
@@ -745,7 +745,7 @@ which uniquely determine the position of an index entry in the index, if
we also take multiversioning into account.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_unique_in_tree(
/*============================*/
const dict_index_t* index) /*!< in: an internal representation
@@ -770,7 +770,7 @@ include page no field.
@param[in] index index
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_unique_in_tree_nonleaf(
const dict_index_t* index)
{
@@ -794,7 +794,7 @@ to make a clustered index unique, but this function returns the number of
fields the user defined in the index as ordering fields.
@return number of fields */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_n_ordering_defined_by_user(
/*======================================*/
const dict_index_t* index) /*!< in: an internal representation
@@ -879,27 +879,25 @@ dict_index_get_nth_col_pos(
Returns the minimum data size of an index record.
@return minimum data size in bytes */
UNIV_INLINE
-ulint
+unsigned
dict_index_get_min_size(
/*====================*/
const dict_index_t* index) /*!< in: index */
{
- ulint n = dict_index_get_n_fields(index);
- ulint size = 0;
+ unsigned n= dict_index_get_n_fields(index);
+ unsigned size= 0;
- while (n--) {
- size += dict_col_get_min_size(dict_index_get_nth_col(index,
- n));
- }
+ while (n--)
+ size+= dict_col_get_min_size(dict_index_get_nth_col(index, n));
- return(size);
+ return size;
}
/*********************************************************************//**
Gets the page number of the root of the index tree.
@return page number */
UNIV_INLINE
-ulint
+uint32_t
dict_index_get_page(
/*================*/
const dict_index_t* index) /*!< in: index */
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index 5b489cc98c2..5e702d42dc7 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -2,7 +2,7 @@
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc.
-Copyright (c) 2013, 2019, MariaDB Corporation.
+Copyright (c) 2013, 2020, MariaDB Corporation.
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
@@ -950,6 +950,9 @@ const char innobase_index_reserve_name[] = "GEN_CLUST_INDEX";
/** Data structure for an index. Most fields will be
initialized to 0, NULL or FALSE in dict_mem_index_create(). */
struct dict_index_t {
+ /** Maximum number of fields */
+ static constexpr unsigned MAX_N_FIELDS= (1U << 10) - 1;
+
index_id_t id; /*!< id of the index */
mem_heap_t* heap; /*!< memory heap */
id_name_t name; /*!< index name */
@@ -2352,7 +2355,8 @@ inline void dict_index_t::clear_instant_alter()
}
DBUG_ASSERT(&fields[n_fields - table->n_dropped()] == end);
- n_core_fields = n_fields = n_def = end - fields;
+ n_core_fields = n_fields = n_def
+ = static_cast<unsigned>(end - fields) & MAX_N_FIELDS;
n_core_null_bytes = UT_BITS_IN_BYTES(n_nullable);
std::sort(begin, end, [](const dict_field_t& a, const dict_field_t& b)
{ return a.col->ind < b.col->ind; });
@@ -2361,7 +2365,10 @@ inline void dict_index_t::clear_instant_alter()
auto a = std::find_if(begin, end,
[ai_col](const dict_field_t& f)
{ return f.col == ai_col; });
- table->persistent_autoinc = (a == end) ? 0 : 1 + (a - fields);
+ table->persistent_autoinc = (a == end)
+ ? 0
+ : (1 + static_cast<unsigned>(a - fields))
+ & MAX_N_FIELDS;
}
}
diff --git a/storage/innobase/include/dyn0buf.h b/storage/innobase/include/dyn0buf.h
index b15d35c4831..ffe9b5d21dc 100644
--- a/storage/innobase/include/dyn0buf.h
+++ b/storage/innobase/include/dyn0buf.h
@@ -475,20 +475,4 @@ private:
block_t m_first_block;
};
-/** mtr_buf_t copier */
-struct mtr_buf_copy_t {
- /** The copied buffer */
- mtr_buf_t m_buf;
-
- /** Append a block to the redo log buffer.
- @return whether the appending should continue (always true here) */
- bool operator()(const mtr_buf_t::block_t* block)
- {
- byte* buf = m_buf.open(block->used());
- memcpy(buf, block->begin(), block->used());
- m_buf.close(buf + block->used());
- return(true);
- }
-};
-
#endif /* dyn0buf_h */
diff --git a/storage/innobase/include/fil0crypt.h b/storage/innobase/include/fil0crypt.h
index 6bb97a4ed62..62714b88679 100644
--- a/storage/innobase/include/fil0crypt.h
+++ b/storage/innobase/include/fil0crypt.h
@@ -93,11 +93,6 @@ struct fil_space_rotate_state_t
space */
bool starting; /*!< initial write of IV */
bool flushing; /*!< space is being flushed at end of rotate */
- struct {
- bool is_active; /*!< is scrubbing active in this space */
- time_t last_scrub_completed; /*!< when was last scrub
- completed */
- } scrubbing;
};
#ifndef UNIV_INNOCHECKSUM
@@ -226,18 +221,6 @@ struct fil_crypt_stat_t {
ulint estimated_iops;
};
-/** Status info about scrubbing */
-struct fil_space_scrub_status_t {
- ulint space; /*!< tablespace id */
- bool compressed; /*!< is space compressed */
- time_t last_scrub_completed; /*!< when was last scrub completed */
- bool scrubbing; /*!< is scrubbing ongoing */
- time_t current_scrub_started; /*!< when started current scrubbing */
- ulint current_scrub_active_threads; /*!< current scrub active threads */
- ulint current_scrub_page_number; /*!< current scrub page no */
- ulint current_scrub_max_page_number; /*!< current scrub max page no */
-};
-
/*********************************************************************
Init space crypt */
UNIV_INTERN
@@ -405,10 +388,7 @@ fil_crypt_set_rotation_iops(
/*********************************************************************
Adjust encrypt tables
@param[in] val New setting for innodb-encrypt-tables */
-UNIV_INTERN
-void
-fil_crypt_set_encrypt_tables(
- uint val);
+void fil_crypt_set_encrypt_tables(ulong val);
/*********************************************************************
Init threads for key rotation */
@@ -449,18 +429,6 @@ void
fil_crypt_total_stat(
fil_crypt_stat_t *stat);
-/**
-Get scrub status for a space (used by information_schema)
-
-@param[in] space Tablespace
-@param[out] status Scrub status
-return 0 if data found */
-UNIV_INTERN
-void
-fil_space_get_scrub_status(
- const fil_space_t* space,
- fil_space_scrub_status_t* status);
-
#include "fil0crypt.ic"
#endif /* !UNIV_INNOCHECKSUM */
diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h
index b57ad5cc1f5..8c1cd2e9a34 100644
--- a/storage/innobase/include/fil0fil.h
+++ b/storage/innobase/include/fil0fil.h
@@ -1162,7 +1162,6 @@ fil_create_directory_for_tablename(
'databasename/tablename' format */
/** Replay a file rename operation if possible.
@param[in] space_id tablespace identifier
-@param[in] first_page_no first page number in the file
@param[in] name old file name
@param[in] new_name new file name
@return whether the operation was successfully applied
@@ -1171,7 +1170,6 @@ name was successfully renamed to new_name) */
bool
fil_op_replay_rename(
ulint space_id,
- ulint first_page_no,
const char* name,
const char* new_name)
MY_ATTRIBUTE((warn_unused_result));
@@ -1204,10 +1202,6 @@ fil_delete_tablespace(
@retval NULL if the tablespace does not exist */
fil_space_t* fil_truncate_prepare(ulint space_id);
-/** Write log about an undo tablespace truncate operation. */
-void fil_truncate_log(fil_space_t* space, ulint size, mtr_t* mtr)
- MY_ATTRIBUTE((nonnull));
-
/*******************************************************************//**
Closes a single-table tablespace. The tablespace must be cached in the
memory cache. Free all pages used by the tablespace.
@@ -1384,6 +1378,8 @@ fil_space_extend(
@param[in] message message for aio handler if non-sync aio
used, else ignored
@param[in] ignore whether to ignore out-of-bounds page_id
+@param[in] punch_hole punch the hole to the file for page_compressed
+ tablespace
@return DB_SUCCESS, or DB_TABLESPACE_DELETED
if we are trying to do i/o on a tablespace which does not exist */
dberr_t
@@ -1396,7 +1392,8 @@ fil_io(
ulint len,
void* buf,
void* message,
- bool ignore = false);
+ bool ignore = false,
+ bool punch_hole = false);
/**********************************************************************//**
Waits for an aio operation to complete. This function is used to write the
@@ -1490,20 +1487,6 @@ char*
fil_path_to_space_name(
const char* filename);
-/** Generate redo log for swapping two .ibd files
-@param[in] old_table old table
-@param[in] new_table new table
-@param[in] tmp_name temporary table name
-@param[in,out] mtr mini-transaction
-@return innodb error code */
-dberr_t
-fil_mtr_rename_log(
- const dict_table_t* old_table,
- const dict_table_t* new_table,
- const char* tmp_name,
- mtr_t* mtr)
- MY_ATTRIBUTE((nonnull, warn_unused_result));
-
/** Acquire the fil_system mutex. */
#define fil_system_enter() mutex_enter(&fil_system.mutex)
/** Release the fil_system mutex. */
@@ -1543,8 +1526,8 @@ inline bool fil_names_write_if_was_clean(fil_space_t* space)
}
const bool was_clean = space->max_lsn == 0;
- ut_ad(space->max_lsn <= log_sys.lsn);
- space->max_lsn = log_sys.lsn;
+ ut_ad(space->max_lsn <= log_sys.get_lsn());
+ space->max_lsn = log_sys.get_lsn();
if (was_clean) {
fil_names_dirty_and_write(space);
diff --git a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h
index 443dce51ff5..17309dc336b 100644
--- a/storage/innobase/include/ha_prototypes.h
+++ b/storage/innobase/include/ha_prototypes.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2006, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
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
@@ -36,6 +36,7 @@ simple headers.
/* Forward declarations */
class THD;
+class Field;
// JAN: TODO missing features:
#undef MYSQL_FT_INIT_EXT
@@ -164,10 +165,8 @@ VARCHAR and the new true VARCHAR in >= 5.0.3 by the 'prtype'.
at least ENUM and SET, and unsigned integer types are 'unsigned types'
@param[in] f MySQL Field
@return DATA_BINARY, DATA_VARCHAR, ... */
-ulint
-get_innobase_type_from_mysql_type(
- ulint* unsigned_flag,
- const void* field);
+unsigned
+get_innobase_type_from_mysql_type(unsigned *unsigned_flag, const Field *field);
/******************************************************************//**
Get the variable length bounds of the given character set. */
@@ -175,8 +174,8 @@ void
innobase_get_cset_width(
/*====================*/
ulint cset, /*!< in: MySQL charset-collation code */
- ulint* mbminlen, /*!< out: minimum length of a char (in bytes) */
- ulint* mbmaxlen); /*!< out: maximum length of a char (in bytes) */
+ unsigned*mbminlen, /*!< out: minimum length of a char (in bytes) */
+ unsigned*mbmaxlen); /*!< out: maximum length of a char (in bytes) */
/******************************************************************//**
Compares NUL-terminated UTF-8 strings case insensitively.
@@ -230,14 +229,11 @@ innobase_casedn_str(
char* a); /*!< in/out: string to put in lower case */
#ifdef WITH_WSREP
-UNIV_INTERN
int
-wsrep_innobase_kill_one_trx(void * const thd_ptr,
- const trx_t * const bf_trx,
- trx_t *victim_trx,
- ibool signal);
+wsrep_innobase_kill_one_trx(THD *bf_thd, const trx_t *bf_trx,
+ trx_t *victim_trx, bool signal);
ulint wsrep_innobase_mysql_sort(int mysql_type, uint charset_number,
- unsigned char* str, unsigned int str_length,
+ unsigned char* str, ulint str_length,
unsigned int buf_length);
#endif /* WITH_WSREP */
diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h
index 2453f6f03fa..cbefee298a9 100644
--- a/storage/innobase/include/lock0lock.h
+++ b/storage/innobase/include/lock0lock.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
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
@@ -344,7 +344,7 @@ lock_sec_rec_read_check_and_lock(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP */
que_thr_t* thr); /*!< in: query thread */
/*********************************************************************//**
@@ -372,7 +372,7 @@ lock_clust_rec_read_check_and_lock(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP */
que_thr_t* thr); /*!< in: query thread */
/*********************************************************************//**
@@ -401,7 +401,7 @@ lock_clust_rec_read_check_and_lock_alt(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP */
que_thr_t* thr) /*!< in: query thread */
MY_ATTRIBUTE((warn_unused_result));
@@ -443,7 +443,7 @@ be granted immediately, the query thread is put to wait.
dberr_t
lock_table(
/*=======*/
- ulint flags, /*!< in: if BTR_NO_LOCKING_FLAG bit is set,
+ unsigned flags, /*!< in: if BTR_NO_LOCKING_FLAG bit is set,
does nothing */
dict_table_t* table, /*!< in/out: database table
in dictionary cache */
@@ -832,7 +832,7 @@ lock_rec_create(
lock_t* c_lock, /*!< conflicting lock */
que_thr_t* thr, /*!< thread owning trx */
#endif
- ulint type_mode,/*!< in: lock mode and wait
+ unsigned type_mode,/*!< in: lock mode and wait
flag, type is ignored and
replaced by LOCK_REC */
const buf_block_t* block, /*!< in: buffer block containing
@@ -871,7 +871,7 @@ lock_rec_create_low(
lock_t* c_lock, /*!< conflicting lock */
que_thr_t* thr, /*!< thread owning trx */
#endif
- ulint type_mode,
+ unsigned type_mode,
ulint space,
ulint page_no,
const page_t* page,
@@ -902,7 +902,7 @@ lock_rec_enqueue_waiting(
#ifdef WITH_WSREP
lock_t* c_lock, /*!< conflicting lock */
#endif
- ulint type_mode,
+ unsigned type_mode,
const buf_block_t* block,
ulint heap_no,
dict_index_t* index,
diff --git a/storage/innobase/include/lock0lock.ic b/storage/innobase/include/lock0lock.ic
index abe5052627b..6c235f23680 100644
--- a/storage/innobase/include/lock0lock.ic
+++ b/storage/innobase/include/lock0lock.ic
@@ -110,7 +110,7 @@ lock_rec_create(
lock_t* c_lock, /*!< conflicting lock */
que_thr_t* thr, /*!< thread owning trx */
#endif
- ulint type_mode,/*!< in: lock mode and wait
+ unsigned type_mode,/*!< in: lock mode and wait
flag, type is ignored and
replaced by LOCK_REC */
const buf_block_t* block, /*!< in: buffer block containing
diff --git a/storage/innobase/include/lock0prdt.h b/storage/innobase/include/lock0prdt.h
index 378a5c2faca..59cf0130625 100644
--- a/storage/innobase/include/lock0prdt.h
+++ b/storage/innobase/include/lock0prdt.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2014, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2018, MariaDB Corporation.
+Copyright (c) 2018, 2020, MariaDB Corporation.
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
@@ -48,7 +48,7 @@ lock_prdt_lock(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint type_mode,
+ unsigned type_mode,
/*!< in: LOCK_PREDICATE or LOCK_PRDT_PAGE */
que_thr_t* thr); /*!< in: query thread
(can be NULL if BTR_NO_LOCKING_FLAG) */
@@ -90,7 +90,7 @@ bool
lock_prdt_has_to_wait(
/*==================*/
const trx_t* trx, /*!< in: trx of new lock */
- ulint type_mode,/*!< in: precise mode of the new lock
+ unsigned type_mode,/*!< in: precise mode of the new lock
to set: LOCK_S or LOCK_X, possibly
ORed to LOCK_PREDICATE or LOCK_PRDT_PAGE,
LOCK_INSERT_INTENTION */
@@ -158,7 +158,7 @@ bool
lock_prdt_has_to_wait(
/*==================*/
const trx_t* trx, /*!< in: trx of new lock */
- ulint type_mode,/*!< in: precise mode of the new lock
+ unsigned type_mode,/*!< in: precise mode of the new lock
to set: LOCK_S or LOCK_X, possibly
ORed to LOCK_PREDICATE or LOCK_PRDT_PAGE,
LOCK_INSERT_INTENTION */
diff --git a/storage/innobase/include/log0crypt.h b/storage/innobase/include/log0crypt.h
index 8d26ccb2ba3..980a79d8f9e 100644
--- a/storage/innobase/include/log0crypt.h
+++ b/storage/innobase/include/log0crypt.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (C) 2013, 2015, Google Inc. All Rights Reserved.
-Copyright (C) 2014, 2018, MariaDB Corporation.
+Copyright (C) 2014, 2020, MariaDB Corporation.
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
@@ -55,23 +55,18 @@ log_crypt_write_checkpoint_buf(
/** Read the MariaDB 10.1 checkpoint crypto (version, msg and iv) info.
@param[in] buf checkpoint buffer
@return whether the operation was successful */
-UNIV_INTERN
-bool
-log_crypt_101_read_checkpoint(const byte* buf);
+ATTRIBUTE_COLD bool log_crypt_101_read_checkpoint(const byte* buf);
/** Decrypt a MariaDB 10.1 redo log block.
-@param[in,out] buf log block
+@param[in,out] buf log block
+@param[in] start_lsn server start LSN
@return whether the decryption was successful */
-UNIV_INTERN
-bool
-log_crypt_101_read_block(byte* buf);
+ATTRIBUTE_COLD bool log_crypt_101_read_block(byte* buf, lsn_t start_lsn);
/** Read the checkpoint crypto (version, msg and iv) info.
@param[in] buf checkpoint buffer
@return whether the operation was successful */
-UNIV_INTERN
-bool
-log_crypt_read_checkpoint_buf(const byte* buf);
+bool log_crypt_read_checkpoint_buf(const byte* buf);
/** log_crypt() operation code */
enum log_crypt_t {
diff --git a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h
index 3e87e03f646..07918e478dc 100644
--- a/storage/innobase/include/log0log.h
+++ b/storage/innobase/include/log0log.h
@@ -127,27 +127,11 @@ Closes the log.
lsn_t
log_close(void);
/*===========*/
-/************************************************************//**
-Gets the current lsn.
-@return current lsn */
-UNIV_INLINE
-lsn_t
-log_get_lsn(void);
-/*=============*/
-/************************************************************//**
-Gets the current lsn.
-@return current lsn */
-UNIV_INLINE
-lsn_t
-log_get_lsn_nowait(void);
-/*=============*/
-/************************************************************//**
-Gets the last lsn that is fully flushed to disk.
-@return last flushed lsn */
-UNIV_INLINE
-ib_uint64_t
-log_get_flush_lsn(void);
-/*=============*/
+/** Read the current LSN. */
+#define log_get_lsn() log_sys.get_lsn()
+
+/** Read the durable LSN */
+#define log_get_flush_lsn() log_sys.get_flushed_lsn()
/****************************************************************
Get log_sys::max_modified_age_async. It is OK to read the value without
@@ -184,15 +168,7 @@ also to be flushed to disk. */
void
log_buffer_flush_to_disk(
bool sync = true);
-/****************************************************************//**
-This functions writes the log buffer to the log file and if 'flush'
-is set it forces a flush of the log file as well. This is meant to be
-called from background master thread only as it does not wait for
-the write (+ possible flush) to finish. */
-void
-log_buffer_sync_in_background(
-/*==========================*/
- bool flush); /*<! in: flush the logs to disk */
+
/** Make a checkpoint. Note that this function does not flush dirty
blocks from the buffer pool: it only checks what is lsn of the oldest
modification in the pool, and writes information about the lsn in
@@ -211,19 +187,10 @@ shutdown. This function also writes all log in log file to the log archive. */
void
logs_empty_and_mark_files_at_shutdown(void);
/*=======================================*/
-/** Read a log group header page to log_sys.checkpoint_buf.
-@param[in] header 0 or LOG_CHECKPOINT_1 or LOG_CHECKPOINT2 */
-void log_header_read(ulint header);
/** Write checkpoint info to the log header and invoke log_mutex_exit().
@param[in] end_lsn start LSN of the FILE_CHECKPOINT mini-transaction */
void log_write_checkpoint_info(lsn_t end_lsn);
-/** Set extra data to be written to the redo log during checkpoint.
-@param[in] buf data to be appended on checkpoint, or NULL
-@return pointer to previous data to be appended on checkpoint */
-mtr_buf_t*
-log_append_on_checkpoint(
- mtr_buf_t* buf);
/**
Checks that there is enough free space in the log to start a new query step.
Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this
@@ -332,13 +299,6 @@ void
log_print(
/*======*/
FILE* file); /*!< in: file where to print */
-/******************************************************//**
-Peeks the current lsn.
-@return TRUE if success, FALSE if could not get the log system mutex */
-ibool
-log_peek_lsn(
-/*=========*/
- lsn_t* lsn); /*!< out: if returns TRUE, current lsn is here */
/**********************************************************************//**
Refreshes the statistics used to print per-second averages. */
void
@@ -569,16 +529,25 @@ struct log_t{
/** The MariaDB 10.5 physical format (only with innodb_encrypt_log=ON) */
static constexpr uint32_t FORMAT_ENC_10_5 = FORMAT_10_5 | FORMAT_ENCRYPTED;
- MY_ALIGNED(CACHE_LINE_SIZE)
- lsn_t lsn; /*!< log sequence number */
- ulong buf_free; /*!< first free offset within the log
- buffer in use */
+private:
+ /** The log sequence number of the last change of durable InnoDB files */
+ alignas(CACHE_LINE_SIZE)
+ std::atomic<lsn_t> lsn;
+ /** the first guaranteed-durable log sequence number */
+ std::atomic<lsn_t> flushed_to_disk_lsn;
+public:
+ /** first free offset within the log buffer in use */
+ size_t buf_free;
+private:
+ /** set when there may be need to flush the log buffer, or
+ preflush buffer pool pages, or initiate a log checkpoint.
+ This must hold if lsn - last_checkpoint_lsn > max_checkpoint_age. */
+ std::atomic<bool> check_flush_or_checkpoint_;
+public:
MY_ALIGNED(CACHE_LINE_SIZE)
LogSysMutex mutex; /*!< mutex protecting the log */
MY_ALIGNED(CACHE_LINE_SIZE)
- LogSysMutex write_mutex; /*!< mutex protecting writing to log */
- MY_ALIGNED(CACHE_LINE_SIZE)
FlushOrderMutex log_flush_order_mutex;/*!< mutex to serialize access to
the flush list when we are putting
dirty blocks in the list. The idea
@@ -600,19 +569,9 @@ struct log_t{
bool first_in_use; /*!< true if buf points to the first
half of the buffer, false
if the second half */
- ulong max_buf_free; /*!< recommended maximum value of
+ size_t max_buf_free; /*!< recommended maximum value of
buf_free for the buffer in use, after
which the buffer is flushed */
- bool check_flush_or_checkpoint;
- /*!< this is set when there may
- be need to flush the log buffer, or
- preflush buffer pool pages, or make
- a checkpoint; this MUST be TRUE when
- lsn - last_checkpoint_lsn >
- max_checkpoint_age; this flag is
- peeked at by log_free_check(), which
- does not reserve the log mutex */
-
/** Log file stuff. Protected by mutex or write_mutex. */
struct file {
/** format of the redo log: e.g., FORMAT_10_5 */
@@ -665,7 +624,7 @@ struct log_t{
@param[in] lsn log sequence number
@return offset within the log */
inline lsn_t calc_lsn_offset(lsn_t lsn) const;
- lsn_t calc_lsn_offset_old(lsn_t lsn) const;
+ inline lsn_t calc_lsn_offset_old(lsn_t lsn) const;
/** Set the field values to correspond to a given lsn. */
void set_fields(lsn_t lsn)
@@ -695,7 +654,7 @@ struct log_t{
/** The fields involved in the log buffer flush @{ */
- ulong buf_next_to_write;/*!< first offset in the log buffer
+ size_t buf_next_to_write;/*!< first offset in the log buffer
where the byte content may not exist
written to file, e.g., the start
offset of a log record catenated
@@ -705,18 +664,9 @@ struct log_t{
lsn_t write_lsn; /*!< last written lsn */
lsn_t current_flush_lsn;/*!< end lsn for the current running
write + flush operation */
- lsn_t flushed_to_disk_lsn;
- /*!< how far we have written the log
- AND flushed to disk */
std::atomic<size_t> pending_flushes; /*!< system calls in progress */
std::atomic<size_t> flushes; /*!< system calls counter */
- ulint n_pending_flushes;/*!< number of currently
- pending flushes; protected by
- log_sys.mutex */
- os_event_t flush_event; /*!< this event is in the reset state
- when a flush is running;
- os_event_set() and os_event_reset()
- are protected by log_sys.mutex */
+
ulint n_log_ios; /*!< number of log i/os initiated thus
far */
ulint n_log_ios_old; /*!< number of log i/o's at the
@@ -758,13 +708,6 @@ struct log_t{
/*!< latest checkpoint lsn */
lsn_t next_checkpoint_lsn;
/*!< next checkpoint lsn */
- mtr_buf_t* append_on_checkpoint;
- /*!< extra redo log records to write
- during a checkpoint, or NULL if none.
- The pointer is protected by
- log_sys.mutex, and the data must
- remain constant as long as this
- pointer is not NULL. */
ulint n_pending_checkpoint_writes;
/*!< number of currently pending
checkpoint writes */
@@ -792,6 +735,19 @@ public:
bool is_initialised() const { return m_initialised; }
+ lsn_t get_lsn() const { return lsn.load(std::memory_order_relaxed); }
+ void set_lsn(lsn_t lsn) { this->lsn.store(lsn, std::memory_order_relaxed); }
+
+ lsn_t get_flushed_lsn() const
+ { return flushed_to_disk_lsn.load(std::memory_order_relaxed); }
+ void set_flushed_lsn(lsn_t lsn)
+ { flushed_to_disk_lsn.store(lsn, std::memory_order_relaxed); }
+
+ bool check_flush_or_checkpoint() const
+ { return check_flush_or_checkpoint_.load(std::memory_order_relaxed); }
+ void set_check_flush_or_checkpoint(bool flag= true)
+ { check_flush_or_checkpoint_.store(flag, std::memory_order_relaxed); }
+
/** @return the log block header + trailer size */
unsigned framing_size() const
{
@@ -830,10 +786,22 @@ public:
/** Shut down the redo log subsystem. */
void close();
+
+ /** Initiate a write of the log buffer to the file if needed.
+ @param flush whether to initiate a durable write */
+ inline void initiate_write(bool flush)
+ {
+ const lsn_t lsn= get_lsn();
+ if (!flush || get_flushed_lsn() < lsn)
+ log_write_up_to(lsn, flush);
+ }
};
/** Redo log system */
extern log_t log_sys;
+#ifdef UNIV_DEBUG
+extern bool log_write_lock_own();
+#endif
/** Gets the log capacity. It is OK to read the value without
holding log_sys.mutex because it is constant.
@@ -848,7 +816,7 @@ inline lsn_t log_t::file::calc_lsn_offset(lsn_t lsn) const
ut_ad(this == &log_sys.log);
/* The lsn parameters are updated while holding both the mutexes
and it is ok to have either of them while reading */
- ut_ad(log_sys.mutex.is_owned() || log_sys.write_mutex.is_owned());
+ ut_ad(log_sys.mutex.is_owned() || log_write_lock_own());
const lsn_t size = capacity();
lsn_t l= lsn - this->lsn;
if (longlong(l) < 0) {
@@ -862,12 +830,12 @@ inline lsn_t log_t::file::calc_lsn_offset(lsn_t lsn) const
}
inline void log_t::file::set_lsn(lsn_t a_lsn) {
- ut_ad(log_sys.mutex.is_owned() || log_sys.write_mutex.is_owned());
+ ut_ad(log_sys.mutex.is_owned() || log_write_lock_own());
lsn = a_lsn;
}
inline void log_t::file::set_lsn_offset(lsn_t a_lsn) {
- ut_ad(log_sys.mutex.is_owned() || log_sys.write_mutex.is_owned());
+ ut_ad(log_sys.mutex.is_owned() || log_write_lock_own());
ut_ad((lsn % OS_FILE_LOG_BLOCK_SIZE) == (a_lsn % OS_FILE_LOG_BLOCK_SIZE));
lsn_offset = a_lsn;
}
@@ -888,41 +856,14 @@ inline void log_t::file::set_lsn_offset(lsn_t a_lsn) {
/** Test if log sys mutex is owned. */
#define log_mutex_own() mutex_own(&log_sys.mutex)
-/** Test if log sys write mutex is owned. */
-#define log_write_mutex_own() mutex_own(&log_sys.write_mutex)
/** Acquire the log sys mutex. */
#define log_mutex_enter() mutex_enter(&log_sys.mutex)
-/** Acquire the log sys write mutex. */
-#define log_write_mutex_enter() mutex_enter(&log_sys.write_mutex)
-
-/** Acquire all the log sys mutexes. */
-#define log_mutex_enter_all() do { \
- mutex_enter(&log_sys.write_mutex); \
- mutex_enter(&log_sys.mutex); \
-} while (0)
/** Release the log sys mutex. */
#define log_mutex_exit() mutex_exit(&log_sys.mutex)
-/** Release the log sys write mutex.*/
-#define log_write_mutex_exit() mutex_exit(&log_sys.write_mutex)
-
-/** Release all the log sys mutexes. */
-#define log_mutex_exit_all() do { \
- mutex_exit(&log_sys.mutex); \
- mutex_exit(&log_sys.write_mutex); \
-} while (0)
-
-/* log scrubbing speed, in bytes/sec */
-extern ulonglong innodb_scrub_log_speed;
-
-/** Event to wake up log_scrub_thread */
-extern os_event_t log_scrub_event;
-/** Whether log_scrub_thread is active */
-extern bool log_scrub_thread_active;
-
#include "log0log.ic"
#endif
diff --git a/storage/innobase/include/log0log.ic b/storage/innobase/include/log0log.ic
index 5c765ca618e..46dfb0dd028 100644
--- a/storage/innobase/include/log0log.ic
+++ b/storage/innobase/include/log0log.ic
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
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
@@ -187,35 +187,6 @@ log_block_convert_lsn_to_no(
0xFUL, 0x3FFFFFFFUL)) + 1);
}
-/** Calculate the checksum for a log block using the pre-5.7.9 algorithm.
-@param[in] block log block
-@return checksum */
-UNIV_INLINE
-ulint
-log_block_calc_checksum_format_0(
- const byte* block)
-{
- ulint sum;
- ulint sh;
- ulint i;
-
- sum = 1;
- sh = 0;
-
- for (i = 0; i < OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_CHECKSUM; i++) {
- ulint b = (ulint) block[i];
- sum &= 0x7FFFFFFFUL;
- sum += b;
- sum += b << sh;
- sh++;
- if (sh > 24) {
- sh = 0;
- }
- }
-
- return(sum);
-}
-
/** Calculate the CRC-32C checksum of a log block.
@param[in] block log block
@return checksum */
@@ -296,7 +267,8 @@ log_reserve_and_write_fast(
return(0);
}
- *start_lsn = log_sys.lsn;
+ lsn_t lsn = log_sys.get_lsn();
+ *start_lsn = lsn;
memcpy(log_sys.buf + log_sys.buf_free, str, len);
@@ -306,73 +278,14 @@ log_reserve_and_write_fast(
OS_FILE_LOG_BLOCK_SIZE)),
data_len);
- log_sys.buf_free += ulong(len);
-
- ut_ad(log_sys.buf_free <= srv_log_buffer_size);
-
- log_sys.lsn += len;
-
- MONITOR_SET(MONITOR_LSN_CHECKPOINT_AGE,
- log_sys.lsn - log_sys.last_checkpoint_lsn);
-
- return(log_sys.lsn);
-}
-
-/************************************************************//**
-Gets the current lsn.
-@return current lsn */
-UNIV_INLINE
-lsn_t
-log_get_lsn(void)
-/*=============*/
-{
- lsn_t lsn;
-
- log_mutex_enter();
-
- lsn = log_sys.lsn;
+ log_sys.buf_free += len;
- log_mutex_exit();
+ ut_ad(log_sys.buf_free <= size_t{srv_log_buffer_size});
- return(lsn);
-}
-
-/************************************************************//**
-Gets the last lsn that is fully flushed to disk.
-@return last flushed lsn */
-UNIV_INLINE
-ib_uint64_t
-log_get_flush_lsn(void)
-{
- ib_uint64_t lsn;
-
- log_mutex_enter();
-
- lsn = log_sys.flushed_to_disk_lsn;
-
- log_mutex_exit();
-
- return(lsn);
-}
-
-/************************************************************//**
-Gets the current lsn with a trylock
-@return current lsn or 0 if false*/
-UNIV_INLINE
-lsn_t
-log_get_lsn_nowait(void)
-/*====================*/
-{
- lsn_t lsn=0;
-
- if (!mutex_enter_nowait(&(log_sys.mutex))) {
-
- lsn = log_sys.lsn;
-
- mutex_exit(&(log_sys.mutex));
- }
+ lsn += len;
+ log_sys.set_lsn(lsn);
- return(lsn);
+ return lsn;
}
/****************************************************************
@@ -416,7 +329,7 @@ log_free_check(void)
sync_allowed_latches(latches,
latches + UT_ARR_SIZE(latches))));
- if (log_sys.check_flush_or_checkpoint) {
+ if (log_sys.check_flush_or_checkpoint()) {
log_check_margins();
}
diff --git a/storage/innobase/include/log0recv.h b/storage/innobase/include/log0recv.h
index 1e6a031d15f..dfc3caba656 100644
--- a/storage/innobase/include/log0recv.h
+++ b/storage/innobase/include/log0recv.h
@@ -149,7 +149,7 @@ struct recv_dblwr_t {
/** the recovery state and buffered records for a page */
struct page_recv_t
{
- /** Recovery state */
+ /** Recovery state; protected by recv_sys.mutex */
enum
{
/** not yet processed */
@@ -216,10 +216,14 @@ struct page_recv_t
};
/** Recovery system data structure */
-struct recv_sys_t{
- ib_mutex_t mutex; /*!< mutex protecting the fields apply_log_recs,
- n_addrs, and the state field in each recv_addr
- struct */
+struct recv_sys_t
+{
+ /** mutex protecting apply_log_recs and page_recv_t::state */
+ ib_mutex_t mutex;
+ /** whether recv_recover_page(), invoked from buf_page_io_complete(),
+ should apply log records*/
+ bool apply_log_recs;
+
ib_mutex_t writer_mutex;/*!< mutex coordinating
flushing between recv_writer_thread and
the recovery thread. */
@@ -230,13 +234,9 @@ struct recv_sys_t{
buf_flush_t flush_type;/*!< type of the flush request.
BUF_FLUSH_LRU: flush end of LRU, keeping free blocks.
BUF_FLUSH_LIST: flush all of blocks. */
- /** whether recv_recover_page(), invoked from buf_page_io_complete(),
- should apply log records*/
- bool apply_log_recs;
/** whether recv_apply_hashed_log_recs() is running */
bool apply_batch_on;
byte* buf; /*!< buffer for parsing log records */
- size_t buf_size; /*!< size of buf */
ulint len; /*!< amount of data in buf */
lsn_t parse_start_lsn;
/*!< this is the lsn from which we were able to
@@ -294,19 +294,15 @@ struct recv_sys_t{
recv_dblwr_t dblwr;
/** Last added LSN to pages. */
- lsn_t last_stored_lsn;
-
- /** After successful upgrade from multiple redo log files we'd like
- to remove extra ones */
- bool remove_extra_log_files{false};
+ lsn_t last_stored_lsn= 0;
void read(os_offset_t offset, span<byte> buf);
- size_t files_size();
+ inline size_t files_size();
void close_files() { files.clear(); }
private:
- /** All found log files (more that one is possible if we're upgrading
- from older MariaDB version */
+ /** All found log files (multiple ones are possible if we are upgrading
+ from before MariaDB Server 10.5.1) */
std::vector<log_file_t> files;
void open_log_files_if_needed();
@@ -339,7 +335,7 @@ public:
/** Clean up after create() */
void close();
- bool is_initialised() const { return buf_size != 0; }
+ bool is_initialised() const { return last_stored_lsn != 0; }
/** Register a redo log snippet for a page.
@param page_id page identifier
diff --git a/storage/innobase/include/mtr0log.h b/storage/innobase/include/mtr0log.h
index fe80068fa0e..29765faa017 100644
--- a/storage/innobase/include/mtr0log.h
+++ b/storage/innobase/include/mtr0log.h
@@ -393,10 +393,10 @@ inline byte *mtr_t::log_write(const page_id_t id, const buf_page_t *bpage,
if (!have_len)
max_len= 1 + 5 + 5;
else if (!have_offset)
- max_len= m_last == bpage
+ max_len= bpage && m_last == bpage
? 1 + 3
: 1 + 3 + 5 + 5;
- else if (m_last == bpage && m_last_offset <= offset)
+ else if (bpage && m_last == bpage && m_last_offset <= offset)
{
/* Encode the offset relative from m_last_offset. */
offset-= m_last_offset;
@@ -502,6 +502,8 @@ inline void mtr_t::memcpy(const buf_block_t &b, void *dest, const void *str,
@param[in,out] b buffer page */
inline void mtr_t::init(buf_block_t *b)
{
+ b->page.status= buf_page_t::INIT_ON_FLUSH;
+
if (m_log_mode != MTR_LOG_ALL)
{
ut_ad(m_log_mode == MTR_LOG_NONE || m_log_mode == MTR_LOG_NO_REDO);
@@ -510,7 +512,6 @@ inline void mtr_t::init(buf_block_t *b)
m_log.close(log_write<INIT_PAGE>(b->page.id, &b->page));
m_last_offset= FIL_PAGE_TYPE;
- b->page.init_on_flush= true;
}
/** Free a page.
@@ -523,7 +524,7 @@ inline void mtr_t::free(const page_id_t id)
/** Write an EXTENDED log record.
@param block buffer pool page
-@param type extended record subtype; @see mrec_ext_t */
+@param type extended record subtype; @see mrec_ext_t */
inline void mtr_t::log_write_extended(const buf_block_t &block, byte type)
{
set_modified();
@@ -615,7 +616,7 @@ inline void mtr_t::undo_append(const buf_block_t &block,
set_modified();
if (m_log_mode != MTR_LOG_ALL)
return;
- const bool small= len < mtr_buf_t::MAX_DATA_SIZE - (3 + 3 + 5 + 5);
+ const bool small= len + 1 < mtr_buf_t::MAX_DATA_SIZE - (1 + 3 + 3 + 5 + 5);
byte *end= log_write<EXTENDED>(block.page.id, &block.page, len + 1, small);
if (UNIV_LIKELY(small))
{
@@ -626,9 +627,19 @@ inline void mtr_t::undo_append(const buf_block_t &block,
else
{
m_log.close(end);
- byte type= UNDO_APPEND;
- m_log.push(&type, 1);
+ *m_log.push<byte*>(1)= UNDO_APPEND;
m_log.push(static_cast<const byte*>(data), static_cast<uint32_t>(len));
}
m_last_offset= FIL_PAGE_TYPE;
}
+
+/** Trim the end of a tablespace.
+@param id first page identifier that will not be in the file */
+inline void mtr_t::trim_pages(const page_id_t id)
+{
+ if (m_log_mode != MTR_LOG_ALL)
+ return;
+ byte *l= log_write<EXTENDED>(id, nullptr, 1, true);
+ *l++= TRIM_PAGES;
+ m_log.close(l);
+}
diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h
index 9461765abf4..16b025c26ba 100644
--- a/storage/innobase/include/mtr0mtr.h
+++ b/storage/innobase/include/mtr0mtr.h
@@ -104,12 +104,6 @@ savepoint. */
@return true if the mtr is dirtying a clean page. */
#define mtr_block_dirtied(b) mtr_t::is_block_dirtied((b))
-/** Append records to the system-wide redo log buffer.
-@param[in] log redo log records */
-void
-mtr_write_log(
- const mtr_buf_t* log);
-
/** Mini-transaction memo stack slot. */
struct mtr_memo_slot_t {
/** pointer to the object */
@@ -494,6 +488,45 @@ struct mtr_t {
@param block B-tree or R-tree page
@param comp false=ROW_FORMAT=REDUNDANT, true=COMPACT or DYNAMIC */
inline void page_create(const buf_block_t &block, bool comp);
+
+ /** Write log for inserting a B-tree or R-tree record in
+ ROW_FORMAT=REDUNDANT.
+ @param block B-tree or R-tree page
+ @param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+ @param prev_rec byte offset of the predecessor of the record to insert,
+ starting from PAGE_OLD_INFIMUM
+ @param info_bits info_bits of the record
+ @param n_fields_s number of fields << 1 | rec_get_1byte_offs_flag()
+ @param hdr_c number of common record header bytes with prev_rec
+ @param data_c number of common data bytes with prev_rec
+ @param hdr record header bytes to copy to the log
+ @param hdr_l number of copied record header bytes
+ @param data record payload bytes to copy to the log
+ @param data_l number of copied record data bytes */
+ inline void page_insert(const buf_block_t &block, bool reuse,
+ ulint prev_rec, byte info_bits,
+ ulint n_fields_s, size_t hdr_c, size_t data_c,
+ const byte *hdr, size_t hdr_l,
+ const byte *data, size_t data_l);
+ /** Write log for inserting a B-tree or R-tree record in
+ ROW_FORMAT=COMPACT or ROW_FORMAT=DYNAMIC.
+ @param block B-tree or R-tree page
+ @param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+ @param prev_rec byte offset of the predecessor of the record to insert,
+ starting from PAGE_NEW_INFIMUM
+ @param info_status rec_get_info_and_status_bits()
+ @param shift unless !reuse: number of bytes the PAGE_FREE is moving
+ @param hdr_c number of common record header bytes with prev_rec
+ @param data_c number of common data bytes with prev_rec
+ @param hdr record header bytes to copy to the log
+ @param hdr_l number of copied record header bytes
+ @param data record payload bytes to copy to the log
+ @param data_l number of copied record data bytes */
+ inline void page_insert(const buf_block_t &block, bool reuse,
+ ulint prev_rec, byte info_status,
+ ssize_t shift, size_t hdr_c, size_t data_c,
+ const byte *hdr, size_t hdr_l,
+ const byte *data, size_t data_l);
/** Write log for deleting a B-tree or R-tree record in ROW_FORMAT=REDUNDANT.
@param block B-tree or R-tree page
@param prev_rec byte offset of the predecessor of the record to delete,
@@ -517,15 +550,17 @@ struct mtr_t {
@param len length of the undo record, in bytes */
inline void undo_append(const buf_block_t &block,
const void *data, size_t len);
+ /** Trim the end of a tablespace.
+ @param id first page identifier that will not be in the file */
+ inline void trim_pages(const page_id_t id);
/** Write a log record about a file operation.
@param type file operation
@param space_id tablespace identifier
- @param first_page_no first page number in the file
@param path file path
@param new_path new file path for type=FILE_RENAME */
inline void log_file_op(mfile_type_t type, ulint space_id,
- ulint first_page_no, const char *path,
+ const char *path,
const char *new_path= nullptr);
private:
@@ -551,7 +586,7 @@ private:
/** Write an EXTENDED log record.
@param block buffer pool page
- @param type extended record subtype; @see mrec_ext_t */
+ @param type extended record subtype; @see mrec_ext_t */
inline void log_write_extended(const buf_block_t &block, byte type);
/** Prepare to write the mini-transaction log to the redo log buffer.
diff --git a/storage/innobase/include/mtr0types.h b/storage/innobase/include/mtr0types.h
index bfa30cf30b1..f110e45aad8 100644
--- a/storage/innobase/include/mtr0types.h
+++ b/storage/innobase/include/mtr0types.h
@@ -263,6 +263,18 @@ enum mrec_ext_t
This is equivalent to the old MLOG_UNDO_INSERT record.
The current byte offset will be reset to FIL_PAGE_TYPE. */
UNDO_APPEND= 3,
+ /** Insert a ROW_FORMAT=REDUNDANT record, extending PAGE_HEAP_TOP.
+ The current byte offset will be reset to FIL_PAGE_TYPE. */
+ INSERT_HEAP_REDUNDANT= 4,
+ /** Insert a ROW_FORMAT=REDUNDANT record, reusing PAGE_FREE.
+ The current byte offset will be reset to FIL_PAGE_TYPE. */
+ INSERT_REUSE_REDUNDANT= 5,
+ /** Insert a ROW_FORMAT=COMPACT or DYNAMIC record, extending PAGE_HEAP_TOP.
+ The current byte offset will be reset to FIL_PAGE_TYPE. */
+ INSERT_HEAP_DYNAMIC= 6,
+ /** Insert a ROW_FORMAT=COMPACT or DYNAMIC record, reusing PAGE_FREE.
+ The current byte offset will be reset to FIL_PAGE_TYPE. */
+ INSERT_REUSE_DYNAMIC= 7,
/** Delete a record on a ROW_FORMAT=REDUNDANT page.
We point to the precedessor of the record to be deleted.
The current byte offset will be reset to FIL_PAGE_TYPE.
@@ -273,7 +285,9 @@ enum mrec_ext_t
and include the total size of the record being deleted.
The current byte offset will be reset to FIL_PAGE_TYPE.
This is similar to the old MLOG_COMP_REC_DELETE record. */
- DELETE_ROW_FORMAT_DYNAMIC= 9
+ DELETE_ROW_FORMAT_DYNAMIC= 9,
+ /** Truncate a data file. */
+ TRIM_PAGES= 10
};
diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h
index c22dddffe92..c0bcae941fd 100644
--- a/storage/innobase/include/os0file.h
+++ b/storage/innobase/include/os0file.h
@@ -212,39 +212,12 @@ public:
PUNCH_HOLE = 64,
};
- /** Default constructor */
- IORequest()
- :
- m_bpage(NULL),
- m_fil_node(NULL),
- m_type(READ)
- {
- /* No op */
- }
-
- /**
- @param[in] type Request type, can be a value that is
- ORed from the above enum */
- explicit IORequest(ulint type)
- :
- m_bpage(NULL),
- m_fil_node(NULL),
- m_type(static_cast<uint16_t>(type))
- {
- if (!is_punch_hole_supported()) {
- clear_punch_hole();
- }
- }
-
/**
@param[in] type Request type, can be a value that is
ORed from the above enum
@param[in] bpage Page to be written */
- IORequest(ulint type, buf_page_t* bpage)
- :
- m_bpage(bpage),
- m_fil_node(NULL),
- m_type(static_cast<uint16_t>(type))
+ IORequest(ulint type= READ, buf_page_t *bpage= nullptr)
+ : m_bpage(bpage), m_type(static_cast<uint16_t>(type))
{
if (bpage && buf_page_should_punch_hole(bpage)) {
set_punch_hole();
@@ -372,13 +345,13 @@ public:
private:
/** Page to be written on write operation. */
- buf_page_t* m_bpage;
+ buf_page_t* const m_bpage= nullptr;
/** File node */
- fil_node_t* m_fil_node;
+ fil_node_t* m_fil_node= nullptr;
/** Request type bit flags */
- uint16_t m_type;
+ uint16_t m_type= READ;
};
/* @} */
@@ -671,10 +644,12 @@ do { \
register_pfs_file_open_begin(state, locker, key, op, name, \
src_file, src_line) \
-# define register_pfs_file_rename_end(locker, result) \
+# define register_pfs_file_rename_end(locker, from, to, result) \
do { \
- if (locker != NULL) { \
- PSI_FILE_CALL(end_file_open_wait)(locker, result); \
+ if (locker != NULL) { \
+ PSI_FILE_CALL( \
+ end_file_rename_wait)( \
+ locker, from, to, result); \
} \
} while (0)
diff --git a/storage/innobase/include/os0file.ic b/storage/innobase/include/os0file.ic
index e01fcb41afb..f950113f3c7 100644
--- a/storage/innobase/include/os0file.ic
+++ b/storage/innobase/include/os0file.ic
@@ -433,13 +433,13 @@ pfs_os_file_rename_func(
PSI_file_locker_state state;
struct PSI_file_locker* locker = NULL;
- register_pfs_file_open_begin(
+ register_pfs_file_rename_begin(
&state, locker, key, PSI_FILE_RENAME, newpath,
src_file, src_line);
bool result = os_file_rename_func(oldpath, newpath);
- register_pfs_file_rename_end(locker, 0);
+ register_pfs_file_rename_end(locker, oldpath, newpath, !result);
return(result);
}
diff --git a/storage/innobase/include/page0cur.h b/storage/innobase/include/page0cur.h
index 8387a409cde..2e57b792349 100644
--- a/storage/innobase/include/page0cur.h
+++ b/storage/innobase/include/page0cur.h
@@ -201,19 +201,54 @@ page_cur_delete_rec(
mtr_t* mtr) /*!< in/out: mini-transaction */
MY_ATTRIBUTE((nonnull));
+/** Apply a INSERT_HEAP_REDUNDANT or INSERT_REUSE_REDUNDANT record that was
+written by page_cur_insert_rec_low() for a ROW_FORMAT=REDUNDANT page.
+@param block B-tree or R-tree page in ROW_FORMAT=COMPACT or DYNAMIC
+@param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+@param prev byte offset of the predecessor, relative to PAGE_NEW_INFIMUM
+@param enc_hdr encoded fixed-size header bits
+@param hdr_c number of common record header bytes with prev
+@param data_c number of common data bytes with prev
+@param data literal header and data bytes
+@param data_len length of the literal data, in bytes
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_insert_redundant(const buf_block_t &block, bool reuse,
+ ulint prev, ulint enc_hdr,
+ size_t hdr_c, size_t data_c,
+ const void *data, size_t data_len);
+
+/** Apply a INSERT_HEAP_DYNAMIC or INSERT_REUSE_DYNAMIC record that was
+written by page_cur_insert_rec_low() for a ROW_FORMAT=COMPACT or DYNAMIC page.
+@param block B-tree or R-tree page in ROW_FORMAT=COMPACT or DYNAMIC
+@param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+@param prev byte offset of the predecessor, relative to PAGE_NEW_INFIMUM
+@param shift unless !reuse: number of bytes the PAGE_FREE is moving
+@param enc_hdr_l number of copied record header bytes, plus record type bits
+@param hdr_c number of common record header bytes with prev
+@param data_c number of common data bytes with prev
+@param data literal header and data bytes
+@param data_len length of the literal data, in bytes
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_insert_dynamic(const buf_block_t &block, bool reuse,
+ ulint prev, ulint shift, ulint enc_hdr_l,
+ size_t hdr_c, size_t data_c,
+ const void *data, size_t data_len);
+
/** Apply a DELETE_ROW_FORMAT_REDUNDANT record that was written by
page_cur_delete_rec() for a ROW_FORMAT=REDUNDANT page.
@param block B-tree or R-tree page in ROW_FORMAT=REDUNDANT
-@param prev byte offset of the predecessor, relative to PAGE_OLD_INFIMUM */
-void page_apply_delete_redundant(const buf_block_t &block, ulint prev);
+@param prev byte offset of the predecessor, relative to PAGE_OLD_INFIMUM
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_delete_redundant(const buf_block_t &block, ulint prev);
/** Apply a DELETE_ROW_FORMAT_DYNAMIC record that was written by
page_cur_delete_rec() for a ROW_FORMAT=COMPACT or DYNAMIC page.
@param block B-tree or R-tree page in ROW_FORMAT=COMPACT or DYNAMIC
@param prev byte offset of the predecessor, relative to PAGE_NEW_INFIMUM
@param hdr_size record header size, excluding REC_N_NEW_EXTRA_BYTES
-@param data_size data payload size, in bytes */
-void page_apply_delete_dynamic(const buf_block_t &block, ulint prev,
+@param data_size data payload size, in bytes
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_delete_dynamic(const buf_block_t &block, ulint prev,
size_t hdr_size, size_t data_size);
/** Search the right position for a page cursor.
diff --git a/storage/innobase/include/page0page.h b/storage/innobase/include/page0page.h
index ddd5d83892e..1a67b28707e 100644
--- a/storage/innobase/include/page0page.h
+++ b/storage/innobase/include/page0page.h
@@ -869,15 +869,6 @@ page_get_free_space_of_empty(
/*=========================*/
ulint comp) /*!< in: nonzero=compact page format */
MY_ATTRIBUTE((const));
-/**********************************************************//**
-Returns the base extra size of a physical record. This is the
-size of the fixed header, independent of the record size.
-@return REC_N_NEW_EXTRA_BYTES or REC_N_OLD_EXTRA_BYTES */
-UNIV_INLINE
-ulint
-page_rec_get_base_extra_size(
-/*=========================*/
- const rec_t* rec); /*!< in: physical record */
/************************************************************//**
Returns the sum of the sizes of the records in the record list
excluding the infimum and supremum records.
diff --git a/storage/innobase/include/page0page.ic b/storage/innobase/include/page0page.ic
index db8dcc88cf2..2548356a14a 100644
--- a/storage/innobase/include/page0page.ic
+++ b/storage/innobase/include/page0page.ic
@@ -563,21 +563,6 @@ page_rec_get_prev(
return((rec_t*) page_rec_get_prev_const(rec));
}
-/**********************************************************//**
-Returns the base extra size of a physical record. This is the
-size of the fixed header, independent of the record size.
-@return REC_N_NEW_EXTRA_BYTES or REC_N_OLD_EXTRA_BYTES */
-UNIV_INLINE
-ulint
-page_rec_get_base_extra_size(
-/*=========================*/
- const rec_t* rec) /*!< in: physical record */
-{
- compile_time_assert(REC_N_NEW_EXTRA_BYTES + 1
- == REC_N_OLD_EXTRA_BYTES);
- return(REC_N_NEW_EXTRA_BYTES + (ulint) !page_rec_is_comp(rec));
-}
-
#endif /* UNIV_INNOCHECKSUM */
/************************************************************//**
@@ -727,7 +712,7 @@ page_get_instant(const page_t* page)
ut_ad(i <= PAGE_NO_DIRECTION);
break;
default:
- ut_ad(!"invalid page type");
+ ut_ad("invalid page type" == 0);
break;
}
#endif /* UNIV_DEBUG */
diff --git a/storage/innobase/include/row0merge.h b/storage/innobase/include/row0merge.h
index 3ba7508911a..25ee088f1f7 100644
--- a/storage/innobase/include/row0merge.h
+++ b/storage/innobase/include/row0merge.h
@@ -215,22 +215,6 @@ row_make_new_pathname(
MY_ATTRIBUTE((nonnull, warn_unused_result));
/*********************************************************************//**
-Rename the tables in the data dictionary. The data dictionary must
-have been locked exclusively by the caller, because the transaction
-will not be committed.
-@return error code or DB_SUCCESS */
-dberr_t
-row_merge_rename_tables_dict(
-/*=========================*/
- dict_table_t* old_table, /*!< in/out: old table, renamed to
- tmp_name */
- dict_table_t* new_table, /*!< in/out: new table, renamed to
- old_table->name */
- const char* tmp_name, /*!< in: new name for old_table */
- trx_t* trx) /*!< in/out: dictionary transaction */
- MY_ATTRIBUTE((nonnull, warn_unused_result));
-
-/*********************************************************************//**
Rename an index in the dictionary that was created. The data
dictionary must have been locked exclusively by the caller, because
the transaction will not be committed.
diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h
index 3f4bbcff455..c4163f8d2e0 100644
--- a/storage/innobase/include/row0mysql.h
+++ b/storage/innobase/include/row0mysql.h
@@ -685,8 +685,8 @@ struct row_prebuilt_t {
updated */
dtuple_t* clust_ref; /*!< prebuilt dtuple used in
sel/upd/del */
- ulint select_lock_type;/*!< LOCK_NONE, LOCK_S, or LOCK_X */
- ulint stored_select_lock_type;/*!< this field is used to
+ lock_mode select_lock_type;/*!< LOCK_NONE, LOCK_S, or LOCK_X */
+ lock_mode stored_select_lock_type;/*!< this field is used to
remember the original select_lock_type
that was decided in ha_innodb.cc,
::store_lock(), ::external_lock(),
diff --git a/storage/innobase/include/row0sel.h b/storage/innobase/include/row0sel.h
index 717e1a2be0b..6010771291f 100644
--- a/storage/innobase/include/row0sel.h
+++ b/storage/innobase/include/row0sel.h
@@ -342,7 +342,7 @@ struct sel_node_t{
ibool set_x_locks; /*!< TRUE if the cursor is for update or
delete, which means that a row x-lock
should be placed on the cursor row */
- ulint row_lock_mode; /*!< LOCK_X or LOCK_S */
+ lock_mode row_lock_mode; /*!< LOCK_X or LOCK_S */
ulint n_tables; /*!< number of tables */
ulint fetch_table; /*!< number of the next table to access
in the join */
diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
index 0ebd71b2bf5..06785c2a3b7 100644
--- a/storage/innobase/include/srv0srv.h
+++ b/storage/innobase/include/srv0srv.h
@@ -185,9 +185,6 @@ struct srv_stats_t
/** Number of encryption_get_latest_key_version calls */
ulint_ctr_64_t n_key_requests;
- /** Number of log scrub operations */
- ulint_ctr_64_t n_log_scrubs;
-
/** Number of spaces in keyrotation list */
ulint_ctr_64_t key_rotation_list_length;
@@ -404,10 +401,6 @@ The real value is set based on the value of io_capacity. */
#define SRV_MAX_IO_CAPACITY_DUMMY_DEFAULT (~0UL)
#define SRV_MAX_IO_CAPACITY_LIMIT (~0UL)
extern ulong srv_max_io_capacity;
-/* Returns the number of IO operations that is X percent of the
-capacity. PCT_IO(5) -> returns the number of IO operations that
-is 5% of the max where max is srv_io_capacity. */
-#define PCT_IO(p) ((ulong) (srv_io_capacity * ((double) (p) / 100.0)))
/* The "innodb_stats_method" setting, decides how InnoDB is going
to treat NULL value when collecting statistics. It is not defined
@@ -457,6 +450,7 @@ extern ulong srv_replication_delay;
extern my_bool innodb_encrypt_temporary_tables;
+extern my_bool srv_immediate_scrub_data_uncompressed;
/*-------------------------------------------*/
/** Modes of operation */
@@ -483,9 +477,6 @@ extern ibool srv_print_verbose_log;
extern bool srv_monitor_active;
-/* TRUE if enable log scrubbing */
-extern my_bool srv_scrub_log;
-
extern ulong srv_n_spin_wait_rounds;
extern ulong srv_n_free_tickets_to_enter;
extern ulong srv_thread_sleep_delay;
@@ -523,8 +514,8 @@ i/o handler thread */
extern const char* srv_io_thread_op_info[];
extern const char* srv_io_thread_function[];
-/* the number of purge threads to use from the worker pool (currently 0 or 1) */
-extern ulong srv_n_purge_threads;
+/** innodb_purge_threads; the number of purge tasks to use */
+extern uint srv_n_purge_threads;
/* the number of pages to purge in one batch */
extern ulong srv_purge_batch_size;
@@ -557,8 +548,6 @@ extern ulong srv_fatal_semaphore_wait_threshold;
/** Buffer pool dump status frequence in percentages */
extern ulong srv_buf_dump_status_frequency;
-#define srv_max_purge_threads 32
-
# ifdef UNIV_PFS_THREAD
extern mysql_pfs_key_t page_cleaner_thread_key;
extern mysql_pfs_key_t recv_writer_thread_key;
@@ -568,10 +557,10 @@ extern mysql_pfs_key_t thread_pool_thread_key;
/* This macro register the current thread and its key with performance
schema */
# define pfs_register_thread(key) \
-do { \
- struct PSI_thread* psi = PSI_CALL_new_thread(key, NULL, 0);\
- /* JAN: TODO: MYSQL 5.7 PSI \
- PSI_CALL_set_thread_os_id(psi); */ \
+do { \
+ struct PSI_thread* psi __attribute__((unused)) \
+ = PSI_CALL_new_thread(key, NULL, 0); \
+ PSI_CALL_set_thread_os_id(psi); \
PSI_CALL_set_thread(psi); \
} while (0)
@@ -618,7 +607,7 @@ extern PSI_stage_info srv_stage_buffer_pool_load;
/** Alternatives for innodb_flush_method */
enum srv_flush_t {
SRV_FSYNC = 0, /*!< fsync, the default */
- SRV_O_DSYNC, /*!< open log files in O_SYNC mode */
+ SRV_O_DSYNC, /*!< open log files in O_DSYNC mode */
SRV_LITTLESYNC, /*!< do not call os_file_flush()
when writing data files, but do flush
after writing to log files */
@@ -964,14 +953,6 @@ struct export_var_t{
ulint innodb_encryption_rotation_estimated_iops;
int64_t innodb_encryption_key_requests;
int64_t innodb_key_rotation_list_length;
-
- ulint innodb_scrub_page_reorganizations;
- ulint innodb_scrub_page_splits;
- ulint innodb_scrub_page_split_failures_underflow;
- ulint innodb_scrub_page_split_failures_out_of_filespace;
- ulint innodb_scrub_page_split_failures_missing_index;
- ulint innodb_scrub_page_split_failures_unknown;
- int64_t innodb_scrub_log;
};
/** Thread slot in the thread table. */
diff --git a/storage/innobase/include/srv0start.h b/storage/innobase/include/srv0start.h
index 10b9a710ac1..34ca11a23f0 100644
--- a/storage/innobase/include/srv0start.h
+++ b/storage/innobase/include/srv0start.h
@@ -94,8 +94,6 @@ srv_get_encryption_data_filename(
/** Log sequence number at shutdown */
extern lsn_t srv_shutdown_lsn;
-/** Log sequence number immediately after startup */
-extern lsn_t srv_start_lsn;
/** TRUE if the server is being started */
extern bool srv_is_being_started;
diff --git a/storage/innobase/include/sync0rw.ic b/storage/innobase/include/sync0rw.ic
index a1bbf719b7d..4791c801424 100644
--- a/storage/innobase/include/sync0rw.ic
+++ b/storage/innobase/include/sync0rw.ic
@@ -541,8 +541,6 @@ pfs_rw_lock_x_lock_func(
/* Record the acquisition of a read-write lock in exclusive
mode in performance schema */
-/* MySQL 5.7 New PSI */
-#define PSI_RWLOCK_EXCLUSIVELOCK PSI_RWLOCK_WRITELOCK
locker = PSI_RWLOCK_CALL(start_rwlock_wrwait)(
&state, lock->pfs_psi, PSI_RWLOCK_EXCLUSIVELOCK,
@@ -582,7 +580,6 @@ pfs_rw_lock_x_lock_func_nowait(
/* Record the acquisition of a read-write trylock in exclusive
mode in performance schema */
-#define PSI_RWLOCK_TRYEXCLUSIVELOCK PSI_RWLOCK_TRYWRITELOCK
locker = PSI_RWLOCK_CALL(start_rwlock_wrwait)(
&state, lock->pfs_psi, PSI_RWLOCK_TRYEXCLUSIVELOCK,
file_name, static_cast<uint>(line));
@@ -636,7 +633,6 @@ pfs_rw_lock_s_lock_func(
PSI_rwlock_locker* locker;
PSI_rwlock_locker_state state;
-#define PSI_RWLOCK_SHAREDLOCK PSI_RWLOCK_READLOCK
/* Instrumented to inform we are aquiring a shared rwlock */
locker = PSI_RWLOCK_CALL(start_rwlock_rdwait)(
&state, lock->pfs_psi, PSI_RWLOCK_SHAREDLOCK,
@@ -671,7 +667,6 @@ pfs_rw_lock_sx_lock_func(
PSI_rwlock_locker* locker;
PSI_rwlock_locker_state state;
-#define PSI_RWLOCK_SHAREDEXCLUSIVELOCK PSI_RWLOCK_WRITELOCK
/* Instrumented to inform we are aquiring a shared rwlock */
locker = PSI_RWLOCK_CALL(start_rwlock_wrwait)(
&state, lock->pfs_psi, PSI_RWLOCK_SHAREDEXCLUSIVELOCK,
@@ -708,7 +703,6 @@ pfs_rw_lock_s_lock_low(
PSI_rwlock_locker* locker;
PSI_rwlock_locker_state state;
-#define PSI_RWLOCK_TRYSHAREDLOCK PSI_RWLOCK_TRYREADLOCK
/* Instrumented to inform we are aquiring a shared rwlock */
locker = PSI_RWLOCK_CALL(start_rwlock_rdwait)(
&state, lock->pfs_psi, PSI_RWLOCK_TRYSHAREDLOCK,
@@ -748,7 +742,6 @@ pfs_rw_lock_sx_lock_low(
PSI_rwlock_locker* locker;
PSI_rwlock_locker_state state;
-#define PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK PSI_RWLOCK_TRYWRITELOCK
/* Instrumented to inform we are aquiring a shared
exclusive rwlock */
locker = PSI_RWLOCK_CALL(start_rwlock_rdwait)(
diff --git a/storage/innobase/include/trx0rec.h b/storage/innobase/include/trx0rec.h
index 467968553fe..e022a13ba4a 100644
--- a/storage/innobase/include/trx0rec.h
+++ b/storage/innobase/include/trx0rec.h
@@ -247,12 +247,8 @@ trx_undo_prev_version_build(
@param[in,out] orig_len original length of the locally stored part
of an externally stored column, or 0
@return remaining part of undo log record after reading these values */
-byte*
-trx_undo_rec_get_col_val(
- const byte* ptr,
- const byte** field,
- ulint* len,
- ulint* orig_len);
+byte *trx_undo_rec_get_col_val(const byte *ptr, const byte **field,
+ uint32_t *len, uint32_t *orig_len);
/** Read virtual column value from undo log
@param[in] table the table
@@ -275,7 +271,7 @@ info, and verify the column is still indexed, and output its position
@param[in,out] is_undo_log his function is used to parse both undo log,
and online log for virtual columns. So
check to see if this is undo log
-@param[out] field_no the column number
+@param[out] field_no the column number, or FIL_NULL if not indexed
@return remaining part of undo log record after reading these values */
const byte*
trx_undo_read_v_idx(
@@ -283,7 +279,7 @@ trx_undo_read_v_idx(
const byte* ptr,
bool first_v_col,
bool* is_undo_log,
- ulint* field_no);
+ uint32_t* field_no);
/* Types of an undo log record: these have to be smaller than 16, as the
compilation info multiplied by 16 is ORed to this value in an undo log
diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
index 531bde31afd..c2f471aeec6 100644
--- a/storage/innobase/include/univ.i
+++ b/storage/innobase/include/univ.i
@@ -114,8 +114,7 @@ HAVE_PSI_INTERFACE is defined. */
# define UNIV_PFS_IO
# define UNIV_PFS_THREAD
-// JAN: TODO: MySQL 5.7 PSI
-// # include "mysql/psi/psi.h" /* HAVE_PSI_MEMORY_INTERFACE */
+# include "mysql/psi/psi.h" /* HAVE_PSI_MEMORY_INTERFACE */
# ifdef HAVE_PSI_MEMORY_INTERFACE
# define UNIV_PFS_MEMORY
# endif /* HAVE_PSI_MEMORY_INTERFACE */
@@ -129,7 +128,6 @@ be excluded from instrumentation. */
# define PFS_IS_INSTRUMENTED(key) ((key) != PFS_NOT_INSTRUMENTED)
-/* JAN: TODO: missing 5.7 header */
#ifdef HAVE_PFS_THREAD_PROVIDER_H
/* For PSI_MUTEX_CALL() and similar. */
#include "pfs_thread_provider.h"
@@ -137,7 +135,6 @@ be excluded from instrumentation. */
#include "mysql/psi/mysql_thread.h"
/* For PSI_FILE_CALL(). */
-/* JAN: TODO: missing 5.7 header */
#ifdef HAVE_PFS_FILE_PROVIDER_H
#include "pfs_file_provider.h"
#endif
diff --git a/storage/innobase/include/ut0crc32.h b/storage/innobase/include/ut0crc32.h
index f2c1b7e82b6..f33ca54cb96 100644
--- a/storage/innobase/include/ut0crc32.h
+++ b/storage/innobase/include/ut0crc32.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2016, 2018, MariaDB Corporation.
+Copyright (c) 2016, 2020, MariaDB Corporation.
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
@@ -32,22 +32,29 @@ Created Aug 10, 2011 Vasil Dimov
/********************************************************************//**
Initializes the data structures used by ut_crc32*(). Does not do any
allocations, would not hurt if called twice, but would be pointless. */
-void
-ut_crc32_init();
-/*===========*/
+void ut_crc32_init();
-/********************************************************************//**
-Calculates CRC32.
-@param ptr - data over which to calculate CRC32.
-@param len - data length in bytes.
-@return CRC32 (CRC-32C, using the GF(2) primitive polynomial 0x11EDC6F41,
-or 0x1EDC6F41 without the high-order bit) */
-typedef uint32_t (*ut_crc32_func_t)(const byte* ptr, ulint len);
+/** Append data to a CRC-32C checksum.
+@param crc current checksum
+@param s data to append to the checksum
+@param size data length in bytes
+@return CRC-32C, using the GF(2) primitive polynomial 0x11EDC6F41,
+or 0x1EDC6F41 without the highest degree term */
+typedef uint32_t (*ut_crc32_func_t)(uint32_t crc, const byte *s, size_t size);
/** Pointer to CRC32 calculation function. */
-extern ut_crc32_func_t ut_crc32;
+extern ut_crc32_func_t ut_crc32_low;
/** Text description of CRC32 implementation */
extern const char* ut_crc32_implementation;
+/** Compute CRC-32C over a string of bytes.
+@param s data
+@param len data length in bytes
+@return the CRC-32C of the data */
+static inline uint32_t ut_crc32(const byte *s, size_t size)
+{
+ return ut_crc32_low(0, s, size);
+}
+
#endif /* ut0crc32_h */
diff --git a/storage/innobase/include/ut0new.h b/storage/innobase/include/ut0new.h
index a190b872549..e4ef9712e0f 100644
--- a/storage/innobase/include/ut0new.h
+++ b/storage/innobase/include/ut0new.h
@@ -130,10 +130,7 @@ InnoDB:
#include "my_global.h" /* needed for headers from mysql/psi/ */
-/* JAN: TODO: missing 5.7 header */
-#ifdef HAVE_MYSQL_MEMORY_H
#include "mysql/psi/mysql_memory.h" /* PSI_MEMORY_CALL() */
-#endif
#include "mysql/psi/psi_memory.h" /* PSI_memory_key, PSI_memory_info */
@@ -232,38 +229,19 @@ struct ut_new_pfx_t {
#endif
};
-static inline void ut_allocate_trace_dontdump(void *ptr, size_t bytes,
- bool
-#if defined(DBUG_OFF) && defined(HAVE_MADVISE) && defined(MADV_DONTDUMP)
- dontdump
-#endif
- , ut_new_pfx_t* pfx,
- const char*
-#ifdef UNIV_PFS_MEMORY
- file
-#endif
-
- )
+#if defined(DBUG_OFF) && defined(HAVE_MADVISE) && defined(MADV_DODUMP)
+static inline void ut_dontdump(void *ptr, size_t m_size, bool dontdump)
{
ut_a(ptr != NULL);
-#if defined(DBUG_OFF) && defined(HAVE_MADVISE) && defined(MADV_DONTDUMP)
- if (dontdump && madvise(ptr, bytes, MADV_DONTDUMP)) {
+ if (dontdump && madvise(ptr, m_size, MADV_DONTDUMP)) {
ib::warn() << "Failed to set memory to " DONTDUMP_STR ": "
<< strerror(errno)
<< " ptr " << ptr
- << " size " << bytes;
- }
-#endif
- if (pfx != NULL) {
-#ifdef UNIV_PFS_MEMORY
- allocate_trace(bytes, file, pfx);
-#endif /* UNIV_PFS_MEMORY */
- pfx->m_size = bytes;
+ << " size " << m_size;
}
}
-#if defined(DBUG_OFF) && defined(HAVE_MADVISE) && defined(MADV_DODUMP)
static inline void ut_dodump(void* ptr, size_t m_size)
{
if (ptr && madvise(ptr, m_size, MADV_DODUMP)) {
@@ -274,6 +252,7 @@ static inline void ut_dodump(void* ptr, size_t m_size)
}
}
#else
+static inline void ut_dontdump(void *, size_t, bool) {}
static inline void ut_dodump(void*, size_t) {}
#endif
@@ -310,10 +289,14 @@ public:
other
#endif
)
+ {
#ifdef UNIV_PFS_MEMORY
- : m_key(other.m_key)
+ const PSI_memory_key other_key = other.get_mem_key(NULL);
+
+ m_key = (other_key != mem_key_std)
+ ? other_key
+ : PSI_NOT_INSTRUMENTED;
#endif /* UNIV_PFS_MEMORY */
- {
}
/** Return the maximum number of objects that can be allocated by
@@ -422,7 +405,7 @@ public:
/** Free a memory allocated by allocate() and trace the deallocation.
@param[in,out] ptr pointer to memory to free */
- void deallocate(pointer ptr, size_type)
+ void deallocate(pointer ptr, size_type n_elements = 0)
{
#ifdef UNIV_PFS_MEMORY
if (ptr == NULL) {
@@ -645,7 +628,14 @@ public:
return NULL;
}
- ut_allocate_trace_dontdump(ptr, n_bytes, dontdump, pfx, NULL);
+ ut_dontdump(ptr, n_bytes, dontdump);
+
+ if (pfx != NULL) {
+#ifdef UNIV_PFS_MEMORY
+ allocate_trace(n_bytes, NULL, pfx);
+#endif /* UNIV_PFS_MEMORY */
+ pfx->m_size = n_bytes;
+ }
return(ptr);
}
@@ -924,9 +914,9 @@ ut_delete_array(
ut_allocator<byte>(key).allocate( \
n_bytes, NULL, __FILE__, false, false))
-#define ut_malloc_dontdump(n_bytes) static_cast<void*>( \
- ut_allocator<byte>(PSI_NOT_INSTRUMENTED).allocate_large( \
- n_bytes, true))
+#define ut_malloc_dontdump(n_bytes, key) static_cast<void*>( \
+ ut_allocator<byte>(key).allocate_large( \
+ n_bytes, NULL, true))
#define ut_zalloc(n_bytes, key) static_cast<void*>( \
ut_allocator<byte>(key).allocate( \
@@ -951,9 +941,8 @@ ut_delete_array(
#define ut_free(ptr) ut_allocator<byte>(PSI_NOT_INSTRUMENTED).deallocate( \
reinterpret_cast<byte*>(ptr))
-#define ut_free_dodump(ptr, size) static_cast<void*>( \
- ut_allocator<byte>(PSI_NOT_INSTRUMENTED).deallocate_large( \
- ptr, NULL, size, true))
+#define ut_free_dodump(ptr, size) ut_allocator<byte>(PSI_NOT_INSTRUMENTED).deallocate_large_dodump( \
+ reinterpret_cast<byte*>(ptr), NULL, size)
#else /* UNIV_PFS_MEMORY */
@@ -977,11 +966,11 @@ ut_delete_array(
#define ut_malloc_nokey(n_bytes) ::malloc(n_bytes)
-static inline void *ut_malloc_dontdump(size_t n_bytes)
+static inline void *ut_malloc_dontdump(size_t n_bytes, ...)
{
void *ptr = os_mem_alloc_large(&n_bytes);
- ut_allocate_trace_dontdump(ptr, n_bytes, true, NULL, NULL);
+ ut_dontdump(ptr, n_bytes, true);
return ptr;
}
diff --git a/storage/innobase/include/ut0stage.h b/storage/innobase/include/ut0stage.h
index 23ff32a60f9..17fbd91b7ef 100644
--- a/storage/innobase/include/ut0stage.h
+++ b/storage/innobase/include/ut0stage.h
@@ -41,8 +41,6 @@ Created Nov 12, 2014 Vasil Dimov
#ifdef HAVE_PSI_STAGE_INTERFACE
-typedef void PSI_stage_progress;
-
/** Class used to report ALTER TABLE progress via performance_schema.
The only user of this class is the ALTER TABLE code and it calls the methods
in the following order
@@ -155,7 +153,6 @@ private:
const PSI_stage_info* new_stage);
/** Performance schema accounting object. */
- /* TODO: MySQL 5.7 PSI */
PSI_stage_progress* m_progress;
/** Old table PK. Used for calculating the estimate. */
@@ -207,13 +204,12 @@ ut_stage_alter_t::~ut_stage_alter_t()
return;
}
- /* TODO: MySQL 5.7 PSI: Set completed = estimated before we quit.
+ /* Set completed = estimated before we quit. */
mysql_stage_set_work_completed(
m_progress,
mysql_stage_get_work_estimated(m_progress));
mysql_end_stage();
- */
}
/** Flag an ALTER TABLE start (read primary key phase).
@@ -228,12 +224,10 @@ ut_stage_alter_t::begin_phase_read_pk(
m_cur_phase = READ_PK;
- /* TODO: MySQL 5.7 PSI
m_progress = mysql_set_stage(
srv_stage_alter_table_read_pk_internal_sort.m_key);
mysql_stage_set_work_completed(m_progress, 0);
- */
reestimate();
}
@@ -253,7 +247,7 @@ ut_stage_alter_t::n_pk_recs_inc()
current phase. */
inline
void
-ut_stage_alter_t::inc(ulint)
+ut_stage_alter_t::inc(ulint inc_val)
{
if (m_progress == NULL) {
return;
@@ -267,14 +261,12 @@ ut_stage_alter_t::inc(ulint)
ut_error;
case READ_PK:
m_n_pk_pages++;
-#if 0 /* TODO: MySQL 5.7 PSI */
ut_ad(inc_val == 1);
/* Overall the read pk phase will read all the pages from the
PK and will do work, proportional to the number of added
indexes, thus when this is called once per read page we
increment with 1 + m_n_sort_indexes */
inc_val = 1 + m_n_sort_indexes;
-#endif
break;
case SORT:
multi_factor = m_sort_multi_factor;
@@ -288,13 +280,15 @@ ut_stage_alter_t::inc(ulint)
(double) N records per page, then the work_completed
should be incremented on the inc() calls round(k*N),
for k=1,2,3... */
- const double every_nth = m_n_recs_per_page * multi_factor;
+ const double every_nth = m_n_recs_per_page *
+ static_cast<double>(multi_factor);
const ulint k = static_cast<ulint>(
- round(m_n_recs_processed / every_nth));
+ round(static_cast<double>(m_n_recs_processed) /
+ every_nth));
const ulint nth = static_cast<ulint>(
- round(k * every_nth));
+ round(static_cast<double>(k) * every_nth));
should_proceed = m_n_recs_processed == nth;
@@ -315,9 +309,7 @@ ut_stage_alter_t::inc(ulint)
}
if (should_proceed) {
- /* TODO: MySQL 5.7 PSI
mysql_stage_inc_work_completed(m_progress, inc_val);
- */
reestimate();
}
}
@@ -338,7 +330,8 @@ ut_stage_alter_t::end_phase_read_pk()
m_n_recs_per_page = 1.0;
} else {
m_n_recs_per_page = std::max(
- static_cast<double>(m_n_pk_recs) / m_n_pk_pages,
+ static_cast<double>(m_n_pk_recs)
+ / static_cast<double>(m_n_pk_pages),
1.0);
}
}
@@ -406,12 +399,10 @@ ut_stage_alter_t::reestimate()
/* During the log table phase we calculate the estimate as
work done so far + log size remaining. */
if (m_cur_phase == LOG_INNODB_TABLE) {
- /* TODO: MySQL 5.7 PSI
mysql_stage_set_work_estimated(
m_progress,
mysql_stage_get_work_completed(m_progress)
+ row_log_estimate_work(m_pk));
- */
return;
}
@@ -435,12 +426,10 @@ ut_stage_alter_t::reestimate()
+ row_log_estimate_work(m_pk);
/* Prevent estimate < completed */
- /* TODO: MySQL 5.7 PSI
estimate = std::max(estimate,
mysql_stage_get_work_completed(m_progress));
mysql_stage_set_work_estimated(m_progress, estimate);
- */
}
/** Change the current phase.
@@ -471,7 +460,6 @@ ut_stage_alter_t::change_phase(
ut_error;
}
- /* TODO: MySQL 5.7 PSI
const ulonglong c = mysql_stage_get_work_completed(m_progress);
const ulonglong e = mysql_stage_get_work_estimated(m_progress);
@@ -479,7 +467,6 @@ ut_stage_alter_t::change_phase(
mysql_stage_set_work_completed(m_progress, c);
mysql_stage_set_work_estimated(m_progress, e);
- */
}
#else /* HAVE_PSI_STAGE_INTERFACE */
diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc
index a2de83c0739..c134c055be8 100644
--- a/storage/innobase/lock/lock0lock.cc
+++ b/storage/innobase/lock/lock0lock.cc
@@ -632,7 +632,7 @@ lock_rec_has_to_wait(
bool for_locking,
/*!< in is called locking or releasing */
const trx_t* trx, /*!< in: trx of new lock */
- ulint type_mode,/*!< in: precise mode of the new lock
+ unsigned type_mode,/*!< in: precise mode of the new lock
to set: LOCK_S or LOCK_X, possibly
ORed to LOCK_GAP or LOCK_REC_NOT_GAP,
LOCK_INSERT_INTENTION */
@@ -1136,7 +1136,7 @@ static
lock_t*
lock_rec_other_has_conflicting(
/*===========================*/
- ulint mode, /*!< in: LOCK_S or LOCK_X,
+ unsigned mode, /*!< in: LOCK_S or LOCK_X,
possibly ORed to LOCK_GAP or
LOC_REC_NOT_GAP,
LOCK_INSERT_INTENTION */
@@ -1313,7 +1313,7 @@ lock_rec_create_low(
lock_t* c_lock, /*!< conflicting lock */
que_thr_t* thr, /*!< thread owning trx */
#endif
- ulint type_mode,
+ unsigned type_mode,
ulint space,
ulint page_no,
const page_t* page,
@@ -1662,7 +1662,7 @@ lock_rec_enqueue_waiting(
#ifdef WITH_WSREP
lock_t* c_lock, /*!< conflicting lock */
#endif
- ulint type_mode,
+ unsigned type_mode,
const buf_block_t* block,
ulint heap_no,
dict_index_t* index,
@@ -1770,7 +1770,7 @@ static
void
lock_rec_add_to_queue(
/*==================*/
- ulint type_mode,/*!< in: lock mode, wait, gap
+ unsigned type_mode,/*!< in: lock mode, wait, gap
etc. flags; type is ignored
and replaced by LOCK_REC */
const buf_block_t* block, /*!< in: buffer block containing
@@ -1902,7 +1902,7 @@ lock_rec_lock(
if no wait is necessary: we
assume that the caller will
set an implicit lock */
- ulint mode, /*!< in: lock mode: LOCK_X or
+ unsigned mode, /*!< in: lock mode: LOCK_X or
LOCK_S possibly ORed to either
LOCK_GAP or LOCK_REC_NOT_GAP */
const buf_block_t* block, /*!< in: buffer block containing
@@ -1929,7 +1929,9 @@ lock_rec_lock(
ut_ad((LOCK_MODE_MASK & mode) != LOCK_X ||
lock_table_has(trx, index->table, LOCK_IX));
- if (lock_t *lock= lock_rec_get_first_on_page(lock_sys.rec_hash, block))
+ if (lock_table_has(trx, index->table,
+ static_cast<lock_mode>(LOCK_MODE_MASK & mode)));
+ else if (lock_t *lock= lock_rec_get_first_on_page(lock_sys.rec_hash, block))
{
trx_mutex_enter(trx);
if (lock_rec_get_next_on_page(lock) ||
@@ -2428,8 +2430,7 @@ lock_rec_inherit_to_gap(
|| lock_get_mode(lock) !=
(lock->trx->duplicates ? LOCK_S : LOCK_X))) {
lock_rec_add_to_queue(
- LOCK_REC | LOCK_GAP
- | ulint(lock_get_mode(lock)),
+ LOCK_REC | LOCK_GAP | lock_get_mode(lock),
heir_block, heir_heap_no, lock->index,
lock->trx, FALSE);
}
@@ -2465,8 +2466,7 @@ lock_rec_inherit_to_gap_if_gap_lock(
|| !lock_rec_get_rec_not_gap(lock))) {
lock_rec_add_to_queue(
- LOCK_REC | LOCK_GAP
- | ulint(lock_get_mode(lock)),
+ LOCK_REC | LOCK_GAP | lock_get_mode(lock),
block, heir_heap_no, lock->index,
lock->trx, FALSE);
}
@@ -2509,7 +2509,7 @@ lock_rec_move_low(
lock != NULL;
lock = lock_rec_get_next(donator_heap_no, lock)) {
- const ulint type_mode = lock->type_mode;
+ const auto type_mode = lock->type_mode;
lock_rec_reset_nth_bit(lock, donator_heap_no);
@@ -2742,7 +2742,7 @@ lock_move_rec_list_end(
lock = lock_rec_get_next_on_page(lock)) {
const rec_t* rec1 = rec;
const rec_t* rec2;
- const ulint type_mode = lock->type_mode;
+ const auto type_mode = lock->type_mode;
if (comp) {
if (page_offset(rec1) == PAGE_NEW_INFIMUM) {
@@ -2857,7 +2857,7 @@ lock_move_rec_list_start(
lock = lock_rec_get_next_on_page(lock)) {
const rec_t* rec1;
const rec_t* rec2;
- const ulint type_mode = lock->type_mode;
+ const auto type_mode = lock->type_mode;
if (comp) {
rec1 = page_rec_get_next_low(
@@ -2970,7 +2970,7 @@ lock_rtr_move_rec_list(
ulint moved = 0;
const rec_t* rec1;
const rec_t* rec2;
- const ulint type_mode = lock->type_mode;
+ const auto type_mode = lock->type_mode;
/* Copy lock requests on user records to new page and
reset the lock bits on the old */
@@ -3451,7 +3451,7 @@ lock_table_create(
/*==============*/
dict_table_t* table, /*!< in/out: database table
in dictionary cache */
- ulint type_mode,/*!< in: lock mode possibly ORed with
+ unsigned type_mode,/*!< in: lock mode possibly ORed with
LOCK_WAIT */
trx_t* trx /*!< in: trx */
#ifdef WITH_WSREP
@@ -3701,7 +3701,7 @@ static
dberr_t
lock_table_enqueue_waiting(
/*=======================*/
- ulint mode, /*!< in: lock mode this transaction is
+ unsigned mode, /*!< in: lock mode this transaction is
requesting */
dict_table_t* table, /*!< in/out: table */
que_thr_t* thr /*!< in: query thread */
@@ -3738,7 +3738,7 @@ lock_table_enqueue_waiting(
#endif /* WITH_WSREP */
/* Enqueue the lock request that will wait to be granted */
- lock = lock_table_create(table, ulint(mode) | LOCK_WAIT, trx
+ lock = lock_table_create(table, mode | LOCK_WAIT, trx
#ifdef WITH_WSREP
, c_lock
#endif
@@ -3832,7 +3832,7 @@ be granted immediately, the query thread is put to wait.
dberr_t
lock_table(
/*=======*/
- ulint flags, /*!< in: if BTR_NO_LOCKING_FLAG bit is set,
+ unsigned flags, /*!< in: if BTR_NO_LOCKING_FLAG bit is set,
does nothing */
dict_table_t* table, /*!< in/out: database table
in dictionary cache */
@@ -3897,14 +3897,14 @@ lock_table(
mode: this trx may have to wait */
if (wait_for != NULL) {
- err = lock_table_enqueue_waiting(ulint(mode) | flags, table,
+ err = lock_table_enqueue_waiting(flags | mode, table,
thr
#ifdef WITH_WSREP
, wait_for
#endif
);
} else {
- lock_table_create(table, ulint(mode) | flags, trx);
+ lock_table_create(table, flags | mode, trx);
ut_a(!flags || mode == LOCK_S || mode == LOCK_X);
@@ -4982,7 +4982,7 @@ loop:
goto function_exit;
}
- ut_ad(!block->page.file_page_was_freed);
+ DBUG_ASSERT(block->page.status != buf_page_t::FREED);
for (i = 0; i < nth_lock; i++) {
@@ -5088,7 +5088,7 @@ lock_rec_block_validate(
/* The lock and the block that it is referring to may be freed at
this point. We pass BUF_GET_POSSIBLY_FREED to skip a debug check.
If the lock exists in lock_rec_validate_page() we assert
- !block->page.file_page_was_freed. */
+ block->page.status != FREED. */
buf_block_t* block;
mtr_t mtr;
@@ -5293,7 +5293,7 @@ lock_rec_insert_check_and_lock(
had to wait for their insert. Both had waiting gap type lock requests
on the successor, which produced an unnecessary deadlock. */
- const ulint type_mode = LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION;
+ const unsigned type_mode = LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION;
if (
#ifdef WITH_WSREP
@@ -5710,7 +5710,7 @@ lock_sec_rec_read_check_and_lock(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP */
que_thr_t* thr) /*!< in: query thread */
{
@@ -5747,7 +5747,7 @@ lock_sec_rec_read_check_and_lock(
return DB_SUCCESS;
}
- err = lock_rec_lock(FALSE, ulint(mode) | gap_mode,
+ err = lock_rec_lock(FALSE, gap_mode | mode,
block, heap_no, index, thr);
ut_ad(lock_rec_queue_validate(FALSE, block, rec, index, offsets));
@@ -5780,7 +5780,7 @@ lock_clust_rec_read_check_and_lock(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP */
que_thr_t* thr) /*!< in: query thread */
{
@@ -5812,7 +5812,7 @@ lock_clust_rec_read_check_and_lock(
return DB_SUCCESS;
}
- err = lock_rec_lock(FALSE, ulint(mode) | gap_mode,
+ err = lock_rec_lock(FALSE, gap_mode | mode,
block, heap_no, index, thr);
ut_ad(lock_rec_queue_validate(FALSE, block, rec, index, offsets));
@@ -5847,7 +5847,7 @@ lock_clust_rec_read_check_and_lock_alt(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned gap_mode,/*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP */
que_thr_t* thr) /*!< in: query thread */
{
@@ -6358,8 +6358,9 @@ lock_trx_has_expl_x_lock(
lock_mutex_enter();
ut_ad(lock_table_has(trx, table, LOCK_IX));
- ut_ad(lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP, block, heap_no,
- trx));
+ ut_ad(lock_table_has(trx, table, LOCK_X)
+ || lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP, block, heap_no,
+ trx));
lock_mutex_exit();
return(true);
}
diff --git a/storage/innobase/lock/lock0prdt.cc b/storage/innobase/lock/lock0prdt.cc
index a6bb8a423f4..6458d202bf2 100644
--- a/storage/innobase/lock/lock0prdt.cc
+++ b/storage/innobase/lock/lock0prdt.cc
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2014, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2018, 2019, MariaDB Corporation.
+Copyright (c) 2018, 2020, MariaDB Corporation.
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
@@ -153,7 +153,7 @@ bool
lock_prdt_has_to_wait(
/*==================*/
const trx_t* trx, /*!< in: trx of new lock */
- ulint type_mode,/*!< in: precise mode of the new lock
+ unsigned type_mode,/*!< in: precise mode of the new lock
to set: LOCK_S or LOCK_X, possibly
ORed to LOCK_PREDICATE or LOCK_PRDT_PAGE,
LOCK_INSERT_INTENTION */
@@ -228,7 +228,7 @@ lock_t*
lock_prdt_has_lock(
/*===============*/
ulint precise_mode, /*!< in: LOCK_S or LOCK_X */
- ulint type_mode, /*!< in: LOCK_PREDICATE etc. */
+ unsigned type_mode, /*!< in: LOCK_PREDICATE etc. */
const buf_block_t* block, /*!< in: buffer block
containing the record */
lock_prdt_t* prdt, /*!< in: The predicate to be
@@ -285,7 +285,7 @@ static
lock_t*
lock_prdt_other_has_conflicting(
/*============================*/
- ulint mode, /*!< in: LOCK_S or LOCK_X,
+ unsigned mode, /*!< in: LOCK_S or LOCK_X,
possibly ORed to LOCK_PREDICATE or
LOCK_PRDT_PAGE, LOCK_INSERT_INTENTION */
const buf_block_t* block, /*!< in: buffer block containing
@@ -385,7 +385,7 @@ static
lock_t*
lock_prdt_find_on_page(
/*===================*/
- ulint type_mode, /*!< in: lock type_mode field */
+ unsigned type_mode, /*!< in: lock type_mode field */
const buf_block_t* block, /*!< in: buffer block */
lock_prdt_t* prdt, /*!< in: MBR with the lock */
const trx_t* trx) /*!< in: transaction */
@@ -423,7 +423,7 @@ static
lock_t*
lock_prdt_add_to_queue(
/*===================*/
- ulint type_mode,/*!< in: lock mode, wait, predicate
+ unsigned type_mode,/*!< in: lock mode, wait, predicate
etc. flags; type is ignored
and replaced by LOCK_REC */
const buf_block_t* block, /*!< in: buffer block containing
@@ -677,7 +677,7 @@ lock_prdt_update_split_low(
lock_prdt_t* new_prdt, /*!< in: MBR on the new page */
ulint space, /*!< in: space id */
ulint page_no, /*!< in: page number */
- ulint type_mode) /*!< in: LOCK_PREDICATE or
+ unsigned type_mode) /*!< in: LOCK_PREDICATE or
LOCK_PRDT_PAGE */
{
lock_t* lock;
@@ -797,7 +797,7 @@ lock_prdt_lock(
records: LOCK_S or LOCK_X; the
latter is possible in
SELECT FOR UPDATE */
- ulint type_mode,
+ unsigned type_mode,
/*!< in: LOCK_PREDICATE or LOCK_PRDT_PAGE */
que_thr_t* thr) /*!< in: query thread
(can be NULL if BTR_NO_LOCKING_FLAG) */
@@ -825,7 +825,7 @@ lock_prdt_lock(
lock_mutex_enter();
- const ulint prdt_mode = ulint(mode) | type_mode;
+ const unsigned prdt_mode = type_mode | mode;
lock_t* lock = lock_rec_get_first_on_page(hash, block);
if (lock == NULL) {
@@ -833,7 +833,7 @@ lock_prdt_lock(
#ifdef WITH_WSREP
NULL, NULL, /* FIXME: replicate SPATIAL INDEX locks */
#endif
- ulint(mode) | type_mode, block, PRDT_HEAPNO,
+ prdt_mode, block, PRDT_HEAPNO,
index, trx, FALSE);
status = LOCK_REC_SUCCESS_CREATED;
@@ -865,7 +865,7 @@ lock_prdt_lock(
NULL, /* FIXME: replicate
SPATIAL INDEX locks */
#endif
- ulint(mode) | type_mode,
+ prdt_mode,
block, PRDT_HEAPNO,
index, thr, prdt);
} else {
@@ -1012,7 +1012,7 @@ lock_prdt_rec_move(
lock != NULL;
lock = lock_rec_get_next(PRDT_HEAPNO, lock)) {
- const ulint type_mode = lock->type_mode;
+ const auto type_mode = lock->type_mode;
lock_prdt_t* lock_prdt = lock_get_prdt_from_lock(lock);
lock_rec_reset_nth_bit(lock, PRDT_HEAPNO);
diff --git a/storage/innobase/log/log0crypt.cc b/storage/innobase/log/log0crypt.cc
index d03e23d7a08..5a1711ecf1e 100644
--- a/storage/innobase/log/log0crypt.cc
+++ b/storage/innobase/log/log0crypt.cc
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (C) 2013, 2015, Google Inc. All Rights Reserved.
-Copyright (C) 2014, 2019, MariaDB Corporation.
+Copyright (C) 2014, 2020, MariaDB Corporation.
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
@@ -29,7 +29,6 @@ MDEV-11782: Rewritten for MariaDB 10.2 by Marko Mäkelä, MariaDB Corporation.
#include <mysql/service_my_crypt.h>
#include "log0crypt.h"
-#include "srv0start.h" // for srv_start_lsn
#include "log0recv.h" // for recv_sys
/** innodb_encrypt_log: whether to encrypt the redo log */
@@ -38,22 +37,15 @@ my_bool srv_encrypt_log;
/** Redo log encryption key ID */
#define LOG_DEFAULT_ENCRYPTION_KEY 1
-struct aes_block_t {
- byte bytes[MY_AES_BLOCK_SIZE];
-};
-
struct crypt_info_t {
ulint checkpoint_no; /*!< checkpoint no; 32 bits */
uint key_version; /*!< mysqld key version */
/** random string for encrypting the key */
- aes_block_t crypt_msg;
+ alignas(8) byte crypt_msg[MY_AES_BLOCK_SIZE];
/** the secret key */
- aes_block_t crypt_key;
+ alignas(8) byte crypt_key[MY_AES_BLOCK_SIZE];
/** a random string for the per-block initialization vector */
- union {
- uint32_t word;
- byte bytes[4];
- } crypt_nonce;
+ alignas(4) byte crypt_nonce[4];
};
/** The crypt info */
@@ -92,7 +84,7 @@ static bool init_crypt_key(crypt_info_t* info, bool upgrade = false)
byte mysqld_key[MY_AES_MAX_KEY_LENGTH];
uint keylen = sizeof mysqld_key;
- compile_time_assert(16 == sizeof info->crypt_key.bytes);
+ compile_time_assert(16 == sizeof info->crypt_key);
compile_time_assert(16 == MY_AES_BLOCK_SIZE);
if (uint rc = encryption_key_get(LOG_DEFAULT_ENCRYPTION_KEY,
@@ -115,8 +107,8 @@ static bool init_crypt_key(crypt_info_t* info, bool upgrade = false)
uint dst_len;
int err= my_aes_crypt(MY_AES_ECB,
ENCRYPTION_FLAG_NOPAD | ENCRYPTION_FLAG_ENCRYPT,
- info->crypt_msg.bytes, MY_AES_BLOCK_SIZE,
- info->crypt_key.bytes, &dst_len,
+ info->crypt_msg, MY_AES_BLOCK_SIZE,
+ info->crypt_key, &dst_len,
mysqld_key, keylen, NULL, 0);
if (err != MY_AES_OK || dst_len != MY_AES_BLOCK_SIZE) {
@@ -140,32 +132,24 @@ bool log_crypt(byte* buf, lsn_t lsn, ulint size, log_crypt_t op)
ut_ad(ulint(buf) % OS_FILE_LOG_BLOCK_SIZE == 0);
ut_a(info.key_version);
- uint32_t aes_ctr_iv[MY_AES_BLOCK_SIZE / sizeof(uint32_t)];
- compile_time_assert(sizeof(uint32_t) == 4);
+ alignas(8) byte aes_ctr_iv[MY_AES_BLOCK_SIZE];
#define LOG_CRYPT_HDR_SIZE 4
lsn &= ~lsn_t(OS_FILE_LOG_BLOCK_SIZE - 1);
for (const byte* const end = buf + size; buf != end;
buf += OS_FILE_LOG_BLOCK_SIZE, lsn += OS_FILE_LOG_BLOCK_SIZE) {
- uint32_t dst[(OS_FILE_LOG_BLOCK_SIZE - LOG_CRYPT_HDR_SIZE
- - LOG_BLOCK_CHECKSUM)
- / sizeof(uint32_t)];
+ alignas(4) byte dst[OS_FILE_LOG_BLOCK_SIZE - LOG_CRYPT_HDR_SIZE
+ - LOG_BLOCK_CHECKSUM];
/* The log block number is not encrypted. */
- *aes_ctr_iv =
-#ifdef WORDS_BIGENDIAN
- ~LOG_BLOCK_FLUSH_BIT_MASK
-#else
- ~(LOG_BLOCK_FLUSH_BIT_MASK >> 24)
-#endif
- & (*dst = *reinterpret_cast<const uint32_t*>(
- buf + LOG_BLOCK_HDR_NO));
-#if LOG_BLOCK_HDR_NO + 4 != LOG_CRYPT_HDR_SIZE
-# error "LOG_BLOCK_HDR_NO has been moved; redo log format affected!"
-#endif
- aes_ctr_iv[1] = info.crypt_nonce.word;
- mach_write_to_8(reinterpret_cast<byte*>(aes_ctr_iv + 2), lsn);
+ memcpy_aligned<4>(dst, buf + LOG_BLOCK_HDR_NO, 4);
+ memcpy_aligned<4>(aes_ctr_iv, buf + LOG_BLOCK_HDR_NO, 4);
+ *aes_ctr_iv &= ~(LOG_BLOCK_FLUSH_BIT_MASK >> 24);
+ static_assert(LOG_BLOCK_HDR_NO + 4 == LOG_CRYPT_HDR_SIZE,
+ "compatibility");
+ memcpy_aligned<4>(aes_ctr_iv + 4, info.crypt_nonce, 4);
+ mach_write_to_8(my_assume_aligned<8>(aes_ctr_iv + 8), lsn);
ut_ad(log_block_get_start_lsn(lsn,
log_block_get_hdr_no(buf))
== lsn);
@@ -213,9 +197,9 @@ bool log_crypt(byte* buf, lsn_t lsn, ulint size, log_crypt_t op)
int rc = encryption_crypt(
buf + LOG_CRYPT_HDR_SIZE, dst_size,
reinterpret_cast<byte*>(dst), &dst_len,
- const_cast<byte*>(info.crypt_key.bytes),
+ const_cast<byte*>(info.crypt_key),
MY_AES_BLOCK_SIZE,
- reinterpret_cast<byte*>(aes_ctr_iv), sizeof aes_ctr_iv,
+ aes_ctr_iv, sizeof aes_ctr_iv,
op == LOG_DECRYPT
? ENCRYPTION_FLAG_DECRYPT | ENCRYPTION_FLAG_NOPAD
: ENCRYPTION_FLAG_ENCRYPT | ENCRYPTION_FLAG_NOPAD,
@@ -235,37 +219,31 @@ The random parameters will be persisted in the log checkpoint pages.
@see log_crypt_write_checkpoint_buf()
@see log_crypt_read_checkpoint_buf()
@return whether the operation succeeded */
-UNIV_INTERN
-bool
-log_crypt_init()
+bool log_crypt_init()
{
- info.key_version = encryption_key_get_latest_version(
- LOG_DEFAULT_ENCRYPTION_KEY);
-
- if (info.key_version == ENCRYPTION_KEY_VERSION_INVALID) {
- ib::error() << "innodb_encrypt_log: cannot get key version";
- info.key_version = 0;
- return false;
- }
-
- if (my_random_bytes(tmp_iv, MY_AES_BLOCK_SIZE) != MY_AES_OK
- || my_random_bytes(info.crypt_msg.bytes, sizeof info.crypt_msg)
- != MY_AES_OK
- || my_random_bytes(info.crypt_nonce.bytes, sizeof info.crypt_nonce)
- != MY_AES_OK) {
- ib::error() << "innodb_encrypt_log: my_random_bytes() failed";
- return false;
- }
-
- return init_crypt_key(&info);
+ info.key_version=
+ encryption_key_get_latest_version(LOG_DEFAULT_ENCRYPTION_KEY);
+
+ if (info.key_version == ENCRYPTION_KEY_VERSION_INVALID)
+ ib::error() << "log_crypt_init(): cannot get key version";
+ else if (my_random_bytes(tmp_iv, MY_AES_BLOCK_SIZE) != MY_AES_OK ||
+ my_random_bytes(info.crypt_msg, sizeof info.crypt_msg) !=
+ MY_AES_OK ||
+ my_random_bytes(info.crypt_nonce, sizeof info.crypt_nonce) !=
+ MY_AES_OK)
+ ib::error() << "log_crypt_init(): my_random_bytes() failed";
+ else if (init_crypt_key(&info))
+ goto func_exit;
+
+ info.key_version= 0;
+func_exit:
+ return info.key_version != 0;
}
/** Read the MariaDB 10.1 checkpoint crypto (version, msg and iv) info.
@param[in] buf checkpoint buffer
@return whether the operation was successful */
-UNIV_INTERN
-bool
-log_crypt_101_read_checkpoint(const byte* buf)
+ATTRIBUTE_COLD bool log_crypt_101_read_checkpoint(const byte* buf)
{
buf += 20 + 32 * 9;
@@ -281,15 +259,14 @@ log_crypt_101_read_checkpoint(const byte* buf)
}
}
if (infos_used >= UT_ARR_SIZE(infos)) {
- ut_ad(!"too many checkpoint pages");
+ ut_ad("too many checkpoint pages" == 0);
goto next_slot;
}
infos_used++;
info.checkpoint_no = checkpoint_no;
info.key_version = mach_read_from_4(buf + 4);
- memcpy(info.crypt_msg.bytes, buf + 8, MY_AES_BLOCK_SIZE);
- memcpy(info.crypt_nonce.bytes, buf + 24,
- sizeof info.crypt_nonce);
+ memcpy(info.crypt_msg, buf + 8, MY_AES_BLOCK_SIZE);
+ memcpy(info.crypt_nonce, buf + 24, sizeof info.crypt_nonce);
if (!init_crypt_key(&info, true)) {
return false;
@@ -302,14 +279,11 @@ next_slot:
}
/** Decrypt a MariaDB 10.1 redo log block.
-@param[in,out] buf log block
+@param[in,out] buf log block
+@param[in] start_lsn server start LSN
@return whether the decryption was successful */
-UNIV_INTERN
-bool
-log_crypt_101_read_block(byte* buf)
+ATTRIBUTE_COLD bool log_crypt_101_read_block(byte* buf, lsn_t start_lsn)
{
- ut_ad(log_block_calc_checksum_format_0(buf)
- != log_block_get_checksum(buf));
const uint32_t checkpoint_no
= uint32_t(log_block_get_checkpoint_no(buf));
const crypt_info_t* info = infos;
@@ -339,16 +313,16 @@ found:
/* The log block header is not encrypted. */
memcpy(dst, buf, LOG_BLOCK_HDR_SIZE);
- memcpy(aes_ctr_iv, info->crypt_nonce.bytes, 3);
+ memcpy(aes_ctr_iv, info->crypt_nonce, 3);
mach_write_to_8(aes_ctr_iv + 3,
- log_block_get_start_lsn(srv_start_lsn, log_block_no));
+ log_block_get_start_lsn(start_lsn, log_block_no));
memcpy(aes_ctr_iv + 11, buf, 4);
aes_ctr_iv[11] &= ~(LOG_BLOCK_FLUSH_BIT_MASK >> 24);
aes_ctr_iv[15] = 0;
int rc = encryption_crypt(buf + LOG_BLOCK_HDR_SIZE, src_len,
dst + LOG_BLOCK_HDR_SIZE, &dst_len,
- const_cast<byte*>(info->crypt_key.bytes),
+ const_cast<byte*>(info->crypt_key),
MY_AES_BLOCK_SIZE,
aes_ctr_iv, MY_AES_BLOCK_SIZE,
ENCRYPTION_FLAG_DECRYPT
@@ -371,15 +345,15 @@ void
log_crypt_write_checkpoint_buf(byte* buf)
{
ut_ad(info.key_version);
- compile_time_assert(16 == sizeof info.crypt_msg.bytes);
+ compile_time_assert(16 == sizeof info.crypt_msg);
compile_time_assert(16 == MY_AES_BLOCK_SIZE);
compile_time_assert(LOG_CHECKPOINT_CRYPT_MESSAGE
- LOG_CHECKPOINT_CRYPT_NONCE
== sizeof info.crypt_nonce);
- memcpy(buf + LOG_CHECKPOINT_CRYPT_MESSAGE, info.crypt_msg.bytes,
+ memcpy(buf + LOG_CHECKPOINT_CRYPT_MESSAGE, info.crypt_msg,
MY_AES_BLOCK_SIZE);
- memcpy(buf + LOG_CHECKPOINT_CRYPT_NONCE, info.crypt_nonce.bytes,
+ memcpy(buf + LOG_CHECKPOINT_CRYPT_NONCE, info.crypt_nonce,
sizeof info.crypt_nonce);
mach_write_to_4(buf + LOG_CHECKPOINT_CRYPT_KEY, info.key_version);
}
@@ -387,9 +361,7 @@ log_crypt_write_checkpoint_buf(byte* buf)
/** Read the checkpoint crypto (version, msg and iv) info.
@param[in] buf checkpoint buffer
@return whether the operation was successful */
-UNIV_INTERN
-bool
-log_crypt_read_checkpoint_buf(const byte* buf)
+bool log_crypt_read_checkpoint_buf(const byte* buf)
{
info.checkpoint_no = mach_read_from_4(buf + (LOG_CHECKPOINT_NO + 4));
info.key_version = mach_read_from_4(buf + LOG_CHECKPOINT_CRYPT_KEY);
@@ -397,15 +369,15 @@ log_crypt_read_checkpoint_buf(const byte* buf)
#if MY_AES_BLOCK_SIZE != 16
# error "MY_AES_BLOCK_SIZE != 16; redo log checkpoint format affected"
#endif
- compile_time_assert(16 == sizeof info.crypt_msg.bytes);
+ compile_time_assert(16 == sizeof info.crypt_msg);
compile_time_assert(16 == MY_AES_BLOCK_SIZE);
compile_time_assert(LOG_CHECKPOINT_CRYPT_MESSAGE
- LOG_CHECKPOINT_CRYPT_NONCE
== sizeof info.crypt_nonce);
- memcpy(info.crypt_msg.bytes, buf + LOG_CHECKPOINT_CRYPT_MESSAGE,
+ memcpy(info.crypt_msg, buf + LOG_CHECKPOINT_CRYPT_MESSAGE,
MY_AES_BLOCK_SIZE);
- memcpy(info.crypt_nonce.bytes, buf + LOG_CHECKPOINT_CRYPT_NONCE,
+ memcpy(info.crypt_nonce, buf + LOG_CHECKPOINT_CRYPT_NONCE,
sizeof info.crypt_nonce);
return init_crypt_key(&info);
@@ -434,7 +406,7 @@ log_tmp_block_encrypt(
int rc = encryption_crypt(
src, uint(size), dst, &dst_len,
- const_cast<byte*>(info.crypt_key.bytes), MY_AES_BLOCK_SIZE,
+ const_cast<byte*>(info.crypt_key), MY_AES_BLOCK_SIZE,
reinterpret_cast<byte*>(iv), uint(sizeof iv),
encrypt
? ENCRYPTION_FLAG_ENCRYPT|ENCRYPTION_FLAG_NOPAD
diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc
index 689d24083b5..7e291c8d8df 100644
--- a/storage/innobase/log/log0log.cc
+++ b/storage/innobase/log/log0log.cc
@@ -54,6 +54,7 @@ Created 12/9/1995 Heikki Tuuri
#include "srv0mon.h"
#include "sync0sync.h"
#include "buf0dump.h"
+#include "log0sync.h"
/*
General philosophy of InnoDB redo-logs:
@@ -65,10 +66,6 @@ to the InnoDB redo log. */
/** Redo log system */
log_t log_sys;
-/* Next log block number to do dummy record filling if no log records written
-for a while */
-static ulint next_lbn_to_pad = 0;
-
/* These control how often we print warnings if the last checkpoint is too
old */
static bool log_has_printed_chkp_warning = false;
@@ -101,15 +98,6 @@ the previous */
#define LOG_UNLOCK_NONE_FLUSHED_LOCK 1
#define LOG_UNLOCK_FLUSH_LOCK 2
-/** Event to wake up log_scrub_thread */
-os_event_t log_scrub_event;
-/** Whether log_scrub_thread is active */
-bool log_scrub_thread_active;
-
-extern "C" UNIV_INTERN
-os_thread_ret_t
-DECLARE_THREAD(log_scrub_thread)(void*);
-
/****************************************************************//**
Returns the oldest modified block lsn in the pool, or log_sys.lsn if none
exists.
@@ -127,7 +115,7 @@ log_buf_pool_get_oldest_modification(void)
if (!lsn) {
- lsn = log_sys.lsn;
+ lsn = log_sys.get_lsn();
}
return(lsn);
@@ -137,9 +125,9 @@ log_buf_pool_get_oldest_modification(void)
@param[in] len requested minimum size in bytes */
void log_buffer_extend(ulong len)
{
- const ulong new_buf_size = ut_calc_align(len, srv_page_size);
+ const size_t new_buf_size = ut_calc_align(len, srv_page_size);
byte* new_buf = static_cast<byte*>(
- ut_malloc_dontdump(new_buf_size * 2));
+ ut_malloc_dontdump(new_buf_size * 2, PSI_INSTRUMENT_ME));
TRASH_ALLOC(new_buf, new_buf_size * 2);
log_mutex_enter();
@@ -159,7 +147,7 @@ void log_buffer_extend(ulong len)
const ulong old_buf_size = srv_log_buffer_size;
byte* old_buf = log_sys.first_in_use
? log_sys.buf : log_sys.buf - old_buf_size;
- srv_log_buffer_size = new_buf_size;
+ srv_log_buffer_size = static_cast<ulong>(new_buf_size);
log_sys.buf = new_buf;
log_sys.first_in_use = true;
memcpy_aligned<OS_FILE_LOG_BLOCK_SIZE>(log_sys.buf, old_buf_begin,
@@ -237,20 +225,18 @@ log_margin_checkpoint_age(
/* Our margin check should ensure that we never reach this condition.
Try to do checkpoint once. We cannot keep waiting here as it might
result in hang in case the current mtr has latch on oldest lsn */
- if (log_sys.lsn - log_sys.last_checkpoint_lsn + margin
+ const lsn_t lsn = log_sys.get_lsn();
+
+ if (lsn - log_sys.last_checkpoint_lsn + margin
> log_sys.log_capacity) {
/* The log write of 'len' might overwrite the transaction log
after the last checkpoint. Makes checkpoint. */
- bool flushed_enough = false;
+ const bool flushed_enough = lsn
+ - log_buf_pool_get_oldest_modification() + margin
+ <= log_sys.log_capacity;
- if (log_sys.lsn - log_buf_pool_get_oldest_modification()
- + margin
- <= log_sys.log_capacity) {
- flushed_enough = true;
- }
-
- log_sys.check_flush_or_checkpoint = true;
+ log_sys.set_check_flush_or_checkpoint();
log_mutex_exit();
DEBUG_SYNC_C("margin_checkpoint_age_rescue");
@@ -293,7 +279,7 @@ loop:
DEBUG_SYNC_C("log_buf_size_exceeded");
/* Not enough free space, do a write of the log buffer */
- log_buffer_sync_in_background(false);
+ log_sys.initiate_write(false);
srv_stats.log_waits.inc();
@@ -303,7 +289,7 @@ loop:
goto loop;
}
- return(log_sys.lsn);
+ return(log_sys.get_lsn());
}
/************************************************************//**
@@ -346,6 +332,7 @@ part_loop:
OS_FILE_LOG_BLOCK_SIZE));
log_block_set_data_len(log_block, data_len);
+ lsn_t lsn = log_sys.get_lsn();
if (data_len == trailer_offset) {
/* This block became full */
@@ -354,18 +341,18 @@ part_loop:
log_sys.next_checkpoint_no);
len += log_sys.framing_size();
- log_sys.lsn += len;
+ lsn += len;
/* Initialize the next block header */
- log_block_init(log_block + OS_FILE_LOG_BLOCK_SIZE,
- log_sys.lsn);
+ log_block_init(log_block + OS_FILE_LOG_BLOCK_SIZE, lsn);
} else {
- log_sys.lsn += len;
+ lsn += len;
}
- log_sys.buf_free += ulong(len);
+ log_sys.set_lsn(lsn);
+ log_sys.buf_free += len;
- ut_ad(log_sys.buf_free <= srv_log_buffer_size);
+ ut_ad(log_sys.buf_free <= size_t{srv_log_buffer_size});
if (str_len > 0) {
goto part_loop;
@@ -389,7 +376,7 @@ log_close(void)
ut_ad(log_mutex_own());
- lsn = log_sys.lsn;
+ lsn = log_sys.get_lsn();
log_block = static_cast<byte*>(
ut_align_down(log_sys.buf + log_sys.buf_free,
@@ -407,7 +394,7 @@ log_close(void)
}
if (log_sys.buf_free > log_sys.max_buf_free) {
- log_sys.check_flush_or_checkpoint = true;
+ log_sys.set_check_flush_or_checkpoint();
}
checkpoint_age = lsn - log_sys.last_checkpoint_lsn;
@@ -430,7 +417,8 @@ log_close(void)
}
}
- if (checkpoint_age <= log_sys.max_modified_age_sync) {
+ if (checkpoint_age <= log_sys.max_modified_age_sync ||
+ log_sys.check_flush_or_checkpoint()) {
goto function_exit;
}
@@ -439,7 +427,7 @@ log_close(void)
if (!oldest_lsn
|| lsn - oldest_lsn > log_sys.max_modified_age_sync
|| checkpoint_age > log_sys.max_checkpoint_age_async) {
- log_sys.check_flush_or_checkpoint = true;
+ log_sys.set_check_flush_or_checkpoint();
}
function_exit:
@@ -509,35 +497,31 @@ void log_t::create()
m_initialised= true;
mutex_create(LATCH_ID_LOG_SYS, &mutex);
- mutex_create(LATCH_ID_LOG_WRITE, &write_mutex);
mutex_create(LATCH_ID_LOG_FLUSH_ORDER, &log_flush_order_mutex);
/* Start the lsn from one log block from zero: this way every
log record has a non-zero start lsn, a fact which we will use */
- lsn= LOG_START_LSN;
+ set_lsn(LOG_START_LSN + LOG_BLOCK_HDR_SIZE);
+ set_flushed_lsn(0);
ut_ad(srv_log_buffer_size >= 16 * OS_FILE_LOG_BLOCK_SIZE);
ut_ad(srv_log_buffer_size >= 4U << srv_page_size_shift);
- buf= static_cast<byte*>(ut_malloc_dontdump(srv_log_buffer_size * 2));
+ buf= static_cast<byte*>(ut_malloc_dontdump(srv_log_buffer_size * 2, PSI_INSTRUMENT_ME));
TRASH_ALLOC(buf, srv_log_buffer_size * 2);
first_in_use= true;
max_buf_free= srv_log_buffer_size / LOG_BUF_FLUSH_RATIO -
LOG_BUF_FLUSH_MARGIN;
- check_flush_or_checkpoint= true;
+ set_check_flush_or_checkpoint();
n_log_ios_old= n_log_ios;
last_printout_time= time(NULL);
buf_next_to_write= 0;
- write_lsn= lsn;
- flushed_to_disk_lsn= 0;
- n_pending_flushes= 0;
- flush_event = os_event_create("log_flush_event");
- os_event_set(flush_event);
+ last_checkpoint_lsn= write_lsn= LOG_START_LSN;
n_log_ios= 0;
n_log_ios_old= 0;
log_capacity= 0;
@@ -547,24 +531,12 @@ void log_t::create()
max_checkpoint_age= 0;
next_checkpoint_no= 0;
next_checkpoint_lsn= 0;
- append_on_checkpoint= NULL;
n_pending_checkpoint_writes= 0;
- last_checkpoint_lsn= lsn;
-
- log_block_init(buf, lsn);
+ log_block_init(buf, LOG_START_LSN);
log_block_set_first_rec_group(buf, LOG_BLOCK_HDR_SIZE);
buf_free= LOG_BLOCK_HDR_SIZE;
- lsn= LOG_START_LSN + LOG_BLOCK_HDR_SIZE;
-
- MONITOR_SET(MONITOR_LSN_CHECKPOINT_AGE, lsn - last_checkpoint_lsn);
-
- log_scrub_thread_active= !srv_read_only_mode && srv_scrub_log;
- if (log_scrub_thread_active) {
- log_scrub_event= os_event_create("log_scrub_event");
- os_thread_create(log_scrub_thread, NULL, NULL);
- }
}
mapped_file_t::~mapped_file_t() noexcept
@@ -856,7 +828,7 @@ log_file_header_flush(
lsn_t start_lsn) /*!< in: log file data starts at this
lsn */
{
- ut_ad(log_write_mutex_own());
+ ut_ad(log_write_lock_own());
ut_ad(!recv_no_log_write);
ut_ad(log_sys.log.format == log_t::FORMAT_10_5
|| log_sys.log.format == log_t::FORMAT_ENC_10_5);
@@ -909,7 +881,7 @@ log_write_buf(
lsn_t next_offset;
ulint i;
- ut_ad(log_write_mutex_own());
+ ut_ad(log_write_lock_own());
ut_ad(!recv_no_log_write);
ut_a(len % OS_FILE_LOG_BLOCK_SIZE == 0);
ut_a(start_lsn % OS_FILE_LOG_BLOCK_SIZE == 0);
@@ -1000,22 +972,11 @@ loop:
/** Flush the recently written changes to the log file.
and invoke log_mutex_enter(). */
-static
-void
-log_write_flush_to_disk_low()
+static void log_write_flush_to_disk_low(lsn_t lsn)
{
- /* FIXME: This is not holding log_sys.mutex while
- calling os_event_set()! */
- ut_a(log_sys.n_pending_flushes == 1); /* No other threads here */
-
- log_sys.log.flush_data_only();
-
- log_mutex_enter();
- log_sys.flushed_to_disk_lsn = log_sys.current_flush_lsn;
-
- log_sys.n_pending_flushes--;
-
- os_event_set(log_sys.flush_event);
+ log_sys.log.flush_data_only();
+ ut_a(lsn >= log_sys.get_flushed_lsn());
+ log_sys.set_flushed_lsn(lsn);
}
/** Switch the log buffer in use, and copy the content of last block
@@ -1026,11 +987,11 @@ void
log_buffer_switch()
{
ut_ad(log_mutex_own());
- ut_ad(log_write_mutex_own());
+ ut_ad(log_write_lock_own());
const byte* old_buf = log_sys.buf;
- ulong area_end = ut_calc_align(
- log_sys.buf_free, ulong(OS_FILE_LOG_BLOCK_SIZE));
+ size_t area_end = ut_calc_align<size_t>(
+ log_sys.buf_free, OS_FILE_LOG_BLOCK_SIZE);
if (log_sys.first_in_use) {
log_sys.first_in_use = false;
@@ -1053,86 +1014,24 @@ log_buffer_switch()
log_sys.buf_next_to_write = log_sys.buf_free;
}
-/** Ensure that the log has been written to the log file up to a given
-log entry (such as that of a transaction commit). Start a new write, or
-wait and check if an already running write is covering the request.
-@param[in] lsn log sequence number that should be
-included in the redo log file write
-@param[in] flush_to_disk whether the written log should also
-be flushed to the file system
-@param[in] rotate_key whether to rotate the encryption key */
-void log_write_up_to(lsn_t lsn, bool flush_to_disk, bool rotate_key)
-{
-#ifdef UNIV_DEBUG
- ulint loop_count = 0;
-#endif /* UNIV_DEBUG */
- byte* write_buf;
- lsn_t write_lsn;
-
- ut_ad(!srv_read_only_mode);
- ut_ad(!rotate_key || flush_to_disk);
+/**
+Writes log buffer to disk
+which is the "write" part of log_write_up_to().
- if (recv_no_ibuf_operations) {
- /* Recovery is running and no operations on the log file are
- allowed yet (the variable name .._no_ibuf_.. is misleading) */
+This function does not flush anything.
- return;
- }
+Note : the caller must have log_mutex locked, and this
+mutex is released in the function.
-loop:
- ut_ad(++loop_count < 128);
-
-#if UNIV_WORD_SIZE > 7
- /* We can do a dirty read of LSN. */
- /* NOTE: Currently doesn't do dirty read for
- (flush_to_disk == true) case, because the log_mutex
- contention also works as the arbitrator for write-IO
- (fsync) bandwidth between log file and data files. */
- if (!flush_to_disk && log_sys.write_lsn >= lsn) {
- return;
- }
-#endif
-
- log_write_mutex_enter();
+*/
+static void log_write(bool rotate_key)
+{
+ ut_ad(log_mutex_own());
ut_ad(!recv_no_log_write);
-
- lsn_t limit_lsn = flush_to_disk
- ? log_sys.flushed_to_disk_lsn
- : log_sys.write_lsn;
-
- if (limit_lsn >= lsn) {
- log_write_mutex_exit();
- return;
- }
-
- /* If it is a write call we should just go ahead and do it
- as we checked that write_lsn is not where we'd like it to
- be. If we have to flush as well then we check if there is a
- pending flush and based on that we wait for it to finish
- before proceeding further. */
- if (flush_to_disk
- && (log_sys.n_pending_flushes > 0
- || !os_event_is_set(log_sys.flush_event))) {
- /* Figure out if the current flush will do the job
- for us. */
- bool work_done = log_sys.current_flush_lsn >= lsn;
-
- log_write_mutex_exit();
-
- os_event_wait(log_sys.flush_event);
-
- if (work_done) {
- return;
- } else {
- goto loop;
- }
- }
-
- log_mutex_enter();
- if (!flush_to_disk
- && log_sys.buf_free == log_sys.buf_next_to_write) {
- /* Nothing to write and no flush to disk requested */
- log_mutex_exit_all();
+ lsn_t write_lsn;
+ if (log_sys.buf_free == log_sys.buf_next_to_write) {
+ /* Nothing to write */
+ log_mutex_exit();
return;
}
@@ -1145,20 +1044,8 @@ loop:
DBUG_PRINT("ib_log", ("write " LSN_PF " to " LSN_PF,
log_sys.write_lsn,
- log_sys.lsn));
- if (flush_to_disk) {
- log_sys.n_pending_flushes++;
- log_sys.current_flush_lsn = log_sys.lsn;
- os_event_reset(log_sys.flush_event);
-
- if (log_sys.buf_free == log_sys.buf_next_to_write) {
- /* Nothing to write, flush only */
- log_mutex_exit_all();
- log_write_flush_to_disk_low();
- log_mutex_exit();
- return;
- }
- }
+ log_sys.get_lsn()));
+
start_offset = log_sys.buf_next_to_write;
end_offset = log_sys.buf_free;
@@ -1174,8 +1061,8 @@ loop:
log_sys.buf + area_end - OS_FILE_LOG_BLOCK_SIZE,
log_sys.next_checkpoint_no);
- write_lsn = log_sys.lsn;
- write_buf = log_sys.buf;
+ write_lsn = log_sys.get_lsn();
+ byte *write_buf = log_sys.buf;
log_buffer_switch();
@@ -1209,8 +1096,7 @@ loop:
if (UNIV_UNLIKELY(srv_shutdown_state != SRV_SHUTDOWN_NONE)) {
service_manager_extend_timeout(INNODB_EXTEND_TIMEOUT_INTERVAL,
"InnoDB log write: "
- LSN_PF "," LSN_PF,
- log_sys.write_lsn, lsn);
+ LSN_PF, log_sys.write_lsn);
}
if (log_sys.is_encrypted()) {
@@ -1230,16 +1116,76 @@ loop:
start_offset - area_start);
srv_stats.log_padded.add(pad_size);
log_sys.write_lsn = write_lsn;
+ if (log_sys.log.writes_are_durable())
+ log_sys.set_flushed_lsn(write_lsn);
+ return;
+}
- log_write_mutex_exit();
+static group_commit_lock write_lock;
+static group_commit_lock flush_lock;
- if (flush_to_disk) {
- log_write_flush_to_disk_low();
- ib_uint64_t flush_lsn = log_sys.flushed_to_disk_lsn;
- log_mutex_exit();
+#ifdef UNIV_DEBUG
+bool log_write_lock_own()
+{
+ return write_lock.is_owner();
+}
+#endif
- innobase_mysql_log_notify(flush_lsn);
- }
+/** Ensure that the log has been written to the log file up to a given
+log entry (such as that of a transaction commit). Start a new write, or
+wait and check if an already running write is covering the request.
+@param[in] lsn log sequence number that should be
+included in the redo log file write
+@param[in] flush_to_disk whether the written log should also
+be flushed to the file system
+@param[in] rotate_key whether to rotate the encryption key */
+void log_write_up_to(lsn_t lsn, bool flush_to_disk, bool rotate_key)
+{
+ ut_ad(!srv_read_only_mode);
+ ut_ad(!rotate_key || flush_to_disk);
+
+ if (recv_no_ibuf_operations)
+ {
+ /* Recovery is running and no operations on the log files are
+ allowed yet (the variable name .._no_ibuf_.. is misleading) */
+ return;
+ }
+
+ if (flush_to_disk &&
+ flush_lock.acquire(lsn) != group_commit_lock::ACQUIRED)
+ {
+ return;
+ }
+
+ if (write_lock.acquire(lsn) == group_commit_lock::ACQUIRED)
+ {
+ log_mutex_enter();
+ lsn_t write_lsn= log_sys.get_lsn();
+ write_lock.set_pending(write_lsn);
+
+ log_write(rotate_key);
+
+ ut_a(log_sys.write_lsn == write_lsn);
+ write_lock.release(write_lsn);
+ }
+
+ if (!flush_to_disk)
+ {
+ return;
+ }
+
+ /* Flush the highest written lsn.*/
+ auto flush_lsn = write_lock.value();
+ flush_lock.set_pending(flush_lsn);
+
+ if (!log_sys.log.writes_are_durable())
+ {
+ log_write_flush_to_disk_low(flush_lsn);
+ }
+
+ flush_lock.release(flush_lsn);
+
+ innobase_mysql_log_notify(flush_lsn);
}
/** write to the log file up to the last log entry.
@@ -1253,35 +1199,6 @@ log_buffer_flush_to_disk(
log_write_up_to(log_get_lsn(), sync);
}
-/****************************************************************//**
-This functions writes the log buffer to the log file and if 'flush'
-is set it forces a flush of the log file as well. This is meant to be
-called from background master thread only as it does not wait for
-the write (+ possible flush) to finish. */
-void
-log_buffer_sync_in_background(
-/*==========================*/
- bool flush) /*!< in: flush the logs to disk */
-{
- lsn_t lsn;
-
- log_mutex_enter();
-
- lsn = log_sys.lsn;
-
- if (flush
- && log_sys.n_pending_flushes > 0
- && log_sys.current_flush_lsn >= lsn) {
- /* The write + flush will write enough */
- log_mutex_exit();
- return;
- }
-
- log_mutex_exit();
-
- log_write_up_to(lsn, flush);
-}
-
/********************************************************************
Tries to establish a big enough margin of free space in the log buffer, such
@@ -1297,7 +1214,7 @@ log_flush_margin(void)
if (log_sys.buf_free > log_sys.max_buf_free) {
/* We can write during flush */
- lsn = log_sys.lsn;
+ lsn = log_sys.get_lsn();
}
log_mutex_exit();
@@ -1366,20 +1283,6 @@ static bool log_preflush_pool_modified_pages(lsn_t new_oldest)
return(success);
}
-/** Read a log group header page to log_sys.checkpoint_buf.
-@param[in] header 0 or LOG_CHECKPOINT_1 or LOG_CHECKPOINT2 */
-void log_header_read(ulint header)
-{
- ut_ad(log_mutex_own());
-
- log_sys.n_log_ios++;
-
- MONITOR_INC(MONITOR_LOG_IO);
-
- log_sys.log.read(header,
- {log_sys.checkpoint_buf, OS_FILE_LOG_BLOCK_SIZE});
-}
-
/** Write checkpoint info to the log header and invoke log_mutex_exit().
@param[in] end_lsn start LSN of the FILE_CHECKPOINT mini-transaction */
void log_write_checkpoint_info(lsn_t end_lsn)
@@ -1387,8 +1290,8 @@ void log_write_checkpoint_info(lsn_t end_lsn)
ut_ad(log_mutex_own());
ut_ad(!srv_read_only_mode);
ut_ad(end_lsn == 0 || end_lsn >= log_sys.next_checkpoint_lsn);
- ut_ad(end_lsn <= log_sys.lsn);
- ut_ad(end_lsn + SIZE_OF_FILE_CHECKPOINT <= log_sys.lsn
+ ut_ad(end_lsn <= log_sys.get_lsn());
+ ut_ad(end_lsn + SIZE_OF_FILE_CHECKPOINT <= log_sys.get_lsn()
|| srv_shutdown_state != SRV_SHUTDOWN_NONE);
DBUG_PRINT("ib_log", ("checkpoint " UINT64PF " at " LSN_PF
@@ -1415,12 +1318,8 @@ void log_write_checkpoint_info(lsn_t end_lsn)
log_block_store_checksum(buf);
- MONITOR_INC(MONITOR_PENDING_CHECKPOINT_WRITE);
-
log_sys.n_log_ios++;
- MONITOR_INC(MONITOR_LOG_IO);
-
ut_ad(LOG_CHECKPOINT_1 < srv_page_size);
ut_ad(LOG_CHECKPOINT_2 < srv_page_size);
@@ -1445,13 +1344,11 @@ void log_write_checkpoint_info(lsn_t end_lsn)
log_sys.next_checkpoint_no++;
log_sys.last_checkpoint_lsn = log_sys.next_checkpoint_lsn;
- MONITOR_SET(MONITOR_LSN_CHECKPOINT_AGE,
- log_sys.lsn - log_sys.last_checkpoint_lsn);
DBUG_PRINT("ib_log", ("checkpoint ended at " LSN_PF
", flushed to " LSN_PF,
log_sys.last_checkpoint_lsn,
- log_sys.flushed_to_disk_lsn));
+ log_sys.get_flushed_lsn()));
MONITOR_INC(MONITOR_NUM_CHECKPOINT);
@@ -1460,20 +1357,6 @@ void log_write_checkpoint_info(lsn_t end_lsn)
log_mutex_exit();
}
-/** Set extra data to be written to the redo log during checkpoint.
-@param[in] buf data to be appended on checkpoint, or NULL
-@return pointer to previous data to be appended on checkpoint */
-mtr_buf_t*
-log_append_on_checkpoint(
- mtr_buf_t* buf)
-{
- log_mutex_enter();
- mtr_buf_t* old = log_sys.append_on_checkpoint;
- log_sys.append_on_checkpoint = buf;
- log_mutex_exit();
- return(old);
-}
-
/** Make a checkpoint. Note that this function does not flush dirty
blocks from the buffer pool: it only checks what is lsn of the oldest
modification in the pool, and writes information about the lsn in
@@ -1548,14 +1431,14 @@ bool log_checkpoint()
threads will be blocked, and no pages can be added to the
flush lists. */
lsn_t flush_lsn = oldest_lsn;
- const lsn_t end_lsn = log_sys.lsn;
+ const lsn_t end_lsn = log_sys.get_lsn();
const bool do_write
= srv_shutdown_state == SRV_SHUTDOWN_NONE
|| flush_lsn != end_lsn;
if (fil_names_clear(flush_lsn, do_write)) {
- ut_ad(log_sys.lsn >= end_lsn + SIZE_OF_FILE_CHECKPOINT);
- flush_lsn = log_sys.lsn;
+ flush_lsn = log_sys.get_lsn();
+ ut_ad(flush_lsn >= end_lsn + SIZE_OF_FILE_CHECKPOINT);
}
log_mutex_exit();
@@ -1564,7 +1447,7 @@ bool log_checkpoint()
log_mutex_enter();
- ut_ad(log_sys.flushed_to_disk_lsn >= flush_lsn);
+ ut_ad(log_sys.get_flushed_lsn() >= flush_lsn);
ut_ad(flush_lsn >= oldest_lsn);
if (log_sys.last_checkpoint_lsn >= oldest_lsn) {
@@ -1610,10 +1493,7 @@ void
log_checkpoint_margin(void)
/*=======================*/
{
- lsn_t age;
- lsn_t checkpoint_age;
ib_uint64_t advance;
- lsn_t oldest_lsn;
bool success;
loop:
advance = 0;
@@ -1621,14 +1501,14 @@ loop:
log_mutex_enter();
ut_ad(!recv_no_log_write);
- if (!log_sys.check_flush_or_checkpoint) {
+ if (!log_sys.check_flush_or_checkpoint()) {
log_mutex_exit();
return;
}
- oldest_lsn = log_buf_pool_get_oldest_modification();
-
- age = log_sys.lsn - oldest_lsn;
+ const lsn_t oldest_lsn = log_buf_pool_get_oldest_modification();
+ const lsn_t lsn = log_sys.get_lsn();
+ const lsn_t age = lsn - oldest_lsn;
if (age > log_sys.max_modified_age_sync) {
@@ -1636,14 +1516,14 @@ loop:
advance = age - log_sys.max_modified_age_sync;
}
- checkpoint_age = log_sys.lsn - log_sys.last_checkpoint_lsn;
+ const lsn_t checkpoint_age = lsn - log_sys.last_checkpoint_lsn;
ut_ad(log_sys.max_checkpoint_age >= log_sys.max_checkpoint_age_async);
const bool do_checkpoint
= checkpoint_age > log_sys.max_checkpoint_age_async;
if (checkpoint_age <= log_sys.max_checkpoint_age) {
- log_sys.check_flush_or_checkpoint = false;
+ log_sys.set_check_flush_or_checkpoint(false);
}
log_mutex_exit();
@@ -1657,9 +1537,7 @@ loop:
and can proceed. If it did not succeed, there was another
thread doing a flush at the same time. */
if (!success) {
- log_mutex_enter();
- log_sys.check_flush_or_checkpoint = true;
- log_mutex_exit();
+ log_sys.set_check_flush_or_checkpoint();
goto loop;
}
}
@@ -1674,19 +1552,15 @@ Checks that there is enough free space in the log to start a new query step.
Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this
function may only be called if the calling thread owns no synchronization
objects! */
-void
-log_check_margins(void)
+void log_check_margins()
{
- bool check;
-
- do {
- log_flush_margin();
- log_checkpoint_margin();
- log_mutex_enter();
- ut_ad(!recv_no_log_write);
- check = log_sys.check_flush_or_checkpoint;
- log_mutex_exit();
- } while (check);
+ do
+ {
+ log_flush_margin();
+ log_checkpoint_margin();
+ ut_ad(!recv_no_log_write);
+ }
+ while (log_sys.check_flush_or_checkpoint());
}
extern void buf_resize_shutdown();
@@ -1828,18 +1702,13 @@ wait_suspend_loop:
}
}
- if (log_scrub_thread_active) {
- ut_ad(!srv_read_only_mode);
- os_event_set(log_scrub_event);
- }
-
if (log_sys.is_initialised()) {
log_mutex_enter();
const ulint n_write = log_sys.n_pending_checkpoint_writes;
- const ulint n_flush = log_sys.n_pending_flushes;
+ const ulint n_flush = log_sys.pending_flushes;
log_mutex_exit();
- if (log_scrub_thread_active || n_write || n_flush) {
+ if (n_write || n_flush) {
if (srv_print_verbose_log && count > 600) {
ib::info() << "Pending checkpoint_writes: "
<< n_write
@@ -1851,8 +1720,6 @@ wait_suspend_loop:
}
}
- ut_ad(!log_scrub_thread_active);
-
if (!buf_pool) {
ut_ad(!srv_was_started);
} else if (ulint pending_io = buf_pool_check_no_pending_io()) {
@@ -1900,7 +1767,7 @@ wait_suspend_loop:
log_mutex_enter();
- lsn = log_sys.lsn;
+ lsn = log_sys.get_lsn();
const bool lsn_changed = lsn != log_sys.last_checkpoint_lsn
&& lsn != log_sys.last_checkpoint_lsn
@@ -1917,7 +1784,7 @@ wait_suspend_loop:
redo log before fil_close_all_files(). */
log_sys.log.flush_data_only();
} else {
- lsn = srv_start_lsn;
+ lsn = recv_sys.recovered_lsn;
}
srv_shutdown_state = SRV_SHUTDOWN_LAST_PHASE;
@@ -1929,12 +1796,13 @@ wait_suspend_loop:
"Free innodb buffer pool");
ut_d(buf_assert_all_freed());
- ut_a(lsn == log_sys.lsn
+ ut_a(lsn == log_sys.get_lsn()
|| srv_force_recovery == SRV_FORCE_NO_LOG_REDO);
- if (lsn < srv_start_lsn) {
+ if (UNIV_UNLIKELY(lsn < recv_sys.recovered_lsn)) {
ib::error() << "Shutdown LSN=" << lsn
- << " is less than start LSN=" << srv_start_lsn;
+ << " is less than start LSN="
+ << recv_sys.recovered_lsn;
}
srv_shutdown_lsn = lsn;
@@ -1953,30 +1821,11 @@ wait_suspend_loop:
/* Make some checks that the server really is quiet */
ut_ad(!srv_any_background_activity());
- ut_a(lsn == log_sys.lsn
+ ut_a(lsn == log_sys.get_lsn()
|| srv_force_recovery == SRV_FORCE_NO_LOG_REDO);
}
/******************************************************//**
-Peeks the current lsn.
-@return TRUE if success, FALSE if could not get the log system mutex */
-ibool
-log_peek_lsn(
-/*=========*/
- lsn_t* lsn) /*!< out: if returns TRUE, current lsn is here */
-{
- if (0 == mutex_enter_nowait(&(log_sys.mutex))) {
- *lsn = log_sys.lsn;
-
- log_mutex_exit();
-
- return(TRUE);
- }
-
- return(FALSE);
-}
-
-/******************************************************//**
Prints info of the log. */
void
log_print(
@@ -1993,8 +1842,8 @@ log_print(
"Log flushed up to " LSN_PF "\n"
"Pages flushed up to " LSN_PF "\n"
"Last checkpoint at " LSN_PF "\n",
- log_sys.lsn,
- log_sys.flushed_to_disk_lsn,
+ log_sys.get_lsn(),
+ log_sys.get_flushed_lsn(),
log_buf_pool_get_oldest_modification(),
log_sys.last_checkpoint_lsn);
@@ -2011,7 +1860,7 @@ log_print(
ULINTPF " pending log flushes, "
ULINTPF " pending chkp writes\n"
ULINTPF " log i/o's done, %.2f log i/o's/second\n",
- log_sys.n_pending_flushes,
+ log_sys.pending_flushes.load(),
log_sys.n_pending_checkpoint_writes,
log_sys.n_log_ios,
static_cast<double>(
@@ -2047,109 +1896,12 @@ void log_t::close()
ut_free_dodump(buf, srv_log_buffer_size * 2);
buf = NULL;
- os_event_destroy(flush_event);
mutex_free(&mutex);
- mutex_free(&write_mutex);
mutex_free(&log_flush_order_mutex);
- if (!srv_read_only_mode && srv_scrub_log)
- os_event_destroy(log_scrub_event);
-
recv_sys.close();
}
-/******************************************************//**
-Pads the current log block full with dummy log records. Used in producing
-consistent archived log file and scrubbing redo log. */
-static
-void
-log_pad_current_log_block(void)
-/*===========================*/
-{
- byte b = 0;
- ulint pad_length;
- ulint i;
- lsn_t lsn;
-
- ut_ad(!recv_no_log_write);
- /* We retrieve lsn only because otherwise gcc crashed on HP-UX */
- lsn = log_reserve_and_open(OS_FILE_LOG_BLOCK_SIZE);
-
- pad_length = log_sys.trailer_offset()
- - log_sys.buf_free % OS_FILE_LOG_BLOCK_SIZE;
- if (pad_length == log_sys.payload_size()) {
- pad_length = 0;
- }
-
- if (pad_length) {
- srv_stats.n_log_scrubs.inc();
- }
-
- for (i = 0; i < pad_length; i++) {
- log_write_low(&b, 1);
- }
-
- lsn = log_sys.lsn;
-
- log_close();
-
- ut_a(lsn % OS_FILE_LOG_BLOCK_SIZE == LOG_BLOCK_HDR_SIZE);
-}
-
-/*****************************************************************//*
-If no log record has been written for a while, fill current log
-block with dummy records. */
-static
-void
-log_scrub()
-/*=========*/
-{
- log_mutex_enter();
- ulint cur_lbn = log_block_convert_lsn_to_no(log_sys.lsn);
-
- if (next_lbn_to_pad == cur_lbn)
- {
- log_pad_current_log_block();
- }
-
- next_lbn_to_pad = log_block_convert_lsn_to_no(log_sys.lsn);
- log_mutex_exit();
-}
-
-/* log scrubbing speed, in bytes/sec */
-UNIV_INTERN ulonglong innodb_scrub_log_speed;
-
-/*****************************************************************//**
-This is the main thread for log scrub. It waits for an event and
-when waked up fills current log block with dummy records and
-sleeps again.
-@return this function does not return, it calls os_thread_exit() */
-extern "C" UNIV_INTERN
-os_thread_ret_t
-DECLARE_THREAD(log_scrub_thread)(void*)
-{
- ut_ad(!srv_read_only_mode);
-
- while (srv_shutdown_state < SRV_SHUTDOWN_FLUSH_PHASE) {
- /* log scrubbing interval in µs. */
- ulonglong interval = 1000*1000*512/innodb_scrub_log_speed;
-
- os_event_wait_time(log_scrub_event, static_cast<ulint>(interval));
-
- log_scrub();
-
- os_event_reset(log_scrub_event);
- }
-
- log_scrub_thread_active = false;
-
- /* We count the number of threads in os_thread_exit(). A created
- thread should always use that to exit and not use return() to exit. */
- os_thread_exit();
-
- OS_THREAD_DUMMY_RETURN;
-}
-
std::string get_log_file_path(const char *filename)
{
const size_t size= strlen(srv_log_group_home_dir) + /* path separator */ 1 +
diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc
index 176b8c1d5d1..9dd54c945b9 100644
--- a/storage/innobase/log/log0recv.cc
+++ b/storage/innobase/log/log0recv.cc
@@ -157,8 +157,9 @@ public:
@see mtr_t::undo_append()
@param block undo log page
@param data undo log record
- @param len length of the undo log record */
- static void undo_append(const buf_block_t &block, const byte *data,
+ @param len length of the undo log record
+ @return whether the operation failed (inconcistency was noticed) */
+ static bool undo_append(const buf_block_t &block, const byte *data,
size_t len)
{
ut_ad(len > 2);
@@ -170,7 +171,7 @@ public:
{
ib::error() << "Not applying UNDO_APPEND due to corruption on "
<< block.page.id;
- return;
+ return true;
}
byte *p= block.frame + free;
@@ -180,6 +181,7 @@ public:
memcpy(p, data, len);
p+= len;
mach_write_to_2(p, free);
+ return false;
}
/** The status of apply() */
@@ -289,8 +291,9 @@ public:
static_assert(INIT_ROW_FORMAT_DYNAMIC == 1, "compatibility");
if (UNIV_UNLIKELY(!rlen))
goto record_corrupted;
- switch (*l) {
+ switch (const byte subtype= *l) {
uint8_t ll;
+ size_t prev_rec, hdr_size;
default:
goto record_corrupted;
case INIT_ROW_FORMAT_REDUNDANT:
@@ -307,40 +310,134 @@ public:
case UNDO_APPEND:
if (UNIV_UNLIKELY(rlen <= 3))
goto record_corrupted;
- undo_append(block, ++l, --rlen);
+ if (undo_append(block, ++l, --rlen) && !srv_force_recovery)
+ {
+page_corrupted:
+ ib::error() << "Set innodb_force_recovery=1 to ignore corruption.";
+ recv_sys.found_corrupt_log= true;
+ return applied;
+ }
+ break;
+ case INSERT_HEAP_REDUNDANT:
+ case INSERT_REUSE_REDUNDANT:
+ case INSERT_HEAP_DYNAMIC:
+ case INSERT_REUSE_DYNAMIC:
+ if (UNIV_UNLIKELY(rlen < 2))
+ goto record_corrupted;
+ rlen--;
+ ll= mlog_decode_varint_length(*++l);
+ if (UNIV_UNLIKELY(ll > 3 || ll >= rlen))
+ goto record_corrupted;
+ prev_rec= mlog_decode_varint(l);
+ ut_ad(prev_rec != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ ll= mlog_decode_varint_length(*l);
+ static_assert(INSERT_HEAP_REDUNDANT == 4, "compatibility");
+ static_assert(INSERT_REUSE_REDUNDANT == 5, "compatibility");
+ static_assert(INSERT_HEAP_DYNAMIC == 6, "compatibility");
+ static_assert(INSERT_REUSE_DYNAMIC == 7, "compatibility");
+ if (subtype & 2)
+ {
+ size_t shift= 0;
+ if (subtype & 1)
+ {
+ if (UNIV_UNLIKELY(ll > 3 || ll >= rlen))
+ goto record_corrupted;
+ shift= mlog_decode_varint(l);
+ ut_ad(shift != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ ll= mlog_decode_varint_length(*l);
+ }
+ if (UNIV_UNLIKELY(ll > 3 || ll >= rlen))
+ goto record_corrupted;
+ size_t enc_hdr_l= mlog_decode_varint(l);
+ ut_ad(enc_hdr_l != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ ll= mlog_decode_varint_length(*l);
+ if (UNIV_UNLIKELY(ll > 2 || ll >= rlen))
+ goto record_corrupted;
+ size_t hdr_c= mlog_decode_varint(l);
+ ut_ad(hdr_c != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ ll= mlog_decode_varint_length(*l);
+ if (UNIV_UNLIKELY(ll > 3 || ll >= rlen))
+ goto record_corrupted;
+ size_t data_c= mlog_decode_varint(l);
+ ut_ad(data_c != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ if (page_apply_insert_dynamic(block, subtype & 1, prev_rec,
+ shift, enc_hdr_l, hdr_c, data_c,
+ l, rlen) && !srv_force_recovery)
+ goto page_corrupted;
+ }
+ else
+ {
+ if (UNIV_UNLIKELY(ll > 2 || ll >= rlen))
+ goto record_corrupted;
+ size_t header= mlog_decode_varint(l);
+ ut_ad(header != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ ll= mlog_decode_varint_length(*l);
+ if (UNIV_UNLIKELY(ll > 2 || ll >= rlen))
+ goto record_corrupted;
+ size_t hdr_c= mlog_decode_varint(l);
+ ut_ad(hdr_c != MLOG_DECODE_ERROR);
+ rlen-= ll;
+ l+= ll;
+ ll= mlog_decode_varint_length(*l);
+ if (UNIV_UNLIKELY(ll > 2 || ll >= rlen))
+ goto record_corrupted;
+ size_t data_c= mlog_decode_varint(l);
+ rlen-= ll;
+ l+= ll;
+ if (page_apply_insert_redundant(block, subtype & 1, prev_rec,
+ header, hdr_c, data_c,
+ l, rlen) && !srv_force_recovery)
+ goto page_corrupted;
+ }
break;
case DELETE_ROW_FORMAT_REDUNDANT:
if (UNIV_UNLIKELY(rlen < 2 || rlen > 4))
goto record_corrupted;
- rlen--;
+ rlen--;
ll= mlog_decode_varint_length(*++l);
if (UNIV_UNLIKELY(ll != rlen))
goto record_corrupted;
- page_apply_delete_redundant(block, mlog_decode_varint(l));
+ if (page_apply_delete_redundant(block, mlog_decode_varint(l)) &&
+ !srv_force_recovery)
+ goto page_corrupted;
break;
case DELETE_ROW_FORMAT_DYNAMIC:
if (UNIV_UNLIKELY(rlen < 2))
goto record_corrupted;
- rlen--;
+ rlen--;
ll= mlog_decode_varint_length(*++l);
if (UNIV_UNLIKELY(ll > 3 || ll >= rlen))
goto record_corrupted;
- size_t prev_rec= mlog_decode_varint(l);
+ prev_rec= mlog_decode_varint(l);
ut_ad(prev_rec != MLOG_DECODE_ERROR);
rlen-= ll;
l+= ll;
ll= mlog_decode_varint_length(*l);
if (UNIV_UNLIKELY(ll > 2 || ll >= rlen))
goto record_corrupted;
- size_t hdr_size= mlog_decode_varint(l);
+ hdr_size= mlog_decode_varint(l);
ut_ad(hdr_size != MLOG_DECODE_ERROR);
rlen-= ll;
l+= ll;
ll= mlog_decode_varint_length(*l);
if (UNIV_UNLIKELY(ll > 3 || ll != rlen))
goto record_corrupted;
- page_apply_delete_dynamic(block, prev_rec, hdr_size,
- mlog_decode_varint(l));
+ if (page_apply_delete_dynamic(block, prev_rec, hdr_size,
+ mlog_decode_varint(l)) &&
+ !srv_force_recovery)
+ goto page_corrupted;
break;
}
last_offset= FIL_PAGE_TYPE;
@@ -646,7 +743,7 @@ void recv_sys_t::read(os_offset_t total_offset, span<byte> buf)
ut_a(err == DB_SUCCESS);
}
-size_t recv_sys_t::files_size()
+inline size_t recv_sys_t::files_size()
{
open_log_files_if_needed();
return files.size();
@@ -805,11 +902,11 @@ void recv_sys_t::close()
}
if (buf) {
- ut_free_dodump(buf, buf_size);
+ ut_free_dodump(buf, RECV_PARSING_BUF_SIZE);
buf = NULL;
}
- buf_size = 0;
+ last_stored_lsn = 0;
mutex_free(&writer_mutex);
mutex_free(&mutex);
}
@@ -911,8 +1008,7 @@ void recv_sys_t::create()
apply_batch_on = false;
max_log_blocks = buf_pool_get_n_pages() / 3;
- buf = static_cast<byte*>(ut_malloc_dontdump(RECV_PARSING_BUF_SIZE));
- buf_size = RECV_PARSING_BUF_SIZE;
+ buf = static_cast<byte*>(ut_malloc_dontdump(RECV_PARSING_BUF_SIZE, PSI_INSTRUMENT_ME));
len = 0;
parse_start_lsn = 0;
scanned_lsn = 0;
@@ -927,7 +1023,7 @@ void recv_sys_t::create()
recv_max_page_lsn = 0;
memset(truncated_undo_spaces, 0, sizeof truncated_undo_spaces);
- last_stored_lsn = 0;
+ last_stored_lsn = 1;
UT_LIST_INIT(blocks, &buf_block_t::unzip_LRU);
}
@@ -958,7 +1054,7 @@ void recv_sys_t::debug_free()
mutex_enter(&mutex);
pages.clear();
- ut_free_dodump(buf, buf_size);
+ ut_free_dodump(buf, RECV_PARSING_BUF_SIZE);
buf = NULL;
@@ -1086,8 +1182,6 @@ loop:
log_sys.n_log_ios++;
- MONITOR_INC(MONITOR_LOG_IO);
-
ut_a((source_offset >> srv_page_size_shift) <= ULINT_MAX);
recv_sys.read(source_offset, {buf, len});
@@ -1226,92 +1320,143 @@ static bool redo_file_sizes_are_correct()
return false;
}
-/** Find the latest checkpoint in the format-0 log header.
-@param[out] max_field LOG_CHECKPOINT_1 or LOG_CHECKPOINT_2
-@return error code or DB_SUCCESS */
-static MY_ATTRIBUTE((warn_unused_result))
-dberr_t
-recv_find_max_checkpoint_0(ulint* max_field)
+/** Calculate the checksum for a log block using the pre-10.2.2 algorithm. */
+inline uint32_t log_block_calc_checksum_format_0(const byte *b)
{
- ib_uint64_t max_no = 0;
- ib_uint64_t checkpoint_no;
- byte* buf = log_sys.checkpoint_buf;
+ uint32_t sum= 1;
+ const byte *const end= &b[512 - 4];
- if (!redo_file_sizes_are_correct()) {
- return DB_CORRUPTION;
- }
+ for (uint32_t sh= 0; b < end; )
+ {
+ sum&= 0x7FFFFFFFUL;
+ sum+= uint32_t{*b} << sh++;
+ sum+= *b++;
+ if (sh > 24)
+ sh= 0;
+ }
- ut_ad(log_sys.log.format == 0);
+ return sum;
+}
- /** Offset of the first checkpoint checksum */
- static const uint CHECKSUM_1 = 288;
- /** Offset of the second checkpoint checksum */
- static const uint CHECKSUM_2 = CHECKSUM_1 + 4;
- /** Most significant bits of the checkpoint offset */
- static const uint OFFSET_HIGH32 = CHECKSUM_2 + 12;
- /** Least significant bits of the checkpoint offset */
- static const uint OFFSET_LOW32 = 16;
+/** Determine if a redo log from before MariaDB 10.2.2 is clean.
+@return error code
+@retval DB_SUCCESS if the redo log is clean
+@retval DB_CORRUPTION if the redo log is corrupted
+@retval DB_ERROR if the redo log is not empty */
+ATTRIBUTE_COLD static dberr_t recv_log_recover_pre_10_2()
+{
+ uint64_t max_no= 0;
+ byte *buf= log_sys.buf;
- bool found = false;
+ ut_ad(log_sys.log.format == 0);
- for (ulint field = LOG_CHECKPOINT_1; field <= LOG_CHECKPOINT_2;
- field += LOG_CHECKPOINT_2 - LOG_CHECKPOINT_1) {
- log_header_read(field);
-
- if (static_cast<uint32_t>(ut_fold_binary(buf, CHECKSUM_1))
- != mach_read_from_4(buf + CHECKSUM_1)
- || static_cast<uint32_t>(
- ut_fold_binary(buf + LOG_CHECKPOINT_LSN,
- CHECKSUM_2 - LOG_CHECKPOINT_LSN))
- != mach_read_from_4(buf + CHECKSUM_2)) {
- DBUG_LOG("ib_log",
- "invalid pre-10.2.2 checkpoint " << field);
- continue;
- }
+ if (!redo_file_sizes_are_correct())
+ return DB_CORRUPTION;
- checkpoint_no = mach_read_from_8(
- buf + LOG_CHECKPOINT_NO);
+ /** Offset of the first checkpoint checksum */
+ constexpr uint CHECKSUM_1= 288;
+ /** Offset of the second checkpoint checksum */
+ constexpr uint CHECKSUM_2= CHECKSUM_1 + 4;
+ /** the checkpoint LSN field */
+ constexpr uint CHECKPOINT_LSN= 8;
+ /** Most significant bits of the checkpoint offset */
+ constexpr uint OFFS_HI= CHECKSUM_2 + 12;
+ /** Least significant bits of the checkpoint offset */
+ constexpr uint OFFS_LO= 16;
- if (!log_crypt_101_read_checkpoint(buf)) {
- ib::error() << "Decrypting checkpoint failed";
- continue;
- }
+ lsn_t lsn= 0;
- DBUG_PRINT("ib_log",
- ("checkpoint " UINT64PF " at " LSN_PF " found",
- checkpoint_no,
- mach_read_from_8(buf + LOG_CHECKPOINT_LSN)));
+ for (ulint field= LOG_CHECKPOINT_1; field <= LOG_CHECKPOINT_2;
+ field += LOG_CHECKPOINT_2 - LOG_CHECKPOINT_1)
+ {
+ log_sys.log.read(field, {buf, OS_FILE_LOG_BLOCK_SIZE});
+
+ if (static_cast<uint32_t>(ut_fold_binary(buf, CHECKSUM_1)) !=
+ mach_read_from_4(buf + CHECKSUM_1) ||
+ static_cast<uint32_t>(ut_fold_binary(buf + CHECKPOINT_LSN,
+ CHECKSUM_2 - CHECKPOINT_LSN)) !=
+ mach_read_from_4(buf + CHECKSUM_2))
+ {
+ DBUG_LOG("ib_log", "invalid pre-10.2.2 checkpoint " << field);
+ continue;
+ }
+
+ if (!log_crypt_101_read_checkpoint(buf))
+ {
+ ib::error() << "Decrypting checkpoint failed";
+ continue;
+ }
- if (checkpoint_no >= max_no) {
- found = true;
- *max_field = field;
- max_no = checkpoint_no;
+ const uint64_t checkpoint_no= mach_read_from_8(buf);
- log_sys.log.set_lsn(mach_read_from_8(
- buf + LOG_CHECKPOINT_LSN));
- log_sys.log.set_lsn_offset(
- lsn_t(mach_read_from_4(buf + OFFSET_HIGH32))
- << 32
- | mach_read_from_4(buf + OFFSET_LOW32));
- }
- }
+ DBUG_PRINT("ib_log", ("checkpoint " UINT64PF " at " LSN_PF " found",
+ checkpoint_no,
+ mach_read_from_8(buf + CHECKPOINT_LSN)));
- if (found) {
- return(DB_SUCCESS);
- }
+ if (checkpoint_no >= max_no)
+ {
+ max_no= checkpoint_no;
+ lsn= mach_read_from_8(buf + CHECKPOINT_LSN);
+ log_sys.log.set_lsn(lsn);
+ log_sys.log.set_lsn_offset(lsn_t{mach_read_from_4(buf + OFFS_HI)} << 32 |
+ mach_read_from_4(buf + OFFS_LO));
+ }
+ }
+
+ if (!lsn)
+ {
+ ib::error() << "Upgrade after a crash is not supported."
+ " This redo log was created before MariaDB 10.2.2,"
+ " and we did not find a valid checkpoint."
+ " Please follow the instructions at"
+ " https://mariadb.com/kb/en/library/upgrading/";
+ return DB_ERROR;
+ }
+
+ log_sys.set_lsn(lsn);
+ log_sys.set_flushed_lsn(lsn);
+ const lsn_t source_offset= log_sys.log.calc_lsn_offset_old(lsn);
+
+ static constexpr char NO_UPGRADE_RECOVERY_MSG[]=
+ "Upgrade after a crash is not supported."
+ " This redo log was created before MariaDB 10.2.2";
+
+ recv_sys.read(source_offset & ~511, {buf, 512});
- ib::error() << "Upgrade after a crash is not supported."
- " This redo log was created before MariaDB 10.2.2,"
- " and we did not find a valid checkpoint."
- " Please follow the instructions at"
- " https://mariadb.com/kb/en/library/upgrading/";
- return(DB_ERROR);
+ if (log_block_calc_checksum_format_0(buf) != log_block_get_checksum(buf) &&
+ !log_crypt_101_read_block(buf, lsn))
+ {
+ ib::error() << NO_UPGRADE_RECOVERY_MSG << ", and it appears corrupted.";
+ return DB_CORRUPTION;
+ }
+
+ if (mach_read_from_2(buf + 4) == (source_offset & 511))
+ {
+ /* Mark the redo log for upgrading. */
+ srv_log_file_size= 0;
+ recv_sys.parse_start_lsn= recv_sys.recovered_lsn= recv_sys.scanned_lsn=
+ recv_sys.mlog_checkpoint_lsn = lsn;
+ log_sys.last_checkpoint_lsn= log_sys.next_checkpoint_lsn=
+ log_sys.write_lsn= log_sys.current_flush_lsn= lsn;
+ log_sys.next_checkpoint_no= 0;
+ return DB_SUCCESS;
+ }
+
+ if (buf[20 + 32 * 9] == 2)
+ ib::error() << "Cannot decrypt log for upgrading."
+ " The encrypted log was created before MariaDB 10.2.2.";
+ else
+ ib::error() << NO_UPGRADE_RECOVERY_MSG << ".";
+
+ return DB_ERROR;
}
-/** Same as cals_lsn_offset() except that it supports multiple files */
-lsn_t log_t::file::calc_lsn_offset_old(lsn_t lsn) const
+/** Calculate the offset of a log sequence number
+in an old redo log file (during upgrade check).
+@param[in] lsn log sequence number
+@return byte offset within the log */
+inline lsn_t log_t::file::calc_lsn_offset_old(lsn_t lsn) const
{
- ut_ad(log_sys.mutex.is_owned() || log_sys.write_mutex.is_owned());
const lsn_t size= capacity() * recv_sys.files_size();
lsn_t l= lsn - this->lsn;
if (longlong(l) < 0)
@@ -1325,60 +1470,6 @@ lsn_t log_t::file::calc_lsn_offset_old(lsn_t lsn) const
return l + LOG_FILE_HDR_SIZE * (1 + l / (file_size - LOG_FILE_HDR_SIZE));
}
-/** Determine if a pre-MySQL 5.7.9/MariaDB 10.2.2 redo log is clean.
-@param[in] lsn checkpoint LSN
-@param[in] crypt whether the log might be encrypted
-@return error code
-@retval DB_SUCCESS if the redo log is clean
-@retval DB_ERROR if the redo log is corrupted or dirty */
-static dberr_t recv_log_format_0_recover(lsn_t lsn, bool crypt)
-{
- log_mutex_enter();
- const lsn_t source_offset = log_sys.log.calc_lsn_offset_old(lsn);
- log_mutex_exit();
- byte* buf = log_sys.buf;
-
- static const char* NO_UPGRADE_RECOVERY_MSG =
- "Upgrade after a crash is not supported."
- " This redo log was created before MariaDB 10.2.2";
-
- recv_sys.read(source_offset & ~(OS_FILE_LOG_BLOCK_SIZE - 1),
- {buf, OS_FILE_LOG_BLOCK_SIZE});
-
- if (log_block_calc_checksum_format_0(buf)
- != log_block_get_checksum(buf)
- && !log_crypt_101_read_block(buf)) {
- ib::error() << NO_UPGRADE_RECOVERY_MSG
- << ", and it appears corrupted.";
- return(DB_CORRUPTION);
- }
-
- if (log_block_get_data_len(buf)
- == (source_offset & (OS_FILE_LOG_BLOCK_SIZE - 1))) {
- } else if (crypt) {
- ib::error() << "Cannot decrypt log for upgrading."
- " The encrypted log was created"
- " before MariaDB 10.2.2.";
- return DB_ERROR;
- } else {
- ib::error() << NO_UPGRADE_RECOVERY_MSG << ".";
- return(DB_ERROR);
- }
-
- /* Mark the redo log for upgrading. */
- srv_log_file_size = 0;
- recv_sys.parse_start_lsn = recv_sys.recovered_lsn
- = recv_sys.scanned_lsn
- = recv_sys.mlog_checkpoint_lsn = lsn;
- log_sys.last_checkpoint_lsn = log_sys.next_checkpoint_lsn
- = log_sys.lsn = log_sys.write_lsn
- = log_sys.current_flush_lsn = log_sys.flushed_to_disk_lsn
- = lsn;
- log_sys.next_checkpoint_no = 0;
- recv_sys.remove_extra_log_files = true;
- return(DB_SUCCESS);
-}
-
/** Determine if a redo log from MariaDB 10.2.2+, 10.3, or 10.4 is clean.
@return error code
@retval DB_SUCCESS if the redo log is clean
@@ -1412,8 +1503,7 @@ static dberr_t recv_log_recover_10_4()
}
if (log_sys.log.is_encrypted()
- && !log_crypt(buf, lsn & (OS_FILE_LOG_BLOCK_SIZE - 1),
- OS_FILE_LOG_BLOCK_SIZE, LOG_DECRYPT)) {
+ && !log_crypt(buf, lsn & ~511, 512, LOG_DECRYPT)) {
return DB_ERROR;
}
@@ -1430,12 +1520,11 @@ static dberr_t recv_log_recover_10_4()
recv_sys.parse_start_lsn = recv_sys.recovered_lsn
= recv_sys.scanned_lsn
= recv_sys.mlog_checkpoint_lsn = lsn;
+ log_sys.set_lsn(lsn);
+ log_sys.set_flushed_lsn(lsn);
log_sys.last_checkpoint_lsn = log_sys.next_checkpoint_lsn
- = log_sys.lsn = log_sys.write_lsn
- = log_sys.current_flush_lsn = log_sys.flushed_to_disk_lsn
- = lsn;
+ = log_sys.write_lsn = log_sys.current_flush_lsn = lsn;
log_sys.next_checkpoint_no = 0;
- recv_sys.remove_extra_log_files = true;
return DB_SUCCESS;
}
@@ -1455,7 +1544,7 @@ recv_find_max_checkpoint(ulint* max_field)
buf = log_sys.checkpoint_buf;
- log_header_read(0);
+ log_sys.log.read(0, {buf, OS_FILE_LOG_BLOCK_SIZE});
/* Check the header page checksum. There was no
checksum in the first redo log format (version 0). */
log_sys.log.format = mach_read_from_4(buf + LOG_HEADER_FORMAT);
@@ -1476,7 +1565,7 @@ recv_find_max_checkpoint(ulint* max_field)
switch (log_sys.log.format) {
case log_t::FORMAT_3_23:
- return(recv_find_max_checkpoint_0(max_field));
+ return recv_log_recover_pre_10_2();
case log_t::FORMAT_10_2:
case log_t::FORMAT_10_2 | log_t::FORMAT_ENCRYPTED:
case log_t::FORMAT_10_3:
@@ -1494,8 +1583,7 @@ recv_find_max_checkpoint(ulint* max_field)
for (field = LOG_CHECKPOINT_1; field <= LOG_CHECKPOINT_2;
field += LOG_CHECKPOINT_2 - LOG_CHECKPOINT_1) {
-
- log_header_read(field);
+ log_sys.log.read(field, {buf, OS_FILE_LOG_BLOCK_SIZE});
const ulint crc32 = log_block_calc_checksum_crc32(buf);
const ulint cksum = log_block_get_checksum(buf);
@@ -1880,14 +1968,31 @@ same_page:
last_offset= 1; /* the next record must not be same_page */
goto free_or_init_page;
case INIT_PAGE:
- free_or_init_page:
last_offset= FIL_PAGE_TYPE;
+ free_or_init_page:
if (UNIV_UNLIKELY(rlen != 0))
goto record_corrupted;
break;
case EXTENDED:
if (UNIV_UNLIKELY(!rlen))
goto record_corrupted;
+ if (rlen == 1 && *l == TRIM_PAGES)
+ {
+#if 0 /* For now, we can only truncate an undo log tablespace */
+ if (UNIV_UNLIKELY(!space_id || !page_no))
+ goto record_corrupted;
+#else
+ if (!srv_is_undo_tablespace(space_id) ||
+ page_no != SRV_UNDO_TABLESPACE_SIZE_IN_PAGES)
+ goto record_corrupted;
+ static_assert(UT_ARR_SIZE(truncated_undo_spaces) ==
+ TRX_SYS_MAX_UNDO_SPACES, "compatibility");
+ truncated_undo_spaces[space_id - srv_undo_space_id_start]=
+ { recovered_lsn, page_no };
+#endif
+ last_offset= 1; /* the next record must not be same_page */
+ continue;
+ }
last_offset= FIL_PAGE_TYPE;
break;
case RESERVED:
@@ -2048,7 +2153,7 @@ same_page:
}
/* fall through */
case FILE_CREATE:
- if (UNIV_UNLIKELY(space_id == 0))
+ if (UNIV_UNLIKELY(!space_id || page_no))
goto file_rec_error;
/* There is no terminating NUL character. Names must end in .ibd.
For FILE_RENAME, there is a NUL between the two file names. */
@@ -2070,24 +2175,6 @@ same_page:
goto file_rec_error;
}
- if (page_no)
- {
- if (UNIV_UNLIKELY((b & 0xf0) != FILE_CREATE))
- goto file_rec_error;
- /* truncating an undo log tablespace */
- ut_ad(fnend - fn >= 7);
- ut_ad(!memcmp(fnend - 7, "undo", 4));
- ut_d(char n[4]; char *end; memcpy(n, fnend - 3, 3); n[3]= 0);
- ut_ad(strtoul(n, &end, 10) <= 127);
- ut_ad(end == &n[3]);
- ut_ad(page_no == SRV_UNDO_TABLESPACE_SIZE_IN_PAGES);
- ut_ad(srv_is_undo_tablespace(space_id));
- static_assert(UT_ARR_SIZE(truncated_undo_spaces) ==
- TRX_SYS_MAX_UNDO_SPACES, "compatibility");
- truncated_undo_spaces[space_id - srv_undo_space_id_start]=
- { recovered_lsn, page_no };
- continue;
- }
if (is_predefined_tablespace(space_id))
goto file_rec_error;
if (fnend - fn < 4 || memcmp(fnend - 4, DOT_IBD, 4))
@@ -2107,7 +2194,7 @@ same_page:
fn2 ? static_cast<ulint>(fn2end - fn2) : 0);
if (!fn2 || !apply);
- else if (!fil_op_replay_rename(space_id, 0, fn, fn2))
+ else if (!fil_op_replay_rename(space_id, fn, fn2))
found_corrupt_fs= true;
const_cast<char&>(fn[rlen])= saved_end;
if (UNIV_UNLIKELY(found_corrupt_fs))
@@ -2274,6 +2361,10 @@ static void recv_recover_page(buf_block_t* block, mtr_t& mtr,
}
set_start_lsn:
+ if (recv_sys.found_corrupt_log && !srv_force_recovery) {
+ break;
+ }
+
if (!start_lsn) {
start_lsn = l->start_lsn;
}
@@ -2942,7 +3033,6 @@ recv_group_scan_log_recs(
recv_sys.len = 0;
recv_sys.recovered_offset = 0;
recv_sys.clear();
- srv_start_lsn = *contiguous_lsn;
recv_sys.parse_start_lsn = *contiguous_lsn;
recv_sys.scanned_lsn = *contiguous_lsn;
recv_sys.recovered_lsn = *contiguous_lsn;
@@ -3202,14 +3292,13 @@ recv_recovery_from_checkpoint_start(lsn_t flush_lsn)
if (err != DB_SUCCESS) {
- srv_start_lsn = recv_sys.recovered_lsn = log_sys.lsn;
+ recv_sys.recovered_lsn = log_sys.get_lsn();
log_mutex_exit();
return(err);
}
- log_header_read(max_cp_field);
-
buf = log_sys.checkpoint_buf;
+ log_sys.log.read(max_cp_field, {buf, OS_FILE_LOG_BLOCK_SIZE});
checkpoint_lsn = mach_read_from_8(buf + LOG_CHECKPOINT_LSN);
checkpoint_no = mach_read_from_8(buf + LOG_CHECKPOINT_NO);
@@ -3229,8 +3318,7 @@ recv_recovery_from_checkpoint_start(lsn_t flush_lsn)
switch (log_sys.log.format) {
case 0:
log_mutex_exit();
- return recv_log_format_0_recover(checkpoint_lsn,
- buf[20 + 32 * 9] == 2);
+ return DB_SUCCESS;
default:
if (end_lsn == 0) {
break;
@@ -3339,7 +3427,7 @@ completed:
}
}
- log_sys.lsn = recv_sys.recovered_lsn;
+ log_sys.set_lsn(recv_sys.recovered_lsn);
if (recv_needed_recovery) {
bool missing_tablespace = false;
@@ -3439,15 +3527,12 @@ completed:
recv_synchronize_groups();
- if (!recv_needed_recovery) {
- ut_a(checkpoint_lsn == recv_sys.recovered_lsn);
- } else {
- srv_start_lsn = recv_sys.recovered_lsn;
- }
+ ut_ad(recv_needed_recovery
+ || checkpoint_lsn == recv_sys.recovered_lsn);
- log_sys.buf_free = ulong(log_sys.lsn % OS_FILE_LOG_BLOCK_SIZE);
+ log_sys.write_lsn = log_sys.get_lsn();
+ log_sys.buf_free = log_sys.write_lsn % OS_FILE_LOG_BLOCK_SIZE;
log_sys.buf_next_to_write = log_sys.buf_free;
- log_sys.write_lsn = log_sys.lsn;
log_sys.last_checkpoint_lsn = checkpoint_lsn;
@@ -3459,9 +3544,6 @@ completed:
fil_names_clear(log_sys.last_checkpoint_lsn, true);
}
- MONITOR_SET(MONITOR_LSN_CHECKPOINT_AGE,
- log_sys.lsn - log_sys.last_checkpoint_lsn);
-
log_sys.next_checkpoint_no = ++checkpoint_no;
mutex_enter(&recv_sys.mutex);
diff --git a/storage/innobase/log/log0sync.cc b/storage/innobase/log/log0sync.cc
new file mode 100644
index 00000000000..563b178e427
--- /dev/null
+++ b/storage/innobase/log/log0sync.cc
@@ -0,0 +1,306 @@
+/*****************************************************************************
+Copyright (c) 2020 MariaDB Corporation.
+
+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.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
+
+*****************************************************************************/
+
+/*
+The group commit synchronization used in log_write_up_to()
+works as follows
+
+For simplicity, lets consider only write operation,synchronozation of
+flush operation works the same.
+
+Rules of the game
+
+A thread enters log_write_up_to() with lsn of the current transaction
+1. If last written lsn is greater than wait lsn (another thread already
+ wrote the log buffer),then there is no need to do anything.
+2. If no other thread is currently writing, write the log buffer,
+ and update last written lsn.
+3. Otherwise, wait, and go to step 1.
+
+Synchronization can be done in different ways, e.g
+
+a) Simple mutex locking the entire check and write operation
+Disadvantage that threads that could continue after updating
+last written lsn, still wait.
+
+b) Spinlock, with periodic checks for last written lsn.
+Fixes a) but burns CPU unnecessary.
+
+c) Mutex / condition variable combo.
+
+Condtion variable notifies (broadcast) all waiters, whenever
+last written lsn is changed.
+
+Has a disadvantage of many suprious wakeups, stress on OS scheduler,
+and mutex contention.
+
+d) Something else.
+Make use of the waiter's lsn parameter, and only wakeup "right" waiting
+threads.
+
+We chose d). Even if implementation is more complicated than alternatves
+due to the need to maintain list of waiters, it provides the best performance.
+
+See group_commit_lock implementation for details.
+
+Note that if write operation is very fast, a) or b) can be fine as alternative.
+*/
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#ifdef __linux__
+#include <linux/futex.h>
+#include <sys/syscall.h>
+#endif
+
+#include <atomic>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <my_cpu.h>
+
+#include <log0types.h>
+#include "log0sync.h"
+
+/**
+ Helper class , used in group commit lock.
+
+ Binary semaphore, or (same thing), an auto-reset event
+ Has state (signalled or not), and provides 2 operations.
+ wait() and wake()
+
+ The implementation uses efficient locking primitives on Linux and Windows.
+ Or, mutex/condition combo elsewhere.
+*/
+
+class binary_semaphore
+{
+public:
+ /**Wait until semaphore becomes signalled, and atomically reset the state
+ to non-signalled*/
+ void wait();
+ /** signals the semaphore */
+ void wake();
+
+private:
+#if defined(__linux__) || defined (_WIN32)
+ std::atomic<int> m_signalled;
+ const std::memory_order mem_order = std::memory_order::memory_order_acq_rel;
+public:
+ binary_semaphore() :m_signalled(0) {}
+#else
+ std::mutex m_mtx{};
+ std::condition_variable m_cv{};
+ bool m_signalled = false;
+#endif
+};
+
+#if defined (__linux__) || defined (_WIN32)
+void binary_semaphore::wait()
+{
+ for (;;)
+ {
+ if (m_signalled.exchange(0, mem_order) == 1)
+ {
+ break;
+ }
+#ifdef _WIN32
+ int zero = 0;
+ WaitOnAddress(&m_signalled, &zero, sizeof(m_signalled), INFINITE);
+#else
+ syscall(SYS_futex, &m_signalled, FUTEX_WAIT_PRIVATE, 0, NULL, NULL, 0);
+#endif
+ }
+}
+
+void binary_semaphore::wake()
+{
+ if (m_signalled.exchange(1, mem_order) == 0)
+ {
+#ifdef _WIN32
+ WakeByAddressSingle(&m_signalled);
+#else
+ syscall(SYS_futex, &m_signalled, FUTEX_WAKE_PRIVATE, 1, NULL, NULL, 0);
+#endif
+ }
+}
+#else
+void binary_semaphore::wake()
+{
+ std::unique_lock<std::mutex> lk(m_mtx);
+ while (!m_signalled)
+ m_cv.wait(lk);
+ m_signalled = false;
+}
+void binary_semaphore::wake()
+{
+ std::unique_lock<std::mutex> lk(m_mtx);
+ m_signalled = true;
+ m_cv.notify_one();
+}
+#endif
+
+/* A thread helper structure, used in group commit lock below*/
+struct group_commit_waiter_t
+{
+ lsn_t m_value;
+ binary_semaphore m_sema;
+ group_commit_waiter_t* m_next;
+ group_commit_waiter_t() :m_value(), m_sema(), m_next() {}
+};
+
+group_commit_lock::group_commit_lock() :
+ m_mtx(), m_value(0), m_pending_value(0), m_lock(false), m_waiters_list()
+{
+}
+
+group_commit_lock::value_type group_commit_lock::value() const
+{
+ return m_value.load(std::memory_order::memory_order_relaxed);
+}
+
+group_commit_lock::value_type group_commit_lock::pending() const
+{
+ return m_pending_value.load(std::memory_order::memory_order_relaxed);
+}
+
+void group_commit_lock::set_pending(group_commit_lock::value_type num)
+{
+ ut_a(num >= value());
+ m_pending_value.store(num, std::memory_order::memory_order_relaxed);
+}
+
+const unsigned int MAX_SPINS = 1; /** max spins in acquire */
+thread_local group_commit_waiter_t thread_local_waiter;
+
+group_commit_lock::lock_return_code group_commit_lock::acquire(value_type num)
+{
+ unsigned int spins = MAX_SPINS;
+
+ for(;;)
+ {
+ if (num <= value())
+ {
+ /* No need to wait.*/
+ return lock_return_code::EXPIRED;
+ }
+
+ if(spins-- == 0)
+ break;
+ if (num > pending())
+ {
+ /* Longer wait expected (longer than currently running operation),
+ don't spin.*/
+ break;
+ }
+ ut_delay(1);
+ }
+
+ thread_local_waiter.m_value = num;
+ std::unique_lock<std::mutex> lk(m_mtx, std::defer_lock);
+ while (num > value())
+ {
+ lk.lock();
+
+ /* Re-read current value after acquiring the lock*/
+ if (num <= value())
+ {
+ return lock_return_code::EXPIRED;
+ }
+
+ if (!m_lock)
+ {
+ /* Take the lock, become group commit leader.*/
+ m_lock = true;
+#ifndef DBUG_OFF
+ m_owner_id = std::this_thread::get_id();
+#endif
+ return lock_return_code::ACQUIRED;
+ }
+
+ /* Add yourself to waiters list.*/
+ thread_local_waiter.m_next = m_waiters_list;
+ m_waiters_list = &thread_local_waiter;
+ lk.unlock();
+
+ /* Sleep until woken in release().*/
+ thread_local_waiter.m_sema.wait();
+ }
+ return lock_return_code::EXPIRED;
+}
+
+void group_commit_lock::release(value_type num)
+{
+ std::unique_lock<std::mutex> lk(m_mtx);
+ m_lock = false;
+
+ /* Update current value. */
+ ut_a(num >= value());
+ m_value.store(num, std::memory_order_relaxed);
+
+ /*
+ Wake waiters for value <= current value.
+ Wake one more waiter, who will become the group commit lead.
+ */
+ group_commit_waiter_t* cur, * prev, * next;
+ group_commit_waiter_t* wakeup_list = nullptr;
+ int extra_wake = 0;
+
+ for (prev= nullptr, cur= m_waiters_list; cur; cur= next)
+ {
+ next= cur->m_next;
+ if (cur->m_value <= num || extra_wake++ == 0)
+ {
+ /* Move current waiter to wakeup_list*/
+
+ if (!prev)
+ {
+ /* Remove from the start of the list.*/
+ m_waiters_list = next;
+ }
+ else
+ {
+ /* Remove from the middle of the list.*/
+ prev->m_next= cur->m_next;
+ }
+
+ /* Append entry to the wakeup list.*/
+ cur->m_next = wakeup_list;
+ wakeup_list = cur;
+ }
+ else
+ {
+ prev= cur;
+ }
+ }
+ lk.unlock();
+
+ for (cur= wakeup_list; cur; cur= next)
+ {
+ next= cur->m_next;
+ cur->m_sema.wake();
+ }
+}
+
+#ifndef DBUG_OFF
+bool group_commit_lock::is_owner()
+{
+ return m_lock && std::this_thread::get_id() == m_owner_id;
+}
+#endif
+
diff --git a/storage/innobase/log/log0sync.h b/storage/innobase/log/log0sync.h
new file mode 100644
index 00000000000..40afbf74ecd
--- /dev/null
+++ b/storage/innobase/log/log0sync.h
@@ -0,0 +1,81 @@
+/*****************************************************************************
+Copyright (c) 2020 MariaDB Corporation.
+
+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.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
+
+*****************************************************************************/
+
+#include <atomic>
+#include <thread>
+#include <log0types.h>
+
+struct group_commit_waiter_t;
+
+/**
+Special synchronization primitive, which is helpful for
+performing group commit.
+
+It has a state consisting of
+ - locked (bool)
+ - current value (number). This value is always increasing.
+ - pending value (number). current value can soon become this number
+ This is only used for optimization, does not have to be exact
+
+Operations supported on this semaphore
+
+1.acquire(num):
+- waits until current value exceeds num, or until lock is granted.
+
+- returns EXPIRED if current_value >= num,
+ or ACQUIRED, if current_value < num and lock is granted.
+
+2.release(num)
+- releases lock
+- sets new current value to max(num,current_value)
+- releases some threads waiting in acquire()
+
+3. value()
+- read current value
+
+4. pending_value()
+- read pending value
+
+5. set_pending_value()
+*/
+class group_commit_lock
+{
+ using value_type = lsn_t;
+#ifndef DBUG_OFF
+ std::thread::id m_owner_id{};
+#endif
+ std::mutex m_mtx;
+ std::atomic<value_type> m_value;
+ std::atomic<value_type> m_pending_value;
+ bool m_lock;
+ group_commit_waiter_t* m_waiters_list;
+public:
+ group_commit_lock();
+ enum lock_return_code
+ {
+ ACQUIRED,
+ EXPIRED
+ };
+ lock_return_code acquire(value_type num);
+ void release(value_type num);
+ value_type value() const;
+ value_type pending() const;
+ void set_pending(value_type num);
+#ifndef DBUG_OFF
+ bool is_owner();
+#endif
+};
diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc
index 2e907d6b113..2844de3fc81 100644
--- a/storage/innobase/mtr/mtr0mtr.cc
+++ b/storage/innobase/mtr/mtr0mtr.cc
@@ -207,7 +207,7 @@ static void memo_slot_release(mtr_memo_slot_t *slot)
switch (slot->type) {
#ifdef UNIV_DEBUG
default:
- ut_ad(!"invalid type");
+ ut_ad("invalid type" == 0);
break;
case MTR_MEMO_MODIFY:
break;
@@ -243,7 +243,7 @@ struct ReleaseLatches {
switch (slot->type) {
#ifdef UNIV_DEBUG
default:
- ut_ad(!"invalid type");
+ ut_ad("invalid type" == 0);
break;
case MTR_MEMO_MODIFY:
break;
@@ -351,25 +351,6 @@ struct mtr_write_log_t {
}
};
-/** Append records to the system-wide redo log buffer.
-@param[in] log redo log records */
-void
-mtr_write_log(
- const mtr_buf_t* log)
-{
- const ulint len = log->size();
- mtr_write_log_t write_log;
-
- ut_ad(!recv_no_log_write);
- DBUG_PRINT("ib_log",
- (ULINTPF " extra bytes written at " LSN_PF,
- len, log_sys.lsn));
-
- log_reserve_and_open(len);
- log->for_each_block(write_log);
- log_close();
-}
-
/** Start a mini-transaction. */
void mtr_t::start()
{
@@ -478,7 +459,7 @@ void mtr_t::commit_files(lsn_t checkpoint_lsn)
if (checkpoint_lsn) {
DBUG_PRINT("ib_log",
("FILE_CHECKPOINT(" LSN_PF ") written at " LSN_PF,
- checkpoint_lsn, log_sys.lsn));
+ checkpoint_lsn, log_sys.get_lsn()));
}
}
@@ -608,7 +589,7 @@ inline ulint mtr_t::prepare_write()
ut_ad(m_log_mode == MTR_LOG_NO_REDO);
ut_ad(m_log.size() == 0);
log_mutex_enter();
- m_commit_lsn = log_sys.lsn;
+ m_commit_lsn = log_sys.get_lsn();
return 0;
}
diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc
index f891dad0686..02040da9e52 100644
--- a/storage/innobase/os/os0file.cc
+++ b/storage/innobase/os/os0file.cc
@@ -1390,18 +1390,17 @@ os_file_create_func(
ut_a(purpose == OS_FILE_AIO || purpose == OS_FILE_NORMAL);
-#ifdef O_SYNC
- /* We let O_SYNC only affect log files; note that we map O_DSYNC to
- O_SYNC because the datasync options seemed to corrupt files in 2001
- in both Linux and Solaris */
+ /* We let O_DSYNC only affect log files */
if (!read_only
&& type == OS_LOG_FILE
&& srv_file_flush_method == SRV_O_DSYNC) {
-
+#ifdef O_DSYNC
+ create_flag |= O_DSYNC;
+#else
create_flag |= O_SYNC;
+#endif
}
-#endif /* O_SYNC */
os_file_t file;
bool retry;
@@ -2492,7 +2491,7 @@ os_file_create_func(
{
case SRV_O_DSYNC:
if (type == OS_LOG_FILE) {
- /* Map O_SYNC to FILE_WRITE_THROUGH */
+ /* Map O_DSYNC to FILE_WRITE_THROUGH */
attributes |= FILE_FLAG_WRITE_THROUGH;
}
break;
@@ -4190,7 +4189,6 @@ os_aio_print(FILE* file)
{
time_t current_time;
double time_elapsed;
- double avg_bytes_read;
for (ulint i = 0; i < srv_n_file_io_threads; ++i) {
fprintf(file, "I/O thread " ULINTPF " state: %s (%s)",
@@ -4229,22 +4227,20 @@ os_aio_print(FILE* file)
n_reads, n_writes);
}
- if (os_n_file_reads == os_n_file_reads_old) {
- avg_bytes_read = 0.0;
- } else {
- avg_bytes_read = (double) os_bytes_read_since_printout
- / (os_n_file_reads - os_n_file_reads_old);
- }
+ ulint avg_bytes_read = (os_n_file_reads == os_n_file_reads_old)
+ ? 0
+ : os_bytes_read_since_printout
+ / (os_n_file_reads - os_n_file_reads_old);
fprintf(file,
"%.2f reads/s, " ULINTPF " avg bytes/read,"
" %.2f writes/s, %.2f fsyncs/s\n",
- (os_n_file_reads - os_n_file_reads_old)
+ static_cast<double>(os_n_file_reads - os_n_file_reads_old)
/ time_elapsed,
- (ulint) avg_bytes_read,
- (os_n_file_writes - os_n_file_writes_old)
+ avg_bytes_read,
+ static_cast<double>(os_n_file_writes - os_n_file_writes_old)
/ time_elapsed,
- (os_n_fsyncs - os_n_fsyncs_old)
+ static_cast<double>(os_n_fsyncs - os_n_fsyncs_old)
/ time_elapsed);
os_n_file_reads_old = os_n_file_reads;
diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc
index dd20f4bca0f..607abb596c4 100644
--- a/storage/innobase/page/page0cur.cc
+++ b/storage/innobase/page/page0cur.cc
@@ -798,23 +798,66 @@ static void page_rec_set_n_owned(rec_t *rec, ulint n_owned, bool comp)
/**
Split a directory slot which owns too many records.
-@tparam compressed whether to update the ROW_FORMAT=COMPRESSED page as well
@param[in,out] block index page
+@param[in,out] slot the slot that needs to be split */
+static void page_dir_split_slot(const buf_block_t &block,
+ page_dir_slot_t *slot)
+{
+ ut_ad(slot <= &block.frame[srv_page_size - PAGE_EMPTY_DIR_START]);
+ slot= my_assume_aligned<2>(slot);
+
+ const ulint n_owned= PAGE_DIR_SLOT_MAX_N_OWNED + 1;
+
+ ut_ad(page_dir_slot_get_n_owned(slot) == n_owned);
+ static_assert((PAGE_DIR_SLOT_MAX_N_OWNED + 1) / 2 >=
+ PAGE_DIR_SLOT_MIN_N_OWNED, "compatibility");
+
+ /* Find a record approximately in the middle. */
+ const rec_t *rec= page_dir_slot_get_rec(slot + PAGE_DIR_SLOT_SIZE);
+
+ for (ulint i= n_owned / 2; i--; )
+ rec= page_rec_get_next_const(rec);
+
+ /* Add a directory slot immediately below this one. */
+ constexpr uint16_t n_slots_f= PAGE_N_DIR_SLOTS + PAGE_HEADER;
+ byte *n_slots_p= my_assume_aligned<2>(n_slots_f + block.frame);
+ const uint16_t n_slots= mach_read_from_2(n_slots_p);
+
+ page_dir_slot_t *last_slot= static_cast<page_dir_slot_t*>
+ (block.frame + srv_page_size - (PAGE_DIR + PAGE_DIR_SLOT_SIZE) -
+ n_slots * PAGE_DIR_SLOT_SIZE);
+ ut_ad(slot >= last_slot);
+ memmove_aligned<2>(last_slot, last_slot + PAGE_DIR_SLOT_SIZE,
+ slot - last_slot);
+
+ const ulint half_owned= n_owned / 2;
+
+ mach_write_to_2(n_slots_p, n_slots + 1);
+
+ mach_write_to_2(slot, rec - block.frame);
+ const bool comp= page_is_comp(block.frame) != 0;
+ page_rec_set_n_owned(page_dir_slot_get_rec(slot), half_owned, comp);
+ page_rec_set_n_owned(page_dir_slot_get_rec(slot - PAGE_DIR_SLOT_SIZE),
+ n_owned - half_owned, comp);
+}
+
+/**
+Split a directory slot which owns too many records.
+@param[in,out] block index page (ROW_FORMAT=COMPRESSED)
@param[in] s the slot that needs to be split
@param[in,out] mtr mini-transaction */
-template<bool compressed>
-static void page_dir_split_slot(buf_block_t *block, ulint s, mtr_t* mtr)
+static void page_zip_dir_split_slot(buf_block_t *block, ulint s, mtr_t* mtr)
{
- ut_ad(!block->page.zip.data || page_is_comp(block->frame));
- ut_ad(!compressed || block->page.zip.data);
+ ut_ad(block->page.zip.data);
+ ut_ad(page_is_comp(block->frame));
ut_ad(s);
page_dir_slot_t *slot= page_dir_get_nth_slot(block->frame, s);
const ulint n_owned= PAGE_DIR_SLOT_MAX_N_OWNED + 1;
ut_ad(page_dir_slot_get_n_owned(slot) == n_owned);
- compile_time_assert((PAGE_DIR_SLOT_MAX_N_OWNED + 1) / 2
- >= PAGE_DIR_SLOT_MIN_N_OWNED);
+ static_assert((PAGE_DIR_SLOT_MAX_N_OWNED + 1) / 2 >=
+ PAGE_DIR_SLOT_MIN_N_OWNED, "compatibility");
/* 1. We loop to find a record approximately in the middle of the
records owned by the slot. */
@@ -839,33 +882,14 @@ static void page_dir_split_slot(buf_block_t *block, ulint s, mtr_t* mtr)
mtr->write<2>(*block, n_slots_p, 1U + n_slots);
- if (compressed)
- {
- /* Log changes to the compressed page header and the dense page
- directory. */
- memcpy_aligned<2>(&block->page.zip.data[n_slots_f], n_slots_p, 2);
- mach_write_to_2(slot, page_offset(rec));
- page_rec_set_n_owned<true>(block, page_dir_slot_get_rec(slot), half_owned,
- true, mtr);
- page_rec_set_n_owned<true>(block,
- page_dir_slot_get_rec(slot -
- PAGE_DIR_SLOT_SIZE),
- n_owned - half_owned, true, mtr);
- }
- else
- {
- mtr->memmove(*block, page_offset(last_slot),
- page_offset(last_slot) + PAGE_DIR_SLOT_SIZE,
- slot - last_slot);
- mtr->write<2>(*block, slot, page_offset(rec));
- const bool comp= page_is_comp(block->frame) != 0;
- page_rec_set_n_owned<false>(block, page_dir_slot_get_rec(slot), half_owned,
- comp, mtr);
- page_rec_set_n_owned<false>(block,
- page_dir_slot_get_rec(slot -
- PAGE_DIR_SLOT_SIZE),
- n_owned - half_owned, comp, mtr);
- }
+ /* Log changes to the compressed page header and the dense page directory. */
+ memcpy_aligned<2>(&block->page.zip.data[n_slots_f], n_slots_p, 2);
+ mach_write_to_2(slot, page_offset(rec));
+ page_rec_set_n_owned<true>(block, page_dir_slot_get_rec(slot), half_owned,
+ true, mtr);
+ page_rec_set_n_owned<true>(block,
+ page_dir_slot_get_rec(slot - PAGE_DIR_SLOT_SIZE),
+ n_owned - half_owned, true, mtr);
}
/**
@@ -1006,16 +1030,15 @@ static void page_dir_balance_slot(const buf_block_t &block, ulint s)
}
/** Allocate space for inserting an index record.
-@tparam compressed whether to update the ROW_FORMAT=COMPRESSED page as well
+@tparam compressed whether to update the ROW_FORMAT=COMPRESSED
@param[in,out] block index page
@param[in] need number of bytes needed
@param[out] heap_no record heap number
-@param[in,out] mtr mini-transaction
@return pointer to the start of the allocated buffer
@retval NULL if allocation fails */
template<bool compressed=false>
static byte* page_mem_alloc_heap(buf_block_t *block, ulint need,
- ulint *heap_no, mtr_t *mtr)
+ ulint *heap_no)
{
ut_ad(!compressed || block->page.zip.data);
@@ -1036,7 +1059,6 @@ static byte* page_mem_alloc_heap(buf_block_t *block, ulint need,
mach_write_to_2(heap_top, top + need);
mach_write_to_2(n_heap, h + 1);
- mtr->memcpy(*block, PAGE_HEAP_TOP + PAGE_HEADER, 4);
if (compressed)
{
@@ -1045,10 +1067,206 @@ static byte* page_mem_alloc_heap(buf_block_t *block, ulint need,
heap_top, 4);
}
- compile_time_assert(PAGE_N_HEAP == PAGE_HEAP_TOP + 2);
return &block->frame[top];
}
+/** Write log for inserting a B-tree or R-tree record in
+ROW_FORMAT=REDUNDANT.
+@param block B-tree or R-tree page
+@param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+@param prev_rec byte offset of the predecessor of the record to insert,
+ starting from PAGE_OLD_INFIMUM
+@param info_bits info_bits of the record
+@param n_fields_s number of fields << 1 | rec_get_1byte_offs_flag()
+@param hdr_c number of common record header bytes with prev_rec
+@param data_c number of common data bytes with prev_rec
+@param hdr record header bytes to copy to the log
+@param hdr_l number of copied record header bytes
+@param data record payload bytes to copy to the log
+@param data_l number of copied record data bytes */
+inline void mtr_t::page_insert(const buf_block_t &block, bool reuse,
+ ulint prev_rec, byte info_bits,
+ ulint n_fields_s, size_t hdr_c, size_t data_c,
+ const byte *hdr, size_t hdr_l,
+ const byte *data, size_t data_l)
+{
+ ut_ad(!block.page.zip.data);
+ ut_ad(m_log_mode == MTR_LOG_ALL);
+ ut_d(ulint n_slots= page_dir_get_n_slots(block.frame));
+ ut_ad(n_slots >= 2);
+ ut_d(const byte *page_end= page_dir_get_nth_slot(block.frame, n_slots - 1));
+ ut_ad(&block.frame[prev_rec + PAGE_OLD_INFIMUM] <= page_end);
+ ut_ad(block.frame + page_header_get_offs(block.frame, PAGE_HEAP_TOP) <=
+ page_end);
+ ut_ad(fil_page_index_page_check(block.frame));
+ ut_ad(!(~(REC_INFO_MIN_REC_FLAG | REC_INFO_DELETED_FLAG) & info_bits));
+ ut_ad(n_fields_s >= 2);
+ ut_ad((n_fields_s >> 1) <= REC_MAX_N_FIELDS);
+ ut_ad(data_l + data_c <= REDUNDANT_REC_MAX_DATA_SIZE);
+
+ set_modified();
+
+ static_assert(REC_INFO_MIN_REC_FLAG == 0x10, "compatibility");
+ static_assert(REC_INFO_DELETED_FLAG == 0x20, "compatibility");
+ n_fields_s= (n_fields_s - 2) << 2 | info_bits >> 4;
+
+ size_t len= prev_rec < MIN_2BYTE ? 2 : prev_rec < MIN_3BYTE ? 3 : 4;
+ static_assert((REC_MAX_N_FIELDS << 1 | 1) <= MIN_3BYTE, "compatibility");
+ len+= n_fields_s < MIN_2BYTE ? 1 : 2;
+ len+= hdr_c < MIN_2BYTE ? 1 : 2;
+ static_assert(REDUNDANT_REC_MAX_DATA_SIZE <= MIN_3BYTE, "compatibility");
+ len+= data_c < MIN_2BYTE ? 1 : 2;
+ len+= hdr_l + data_l;
+
+ const bool small= len < mtr_buf_t::MAX_DATA_SIZE - (1 + 3 + 3 + 5 + 5);
+ byte *l= log_write<EXTENDED>(block.page.id, &block.page, len, small);
+
+ if (UNIV_LIKELY(small))
+ {
+ ut_d(const byte * const end = l + len);
+ *l++= reuse ? INSERT_REUSE_REDUNDANT : INSERT_HEAP_REDUNDANT;
+ l= mlog_encode_varint(l, prev_rec);
+ l= mlog_encode_varint(l, n_fields_s);
+ l= mlog_encode_varint(l, hdr_c);
+ l= mlog_encode_varint(l, data_c);
+ ::memcpy(l, hdr, hdr_l);
+ l+= hdr_l;
+ ::memcpy(l, data, data_l);
+ l+= data_l;
+ ut_ad(end == l);
+ m_log.close(l);
+ }
+ else
+ {
+ m_log.close(l);
+ l= m_log.open(len - hdr_l - data_l);
+ ut_d(const byte * const end = l + len - hdr_l - data_l);
+ *l++= reuse ? INSERT_REUSE_REDUNDANT : INSERT_HEAP_REDUNDANT;
+ l= mlog_encode_varint(l, prev_rec);
+ l= mlog_encode_varint(l, n_fields_s);
+ l= mlog_encode_varint(l, hdr_c);
+ l= mlog_encode_varint(l, data_c);
+ ut_ad(end == l);
+ m_log.close(l);
+ m_log.push(hdr, static_cast<uint32_t>(hdr_l));
+ m_log.push(data, static_cast<uint32_t>(data_l));
+ }
+
+ m_last_offset= FIL_PAGE_TYPE;
+}
+
+/** Write log for inserting a B-tree or R-tree record in
+ROW_FORMAT=COMPACT or ROW_FORMAT=DYNAMIC.
+@param block B-tree or R-tree page
+@param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+@param prev_rec byte offset of the predecessor of the record to insert,
+ starting from PAGE_NEW_INFIMUM
+@param info_status rec_get_info_and_status_bits()
+@param shift unless !reuse: number of bytes the PAGE_FREE is moving
+@param hdr_c number of common record header bytes with prev_rec
+@param data_c number of common data bytes with prev_rec
+@param hdr record header bytes to copy to the log
+@param hdr_l number of copied record header bytes
+@param data record payload bytes to copy to the log
+@param data_l number of copied record data bytes */
+inline void mtr_t::page_insert(const buf_block_t &block, bool reuse,
+ ulint prev_rec, byte info_status,
+ ssize_t shift, size_t hdr_c, size_t data_c,
+ const byte *hdr, size_t hdr_l,
+ const byte *data, size_t data_l)
+{
+ ut_ad(!block.page.zip.data);
+ ut_ad(m_log_mode == MTR_LOG_ALL);
+ ut_d(ulint n_slots= page_dir_get_n_slots(block.frame));
+ ut_ad(n_slots >= 2);
+ ut_d(const byte *page_end= page_dir_get_nth_slot(block.frame, n_slots - 1));
+ ut_ad(&block.frame[prev_rec + PAGE_NEW_INFIMUM] <= page_end);
+ ut_ad(block.frame + page_header_get_offs(block.frame, PAGE_HEAP_TOP) <=
+ page_end);
+ ut_ad(fil_page_index_page_check(block.frame));
+ ut_ad(hdr_l + hdr_c + data_l + data_c <=
+ static_cast<size_t>(page_end - &block.frame[PAGE_NEW_SUPREMUM_END]));
+ ut_ad(reuse || shift == 0);
+#ifdef UNIV_DEBUG
+ switch (~(REC_INFO_MIN_REC_FLAG | REC_INFO_DELETED_FLAG) & info_status) {
+ default:
+ ut_ad(0);
+ break;
+ case REC_STATUS_NODE_PTR:
+ ut_ad(!page_is_leaf(block.frame));
+ break;
+ case REC_STATUS_INSTANT:
+ case REC_STATUS_ORDINARY:
+ ut_ad(page_is_leaf(block.frame));
+ }
+#endif
+
+ set_modified();
+
+ static_assert(REC_INFO_MIN_REC_FLAG == 0x10, "compatibility");
+ static_assert(REC_INFO_DELETED_FLAG == 0x20, "compatibility");
+ static_assert(REC_STATUS_INSTANT == 4, "compatibility");
+
+ const size_t enc_hdr_l= hdr_l << 3 |
+ (info_status & REC_STATUS_INSTANT) | info_status >> 4;
+ size_t len= prev_rec < MIN_2BYTE ? 2 : prev_rec < MIN_3BYTE ? 3 : 4;
+ static_assert(REC_MAX_N_FIELDS * 2 < MIN_3BYTE, "compatibility");
+ if (reuse)
+ {
+ if (shift < 0)
+ shift= -shift << 1 | 1;
+ else
+ shift<<= 1;
+ len+= static_cast<size_t>(shift) < MIN_2BYTE
+ ? 1 : static_cast<size_t>(shift) < MIN_3BYTE ? 2 : 3;
+ }
+ ut_ad(hdr_c + hdr_l <= REC_MAX_N_FIELDS * 2);
+ len+= hdr_c < MIN_2BYTE ? 1 : 2;
+ len+= enc_hdr_l < MIN_2BYTE ? 1 : enc_hdr_l < MIN_3BYTE ? 2 : 3;
+ len+= data_c < MIN_2BYTE ? 1 : data_c < MIN_3BYTE ? 2 : 3;
+ len+= hdr_l + data_l;
+
+ const bool small= len < mtr_buf_t::MAX_DATA_SIZE - (1 + 3 + 3 + 5 + 5);
+ byte *l= log_write<EXTENDED>(block.page.id, &block.page, len, small);
+
+ if (UNIV_LIKELY(small))
+ {
+ ut_d(const byte * const end = l + len);
+ *l++= reuse ? INSERT_REUSE_DYNAMIC : INSERT_HEAP_DYNAMIC;
+ l= mlog_encode_varint(l, prev_rec);
+ if (reuse)
+ l= mlog_encode_varint(l, shift);
+ l= mlog_encode_varint(l, enc_hdr_l);
+ l= mlog_encode_varint(l, hdr_c);
+ l= mlog_encode_varint(l, data_c);
+ ::memcpy(l, hdr, hdr_l);
+ l+= hdr_l;
+ ::memcpy(l, data, data_l);
+ l+= data_l;
+ ut_ad(end == l);
+ m_log.close(l);
+ }
+ else
+ {
+ m_log.close(l);
+ l= m_log.open(len - hdr_l - data_l);
+ ut_d(const byte * const end = l + len - hdr_l - data_l);
+ *l++= reuse ? INSERT_REUSE_DYNAMIC : INSERT_HEAP_DYNAMIC;
+ l= mlog_encode_varint(l, prev_rec);
+ if (reuse)
+ l= mlog_encode_varint(l, shift);
+ l= mlog_encode_varint(l, enc_hdr_l);
+ l= mlog_encode_varint(l, hdr_c);
+ l= mlog_encode_varint(l, data_c);
+ ut_ad(end == l);
+ m_log.close(l);
+ m_log.push(hdr, static_cast<uint32_t>(hdr_l));
+ m_log.push(data, static_cast<uint32_t>(data_l));
+ }
+
+ m_last_offset= FIL_PAGE_TYPE;
+}
+
/***********************************************************//**
Inserts a record next to page cursor on an uncompressed page.
Returns pointer to inserted record if succeed, i.e., enough
@@ -1063,16 +1281,17 @@ page_cur_insert_rec_low(
offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */
mtr_t* mtr) /*!< in/out: mini-transaction */
{
- buf_block_t* block = cur->block;
+ buf_block_t* block= cur->block;
ut_ad(rec_offs_validate(rec, index, offsets));
-
+ ut_ad(rec_offs_n_fields(offsets) > 0);
ut_ad(index->table->not_redundant() == !!page_is_comp(block->frame));
ut_ad(!!page_is_comp(block->frame) == !!rec_offs_comp(offsets));
ut_ad(fil_page_index_page_check(block->frame));
ut_ad(mach_read_from_8(PAGE_HEADER + PAGE_INDEX_ID + block->frame) ==
index->id ||
mtr->is_inside_ibuf());
+ ut_ad(page_dir_get_n_slots(block->frame) >= 2);
ut_ad(!page_rec_is_supremum(cur->rec));
@@ -1098,11 +1317,15 @@ page_cur_insert_rec_low(
#endif /* UNIV_DEBUG_VALGRIND */
/* 2. Try to find suitable space from page memory management */
+ bool reuse= false;
+ ssize_t free_offset= 0;
ulint heap_no;
byte *insert_buf;
- alignas(2) byte hdr[8];
- if (rec_t* free_rec = page_header_get_ptr(block->frame, PAGE_FREE))
+ const bool comp= page_is_comp(block->frame);
+ const ulint extra_size= rec_offs_extra_size(offsets);
+
+ if (rec_t* free_rec= page_header_get_ptr(block->frame, PAGE_FREE))
{
/* Try to reuse the head of PAGE_FREE. */
offset_t foffsets_[REC_OFFS_NORMAL_SIZE];
@@ -1113,8 +1336,10 @@ page_cur_insert_rec_low(
offset_t *foffsets= rec_get_offsets(free_rec, index, foffsets_,
page_is_leaf(block->frame),
ULINT_UNDEFINED, &heap);
- insert_buf= free_rec - rec_offs_extra_size(foffsets);
- const bool too_small= rec_offs_size(foffsets) < rec_size;
+ const ulint fextra_size= rec_offs_extra_size(foffsets);
+ insert_buf= free_rec - fextra_size;
+ const bool too_small= (fextra_size + rec_offs_data_size(foffsets)) <
+ rec_size;
if (UNIV_LIKELY_NULL(heap))
mem_heap_free(heap);
@@ -1123,76 +1348,74 @@ page_cur_insert_rec_low(
byte *page_free= my_assume_aligned<2>(PAGE_FREE + PAGE_HEADER +
block->frame);
- if (page_is_comp(block->frame))
+ if (comp)
{
heap_no= rec_get_heap_no_new(free_rec);
- const rec_t *next= rec_get_next_ptr(free_rec, true);
- mach_write_to_2(hdr, next ? page_offset(next) : 0);
+ uint16_t next= mach_read_from_2(free_rec - REC_NEXT);
+ mach_write_to_2(page_free, next
+ ? static_cast<uint16_t>(free_rec + next - block->frame)
+ : 0);
}
else
{
heap_no= rec_get_heap_no_old(free_rec);
- memcpy(hdr, free_rec - REC_NEXT, 2);
+ memcpy(page_free, free_rec - REC_NEXT, 2);
}
static_assert(PAGE_GARBAGE == PAGE_FREE + 2, "compatibility");
- byte *page_garbage = my_assume_aligned<2>(page_free + 2);
+
+ byte *page_garbage= my_assume_aligned<2>(page_free + 2);
ut_ad(mach_read_from_2(page_garbage) >= rec_size);
- mach_write_to_2(my_assume_aligned<2>(hdr + 2),
- mach_read_from_2(page_garbage) - rec_size);
- mtr->memcpy(*block, page_free, hdr, 4);
+ mach_write_to_2(page_garbage, mach_read_from_2(page_garbage) - rec_size);
+ reuse= true;
+ free_offset= extra_size - fextra_size;
}
else
{
use_heap:
- insert_buf= page_mem_alloc_heap(block, rec_size, &heap_no, mtr);
+ insert_buf= page_mem_alloc_heap(block, rec_size, &heap_no);
if (UNIV_UNLIKELY(!insert_buf))
return nullptr;
}
- const ulint extra_size= rec_offs_extra_size(offsets);
ut_ad(cur->rec != insert_buf + extra_size);
- const rec_t *next_rec= page_rec_get_next_low(cur->rec,
- page_is_comp(block->frame));
+ rec_t *next_rec= block->frame + rec_get_next_offs(cur->rec, comp);
+ ut_ad(next_rec != block->frame);
/* Update page header fields */
- rec_t *last_insert= page_header_get_ptr(block->frame, PAGE_LAST_INSERT);
- ut_ad(!last_insert || !page_is_comp(block->frame) ||
- rec_get_node_ptr_flag(last_insert) == rec_get_node_ptr_flag(rec));
-
- static_assert(PAGE_N_RECS - PAGE_LAST_INSERT + 2 == sizeof hdr,
- "compatibility");
+ byte *page_last_insert= my_assume_aligned<2>(PAGE_LAST_INSERT + PAGE_HEADER +
+ block->frame);
+ const uint16_t last_insert= mach_read_from_2(page_last_insert);
+ ut_ad(!last_insert || !comp ||
+ rec_get_node_ptr_flag(block->frame + last_insert) ==
+ rec_get_node_ptr_flag(rec));
/* Write PAGE_LAST_INSERT */
- mach_write_to_2(hdr, page_offset(insert_buf + extra_size));
- static_assert(PAGE_INSTANT - PAGE_LAST_INSERT == 2, "compatibility");
- static_assert(PAGE_DIRECTION_B - PAGE_INSTANT == 1, "compatibility");
- static_assert(PAGE_N_DIRECTION - PAGE_DIRECTION_B == 1, "compat.");
- static_assert(PAGE_N_RECS - PAGE_N_DIRECTION == 2, "compatibility");
+ mach_write_to_2(page_last_insert, page_offset(insert_buf + extra_size));
/* Update PAGE_DIRECTION_B, PAGE_N_DIRECTION if needed */
- memcpy_aligned<2>(hdr + 2, PAGE_HEADER + PAGE_INSTANT + block->frame,
- PAGE_N_RECS - PAGE_INSTANT + 2);
-
- if (!index->is_spatial())
+ if (block->frame[FIL_PAGE_TYPE + 1] != byte(FIL_PAGE_RTREE))
{
- byte *dir= &hdr[PAGE_DIRECTION_B - PAGE_LAST_INSERT];
- byte *n= my_assume_aligned<2>(&hdr[PAGE_N_DIRECTION - PAGE_LAST_INSERT]);
+ byte *dir= &block->frame[PAGE_DIRECTION_B + PAGE_HEADER];
+ byte *n= my_assume_aligned<2>
+ (&block->frame[PAGE_N_DIRECTION + PAGE_HEADER]);
if (UNIV_UNLIKELY(!last_insert))
{
no_direction:
*dir= (*dir & ~((1U << 3) - 1)) | PAGE_NO_DIRECTION;
memset(n, 0, 2);
}
- else if (last_insert == cur->rec && (*dir & ((1U << 3) - 1)) != PAGE_LEFT)
+ else if (block->frame + last_insert == cur->rec &&
+ (*dir & ((1U << 3) - 1)) != PAGE_LEFT)
{
*dir= (*dir & ~((1U << 3) - 1)) | PAGE_RIGHT;
inc_dir:
mach_write_to_2(n, mach_read_from_2(n) + 1);
}
- else if (next_rec == last_insert && (*dir & ((1U << 3) - 1)) != PAGE_RIGHT)
+ else if (next_rec == block->frame + last_insert &&
+ (*dir & ((1U << 3) - 1)) != PAGE_RIGHT)
{
*dir= (*dir & ~((1U << 3) - 1)) | PAGE_LEFT;
goto inc_dir;
@@ -1202,20 +1425,24 @@ inc_dir:
}
/* Update PAGE_N_RECS. */
- mach_write_to_2(hdr + PAGE_N_RECS - PAGE_LAST_INSERT,
- mach_read_from_2(hdr + PAGE_N_RECS - PAGE_LAST_INSERT) + 1);
- /* Write the header fields in one record. */
- mtr->memcpy(*block, PAGE_LAST_INSERT + PAGE_HEADER + block->frame,
- hdr, PAGE_N_RECS - PAGE_LAST_INSERT + 2);
+ byte *page_n_recs= my_assume_aligned<2>(PAGE_N_RECS + PAGE_HEADER +
+ block->frame);
+
+ mach_write_to_2(page_n_recs, mach_read_from_2(page_n_recs) + 1);
/* Update the preceding record header, the 'owner' record and
prepare the record to insert. */
+ rec_t *insert_rec= insert_buf + extra_size;
+ const ulint data_size= rec_offs_data_size(offsets);
+ memcpy(insert_buf, rec - extra_size, extra_size + data_size);
+ size_t hdr_common= 0;
ulint n_owned;
- static_assert(sizeof hdr >= REC_N_NEW_EXTRA_BYTES, "compatibility");
- static_assert(sizeof hdr >= REC_N_OLD_EXTRA_BYTES, "compatibility");
- ulint fixed_hdr;
+ const byte info_status= static_cast<byte>
+ (rec_get_info_and_status_bits(rec, comp));
+ ut_ad(!(rec_get_info_bits(rec, comp) &
+ ~(REC_INFO_DELETED_FLAG | REC_INFO_MIN_REC_FLAG)));
- if (page_is_comp(block->frame))
+ if (comp)
{
#ifdef UNIV_DEBUG
switch (rec_get_status(cur->rec)) {
@@ -1225,168 +1452,155 @@ inc_dir:
case REC_STATUS_INFIMUM:
break;
case REC_STATUS_SUPREMUM:
- ut_ad(!"wrong status on cur->rec");
+ ut_ad("wrong status on cur->rec" == 0);
}
switch (rec_get_status(rec)) {
- case REC_STATUS_ORDINARY:
case REC_STATUS_NODE_PTR:
+ ut_ad(!page_is_leaf(block->frame));
+ break;
case REC_STATUS_INSTANT:
+ ut_ad(index->is_instant());
+ ut_ad(page_is_leaf(block->frame));
+ if (!rec_is_metadata(rec, true))
+ break;
+ ut_ad(cur->rec == &block->frame[PAGE_NEW_INFIMUM]);
+ break;
+ case REC_STATUS_ORDINARY:
+ ut_ad(page_is_leaf(block->frame));
+ ut_ad(!(rec_get_info_bits(rec, true) & ~REC_INFO_DELETED_FLAG));
break;
case REC_STATUS_INFIMUM:
case REC_STATUS_SUPREMUM:
- ut_ad(!"wrong status on rec");
+ ut_ad("wrong status on rec" == 0);
}
ut_ad(rec_get_status(next_rec) != REC_STATUS_INFIMUM);
#endif
- memcpy(hdr, rec - REC_N_NEW_EXTRA_BYTES, REC_N_NEW_EXTRA_BYTES);
- rec_set_bit_field_1(hdr + REC_N_NEW_EXTRA_BYTES, 0, REC_NEW_N_OWNED,
+
+ rec_set_bit_field_1(insert_rec, 0, REC_NEW_N_OWNED,
REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
- rec_set_bit_field_2(hdr + REC_N_NEW_EXTRA_BYTES, heap_no,
+ insert_rec[-REC_NEW_STATUS]= rec[-REC_NEW_STATUS];
+ rec_set_bit_field_2(insert_rec, heap_no,
REC_NEW_HEAP_NO, REC_HEAP_NO_MASK, REC_HEAP_NO_SHIFT);
- const rec_t *insert_rec= insert_buf + extra_size;
- mach_write_to_2(REC_N_NEW_EXTRA_BYTES - REC_NEXT + hdr,
+ mach_write_to_2(insert_rec - REC_NEXT,
static_cast<uint16_t>(next_rec - insert_rec));
- mtr->write<2>(*block, cur->rec - REC_NEXT,
- static_cast<uint16_t>(insert_rec - cur->rec));
- while (!(n_owned = rec_get_n_owned_new(next_rec)))
- next_rec= page_rec_get_next_low(next_rec, true);
- page_rec_set_n_owned<false>(block, const_cast<rec_t*>(next_rec),
- n_owned + 1, true, mtr);
- fixed_hdr= REC_N_NEW_EXTRA_BYTES;
+ mach_write_to_2(cur->rec - REC_NEXT,
+ static_cast<uint16_t>(insert_rec - cur->rec));
+ while (!(n_owned= rec_get_n_owned_new(next_rec)))
+ {
+ next_rec= block->frame + rec_get_next_offs(next_rec, true);
+ ut_ad(next_rec != block->frame);
+ }
+ rec_set_bit_field_1(next_rec, n_owned + 1, REC_NEW_N_OWNED,
+ REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
+ if (mtr->get_log_mode() != MTR_LOG_ALL)
+ goto copied;
+
+ const byte * const c_start= cur->rec - extra_size;
+ if (extra_size > REC_N_NEW_EXTRA_BYTES &&
+ c_start >=
+ &block->frame[PAGE_NEW_SUPREMUM_END + REC_N_NEW_EXTRA_BYTES])
+ {
+ /* Find common header bytes with the preceding record. */
+ const byte *r= rec - (REC_N_NEW_EXTRA_BYTES + 1);
+ for (const byte *c= cur->rec - (REC_N_NEW_EXTRA_BYTES + 1);
+ *r == *c && c-- != c_start; r--);
+ hdr_common= static_cast<size_t>((rec - (REC_N_NEW_EXTRA_BYTES + 1)) - r);
+ ut_ad(hdr_common <= extra_size - REC_N_NEW_EXTRA_BYTES);
+ }
}
else
{
- memcpy(hdr, rec - REC_N_OLD_EXTRA_BYTES, REC_N_OLD_EXTRA_BYTES);
- rec_set_bit_field_1(hdr + REC_N_OLD_EXTRA_BYTES, 0, REC_OLD_N_OWNED,
+#ifdef UNIV_DEBUG
+ if (!page_is_leaf(block->frame));
+ else if (rec_is_metadata(rec, false))
+ {
+ ut_ad(index->is_instant());
+ ut_ad(cur->rec == &block->frame[PAGE_OLD_INFIMUM]);
+ }
+#endif
+ rec_set_bit_field_1(insert_rec, 0, REC_OLD_N_OWNED,
REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
- rec_set_bit_field_2(hdr + REC_N_OLD_EXTRA_BYTES, heap_no,
+ rec_set_bit_field_2(insert_rec, heap_no,
REC_OLD_HEAP_NO, REC_HEAP_NO_MASK, REC_HEAP_NO_SHIFT);
- memcpy(hdr + REC_N_OLD_EXTRA_BYTES - REC_NEXT, cur->rec - REC_NEXT, 2);
- mtr->write<2>(*block, cur->rec - REC_NEXT,
- page_offset(insert_buf + extra_size));
- while (!(n_owned = rec_get_n_owned_old(next_rec)))
- next_rec= page_rec_get_next_low(next_rec, false);
- page_rec_set_n_owned<false>(block, const_cast<rec_t*>(next_rec),
- n_owned + 1, false, mtr);
- fixed_hdr= REC_N_OLD_EXTRA_BYTES;
+ memcpy(insert_rec - REC_NEXT, cur->rec - REC_NEXT, 2);
+ mach_write_to_2(cur->rec - REC_NEXT, page_offset(insert_rec));
+ while (!(n_owned= rec_get_n_owned_old(next_rec)))
+ {
+ next_rec= block->frame + rec_get_next_offs(next_rec, false);
+ ut_ad(next_rec != block->frame);
+ }
+ rec_set_bit_field_1(next_rec, n_owned + 1, REC_OLD_N_OWNED,
+ REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
+ if (mtr->get_log_mode() != MTR_LOG_ALL)
+ goto copied;
+
+ ut_ad(extra_size > REC_N_OLD_EXTRA_BYTES);
+ const byte * const c_start= cur->rec - extra_size;
+ if (c_start >=
+ &block->frame[PAGE_OLD_SUPREMUM_END + REC_N_OLD_EXTRA_BYTES])
+ {
+ /* Find common header bytes with the preceding record. */
+ const byte *r= rec - (REC_N_OLD_EXTRA_BYTES + 1);
+ for (const byte *c= cur->rec - (REC_N_OLD_EXTRA_BYTES + 1);
+ *r == *c && c-- != c_start; r--);
+ hdr_common= static_cast<size_t>((rec - (REC_N_OLD_EXTRA_BYTES + 1)) - r);
+ ut_ad(hdr_common <= extra_size - REC_N_OLD_EXTRA_BYTES);
+ }
}
- ut_ad(fixed_hdr <= extra_size);
/* Insert the record, possibly copying from the preceding record. */
- const ulint data_size = rec_offs_data_size(offsets);
- ut_ad(mtr->has_modifications());
+ ut_ad(mtr->get_log_mode() == MTR_LOG_ALL);
- if (mtr->get_log_mode() == MTR_LOG_ALL)
+ if (data_size)
{
- /* Temporarily write everything to rec, to simplify the code below. */
- byte rec_hdr[REC_N_OLD_EXTRA_BYTES];
- memcpy(rec_hdr, rec - fixed_hdr, fixed_hdr);
- memcpy(const_cast<rec_t*>(rec - fixed_hdr), hdr, fixed_hdr);
-
- byte *b= insert_buf;
- const byte *r= rec - extra_size;
-
- /* Skip any unchanged prefix of the record header. */
- for (;; b++, r++)
- if (UNIV_UNLIKELY(b == insert_buf + rec_size))
- goto rec_done;
- else if (*b != *r)
- break;
-
+ const byte *r= rec;
+ const byte *c= cur->rec;
+ const byte *c_end= cur->rec + data_size;
+ if (c <= insert_buf && c_end > insert_buf)
+ c_end= insert_buf;
+ else
+ c_end= std::min<const byte*>(c_end, block->frame + srv_page_size -
+ PAGE_DIR - PAGE_DIR_SLOT_SIZE *
+ page_dir_get_n_slots(block->frame));
+ size_t data_common= 0;
+ /* Copy common data bytes of the preceding record. */
+ if (c != c_end)
{
- const byte *c= cur->rec - (rec - r);
- const byte *c_end= std::min(cur->rec + data_size,
- block->frame + srv_page_size);
- if (c <= insert_buf && c_end > insert_buf)
- c_end= insert_buf;
-
- /* Try to copy any bytes of the preceding record. */
- if (UNIV_LIKELY(c >= block->frame && c < c_end))
- {
- const byte *cm= c;
- const byte *rm= r;
- while (*rm++ == *cm++)
- if (cm == c_end)
- break;
- rm--, cm--;
- ut_ad(rm - r + b <= insert_buf + rec_size);
- size_t len= static_cast<size_t>(rm - r);
- ut_ad(!memcmp(r, c, len));
- if (len > 2)
- {
- memcpy(b, c, len);
- mtr->memmove(*block, page_offset(b), page_offset(c), len);
- c= cm;
- b+= rm - r;
- r= rm;
- }
- }
-
- if (c < cur->rec)
- {
- if (!data_size)
- {
-no_data:
- mtr->memcpy<mtr_t::FORCED>(*block, b, r, cur->rec - c);
- goto rec_done;
- }
- /* Some header bytes differ. Compare the data separately. */
- byte *bd= insert_buf + extra_size;
- const byte *rd= rec;
- /* Skip any unchanged prefix of the record payload. */
- for (;; bd++, rd++)
- if (bd == insert_buf + rec_size)
- goto no_data;
- else if (*bd != *rd)
- break;
-
- /* Try to copy any data bytes of the preceding record. */
- const byte * const cd= cur->rec + (rd - rec);
- if (c_end - cd > 2)
- {
- const byte *cdm= cd;
- const byte *rdm= rd;
- while (*rdm++ == *cdm++)
- if (cdm == c_end)
- break;
- cdm--, rdm--;
- ut_ad(rdm - rd + bd <= insert_buf + rec_size);
- size_t len= static_cast<size_t>(rdm - rd);
- ut_ad(!memcmp(rd, cd, len));
- if (len > 2)
- {
- mtr->memcpy<mtr_t::FORCED>(*block, b, r, cur->rec - c);
- memcpy(bd, cd, len);
- mtr->memmove(*block, page_offset(bd), page_offset(cd), len);
- c= cdm;
- b= rdm - rd + bd;
- r= rdm;
- }
- }
- }
+ for (; *r == *c && c++ != c_end; r++);
+ data_common= static_cast<size_t>(r - rec);
}
- if (size_t len= static_cast<size_t>(insert_buf + rec_size - b))
- mtr->memcpy<mtr_t::FORCED>(*block, b, r, len);
-rec_done:
- ut_ad(!memcmp(insert_buf, rec - extra_size, rec_size));
-
- /* Restore the record header. */
- memcpy(const_cast<rec_t*>(rec - fixed_hdr), rec_hdr, fixed_hdr);
- }
- else
- {
- memcpy(insert_buf, rec - extra_size, extra_size - fixed_hdr);
- memcpy(insert_buf + extra_size - fixed_hdr, hdr, fixed_hdr);
- memcpy(insert_buf + extra_size, rec, data_size);
+ if (comp)
+ mtr->page_insert(*block, reuse,
+ cur->rec - block->frame - PAGE_NEW_INFIMUM,
+ info_status, free_offset, hdr_common, data_common,
+ insert_buf,
+ extra_size - hdr_common - REC_N_NEW_EXTRA_BYTES,
+ r, data_size - data_common);
+ else
+ mtr->page_insert(*block, reuse,
+ cur->rec - block->frame - PAGE_OLD_INFIMUM,
+ info_status, rec_get_n_fields_old(insert_rec) << 1 |
+ rec_get_1byte_offs_flag(insert_rec),
+ hdr_common, data_common,
+ insert_buf,
+ extra_size - hdr_common - REC_N_OLD_EXTRA_BYTES,
+ r, data_size - data_common);
}
+copied:
+ ut_ad(!memcmp(insert_buf, rec - extra_size, extra_size -
+ (comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES)));
+ ut_ad(!memcmp(insert_rec, rec, data_size));
/* We have incremented the n_owned field of the owner record.
If the number exceeds PAGE_DIR_SLOT_MAX_N_OWNED, we have to split the
corresponding directory slot in two. */
if (UNIV_UNLIKELY(n_owned == PAGE_DIR_SLOT_MAX_N_OWNED))
- page_dir_split_slot<false>(block, page_dir_find_owner_slot(next_rec), mtr);
+ {
+ const auto owner= page_dir_find_owner_slot(next_rec);
+ page_dir_split_slot(*block, page_dir_get_nth_slot(block->frame, owner));
+ }
rec_offs_make_valid(insert_buf + extra_size, index,
page_is_leaf(block->frame), offsets);
@@ -1704,12 +1918,13 @@ too_small:
{
use_heap:
ut_ad(!free_rec);
- insert_buf = page_mem_alloc_heap<true>(cursor->block, rec_size, &heap_no,
- mtr);
+ insert_buf= page_mem_alloc_heap<true>(cursor->block, rec_size, &heap_no);
if (UNIV_UNLIKELY(!insert_buf))
return insert_buf;
+ static_assert(PAGE_N_HEAP == PAGE_HEAP_TOP + 2, "compatibility");
+ mtr->memcpy(*cursor->block, PAGE_HEAP_TOP + PAGE_HEADER, 4);
page_zip_dir_add_slot(cursor->block, index, mtr);
}
@@ -1807,8 +2022,8 @@ inc_dir:
record. If the number exceeds PAGE_DIR_SLOT_MAX_N_OWNED,
we have to split the corresponding directory slot in two. */
if (UNIV_UNLIKELY(n_owned == PAGE_DIR_SLOT_MAX_N_OWNED))
- page_dir_split_slot<true>(cursor->block,
- page_dir_find_owner_slot(next_rec), mtr);
+ page_zip_dir_split_slot(cursor->block,
+ page_dir_find_owner_slot(next_rec), mtr);
page_zip_write_rec(cursor->block, insert_rec, index, offsets, 1, mtr);
return insert_rec;
@@ -2057,11 +2272,480 @@ page_cur_delete_rec(
: page_simple_validate_old(block->frame));
}
+/** Apply a INSERT_HEAP_REDUNDANT or INSERT_REUSE_REDUNDANT record that was
+written by page_cur_insert_rec_low() for a ROW_FORMAT=REDUNDANT page.
+@param block B-tree or R-tree page in ROW_FORMAT=COMPACT or DYNAMIC
+@param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+@param prev byte offset of the predecessor, relative to PAGE_NEW_INFIMUM
+@param enc_hdr encoded fixed-size header bits
+@param hdr_c number of common record header bytes with prev
+@param data_c number of common data bytes with prev
+@param data literal header and data bytes
+@param data_len length of the literal data, in bytes
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_insert_redundant(const buf_block_t &block, bool reuse,
+ ulint prev, ulint enc_hdr,
+ size_t hdr_c, size_t data_c,
+ const void *data, size_t data_len)
+{
+ const uint16_t n_slots= page_dir_get_n_slots(block.frame);
+ byte *page_n_heap= my_assume_aligned<2>(PAGE_N_HEAP + PAGE_HEADER +
+ block.frame);
+ const uint16_t h= mach_read_from_2(page_n_heap);
+ if (UNIV_UNLIKELY(n_slots < 2 || h < n_slots || h < PAGE_HEAP_NO_USER_LOW ||
+ h >= srv_page_size / REC_N_OLD_EXTRA_BYTES ||
+ !fil_page_index_page_check(block.frame) ||
+ page_get_page_no(block.frame) != block.page.id.page_no() ||
+ mach_read_from_2(my_assume_aligned<2>
+ (PAGE_OLD_SUPREMUM - REC_NEXT +
+ block.frame))))
+ {
+corrupted:
+ ib::error() << (reuse
+ ? "Not applying INSERT_REUSE_REDUNDANT"
+ " due to corruption on "
+ : "Not applying INSERT_HEAP_REDUNDANT"
+ " due to corruption on ")
+ << block.page.id;
+ return true;
+ }
+
+ byte * const last_slot= page_dir_get_nth_slot(block.frame, n_slots - 1);
+ byte * const page_heap_top= my_assume_aligned<2>
+ (PAGE_HEAP_TOP + PAGE_HEADER + block.frame);
+ const byte *const heap_bot= &block.frame[PAGE_OLD_SUPREMUM_END];
+ byte *heap_top= block.frame + mach_read_from_2(page_heap_top);
+ if (UNIV_UNLIKELY(heap_bot > heap_top || heap_top > last_slot))
+ goto corrupted;
+ if (UNIV_UNLIKELY(mach_read_from_2(last_slot) != PAGE_OLD_SUPREMUM))
+ goto corrupted;
+ if (UNIV_UNLIKELY(mach_read_from_2(page_dir_get_nth_slot(block.frame, 0)) !=
+ PAGE_OLD_INFIMUM))
+ goto corrupted;
+ rec_t * const prev_rec= block.frame + PAGE_OLD_INFIMUM + prev;
+ if (!prev);
+ else if (UNIV_UNLIKELY(heap_bot + (REC_N_OLD_EXTRA_BYTES + 1) > prev_rec ||
+ prev_rec > heap_top))
+ goto corrupted;
+ const ulint pn_fields= rec_get_bit_field_2(prev_rec, REC_OLD_N_FIELDS,
+ REC_OLD_N_FIELDS_MASK,
+ REC_OLD_N_FIELDS_SHIFT);
+ if (UNIV_UNLIKELY(pn_fields == 0 || pn_fields > REC_MAX_N_FIELDS))
+ goto corrupted;
+ const ulint pextra_size= REC_N_OLD_EXTRA_BYTES +
+ (rec_get_1byte_offs_flag(prev_rec) ? pn_fields : pn_fields * 2);
+ if (prev_rec == &block.frame[PAGE_OLD_INFIMUM]);
+ else if (UNIV_UNLIKELY(prev_rec - pextra_size < heap_bot))
+ goto corrupted;
+ const ulint pdata_size= rec_get_data_size_old(prev_rec);
+ if (UNIV_UNLIKELY(prev_rec + pdata_size > heap_top))
+ goto corrupted;
+ rec_t * const next_rec= block.frame + mach_read_from_2(prev_rec - REC_NEXT);
+ if (next_rec == block.frame + PAGE_OLD_SUPREMUM);
+ else if (UNIV_UNLIKELY(heap_bot + REC_N_OLD_EXTRA_BYTES > next_rec ||
+ next_rec > heap_top))
+ goto corrupted;
+ const bool is_short= (enc_hdr >> 2) & 1;
+ const ulint n_fields= (enc_hdr >> 3) + 1;
+ if (UNIV_UNLIKELY(n_fields > REC_MAX_N_FIELDS))
+ goto corrupted;
+ const ulint extra_size= REC_N_OLD_EXTRA_BYTES +
+ (is_short ? n_fields : n_fields * 2);
+ hdr_c+= REC_N_OLD_EXTRA_BYTES;
+ if (UNIV_UNLIKELY(hdr_c > extra_size || hdr_c > pextra_size))
+ goto corrupted;
+ if (UNIV_UNLIKELY(extra_size - hdr_c > data_len))
+ goto corrupted;
+ /* We buffer all changes to the record header locally, so that
+ we will avoid modifying the page before all consistency checks
+ have been fulfilled. */
+ alignas(2) byte insert_buf[REC_N_OLD_EXTRA_BYTES + REC_MAX_N_FIELDS * 2];
+
+ ulint n_owned;
+ rec_t *owner_rec= next_rec;
+ for (ulint ns= PAGE_DIR_SLOT_MAX_N_OWNED;
+ !(n_owned= rec_get_n_owned_old(owner_rec)); )
+ {
+ owner_rec= block.frame + mach_read_from_2(owner_rec - REC_NEXT);
+ if (owner_rec == &block.frame[PAGE_OLD_SUPREMUM]);
+ else if (UNIV_UNLIKELY(heap_bot + REC_N_OLD_EXTRA_BYTES > owner_rec ||
+ owner_rec > heap_top))
+ goto corrupted;
+ if (!ns--)
+ goto corrupted; /* Corrupted (cyclic?) next-record list */
+ }
+
+ page_dir_slot_t *owner_slot= last_slot;
+
+ if (n_owned > PAGE_DIR_SLOT_MAX_N_OWNED)
+ goto corrupted;
+ else
+ {
+ mach_write_to_2(insert_buf, owner_rec - block.frame);
+ static_assert(PAGE_DIR_SLOT_SIZE == 2, "compatibility");
+ const page_dir_slot_t * const first_slot=
+ page_dir_get_nth_slot(block.frame, 0);
+
+ while (memcmp_aligned<2>(owner_slot, insert_buf, 2))
+ if ((owner_slot+= 2) == first_slot)
+ goto corrupted;
+ }
+
+ memcpy(insert_buf, data, extra_size - hdr_c);
+ byte *insert_rec= &insert_buf[extra_size];
+ memcpy(insert_rec - hdr_c, prev_rec - hdr_c, hdr_c);
+ rec_set_bit_field_1(insert_rec, (enc_hdr & 3) << 4,
+ REC_OLD_INFO_BITS, REC_INFO_BITS_MASK,
+ REC_INFO_BITS_SHIFT);
+ rec_set_1byte_offs_flag(insert_rec, is_short);
+ rec_set_n_fields_old(insert_rec, n_fields);
+ rec_set_bit_field_1(insert_rec, 0, REC_OLD_N_OWNED,
+ REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
+
+ const ulint data_size= rec_get_data_size_old(insert_rec);
+ if (UNIV_UNLIKELY(data_c > data_size))
+ goto corrupted;
+ if (UNIV_UNLIKELY(extra_size - hdr_c + data_size - data_c != data_len))
+ goto corrupted;
+
+ /* Perform final consistency checks and then apply the change to the page. */
+ byte *buf;
+ if (reuse)
+ {
+ byte *page_free= my_assume_aligned<2>(PAGE_FREE + PAGE_HEADER +
+ block.frame);
+ rec_t *free_rec= block.frame + mach_read_from_2(page_free);
+ if (UNIV_UNLIKELY(heap_bot + REC_N_OLD_EXTRA_BYTES > free_rec ||
+ free_rec > heap_top))
+ goto corrupted;
+ const ulint fn_fields= rec_get_n_fields_old(free_rec);
+ const ulint fextra_size= REC_N_OLD_EXTRA_BYTES +
+ (rec_get_1byte_offs_flag(free_rec) ? fn_fields : fn_fields * 2);
+ if (UNIV_UNLIKELY(free_rec - fextra_size < heap_bot))
+ goto corrupted;
+ const ulint fdata_size= rec_get_data_size_old(free_rec);
+ if (UNIV_UNLIKELY(free_rec + data_size > heap_top))
+ goto corrupted;
+ if (UNIV_UNLIKELY(extra_size + data_size > fextra_size + fdata_size))
+ goto corrupted;
+ byte *page_garbage= my_assume_aligned<2>(page_free + 2);
+ if (UNIV_UNLIKELY(mach_read_from_2(page_garbage) <
+ fextra_size + fdata_size))
+ goto corrupted;
+ buf= free_rec - fextra_size;
+ const rec_t *const next_free= block.frame +
+ mach_read_from_2(free_rec - REC_NEXT);
+ if (next_free == block.frame);
+ else if (UNIV_UNLIKELY(next_free < &heap_bot[REC_N_OLD_EXTRA_BYTES + 1] ||
+ heap_top < next_free))
+ goto corrupted;
+ mach_write_to_2(page_garbage, mach_read_from_2(page_garbage) -
+ extra_size - data_size);
+ rec_set_bit_field_2(insert_rec, rec_get_heap_no_old(free_rec),
+ REC_OLD_HEAP_NO, REC_HEAP_NO_MASK, REC_HEAP_NO_SHIFT);
+ memcpy(page_free, free_rec - REC_NEXT, 2);
+ }
+ else
+ {
+ if (UNIV_UNLIKELY(heap_top + extra_size + data_size > last_slot))
+ goto corrupted;
+ rec_set_bit_field_2(insert_rec, h,
+ REC_OLD_HEAP_NO, REC_HEAP_NO_MASK, REC_HEAP_NO_SHIFT);
+ mach_write_to_2(page_n_heap, h + 1);
+ mach_write_to_2(page_heap_top,
+ mach_read_from_2(page_heap_top) + extra_size + data_size);
+ buf= heap_top;
+ }
+
+ ut_ad(data_size - data_c == data_len - (extra_size - hdr_c));
+ byte *page_last_insert= my_assume_aligned<2>(PAGE_LAST_INSERT + PAGE_HEADER +
+ block.frame);
+ const uint16_t last_insert= mach_read_from_2(page_last_insert);
+ memcpy(buf, insert_buf, extra_size);
+ buf+= extra_size;
+ mach_write_to_2(page_last_insert, buf - block.frame);
+ memcpy(prev_rec - REC_NEXT, page_last_insert, 2);
+ memcpy(buf, prev_rec, data_c);
+ memcpy(buf + data_c, static_cast<const byte*>(data) + (extra_size - hdr_c),
+ data_len - (extra_size - hdr_c));
+ rec_set_bit_field_1(owner_rec, n_owned + 1, REC_OLD_N_OWNED,
+ REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
+
+ /* Update PAGE_DIRECTION_B, PAGE_N_DIRECTION if needed */
+ if (block.frame[FIL_PAGE_TYPE + 1] != byte(FIL_PAGE_RTREE))
+ {
+ byte *dir= &block.frame[PAGE_DIRECTION_B + PAGE_HEADER];
+ byte *n_dir= my_assume_aligned<2>
+ (&block.frame[PAGE_N_DIRECTION + PAGE_HEADER]);
+ if (UNIV_UNLIKELY(!last_insert))
+ {
+no_direction:
+ *dir= (*dir & ~((1U << 3) - 1)) | PAGE_NO_DIRECTION;
+ memset(n_dir, 0, 2);
+ }
+ else if (block.frame + last_insert == prev_rec &&
+ (*dir & ((1U << 3) - 1)) != PAGE_LEFT)
+ {
+ *dir= (*dir & ~((1U << 3) - 1)) | PAGE_RIGHT;
+inc_dir:
+ mach_write_to_2(n_dir, mach_read_from_2(n_dir) + 1);
+ }
+ else if (next_rec == block.frame + last_insert &&
+ (*dir & ((1U << 3) - 1)) != PAGE_RIGHT)
+ {
+ *dir= (*dir & ~((1U << 3) - 1)) | PAGE_LEFT;
+ goto inc_dir;
+ }
+ else
+ goto no_direction;
+ }
+
+ /* Update PAGE_N_RECS. */
+ byte *page_n_recs= my_assume_aligned<2>(PAGE_N_RECS + PAGE_HEADER +
+ block.frame);
+
+ mach_write_to_2(page_n_recs, mach_read_from_2(page_n_recs) + 1);
+
+ if (UNIV_UNLIKELY(n_owned == PAGE_DIR_SLOT_MAX_N_OWNED))
+ page_dir_split_slot(block, owner_slot);
+ ut_ad(page_simple_validate_old(block.frame));
+ return false;
+}
+
+/** Apply a INSERT_HEAP_DYNAMIC or INSERT_REUSE_DYNAMIC record that was
+written by page_cur_insert_rec_low() for a ROW_FORMAT=COMPACT or DYNAMIC page.
+@param block B-tree or R-tree page in ROW_FORMAT=COMPACT or DYNAMIC
+@param reuse false=allocate from PAGE_HEAP_TOP; true=reuse PAGE_FREE
+@param prev byte offset of the predecessor, relative to PAGE_NEW_INFIMUM
+@param shift unless !reuse: number of bytes the PAGE_FREE is moving
+@param enc_hdr_l number of copied record header bytes, plus record type bits
+@param hdr_c number of common record header bytes with prev
+@param data_c number of common data bytes with prev
+@param data literal header and data bytes
+@param data_len length of the literal data, in bytes
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_insert_dynamic(const buf_block_t &block, bool reuse,
+ ulint prev, ulint shift, ulint enc_hdr_l,
+ size_t hdr_c, size_t data_c,
+ const void *data, size_t data_len)
+{
+ const uint16_t n_slots= page_dir_get_n_slots(block.frame);
+ byte *page_n_heap= my_assume_aligned<2>(PAGE_N_HEAP + PAGE_HEADER +
+ block.frame);
+ ulint h= mach_read_from_2(page_n_heap);
+ if (UNIV_UNLIKELY(n_slots < 2 || h < (PAGE_HEAP_NO_USER_LOW | 0x8000) ||
+ (h & 0x7fff) >= srv_page_size / REC_N_NEW_EXTRA_BYTES ||
+ (h & 0x7fff) < n_slots ||
+ !fil_page_index_page_check(block.frame) ||
+ page_get_page_no(block.frame) != block.page.id.page_no() ||
+ mach_read_from_2(my_assume_aligned<2>
+ (PAGE_NEW_SUPREMUM - REC_NEXT +
+ block.frame)) ||
+ ((enc_hdr_l & REC_STATUS_INSTANT) &&
+ !page_is_leaf(block.frame)) ||
+ (enc_hdr_l >> 3) > data_len))
+ {
+corrupted:
+ ib::error() << (reuse
+ ? "Not applying INSERT_REUSE_DYNAMIC"
+ " due to corruption on "
+ : "Not applying INSERT_HEAP_DYNAMIC"
+ " due to corruption on ")
+ << block.page.id;
+ return true;
+ }
+
+ byte * const last_slot= page_dir_get_nth_slot(block.frame, n_slots - 1);
+ byte * const page_heap_top= my_assume_aligned<2>
+ (PAGE_HEAP_TOP + PAGE_HEADER + block.frame);
+ const byte *const heap_bot= &block.frame[PAGE_NEW_SUPREMUM_END];
+ byte *heap_top= block.frame + mach_read_from_2(page_heap_top);
+ if (UNIV_UNLIKELY(heap_bot > heap_top || heap_top > last_slot))
+ goto corrupted;
+ if (UNIV_UNLIKELY(mach_read_from_2(last_slot) != PAGE_NEW_SUPREMUM))
+ goto corrupted;
+ if (UNIV_UNLIKELY(mach_read_from_2(page_dir_get_nth_slot(block.frame, 0)) !=
+ PAGE_NEW_INFIMUM))
+ goto corrupted;
+
+ uint16_t n= static_cast<uint16_t>(PAGE_NEW_INFIMUM + prev);
+ rec_t *prev_rec= block.frame + n;
+ n+= mach_read_from_2(prev_rec - REC_NEXT);
+ if (!prev);
+ else if (UNIV_UNLIKELY(heap_bot + REC_N_NEW_EXTRA_BYTES > prev_rec ||
+ prev_rec > heap_top))
+ goto corrupted;
+
+ rec_t * const next_rec= block.frame + n;
+ if (next_rec == block.frame + PAGE_NEW_SUPREMUM);
+ else if (UNIV_UNLIKELY(heap_bot + REC_N_NEW_EXTRA_BYTES > next_rec ||
+ next_rec > heap_top))
+ goto corrupted;
+
+ ulint n_owned;
+ rec_t *owner_rec= next_rec;
+ n= static_cast<uint16_t>(next_rec - block.frame);
+
+ for (ulint ns= PAGE_DIR_SLOT_MAX_N_OWNED;
+ !(n_owned= rec_get_n_owned_new(owner_rec)); )
+ {
+ n+= mach_read_from_2(owner_rec - REC_NEXT);
+ owner_rec= block.frame + n;
+ if (n == PAGE_NEW_SUPREMUM);
+ else if (UNIV_UNLIKELY(heap_bot + REC_N_NEW_EXTRA_BYTES > owner_rec ||
+ owner_rec > heap_top))
+ goto corrupted;
+ if (!ns--)
+ goto corrupted; /* Corrupted (cyclic?) next-record list */
+ }
+
+ page_dir_slot_t* owner_slot= last_slot;
+
+ if (n_owned > PAGE_DIR_SLOT_MAX_N_OWNED)
+ goto corrupted;
+ else
+ {
+ static_assert(PAGE_DIR_SLOT_SIZE == 2, "compatibility");
+ alignas(2) byte slot_buf[2];
+ mach_write_to_2(slot_buf, owner_rec - block.frame);
+ const page_dir_slot_t * const first_slot=
+ page_dir_get_nth_slot(block.frame, 0);
+
+ while (memcmp_aligned<2>(owner_slot, slot_buf, 2))
+ if ((owner_slot+= 2) == first_slot)
+ goto corrupted;
+ }
+
+ const ulint extra_size= REC_N_NEW_EXTRA_BYTES + hdr_c + (enc_hdr_l >> 3);
+ const ulint data_size= data_c + data_len - (enc_hdr_l >> 3);
+
+ /* Perform final consistency checks and then apply the change to the page. */
+ byte *buf;
+ if (reuse)
+ {
+ byte *page_free= my_assume_aligned<2>(PAGE_FREE + PAGE_HEADER +
+ block.frame);
+ rec_t *free_rec= block.frame + mach_read_from_2(page_free);
+ if (UNIV_UNLIKELY(heap_bot + REC_N_NEW_EXTRA_BYTES > free_rec ||
+ free_rec > heap_top))
+ goto corrupted;
+ buf= free_rec - extra_size;
+ if (shift & 1)
+ buf-= shift >> 1;
+ else
+ buf+= shift >> 1;
+
+ if (UNIV_UNLIKELY(heap_bot > buf ||
+ &buf[extra_size + data_size] > heap_top))
+ goto corrupted;
+ byte *page_garbage= my_assume_aligned<2>(page_free + 2);
+ if (UNIV_UNLIKELY(mach_read_from_2(page_garbage) < extra_size + data_size))
+ goto corrupted;
+ if ((n= mach_read_from_2(free_rec - REC_NEXT)) != 0)
+ {
+ n+= static_cast<uint16_t>(free_rec - block.frame);
+ if (UNIV_UNLIKELY(n < PAGE_NEW_SUPREMUM_END + REC_N_NEW_EXTRA_BYTES ||
+ heap_top < block.frame + n))
+ goto corrupted;
+ }
+ mach_write_to_2(page_free, n);
+ mach_write_to_2(page_garbage, mach_read_from_2(page_garbage) -
+ (extra_size + data_size));
+ h= rec_get_heap_no_new(free_rec);
+ }
+ else
+ {
+ if (UNIV_UNLIKELY(heap_top + extra_size + data_size > last_slot))
+ goto corrupted;
+ mach_write_to_2(page_n_heap, h + 1);
+ h&= 0x7fff;
+ mach_write_to_2(page_heap_top,
+ mach_read_from_2(page_heap_top) + extra_size + data_size);
+ buf= heap_top;
+ }
+
+ memcpy(buf, data, (enc_hdr_l >> 3));
+ buf+= enc_hdr_l >> 3;
+ data_len-= enc_hdr_l >> 3;
+ data= &static_cast<const byte*>(data)[enc_hdr_l >> 3];
+
+ memcpy(buf, &prev_rec[-REC_N_NEW_EXTRA_BYTES - hdr_c], hdr_c);
+ buf+= hdr_c;
+ *buf++= static_cast<byte>((enc_hdr_l & 3) << 4); /* info_bits; n_owned=0 */
+ *buf++= static_cast<byte>(h >> 5); /* MSB of heap number */
+ h= (h & ((1U << 5) - 1)) << 3;
+ static_assert(REC_STATUS_ORDINARY == 0, "compatibility");
+ static_assert(REC_STATUS_INSTANT == 4, "compatibility");
+ if (page_is_leaf(block.frame))
+ h|= enc_hdr_l & REC_STATUS_INSTANT;
+ else
+ {
+ ut_ad(!(enc_hdr_l & REC_STATUS_INSTANT)); /* Checked at the start */
+ h|= REC_STATUS_NODE_PTR;
+ }
+ *buf++= static_cast<byte>(h); /* LSB of heap number, and status */
+ static_assert(REC_NEXT == 2, "compatibility");
+ buf+= REC_NEXT;
+ mach_write_to_2(buf - REC_NEXT, static_cast<uint16_t>(next_rec - buf));
+ byte *page_last_insert= my_assume_aligned<2>(PAGE_LAST_INSERT + PAGE_HEADER +
+ block.frame);
+ const uint16_t last_insert= mach_read_from_2(page_last_insert);
+ mach_write_to_2(page_last_insert, buf - block.frame);
+ mach_write_to_2(prev_rec - REC_NEXT, static_cast<uint16_t>(buf - prev_rec));
+ memcpy(buf, prev_rec, data_c);
+ buf+= data_c;
+ memcpy(buf, data, data_len);
+
+ rec_set_bit_field_1(owner_rec, n_owned + 1, REC_NEW_N_OWNED,
+ REC_N_OWNED_MASK, REC_N_OWNED_SHIFT);
+
+ /* Update PAGE_DIRECTION_B, PAGE_N_DIRECTION if needed */
+ if (block.frame[FIL_PAGE_TYPE + 1] != byte(FIL_PAGE_RTREE))
+ {
+ byte *dir= &block.frame[PAGE_DIRECTION_B + PAGE_HEADER];
+ byte *n_dir= my_assume_aligned<2>
+ (&block.frame[PAGE_N_DIRECTION + PAGE_HEADER]);
+ if (UNIV_UNLIKELY(!last_insert))
+ {
+no_direction:
+ *dir= (*dir & ~((1U << 3) - 1)) | PAGE_NO_DIRECTION;
+ memset(n_dir, 0, 2);
+ }
+ else if (block.frame + last_insert == prev_rec &&
+ (*dir & ((1U << 3) - 1)) != PAGE_LEFT)
+ {
+ *dir= (*dir & ~((1U << 3) - 1)) | PAGE_RIGHT;
+inc_dir:
+ mach_write_to_2(n_dir, mach_read_from_2(n_dir) + 1);
+ }
+ else if (next_rec == block.frame + last_insert &&
+ (*dir & ((1U << 3) - 1)) != PAGE_RIGHT)
+ {
+ *dir= (*dir & ~((1U << 3) - 1)) | PAGE_LEFT;
+ goto inc_dir;
+ }
+ else
+ goto no_direction;
+ }
+
+ /* Update PAGE_N_RECS. */
+ byte *page_n_recs= my_assume_aligned<2>(PAGE_N_RECS + PAGE_HEADER +
+ block.frame);
+
+ mach_write_to_2(page_n_recs, mach_read_from_2(page_n_recs) + 1);
+
+ if (UNIV_UNLIKELY(n_owned == PAGE_DIR_SLOT_MAX_N_OWNED))
+ page_dir_split_slot(block, owner_slot);
+ ut_ad(page_simple_validate_new(block.frame));
+ return false;
+}
+
/** Apply a DELETE_ROW_FORMAT_REDUNDANT record that was written by
page_cur_delete_rec() for a ROW_FORMAT=REDUNDANT page.
@param block B-tree or R-tree page in ROW_FORMAT=REDUNDANT
-@param prev byte offset of the predecessor, relative to PAGE_OLD_INFIMUM */
-void page_apply_delete_redundant(const buf_block_t &block, ulint prev)
+@param prev byte offset of the predecessor, relative to PAGE_OLD_INFIMUM
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_delete_redundant(const buf_block_t &block, ulint prev)
{
const uint16_t n_slots= page_dir_get_n_slots(block.frame);
ulint n_recs= page_get_n_recs(block.frame);
@@ -2077,7 +2761,7 @@ void page_apply_delete_redundant(const buf_block_t &block, ulint prev)
corrupted:
ib::error() << "Not applying DELETE_ROW_FORMAT_REDUNDANT"
" due to corruption on " << block.page.id;
- return;
+ return true;
}
byte *slot= page_dir_get_nth_slot(block.frame, n_slots - 1);
@@ -2145,6 +2829,7 @@ corrupted:
page_dir_balance_slot(block, (first_slot - slot) / 2);
ut_ad(page_simple_validate_old(block.frame));
+ return false;
}
/** Apply a DELETE_ROW_FORMAT_DYNAMIC record that was written by
@@ -2152,8 +2837,9 @@ page_cur_delete_rec() for a ROW_FORMAT=COMPACT or DYNAMIC page.
@param block B-tree or R-tree page in ROW_FORMAT=COMPACT or DYNAMIC
@param prev byte offset of the predecessor, relative to PAGE_NEW_INFIMUM
@param hdr_size record header size, excluding REC_N_NEW_EXTRA_BYTES
-@param data_size data payload size, in bytes */
-void page_apply_delete_dynamic(const buf_block_t &block, ulint prev,
+@param data_size data payload size, in bytes
+@return whether the operation failed (inconcistency was noticed) */
+bool page_apply_delete_dynamic(const buf_block_t &block, ulint prev,
size_t hdr_size, size_t data_size)
{
const uint16_t n_slots= page_dir_get_n_slots(block.frame);
@@ -2170,7 +2856,7 @@ void page_apply_delete_dynamic(const buf_block_t &block, ulint prev,
corrupted:
ib::error() << "Not applying DELETE_ROW_FORMAT_DYNAMIC"
" due to corruption on " << block.page.id;
- return;
+ return true;
}
byte *slot= page_dir_get_nth_slot(block.frame, n_slots - 1);
@@ -2237,6 +2923,7 @@ corrupted:
page_dir_balance_slot(block, (first_slot - slot) / 2);
ut_ad(page_simple_validate_new(block.frame));
+ return false;
}
#ifdef UNIV_COMPILE_TEST_FUNCS
diff --git a/storage/innobase/page/page0zip.cc b/storage/innobase/page/page0zip.cc
index fa72090d651..90a443c8b20 100644
--- a/storage/innobase/page/page0zip.cc
+++ b/storage/innobase/page/page0zip.cc
@@ -37,6 +37,7 @@ Created June 2005 by Marko Makela
/** A BLOB field reference full of zero, for use in assertions and tests.
Initially, BLOB field references are set to zero, in
dtuple_convert_big_rec(). */
+alignas(UNIV_PAGE_SIZE_MIN)
const byte field_ref_zero[UNIV_PAGE_SIZE_MAX] = { 0, };
#include "mtr0log.h"
@@ -450,7 +451,7 @@ static void page_zip_compress_write_log(buf_block_t *block,
if (trailer_size)
mtr->zmemcpy(block->page, page_zip_get_size(page_zip) - trailer_size,
trailer_size);
- block->page.init_on_flush= true; /* because of mtr_t::init() */
+ block->page.status = buf_page_t::INIT_ON_FLUSH; /* because of mtr_t::init() */
}
/******************************************************//**
diff --git a/storage/innobase/rem/rem0cmp.cc b/storage/innobase/rem/rem0cmp.cc
index ea8763e671e..e5fd8fa3e76 100644
--- a/storage/innobase/rem/rem0cmp.cc
+++ b/storage/innobase/rem/rem0cmp.cc
@@ -1120,7 +1120,8 @@ cmp_rec_rec(
no need to compare the child page number. */
n_fields = std::min(rec_offs_n_fields(offsets1),
rec_offs_n_fields(offsets2));
- n_fields = std::min(n_fields, dict_index_get_n_unique_in_tree(index));
+ n_fields = std::min<ulint>(n_fields,
+ dict_index_get_n_unique_in_tree(index));
for (; cur_field < n_fields; cur_field++) {
ulint mtype;
diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc
index b72c55befb4..47b6ed73536 100644
--- a/storage/innobase/rem/rem0rec.cc
+++ b/storage/innobase/rem/rem0rec.cc
@@ -2676,8 +2676,9 @@ wsrep_rec_get_foreign_key(
memcpy(buf, data, len);
*buf_len = wsrep_innobase_mysql_sort(
(int)(col_f->prtype & DATA_MYSQL_TYPE_MASK),
- (uint)dtype_get_charset_coll(col_f->prtype),
- buf, len, *buf_len);
+ dtype_get_charset_coll(col_f->prtype),
+ buf, static_cast<uint>(len),
+ static_cast<uint>(*buf_len));
} else { /* new protocol */
if (!(col_r->prtype & DATA_NOT_NULL)) {
*buf++ = 0;
@@ -2710,9 +2711,9 @@ wsrep_rec_get_foreign_key(
len = wsrep_innobase_mysql_sort(
(int)
(col_f->prtype & DATA_MYSQL_TYPE_MASK),
- (uint)
dtype_get_charset_coll(col_f->prtype),
- buf, len, *buf_len);
+ buf, static_cast<uint>(len),
+ static_cast<uint>(*buf_len));
break;
case DATA_BLOB:
case DATA_BINARY:
diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc
index d8600764dc9..e59b380029d 100644
--- a/storage/innobase/row/row0ftsort.cc
+++ b/storage/innobase/row/row0ftsort.cc
@@ -635,7 +635,7 @@ row_merge_fts_doc_tokenize(
field->type.mtype = DATA_INT;
field->type.prtype = DATA_NOT_NULL | DATA_BINARY_TYPE;
- field->type.len = len;
+ field->type.len = field->len;
field->type.mbminlen = 0;
field->type.mbmaxlen = 0;
@@ -659,7 +659,7 @@ row_merge_fts_doc_tokenize(
field->type.mtype = DATA_INT;
field->type.prtype = DATA_NOT_NULL;
- field->type.len = len;
+ field->type.len = 4;
field->type.mbminlen = 0;
field->type.mbmaxlen = 0;
cur_len += len;
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index fa2198fafcd..dcf96179158 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -1392,7 +1392,7 @@ row_import::set_root_by_name() UNIV_NOTHROW
/* We've already checked that it exists. */
ut_a(index != 0);
- index->page = cfg_index->m_page_no;
+ index->page = static_cast<uint32_t>(cfg_index->m_page_no);
}
}
@@ -1451,9 +1451,8 @@ row_import::set_root_by_heuristic() UNIV_NOTHROW
cfg_index[i].m_srv_index = index;
- index->page = cfg_index[i].m_page_no;
-
- ++i;
+ index->page = static_cast<uint32_t>(
+ cfg_index[i++].m_page_no);
}
}
@@ -2445,7 +2444,7 @@ row_import_cfg_read_string(
break;
} else if (ch != 0) {
if (len < max_len) {
- ptr[len++] = ch;
+ ptr[len++] = static_cast<byte>(ch);
} else {
break;
}
@@ -2825,12 +2824,12 @@ row_import_read_columns(
col->len = mach_read_from_4(ptr);
ptr += sizeof(ib_uint32_t);
- ulint mbminmaxlen = mach_read_from_4(ptr);
+ uint32_t mbminmaxlen = mach_read_from_4(ptr);
col->mbmaxlen = mbminmaxlen / 5;
col->mbminlen = mbminmaxlen % 5;
ptr += sizeof(ib_uint32_t);
- col->ind = mach_read_from_4(ptr);
+ col->ind = mach_read_from_4(ptr) & dict_index_t::MAX_N_FIELDS;
ptr += sizeof(ib_uint32_t);
col->ord_part = mach_read_from_4(ptr);
diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc
index 735bd4517a1..16158032e19 100644
--- a/storage/innobase/row/row0ins.cc
+++ b/storage/innobase/row/row0ins.cc
@@ -483,7 +483,7 @@ row_ins_cascade_calc_update_vec(
ulint i;
ulint j;
bool doc_id_updated = false;
- ulint doc_id_pos = 0;
+ unsigned doc_id_pos = 0;
doc_id_t new_doc_id = FTS_NULL_DOC_ID;
ulint prefix_col;
@@ -540,10 +540,9 @@ row_ins_cascade_calc_update_vec(
ufield = update->fields + n_fields_updated;
- ufield->field_no
- = dict_table_get_nth_col_pos(
- table, dict_col_get_no(col),
- &prefix_col);
+ ufield->field_no = dict_table_get_nth_col_pos(
+ table, dict_col_get_no(col),
+ &prefix_col);
ufield->orig_len = 0;
ufield->exp = NULL;
@@ -1487,7 +1486,7 @@ static
dberr_t
row_ins_set_shared_rec_lock(
/*========================*/
- ulint type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP type lock */
const buf_block_t* block, /*!< in: buffer block of rec */
const rec_t* rec, /*!< in: record */
@@ -1518,7 +1517,7 @@ static
dberr_t
row_ins_set_exclusive_rec_lock(
/*===========================*/
- ulint type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOCK_REC_NOT_GAP type lock */
const buf_block_t* block, /*!< in: buffer block of rec */
const rec_t* rec, /*!< in: record */
diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc
index 0fd3f840fcf..8559db3384b 100644
--- a/storage/innobase/row/row0log.cc
+++ b/storage/innobase/row/row0log.cc
@@ -970,7 +970,7 @@ row_log_table_low(
ut_ad(page_get_page_no(page_align(rec)) == index->page);
break;
default:
- ut_ad(!"wrong page type");
+ ut_ad("wrong page type" == 0);
}
#endif /* UNIV_DEBUG */
ut_ad(!rec_is_metadata(rec, *index));
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index 044a974f253..050d79abc21 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -125,8 +125,7 @@ public:
ut_ad(mtr_started == scan_mtr->is_active());
DBUG_EXECUTE_IF("row_merge_instrument_log_check_flush",
- log_sys.check_flush_or_checkpoint = true;
- );
+ log_sys.set_check_flush_or_checkpoint(););
for (idx_tuple_vec::iterator it = m_dtuple_vec->begin();
it != m_dtuple_vec->end();
@@ -134,7 +133,7 @@ public:
dtuple = *it;
ut_ad(dtuple);
- if (log_sys.check_flush_or_checkpoint) {
+ if (log_sys.check_flush_or_checkpoint()) {
if (mtr_started) {
btr_pcur_move_to_prev_on_page(pcur);
btr_pcur_store_position(pcur, scan_mtr);
@@ -365,8 +364,7 @@ row_merge_buf_create(
mem_heap_t* heap;
max_tuples = srv_sort_buf_size
- / ut_max(static_cast<ulint>(1),
- dict_index_get_min_size(index));
+ / std::max<ulint>(1, dict_index_get_min_size(index));
buf_size = (sizeof *buf);
@@ -2713,7 +2711,8 @@ write_buffers:
/* Update progress for each 1000 rows */
curr_progress = (read_rows >= table_total_rows) ?
pct_cost :
- ((pct_cost * read_rows) / table_total_rows);
+ pct_cost * static_cast<double>(read_rows)
+ / static_cast<double>(table_total_rows);
/* presenting 10.12% as 1012 integer */
onlineddl_pct_progress = (ulint) (curr_progress * 100);
}
@@ -3345,7 +3344,8 @@ row_merge_sort(
merge_count++;
curr_progress = (merge_count >= total_merge_sort_count) ?
pct_cost :
- ((pct_cost * merge_count) / total_merge_sort_count);
+ pct_cost * static_cast<double>(merge_count)
+ / static_cast<double>(total_merge_sort_count);
/* presenting 10.12% as 1012 integer */;
onlineddl_pct_progress = (ulint) ((pct_progress + curr_progress) * 100);
}
@@ -3643,7 +3643,8 @@ row_merge_insert_index_tuples(
curr_progress = (inserted_rows >= table_total_rows ||
table_total_rows <= 0) ?
pct_cost :
- ((pct_cost * inserted_rows) / table_total_rows);
+ pct_cost * static_cast<double>(inserted_rows)
+ / static_cast<double>(table_total_rows);
/* presenting 10.12% as 1012 integer */;
onlineddl_pct_progress = (ulint) ((pct_progress + curr_progress) * 100);
@@ -4040,15 +4041,15 @@ row_merge_file_create_low(
#ifdef WITH_INNODB_DISALLOW_WRITES
os_event_wait(srv_allow_writes_event);
#endif /* WITH_INNODB_DISALLOW_WRITES */
+ if (!path) {
+ path = mysql_tmpdir;
+ }
#ifdef UNIV_PFS_IO
/* This temp file open does not go through normal
file APIs, add instrumentation to register with
performance schema */
struct PSI_file_locker* locker;
PSI_file_locker_state state;
- if (!path) {
- path = mysql_tmpdir;
- }
static const char label[] = "/Innodb Merge Temp File";
char* name = static_cast<char*>(
ut_malloc_nokey(strlen(path) + sizeof label));
@@ -4250,121 +4251,6 @@ row_make_new_pathname(
new_name);
}
-/*********************************************************************//**
-Rename the tables in the data dictionary. The data dictionary must
-have been locked exclusively by the caller, because the transaction
-will not be committed.
-@return error code or DB_SUCCESS */
-dberr_t
-row_merge_rename_tables_dict(
-/*=========================*/
- dict_table_t* old_table, /*!< in/out: old table, renamed to
- tmp_name */
- dict_table_t* new_table, /*!< in/out: new table, renamed to
- old_table->name */
- const char* tmp_name, /*!< in: new name for old_table */
- trx_t* trx) /*!< in/out: dictionary transaction */
-{
- dberr_t err = DB_ERROR;
- pars_info_t* info;
-
- ut_ad(!srv_read_only_mode);
- ut_ad(old_table != new_table);
- ut_d(dict_sys.assert_locked());
- ut_a(trx->dict_operation_lock_mode == RW_X_LATCH);
- ut_ad(trx_get_dict_operation(trx) == TRX_DICT_OP_TABLE
- || trx_get_dict_operation(trx) == TRX_DICT_OP_INDEX);
-
- trx->op_info = "renaming tables";
-
- /* We use the private SQL parser of Innobase to generate the query
- graphs needed in updating the dictionary data in system tables. */
-
- info = pars_info_create();
-
- pars_info_add_str_literal(info, "new_name", new_table->name.m_name);
- pars_info_add_str_literal(info, "old_name", old_table->name.m_name);
- pars_info_add_str_literal(info, "tmp_name", tmp_name);
-
- err = que_eval_sql(info,
- "PROCEDURE RENAME_TABLES () IS\n"
- "BEGIN\n"
- "UPDATE SYS_TABLES SET NAME = :tmp_name\n"
- " WHERE NAME = :old_name;\n"
- "UPDATE SYS_TABLES SET NAME = :old_name\n"
- " WHERE NAME = :new_name;\n"
- "END;\n", FALSE, trx);
-
- /* Update SYS_TABLESPACES and SYS_DATAFILES if the old table being
- renamed is a single-table tablespace, which must be implicitly
- renamed along with the table. */
- if (err == DB_SUCCESS
- && old_table->space_id) {
- /* Make pathname to update SYS_DATAFILES. */
- char* tmp_path = row_make_new_pathname(old_table, tmp_name);
-
- info = pars_info_create();
-
- pars_info_add_str_literal(info, "tmp_name", tmp_name);
- pars_info_add_str_literal(info, "tmp_path", tmp_path);
- pars_info_add_int4_literal(info, "old_space",
- old_table->space_id);
-
- err = que_eval_sql(info,
- "PROCEDURE RENAME_OLD_SPACE () IS\n"
- "BEGIN\n"
- "UPDATE SYS_TABLESPACES"
- " SET NAME = :tmp_name\n"
- " WHERE SPACE = :old_space;\n"
- "UPDATE SYS_DATAFILES"
- " SET PATH = :tmp_path\n"
- " WHERE SPACE = :old_space;\n"
- "END;\n", FALSE, trx);
-
- ut_free(tmp_path);
- }
-
- /* Update SYS_TABLESPACES and SYS_DATAFILES if the new table being
- renamed is a single-table tablespace, which must be implicitly
- renamed along with the table. */
- if (err == DB_SUCCESS
- && dict_table_is_file_per_table(new_table)) {
- /* Make pathname to update SYS_DATAFILES. */
- char* old_path = row_make_new_pathname(
- new_table, old_table->name.m_name);
-
- info = pars_info_create();
-
- pars_info_add_str_literal(info, "old_name",
- old_table->name.m_name);
- pars_info_add_str_literal(info, "old_path", old_path);
- pars_info_add_int4_literal(info, "new_space",
- new_table->space_id);
-
- err = que_eval_sql(info,
- "PROCEDURE RENAME_NEW_SPACE () IS\n"
- "BEGIN\n"
- "UPDATE SYS_TABLESPACES"
- " SET NAME = :old_name\n"
- " WHERE SPACE = :new_space;\n"
- "UPDATE SYS_DATAFILES"
- " SET PATH = :old_path\n"
- " WHERE SPACE = :new_space;\n"
- "END;\n", FALSE, trx);
-
- ut_free(old_path);
- }
-
- if (err == DB_SUCCESS && (new_table->flags2 & DICT_TF2_DISCARDED)) {
- err = row_import_update_discarded_flag(
- trx, new_table->id, true);
- }
-
- trx->op_info = "";
-
- return(err);
-}
-
/** Create the index and load in to the dictionary.
@param[in,out] table the index is on this table
@param[in] index_def the index definition
@@ -4593,8 +4479,10 @@ row_merge_build_indexes(
merge_files[i].n_rec = 0;
}
- total_static_cost = COST_BUILD_INDEX_STATIC * n_indexes + COST_READ_CLUSTERED_INDEX;
- total_dynamic_cost = COST_BUILD_INDEX_DYNAMIC * n_indexes;
+ total_static_cost = COST_BUILD_INDEX_STATIC
+ * static_cast<double>(n_indexes) + COST_READ_CLUSTERED_INDEX;
+ total_dynamic_cost = COST_BUILD_INDEX_DYNAMIC
+ * static_cast<double>(n_indexes);
for (i = 0; i < n_indexes; i++) {
if (indexes[i]->type & DICT_FTS) {
ibool opt_doc_id_size = FALSE;
@@ -4717,9 +4605,10 @@ row_merge_build_indexes(
sort_idx, table, col_map, 0};
pct_cost = (COST_BUILD_INDEX_STATIC +
- (total_dynamic_cost * merge_files[k].offset /
- total_index_blocks)) /
- (total_static_cost + total_dynamic_cost)
+ (total_dynamic_cost
+ * static_cast<double>(merge_files[k].offset)
+ / static_cast<double>(total_index_blocks)))
+ / (total_static_cost + total_dynamic_cost)
* PCT_COST_MERGESORT_INDEX * 100;
char* bufend = innobase_convert_name(
buf, sizeof buf,
@@ -4766,10 +4655,14 @@ row_merge_build_indexes(
BtrBulk btr_bulk(sort_idx, trx);
pct_cost = (COST_BUILD_INDEX_STATIC +
- (total_dynamic_cost * merge_files[k].offset /
- total_index_blocks)) /
- (total_static_cost + total_dynamic_cost) *
- PCT_COST_INSERT_INDEX * 100;
+ (total_dynamic_cost
+ * static_cast<double>(
+ merge_files[k].offset)
+ / static_cast<double>(
+ total_index_blocks)))
+ / (total_static_cost
+ + total_dynamic_cost)
+ * PCT_COST_INSERT_INDEX * 100;
if (global_system_variables.log_warnings > 2) {
sql_print_information(
diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc
index 5cc02dff1e2..ce52b01d01e 100644
--- a/storage/innobase/row/row0mysql.cc
+++ b/storage/innobase/row/row0mysql.cc
@@ -1920,7 +1920,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
&& trx->fts_next_doc_id != UINT64_UNDEFINED) {
err = row_fts_update_or_delete(prebuilt);
if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
- ut_ad(!"unexpected error");
+ ut_ad("unexpected error" == 0);
goto error;
}
}
@@ -4544,13 +4544,16 @@ end:
}
/* We only want to switch off some of the type checking in
- an ALTER TABLE...ALGORITHM=COPY, not in a RENAME. */
+ an ALTER TABLE, not in a RENAME. */
dict_names_t fk_tables;
err = dict_load_foreigns(
- new_name, NULL,
- false, !old_is_tmp || trx->check_foreigns,
- DICT_ERR_IGNORE_NONE, fk_tables);
+ new_name, NULL, false,
+ !old_is_tmp || trx->check_foreigns,
+ use_fk
+ ? DICT_ERR_IGNORE_NONE
+ : DICT_ERR_IGNORE_FK_NOKEY,
+ fk_tables);
if (err != DB_SUCCESS) {
@@ -4569,8 +4572,6 @@ end:
" with the new table definition.";
}
- ut_a(DB_SUCCESS == dict_table_rename_in_cache(
- table, old_name, FALSE));
trx->error_state = DB_SUCCESS;
trx_rollback_to_savepoint(trx, NULL);
trx->error_state = DB_SUCCESS;
diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc
index c247bd037e2..58b84528949 100644
--- a/storage/innobase/row/row0purge.cc
+++ b/storage/innobase/row/row0purge.cc
@@ -907,7 +907,7 @@ row_purge_parse_undo_rec(
break;
default:
#ifdef UNIV_DEBUG
- ut_ad(!"unknown undo log record type");
+ ut_ad("unknown undo log record type" == 0);
return false;
case TRX_UNDO_UPD_DEL_REC:
case TRX_UNDO_UPD_EXIST_REC:
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index c91f2cc333c..564858e6668 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -958,25 +958,17 @@ row_sel_get_clust_rec(
if (!node->read_view) {
/* Try to place a lock on the index record */
- ulint lock_type;
- trx_t* trx;
-
- trx = thr_get_trx(thr);
+ trx_t* trx = thr_get_trx(thr);
/* At READ UNCOMMITTED or READ COMMITTED isolation level
we lock only the record, i.e., next-key locking is
not used. */
- if (trx->isolation_level <= TRX_ISO_READ_COMMITTED) {
- lock_type = LOCK_REC_NOT_GAP;
- } else {
- lock_type = LOCK_ORDINARY;
- }
-
err = lock_clust_rec_read_check_and_lock(
0, btr_pcur_get_block(&plan->clust_pcur),
clust_rec, index, offsets,
- static_cast<lock_mode>(node->row_lock_mode),
- lock_type,
+ node->row_lock_mode,
+ trx->isolation_level <= TRX_ISO_READ_COMMITTED
+ ? LOCK_REC_NOT_GAP : LOCK_ORDINARY,
thr);
switch (err) {
@@ -1069,8 +1061,8 @@ sel_set_rtr_rec_lock(
const rec_t* first_rec,/*!< in: record */
dict_index_t* index, /*!< in: index */
const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */
- ulint mode, /*!< in: lock mode */
- ulint type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned mode, /*!< in: lock mode */
+ unsigned type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOC_REC_NOT_GAP */
que_thr_t* thr, /*!< in: query thread */
mtr_t* mtr) /*!< in: mtr */
@@ -1235,8 +1227,8 @@ sel_set_rec_lock(
const rec_t* rec, /*!< in: record */
dict_index_t* index, /*!< in: index */
const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */
- ulint mode, /*!< in: lock mode */
- ulint type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
+ unsigned mode, /*!< in: lock mode */
+ unsigned type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or
LOC_REC_NOT_GAP */
que_thr_t* thr, /*!< in: query thread */
mtr_t* mtr) /*!< in: mtr */
@@ -1727,7 +1719,7 @@ rec_loop:
if (!consistent_read) {
rec_t* next_rec = page_rec_get_next(rec);
- ulint lock_type;
+ unsigned lock_type;
trx_t* trx;
trx = thr_get_trx(thr);
@@ -1790,7 +1782,7 @@ skip_lock:
if (!consistent_read) {
/* Try to place a lock on the index record */
- ulint lock_type;
+ unsigned lock_type;
trx_t* trx;
offsets = rec_get_offsets(rec, index, offsets, true,
@@ -3379,7 +3371,7 @@ Row_sel_get_clust_rec_for_mysql::operator()(
err = lock_clust_rec_read_check_and_lock(
0, btr_pcur_get_block(prebuilt->clust_pcur),
clust_rec, clust_index, *offsets,
- static_cast<lock_mode>(prebuilt->select_lock_type),
+ prebuilt->select_lock_type,
LOCK_REC_NOT_GAP,
thr);
@@ -4911,7 +4903,7 @@ wrong_offs:
is a non-delete marked record, then it is enough to lock its
existence with LOCK_REC_NOT_GAP. */
- ulint lock_type;
+ unsigned lock_type;
if (trx->isolation_level <= TRX_ISO_READ_COMMITTED) {
/* At READ COMMITTED or READ UNCOMMITTED
diff --git a/storage/innobase/row/row0uins.cc b/storage/innobase/row/row0uins.cc
index 701f11992e1..96ba4ae8a9b 100644
--- a/storage/innobase/row/row0uins.cc
+++ b/storage/innobase/row/row0uins.cc
@@ -379,7 +379,7 @@ static bool row_undo_ins_parse_undo_rec(undo_node_t* node, bool dict_locked)
switch (node->rec_type) {
default:
- ut_ad(!"wrong undo record type");
+ ut_ad("wrong undo record type" == 0);
goto close_table;
case TRX_UNDO_INSERT_METADATA:
case TRX_UNDO_INSERT_REC:
@@ -536,7 +536,7 @@ row_undo_ins(
switch (node->rec_type) {
default:
- ut_ad(!"wrong undo record type");
+ ut_ad("wrong undo record type" == 0);
/* fall through */
case TRX_UNDO_INSERT_REC:
/* Skip the clustered index (the first index) */
diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc
index f2e2e4e70d9..cc5ac98937f 100644
--- a/storage/innobase/row/row0umod.cc
+++ b/storage/innobase/row/row0umod.cc
@@ -1269,7 +1269,7 @@ close_table:
if (node->update->info_bits & REC_INFO_MIN_REC_FLAG) {
if ((node->update->info_bits & ~REC_INFO_DELETED_FLAG)
!= REC_INFO_MIN_REC_FLAG) {
- ut_ad(!"wrong info_bits in undo log record");
+ ut_ad("wrong info_bits in undo log record" == 0);
goto close_table;
}
/* This must be an undo log record for a subsequent
diff --git a/storage/innobase/row/row0undo.cc b/storage/innobase/row/row0undo.cc
index 9bf90f0c3c5..a9682d00ae5 100644
--- a/storage/innobase/row/row0undo.cc
+++ b/storage/innobase/row/row0undo.cc
@@ -435,7 +435,7 @@ row_undo(
err = row_undo_mod(node, thr);
break;
default:
- ut_ad(!"wrong state");
+ ut_ad("wrong state" == 0);
err = DB_CORRUPTION;
}
diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc
index f17c3eb582b..1bd14280c8b 100644
--- a/storage/innobase/row/row0upd.cc
+++ b/storage/innobase/row/row0upd.cc
@@ -1203,15 +1203,12 @@ row_upd_replace_vcol(
ptr += 2;
while (ptr != end_ptr) {
- const byte* field;
- ulint field_no;
- ulint len;
- ulint orig_len;
- bool is_v;
+ const byte* field;
+ uint32_t field_no, len, orig_len;
field_no = mach_read_next_compressed(&ptr);
- is_v = (field_no >= REC_MAX_N_FIELDS);
+ const bool is_v = (field_no >= REC_MAX_N_FIELDS);
if (is_v) {
ptr = trx_undo_read_v_idx(
@@ -1223,7 +1220,7 @@ row_upd_replace_vcol(
ptr = trx_undo_rec_get_col_val(
ptr, &field, &len, &orig_len);
- if (field_no == ULINT_UNDEFINED) {
+ if (field_no == FIL_NULL) {
ut_ad(is_v);
continue;
}
diff --git a/storage/innobase/srv/srv0conc.cc b/storage/innobase/srv/srv0conc.cc
index 157c2688c33..09159815d2b 100644
--- a/storage/innobase/srv/srv0conc.cc
+++ b/storage/innobase/srv/srv0conc.cc
@@ -88,7 +88,8 @@ srv_enter_innodb_with_tickets(
to enter InnoDB */
{
trx->declared_to_be_inside_innodb = TRUE;
- trx->n_tickets_to_enter_innodb = srv_n_free_tickets_to_enter;
+ trx->n_tickets_to_enter_innodb = static_cast<uint32_t>(
+ srv_n_free_tickets_to_enter);
}
/*********************************************************************//**
diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc
index 8397d3a8ea3..f34680b9aed 100644
--- a/storage/innobase/srv/srv0mon.cc
+++ b/storage/innobase/srv/srv0mon.cc
@@ -889,7 +889,8 @@ static monitor_info_t innodb_counter_info[] =
{"log_lsn_checkpoint_age", "recovery",
"Current LSN value minus LSN at last checkpoint",
- MONITOR_NONE,
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DISPLAY_CURRENT),
MONITOR_DEFAULT_START, MONITOR_LSN_CHECKPOINT_AGE},
{"log_lsn_buf_pool_oldest", "recovery",
@@ -1968,17 +1969,16 @@ srv_mon_process_existing_counter(
break;
case MONITOR_OVLD_LSN_FLUSHDISK:
- value = (mon_type_t) log_sys.flushed_to_disk_lsn;
+ value = log_sys.get_flushed_lsn();
break;
case MONITOR_OVLD_LSN_CURRENT:
- value = (mon_type_t) log_sys.lsn;
+ value = log_sys.get_lsn();
break;
case MONITOR_PENDING_LOG_FLUSH:
- mutex_enter(&log_sys.mutex);
- value = static_cast<mon_type_t>(log_sys.n_pending_flushes);
- mutex_exit(&log_sys.mutex);
+ value = static_cast<mon_type_t>(log_sys.pending_flushes);
+
break;
case MONITOR_PENDING_CHECKPOINT_WRITE:
@@ -1994,6 +1994,13 @@ srv_mon_process_existing_counter(
mutex_exit(&log_sys.mutex);
break;
+ case MONITOR_LSN_CHECKPOINT_AGE:
+ mutex_enter(&log_sys.mutex);
+ value = static_cast<mon_type_t>(log_sys.get_lsn()
+ - log_sys.last_checkpoint_lsn);
+ mutex_exit(&log_sys.mutex);
+ break;
+
case MONITOR_OVLD_BUF_OLDEST_LSN:
value = (mon_type_t) buf_pool_get_oldest_modification();
break;
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc
index ca66ab453ed..6b6506a8b01 100644
--- a/storage/innobase/srv/srv0srv.cc
+++ b/storage/innobase/srv/srv0srv.cc
@@ -43,8 +43,8 @@ Created 10/8/1995 Heikki Tuuri
// JAN: TODO: MySQL 5.7 missing header
//#include "my_thread.h"
//
-// #include "mysql/psi/mysql_stage.h"
-// #include "mysql/psi/psi.h"
+#include "mysql/psi/mysql_stage.h"
+#include "mysql/psi/psi.h"
#include "btr0sea.h"
#include "buf0flu.h"
@@ -72,7 +72,6 @@ Created 10/8/1995 Heikki Tuuri
#include "fil0fil.h"
#include "fil0crypt.h"
#include "fil0pagecompress.h"
-#include "btr0scrub.h"
#include <my_service_manager.h>
@@ -84,8 +83,6 @@ UNIV_INTERN ulong srv_fatal_semaphore_wait_threshold = DEFAULT_SRV_FATAL_SEMAPH
in microseconds, in order to reduce the lagging of the purge thread. */
ulint srv_dml_needed_delay;
-my_bool srv_scrub_log;
-
const char* srv_main_thread_op_info = "";
/** Prefix used by MySQL to indicate pre-5.1 table name encoding */
@@ -279,8 +276,8 @@ double srv_adaptive_flushing_lwm;
adaptive flushing is averaged */
ulong srv_flushing_avg_loops;
-/** innodb_purge_threads; the number of purge threads to use */
-ulong srv_n_purge_threads;
+/** innodb_purge_threads; the number of purge tasks to use */
+uint srv_n_purge_threads;
/** innodb_purge_batch_size, in pages */
ulong srv_purge_batch_size;
@@ -405,6 +402,8 @@ my_bool srv_force_primary_key;
/** Key version to encrypt the temporary tablespace */
my_bool innodb_encrypt_temporary_tables;
+my_bool srv_immediate_scrub_data_uncompressed;
+
/* Array of English strings describing the current state of an
i/o handler thread */
@@ -996,15 +995,15 @@ srv_printf_innodb_monitor(
fprintf(file,
"%.2f hash searches/s, %.2f non-hash searches/s\n",
- (btr_cur_n_sea - btr_cur_n_sea_old)
+ static_cast<double>(btr_cur_n_sea - btr_cur_n_sea_old)
/ time_elapsed,
- (btr_cur_n_non_sea - btr_cur_n_non_sea_old)
+ static_cast<double>(btr_cur_n_non_sea - btr_cur_n_non_sea_old)
/ time_elapsed);
btr_cur_n_sea_old = btr_cur_n_sea;
#else /* BTR_CUR_HASH_ADAPT */
fprintf(file,
"%.2f non-hash searches/s\n",
- (btr_cur_n_non_sea - btr_cur_n_non_sea_old)
+ static_cast<double>(btr_cur_n_non_sea - btr_cur_n_non_sea_old)
/ time_elapsed);
#endif /* BTR_CUR_HASH_ADAPT */
btr_cur_n_non_sea_old = btr_cur_n_non_sea;
@@ -1063,13 +1062,17 @@ srv_printf_innodb_monitor(
fprintf(file,
"%.2f inserts/s, %.2f updates/s,"
" %.2f deletes/s, %.2f reads/s\n",
- ((ulint) srv_stats.n_rows_inserted - srv_n_rows_inserted_old)
+ static_cast<double>(srv_stats.n_rows_inserted
+ - srv_n_rows_inserted_old)
/ time_elapsed,
- ((ulint) srv_stats.n_rows_updated - srv_n_rows_updated_old)
+ static_cast<double>(srv_stats.n_rows_updated
+ - srv_n_rows_updated_old)
/ time_elapsed,
- ((ulint) srv_stats.n_rows_deleted - srv_n_rows_deleted_old)
+ static_cast<double>(srv_stats.n_rows_deleted
+ - srv_n_rows_deleted_old)
/ time_elapsed,
- ((ulint) srv_stats.n_rows_read - srv_n_rows_read_old)
+ static_cast<double>(srv_stats.n_rows_read
+ - srv_n_rows_read_old)
/ time_elapsed);
fprintf(file,
"Number of system rows inserted " ULINTPF
@@ -1082,14 +1085,18 @@ srv_printf_innodb_monitor(
fprintf(file,
"%.2f inserts/s, %.2f updates/s,"
" %.2f deletes/s, %.2f reads/s\n",
- ((ulint) srv_stats.n_system_rows_inserted
- - srv_n_system_rows_inserted_old) / time_elapsed,
- ((ulint) srv_stats.n_system_rows_updated
- - srv_n_system_rows_updated_old) / time_elapsed,
- ((ulint) srv_stats.n_system_rows_deleted
- - srv_n_system_rows_deleted_old) / time_elapsed,
- ((ulint) srv_stats.n_system_rows_read
- - srv_n_system_rows_read_old) / time_elapsed);
+ static_cast<double>(srv_stats.n_system_rows_inserted
+ - srv_n_system_rows_inserted_old)
+ / time_elapsed,
+ static_cast<double>(srv_stats.n_system_rows_updated
+ - srv_n_system_rows_updated_old)
+ / time_elapsed,
+ static_cast<double>(srv_stats.n_system_rows_deleted
+ - srv_n_system_rows_deleted_old)
+ / time_elapsed,
+ static_cast<double>(srv_stats.n_system_rows_read
+ - srv_n_system_rows_read_old)
+ / time_elapsed);
srv_n_rows_inserted_old = srv_stats.n_rows_inserted;
srv_n_rows_updated_old = srv_stats.n_rows_updated;
srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
@@ -1115,11 +1122,9 @@ srv_export_innodb_status(void)
/*==========================*/
{
fil_crypt_stat_t crypt_stat;
- btr_scrub_stat_t scrub_stat;
if (!srv_read_only_mode) {
fil_crypt_total_stat(&crypt_stat);
- btr_scrub_total_stat(&scrub_stat);
}
#ifdef BTR_CUR_HASH_ADAPT
@@ -1348,35 +1353,21 @@ srv_export_innodb_status(void)
srv_stats.n_key_requests;
export_vars.innodb_key_rotation_list_length =
srv_stats.key_rotation_list_length;
-
- export_vars.innodb_scrub_page_reorganizations =
- scrub_stat.page_reorganizations;
- export_vars.innodb_scrub_page_splits =
- scrub_stat.page_splits;
- export_vars.innodb_scrub_page_split_failures_underflow =
- scrub_stat.page_split_failures_underflow;
- export_vars.innodb_scrub_page_split_failures_out_of_filespace =
- scrub_stat.page_split_failures_out_of_filespace;
- export_vars.innodb_scrub_page_split_failures_missing_index =
- scrub_stat.page_split_failures_missing_index;
- export_vars.innodb_scrub_page_split_failures_unknown =
- scrub_stat.page_split_failures_unknown;
- export_vars.innodb_scrub_log = srv_stats.n_log_scrubs;
}
mutex_exit(&srv_innodb_monitor_mutex);
log_mutex_enter();
-
- export_vars.innodb_lsn_current = log_sys.lsn;
- export_vars.innodb_lsn_flushed = log_sys.flushed_to_disk_lsn;
+ export_vars.innodb_lsn_current = log_sys.get_lsn();
+ export_vars.innodb_lsn_flushed = log_sys.get_flushed_lsn();
export_vars.innodb_lsn_last_checkpoint = log_sys.last_checkpoint_lsn;
- export_vars.innodb_checkpoint_age = static_cast<ulint>(
- log_sys.lsn - log_sys.last_checkpoint_lsn);
export_vars.innodb_checkpoint_max_age = static_cast<ulint>(
log_sys.max_checkpoint_age);
-
log_mutex_exit();
+
+ export_vars.innodb_checkpoint_age = static_cast<ulint>(
+ export_vars.innodb_lsn_current
+ - export_vars.innodb_lsn_last_checkpoint);
}
struct srv_monitor_state_t
@@ -1462,8 +1453,7 @@ void srv_error_monitor_task(void*)
{
/* number of successive fatal timeouts observed */
static ulint fatal_cnt;
- static lsn_t old_lsn = srv_start_lsn;
- lsn_t new_lsn;
+ static lsn_t old_lsn = recv_sys.recovered_lsn;
/* longest waiting thread for a semaphore */
os_thread_id_t waiter;
static os_thread_id_t old_waiter = os_thread_get_curr_id();
@@ -1476,18 +1466,17 @@ void srv_error_monitor_task(void*)
/* Try to track a strange bug reported by Harald Fuchs and others,
where the lsn seems to decrease at times */
- if (log_peek_lsn(&new_lsn)) {
- if (new_lsn < old_lsn) {
+ lsn_t new_lsn = log_sys.get_lsn();
+ if (new_lsn < old_lsn) {
ib::error() << "Old log sequence number " << old_lsn << " was"
<< " greater than the new log sequence number "
<< new_lsn << ". Please submit a bug report to"
" https://jira.mariadb.org/";
ut_ad(0);
- }
-
- old_lsn = new_lsn;
}
+ old_lsn = new_lsn;
+
/* Update the statistics collected for deciding LRU
eviction policy. */
buf_LRU_stat_update();
@@ -1686,7 +1675,7 @@ srv_sync_log_buffer_in_background(void)
srv_main_thread_op_info = "flushing log";
if (difftime(current_time, srv_last_log_flush_time)
>= srv_flush_log_at_timeout) {
- log_buffer_sync_in_background(true);
+ log_sys.initiate_write(true);
srv_last_log_flush_time = current_time;
srv_log_writes_and_flush++;
}
diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc
index b6833543f44..7ead0630e5e 100644
--- a/storage/innobase/srv/srv0start.cc
+++ b/storage/innobase/srv/srv0start.cc
@@ -100,10 +100,7 @@ Created 2/16/1996 Heikki Tuuri
#include "os0event.h"
#include "zlib.h"
#include "ut0crc32.h"
-#include "btr0scrub.h"
-/** Log sequence number immediately after startup */
-lsn_t srv_start_lsn;
/** Log sequence number at shutdown */
lsn_t srv_shutdown_lsn;
@@ -267,8 +264,9 @@ static dberr_t create_log_file(lsn_t lsn, std::string& logfile0)
DBUG_EXECUTE_IF("innodb_log_abort_6", delete_log_file("0");
return DB_ERROR;);
- delete_log_file("0");
- delete_log_file(INIT_LOG_FILE0);
+ for (size_t i = 0; i < 102; i++) {
+ delete_log_file(std::to_string(i).c_str());
+ }
DBUG_PRINT("ib_log", ("After innodb_log_abort_6"));
ut_ad(!buf_pool_check_no_pending_io());
@@ -325,26 +323,23 @@ static dberr_t create_log_file(lsn_t lsn, std::string& logfile0)
return DB_ERROR;
}
ut_d(recv_no_log_write = false);
- log_sys.lsn = ut_uint64_align_up(lsn, OS_FILE_LOG_BLOCK_SIZE);
-
- log_sys.log.set_lsn(log_sys.lsn);
+ lsn = ut_uint64_align_up(lsn, OS_FILE_LOG_BLOCK_SIZE);
+ log_sys.set_lsn(lsn + LOG_BLOCK_HDR_SIZE);
+ log_sys.log.set_lsn(lsn);
log_sys.log.set_lsn_offset(LOG_FILE_HDR_SIZE);
log_sys.buf_next_to_write = 0;
- log_sys.write_lsn = log_sys.lsn;
+ log_sys.write_lsn = lsn;
log_sys.next_checkpoint_no = 0;
log_sys.last_checkpoint_lsn = 0;
memset(log_sys.buf, 0, srv_log_buffer_size);
- log_block_init(log_sys.buf, log_sys.lsn);
+ log_block_init(log_sys.buf, lsn);
log_block_set_first_rec_group(log_sys.buf, LOG_BLOCK_HDR_SIZE);
log_sys.buf_free = LOG_BLOCK_HDR_SIZE;
- log_sys.lsn += LOG_BLOCK_HDR_SIZE;
- MONITOR_SET(MONITOR_LSN_CHECKPOINT_AGE,
- (log_sys.lsn - log_sys.last_checkpoint_lsn));
log_mutex_exit();
log_make_checkpoint();
@@ -896,10 +891,6 @@ srv_shutdown_all_bg_threads()
if (srv_n_fil_crypt_threads_started) {
os_event_set(fil_crypt_threads_event);
}
-
- if (log_scrub_thread_active) {
- os_event_set(log_scrub_event);
- }
}
if (srv_start_state_is_set(SRV_START_STATE_IO)) {
@@ -999,9 +990,9 @@ static lsn_t srv_prepare_to_delete_redo_log_file(bool old_exists)
log_mutex_enter();
- fil_names_clear(log_sys.lsn, false);
+ fil_names_clear(log_sys.get_lsn(), false);
- flushed_lsn = log_sys.lsn;
+ flushed_lsn = log_sys.get_lsn();
{
ib::info info;
@@ -1036,13 +1027,12 @@ static lsn_t srv_prepare_to_delete_redo_log_file(bool old_exists)
<< " bytes; LSN=" << flushed_lsn;
}
- srv_start_lsn = flushed_lsn;
- /* Flush the old log file. */
log_mutex_exit();
- log_write_up_to(flushed_lsn, true);
-
- log_sys.log.flush_data_only();
+ if (flushed_lsn != log_sys.get_flushed_lsn()) {
+ log_write_up_to(flushed_lsn, false);
+ log_sys.log.flush_data_only();
+ }
ut_ad(flushed_lsn == log_get_lsn());
@@ -1538,15 +1528,6 @@ file_checked:
err = recv_recovery_from_checkpoint_start(flushed_lsn);
recv_sys.close_files();
- if (recv_sys.remove_extra_log_files) {
- auto log_files_found = recv_sys.files_size();
- recv_sys.close_files();
- for (size_t i = 1; i < log_files_found; i++) {
- delete_log_file(std::to_string(i).c_str());
- }
- recv_sys.remove_extra_log_files = false;
- }
-
recv_sys.dblwr.pages.clear();
if (err != DB_SUCCESS) {
@@ -1575,7 +1556,7 @@ file_checked:
break;
case SRV_OPERATION_RESTORE_DELTA:
case SRV_OPERATION_BACKUP:
- ut_ad(!"wrong mariabackup mode");
+ ut_ad("wrong mariabackup mode" == 0);
}
if (srv_force_recovery < SRV_FORCE_NO_LOG_REDO) {
@@ -1999,7 +1980,7 @@ skip_monitors:
if (srv_print_verbose_log) {
ib::info() << INNODB_VERSION_STR
<< " started; log sequence number "
- << srv_start_lsn
+ << recv_sys.recovered_lsn
<< "; transaction id " << trx_sys.get_max_trx_id();
}
@@ -2046,7 +2027,6 @@ skip_monitors:
will flush dirty pages and that might need e.g.
fil_crypt_threads_event. */
fil_system_enter();
- btr_scrub_init();
fil_crypt_threads_init();
fil_system_exit();
@@ -2154,7 +2134,6 @@ void innodb_shutdown()
fts_optimize_shutdown(); dict_stats_shutdown(); */
fil_crypt_threads_cleanup();
- btr_scrub_cleanup();
btr_defragment_shutdown();
}
diff --git a/storage/innobase/sync/sync0arr.cc b/storage/innobase/sync/sync0arr.cc
index 9a86256fb7c..4f2f384a5ef 100644
--- a/storage/innobase/sync/sync0arr.cc
+++ b/storage/innobase/sync/sync0arr.cc
@@ -968,7 +968,8 @@ sync_array_print_long_waits_low(
const void** sema, /*!< out: longest-waited-for semaphore */
ibool* noticed)/*!< out: TRUE if long wait noticed */
{
- ulint fatal_timeout = srv_fatal_semaphore_wait_threshold;
+ double fatal_timeout = static_cast<double>(
+ srv_fatal_semaphore_wait_threshold);
ibool fatal = FALSE;
double longest_diff = 0;
ulint i;
diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc
index 3d4aba114cb..94dbbced4c7 100644
--- a/storage/innobase/sync/sync0sync.cc
+++ b/storage/innobase/sync/sync0sync.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2020, MariaDB Corporation.
Copyright (c) 2008, Google Inc.
Portions of this file contain modifications contributed and copyrighted by
@@ -143,15 +144,18 @@ sync_print_wait_info(FILE* file)
fprintf(file,
"Spin rounds per wait: %.2f RW-shared,"
" %.2f RW-excl, %.2f RW-sx\n",
- (double) rw_lock_stats.rw_s_spin_round_count /
- (rw_lock_stats.rw_s_spin_wait_count
- ? rw_lock_stats.rw_s_spin_wait_count : 1LL),
- (double) rw_lock_stats.rw_x_spin_round_count /
- (rw_lock_stats.rw_x_spin_wait_count
- ? rw_lock_stats.rw_x_spin_wait_count : 1LL),
- (double) rw_lock_stats.rw_sx_spin_round_count /
- (rw_lock_stats.rw_sx_spin_wait_count
- ? rw_lock_stats.rw_sx_spin_wait_count : 1LL));
+ rw_lock_stats.rw_s_spin_wait_count
+ ? static_cast<double>(rw_lock_stats.rw_s_spin_round_count) /
+ static_cast<double>(rw_lock_stats.rw_s_spin_wait_count)
+ : static_cast<double>(rw_lock_stats.rw_s_spin_round_count),
+ rw_lock_stats.rw_x_spin_wait_count
+ ? static_cast<double>(rw_lock_stats.rw_x_spin_round_count) /
+ static_cast<double>(rw_lock_stats.rw_x_spin_wait_count)
+ : static_cast<double>(rw_lock_stats.rw_x_spin_round_count),
+ rw_lock_stats.rw_sx_spin_wait_count
+ ? static_cast<double>(rw_lock_stats.rw_sx_spin_round_count) /
+ static_cast<double>(rw_lock_stats.rw_sx_spin_wait_count)
+ : static_cast<double>(rw_lock_stats.rw_sx_spin_round_count));
}
/**
diff --git a/storage/innobase/trx/trx0i_s.cc b/storage/innobase/trx/trx0i_s.cc
index 4f3a0281e9b..78681ab68f8 100644
--- a/storage/innobase/trx/trx0i_s.cc
+++ b/storage/innobase/trx/trx0i_s.cc
@@ -733,7 +733,7 @@ static bool fill_locks_row(
row->lock_mode = 9;
break;
default:
- ut_ad(!"unknown lock mode");
+ ut_ad("unknown lock mode" == 0);
row->lock_mode = 0;
}
diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
index fa3a3fcc951..df370d91c0b 100644
--- a/storage/innobase/trx/trx0purge.cc
+++ b/storage/innobase/trx/trx0purge.cc
@@ -687,7 +687,7 @@ not_free:
const ulint size = SRV_UNDO_TABLESPACE_SIZE_IN_PAGES;
mtr.start();
mtr_x_lock_space(purge_sys.truncate.current, &mtr);
- fil_truncate_log(purge_sys.truncate.current, size, &mtr);
+ mtr.trim_pages(page_id_t(space.id, size));
fsp_header_init(purge_sys.truncate.current, size, &mtr);
mutex_enter(&fil_system.mutex);
purge_sys.truncate.current->size = file->size = size;
@@ -1209,9 +1209,8 @@ trx_purge_dml_delay(void)
without holding trx_sys.mutex. */
if (srv_max_purge_lag > 0) {
- float ratio;
-
- ratio = float(trx_sys.rseg_history_len) / srv_max_purge_lag;
+ double ratio = static_cast<double>(trx_sys.rseg_history_len) /
+ static_cast<double>(srv_max_purge_lag);
if (ratio > 1.0) {
/* If the history list length exceeds the
diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc
index 56d61d11c99..3604b20057c 100644
--- a/storage/innobase/trx/trx0rec.cc
+++ b/storage/innobase/trx/trx0rec.cc
@@ -174,7 +174,7 @@ trx_undo_log_v_idx(
indexed, and return its position
@param[in] table the table
@param[in] ptr undo log pointer
-@param[out] col_pos the column number or ULINT_UNDEFINED
+@param[out] col_pos the column number or FIL_NULL
if the column is not indexed any more
@return remaining part of undo log record after reading these values */
static
@@ -182,12 +182,12 @@ const byte*
trx_undo_read_v_idx_low(
const dict_table_t* table,
const byte* ptr,
- ulint* col_pos)
+ uint32_t* col_pos)
{
ulint len = mach_read_from_2(ptr);
const byte* old_ptr = ptr;
- *col_pos = ULINT_UNDEFINED;
+ *col_pos = FIL_NULL;
ptr += 2;
@@ -235,7 +235,7 @@ still indexed, and output its position
check to see if this is undo log. When
first_v_col is true, is_undo_log is output,
when first_v_col is false, is_undo_log is input
-@param[in,out] field_no the column number
+@param[out] field_no the column number, or FIL_NULL if not indexed
@return remaining part of undo log record after reading these values */
const byte*
trx_undo_read_v_idx(
@@ -243,7 +243,7 @@ trx_undo_read_v_idx(
const byte* ptr,
bool first_v_col,
bool* is_undo_log,
- ulint* field_no)
+ uint32_t* field_no)
{
/* Version marker only put on the first virtual column */
if (first_v_col) {
@@ -493,8 +493,8 @@ byte*
trx_undo_rec_get_col_val(
const byte* ptr,
const byte** field,
- ulint* len,
- ulint* orig_len)
+ uint32_t* len,
+ uint32_t* orig_len)
{
*len = mach_read_next_compressed(&ptr);
*orig_len = 0;
@@ -567,8 +567,7 @@ trx_undo_rec_get_row_ref(
for (i = 0; i < ref_len; i++) {
const byte* field;
- ulint len;
- ulint orig_len;
+ uint32_t len, orig_len;
dfield_t* dfield = dtuple_get_nth_field(tuple, i);
@@ -601,8 +600,7 @@ trx_undo_rec_skip_row_ref(
for (i = 0; i < ref_len; i++) {
const byte* field;
- ulint len;
- ulint orig_len;
+ uint32_t len, orig_len;
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
}
@@ -1486,12 +1484,11 @@ trx_undo_update_rec_get_update(
/* Store then the updated ordinary columns to the update vector */
for (ulint i = 0; i < n_fields; i++) {
- const byte* field;
- ulint len;
- ulint orig_len;
+ const byte* field;
+ uint32_t len, orig_len;
upd_field = upd_get_nth_field(update, i);
- ulint field_no = mach_read_next_compressed(&ptr);
+ uint32_t field_no = mach_read_next_compressed(&ptr);
const bool is_virtual = (field_no >= REC_MAX_N_FIELDS);
@@ -1503,7 +1500,7 @@ trx_undo_update_rec_get_update(
&field_no);
first_v_col = false;
/* This column could be dropped or no longer indexed */
- if (field_no == ULINT_UNDEFINED) {
+ if (field_no == FIL_NULL) {
/* Mark this is no longer needed */
upd_field->field_no = REC_MAX_N_FIELDS;
@@ -1570,7 +1567,8 @@ trx_undo_update_rec_get_update(
field_no),
&upd_field->new_val.type);
}
- upd_field->field_no = field_no;
+ upd_field->field_no = field_no
+ & dict_index_t::MAX_N_FIELDS;
} else if (field_no < index->n_fields) {
upd_field_set_field_no(upd_field, field_no, index);
} else {
@@ -1712,15 +1710,13 @@ trx_undo_rec_get_partial_row(
while (ptr != end_ptr) {
dfield_t* dfield;
const byte* field;
- ulint field_no;
+ uint32_t field_no;
const dict_col_t* col;
- ulint len;
- ulint orig_len;
- bool is_virtual;
+ uint32_t len, orig_len;
field_no = mach_read_next_compressed(&ptr);
- is_virtual = (field_no >= REC_MAX_N_FIELDS);
+ const bool is_virtual = (field_no >= REC_MAX_N_FIELDS);
if (is_virtual) {
ptr = trx_undo_read_v_idx(
@@ -1732,7 +1728,7 @@ trx_undo_rec_get_partial_row(
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
/* This column could be dropped or no longer indexed */
- if (field_no == ULINT_UNDEFINED) {
+ if (field_no == FIL_NULL) {
ut_ad(is_virtual);
continue;
}
@@ -2484,17 +2480,14 @@ trx_undo_read_v_cols(
end_ptr = ptr + mach_read_from_2(ptr);
ptr += 2;
while (ptr < end_ptr) {
- dfield_t* dfield;
- const byte* field;
- ulint field_no;
- ulint len;
- ulint orig_len;
- bool is_virtual;
+ dfield_t* dfield;
+ const byte* field;
+ uint32_t field_no, len, orig_len;
field_no = mach_read_next_compressed(
const_cast<const byte**>(&ptr));
- is_virtual = (field_no >= REC_MAX_N_FIELDS);
+ const bool is_virtual = (field_no >= REC_MAX_N_FIELDS);
if (is_virtual) {
ptr = trx_undo_read_v_idx(
@@ -2509,7 +2502,7 @@ trx_undo_read_v_cols(
/* The virtual column is no longer indexed or does not exist.
This needs to put after trx_undo_rec_get_col_val() so the
undo ptr advances */
- if (field_no == ULINT_UNDEFINED) {
+ if (field_no == FIL_NULL) {
ut_ad(is_virtual);
continue;
}
diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc
index 17b50fca56c..4b4d71611ed 100644
--- a/storage/innobase/trx/trx0undo.cc
+++ b/storage/innobase/trx/trx0undo.cc
@@ -497,9 +497,12 @@ static uint16_t trx_undo_header_create(buf_block_t *undo_page, trx_id_t trx_id,
static void trx_undo_write_xid(buf_block_t *block, uint16_t offset,
const XID &xid, mtr_t *mtr)
{
- DBUG_ASSERT(xid.gtrid_length >= 0);
+ DBUG_ASSERT(xid.gtrid_length > 0);
DBUG_ASSERT(xid.bqual_length >= 0);
- DBUG_ASSERT(xid.gtrid_length + xid.bqual_length < XIDDATASIZE);
+ DBUG_ASSERT(xid.gtrid_length <= MAXGTRIDSIZE);
+ DBUG_ASSERT(xid.bqual_length <= MAXBQUALSIZE);
+ static_assert(MAXGTRIDSIZE + MAXBQUALSIZE == XIDDATASIZE,
+ "gtrid and bqual don't fit xid data");
DBUG_ASSERT(mach_read_from_2(TRX_UNDO_SEG_HDR + TRX_UNDO_LAST_LOG +
block->frame) == offset);
diff --git a/storage/innobase/ut/ut0crc32.cc b/storage/innobase/ut/ut0crc32.cc
index 4a6447c1dcf..3de51217d03 100644
--- a/storage/innobase/ut/ut0crc32.cc
+++ b/storage/innobase/ut/ut0crc32.cc
@@ -2,7 +2,7 @@
Copyright (c) 2009, 2010 Facebook, Inc. All Rights Reserved.
Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2016, 2018, MariaDB Corporation.
+Copyright (c) 2016, 2020, MariaDB Corporation.
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
@@ -89,71 +89,24 @@ mysys/my_perf.c, contributed by Facebook under the following license.
#include <intrin.h>
#endif
-/** Swap the byte order of an 8 byte integer.
-@param[in] i 8-byte integer
-@return 8-byte integer */
-inline
-uint64_t
-ut_crc32_swap_byteorder(
- uint64_t i)
-{
- return(i << 56
- | (i & 0x000000000000FF00ULL) << 40
- | (i & 0x0000000000FF0000ULL) << 24
- | (i & 0x00000000FF000000ULL) << 8
- | (i & 0x000000FF00000000ULL) >> 8
- | (i & 0x0000FF0000000000ULL) >> 24
- | (i & 0x00FF000000000000ULL) >> 40
- | i >> 56);
-}
-
/* CRC32 hardware implementation. */
#ifdef HAVE_CRC32_VPMSUM
-extern "C" {
+extern "C"
unsigned int crc32c_vpmsum(unsigned int crc, const unsigned char *p, unsigned long len);
-};
-UNIV_INLINE
-ib_uint32_t
-ut_crc32_power8(
-/*===========*/
- const byte* buf, /*!< in: data over which to calculate CRC32 */
- ulint len) /*!< in: data length */
-{
- return crc32c_vpmsum(0, buf, len);
-}
-
-ut_crc32_func_t ut_crc32 = ut_crc32_power8;
+ut_crc32_func_t ut_crc32_low= crc32c_vpmsum;
const char* ut_crc32_implementation = "Using POWER8 crc32 instructions";
#else
-uint32_t ut_crc32_sw(const byte* buf, ulint len);
-ut_crc32_func_t ut_crc32 = ut_crc32_sw;
-const char* ut_crc32_implementation = "Using generic crc32 instructions";
-#endif
-
-#ifdef HAVE_ARMV8_CRC
+# if defined(__GNUC__) && defined(__linux__) && defined(HAVE_ARMV8_CRC)
extern "C" {
uint32_t crc32c_aarch64(uint32_t crc, const unsigned char *buffer, uint64_t len);
-};
-static inline
-uint32_t
-ut_crc32_armv8(
- const byte* buf,
- ulint len)
-{
- return crc32c_aarch64(0, buf, len);
-}
-#endif
-
/* For runtime check */
-#if defined(__GNUC__) && defined(__linux__) && defined(HAVE_ARMV8_CRC)
-extern "C" {
unsigned int crc32c_aarch64_available(void);
};
-#endif
+# endif
-#if (defined(__GNUC__) && defined(__x86_64__)) || defined(_MSC_VER)
+# if (defined(__GNUC__) && defined(__x86_64__)) || defined(_MSC_VER)
/********************************************************************//**
Fetches CPU info */
static
@@ -168,7 +121,7 @@ ut_cpuid(
uint32_t* features_edx) /*!< out: CPU features edx */
{
uint32_t sig;
-#ifdef _MSC_VER
+# ifdef _MSC_VER
int data[4];
__cpuid(data, 0);
/* ebx */
@@ -185,12 +138,12 @@ ut_cpuid(
*features_ecx = data[2];
/* edx */
*features_edx = data[3];
-#else
+# else
asm("cpuid" : "=b" (vend[0]), "=c" (vend[2]), "=d" (vend[1]) : "a" (0));
asm("cpuid" : "=a" (sig), "=c" (*features_ecx), "=d" (*features_edx)
: "a" (1)
: "ebx");
-#endif
+# endif
*model = ((sig >> 4) & 0xF);
*family = ((sig >> 8) & 0xF);
@@ -217,15 +170,15 @@ ut_crc32_8_hw(
const byte** data,
ulint* len)
{
-#ifdef _MSC_VER
+# ifdef _MSC_VER
*crc = _mm_crc32_u8(*crc, (*data)[0]);
-#else
+# else
asm("crc32b %1, %0"
/* output operands */
: "+r" (*crc)
/* input operands */
: "rm" ((*data)[0]));
-#endif
+# endif
(*data)++;
(*len)--;
@@ -242,26 +195,41 @@ ut_crc32_64_low_hw(
uint64_t data)
{
uint64_t crc_64bit = crc;
-#ifdef _MSC_VER
-#ifdef _M_X64
+# ifdef _MSC_VER
+# ifdef _M_X64
crc_64bit = _mm_crc32_u64(crc_64bit, data);
-#elif defined(_M_IX86)
+# elif defined(_M_IX86)
crc = _mm_crc32_u32(crc, static_cast<uint32_t>(data));
crc_64bit = _mm_crc32_u32(crc, static_cast<uint32_t>(data >> 32));
-#else
-#error Not Supported processors type.
-#endif
-#else
+# else
+# error Not Supported processors type.
+# endif
+# else
asm("crc32q %1, %0"
/* output operands */
: "+r" (crc_64bit)
/* input operands */
: "rm" (data));
-#endif
+# endif
return(static_cast<uint32_t>(crc_64bit));
}
+/** Swap the byte order of an 8 byte integer.
+@param[in] i 8-byte integer
+@return 8-byte integer */
+inline uint64_t ut_crc32_swap_byteorder(uint64_t i)
+{
+ return i << 56 |
+ (i & 0x000000000000FF00ULL) << 40 |
+ (i & 0x0000000000FF0000ULL) << 24 |
+ (i & 0x00000000FF000000ULL) << 8 |
+ (i & 0x000000FF00000000ULL) >> 8 |
+ (i & 0x0000FF0000000000ULL) >> 24 |
+ (i & 0x00FF000000000000ULL) >> 40 |
+ i >> 56;
+}
+
/** Calculate CRC32 over 64-bit byte string using a hardware/CPU instruction.
@param[in,out] crc crc32 checksum so far when this function is called,
when the function ends it will contain the new checksum
@@ -277,15 +245,15 @@ ut_crc32_64_hw(
{
uint64_t data_int = *reinterpret_cast<const uint64_t*>(*data);
-#ifdef WORDS_BIGENDIAN
+# ifdef WORDS_BIGENDIAN
/* Currently we only support x86_64 (little endian) CPUs. In case
some big endian CPU supports a CRC32 instruction, then maybe we will
need a byte order swap here. */
-#error Dont know how to handle big endian CPUs
+# error Dont know how to handle big endian CPUs
/*
data_int = ut_crc32_swap_byteorder(data_int);
*/
-#endif /* WORDS_BIGENDIAN */
+# endif /* WORDS_BIGENDIAN */
*crc = ut_crc32_64_low_hw(*crc, data_int);
@@ -293,16 +261,14 @@ ut_crc32_64_hw(
*len -= 8;
}
-/** Calculates CRC32 using hardware/CPU instructions.
-@param[in] buf data over which to calculate CRC32
-@param[in] len data length
+/** Calculate CRC-32C using dedicated IA-32 or AMD64 instructions
+@param crc current checksum
+@param buf data to append to the checksum
+@param len data length in bytes
@return CRC-32C (polynomial 0x11EDC6F41) */
-uint32_t
-ut_crc32_hw(
- const byte* buf,
- ulint len)
+uint32_t ut_crc32_hw(uint32_t crc, const byte *buf, size_t len)
{
- uint32_t crc = 0xFFFFFFFFU;
+ crc = ~crc;
/* Calculate byte-by-byte up to an 8-byte aligned address. After
this consume the input 8-bytes at a time. */
@@ -379,14 +345,13 @@ ut_crc32_hw(
return(~crc);
}
-#endif /* defined(__GNUC__) && defined(__x86_64__) || (_WIN64) */
+# endif /* defined(__GNUC__) && defined(__x86_64__) || (_WIN64) */
/* CRC32 software implementation. */
/* Precalculated table used to generate the CRC32 if the CPU does not
have support for it */
static uint32_t ut_crc32_slice8_table[8][256];
-static bool ut_crc32_slice8_table_initialized = false;
/********************************************************************//**
Initializes the table that is used to generate the CRC32 if the CPU does
@@ -417,8 +382,6 @@ ut_crc32_slice8_table_init()
ut_crc32_slice8_table[k][n] = c;
}
}
-
- ut_crc32_slice8_table_initialized = true;
}
/** Calculate CRC32 over 8-bit data using a software implementation.
@@ -481,9 +444,9 @@ ut_crc32_64_sw(
{
uint64_t data_int = *reinterpret_cast<const uint64_t*>(*data);
-#ifdef WORDS_BIGENDIAN
+# ifdef WORDS_BIGENDIAN
data_int = ut_crc32_swap_byteorder(data_int);
-#endif /* WORDS_BIGENDIAN */
+# endif /* WORDS_BIGENDIAN */
*crc = ut_crc32_64_low_sw(*crc, data_int);
@@ -491,18 +454,14 @@ ut_crc32_64_sw(
*len -= 8;
}
-/** Calculates CRC32 in software, without using CPU instructions.
-@param[in] buf data over which to calculate CRC32
-@param[in] len data length
+/** Calculate CRC-32C using a look-up table.
+@param crc current checksum
+@param buf data to append to the checksum
+@param len data length in bytes
@return CRC-32C (polynomial 0x11EDC6F41) */
-uint32_t
-ut_crc32_sw(
- const byte* buf,
- ulint len)
+uint32_t ut_crc32_sw(uint32_t crc, const byte *buf, size_t len)
{
- uint32_t crc = 0xFFFFFFFFU;
-
- ut_a(ut_crc32_slice8_table_initialized);
+ crc = ~crc;
/* Calculate byte-by-byte up to an 8-byte aligned address. After
this consume the input 8-bytes at a time. */
@@ -541,16 +500,21 @@ ut_crc32_sw(
return(~crc);
}
+ut_crc32_func_t ut_crc32_low= ut_crc32_sw;
+const char *ut_crc32_implementation= "Using generic crc32 instructions";
+#endif
+
/********************************************************************//**
Initializes the data structures used by ut_crc32*(). Does not do any
allocations, would not hurt if called twice, but would be pointless. */
void
ut_crc32_init()
-/*===========*/
{
+#ifdef HAVE_CRC32_VPMSUM
+#else
ut_crc32_slice8_table_init();
-#if (defined(__GNUC__) && defined(__x86_64__)) || defined(_MSC_VER)
+# if (defined(__GNUC__) && defined(__x86_64__)) || defined(_MSC_VER)
uint32_t vend[3];
uint32_t model;
uint32_t family;
@@ -562,18 +526,18 @@ ut_crc32_init()
&features_ecx, &features_edx);
if (features_ecx & 1 << 20) {
- ut_crc32 = ut_crc32_hw;
+ ut_crc32_low = ut_crc32_hw;
ut_crc32_implementation = "Using SSE2 crc32 instructions";
}
-#endif
+# endif
-#if defined(__GNUC__) && defined(__linux__) && defined(HAVE_ARMV8_CRC)
+# if defined(__GNUC__) && defined(__linux__) && defined(HAVE_ARMV8_CRC)
if (crc32c_aarch64_available()) {
- ut_crc32 = ut_crc32_armv8;
+ ut_crc32_low = crc32c_aarch64;
ut_crc32_implementation = "Using Armv8 crc32 instructions";
}
+# endif
#endif
-
}
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc
index 5351f6ea673..0ccc651cc0e 100644
--- a/storage/maria/ha_maria.cc
+++ b/storage/maria/ha_maria.cc
@@ -527,7 +527,7 @@ static int table2maria(TABLE *table_arg, data_file_type row_type,
if (row_type == BLOCK_RECORD)
options|= HA_OPTION_PACK_RECORD;
- if (!(my_multi_malloc(MYF(MY_WME),
+ if (!(my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
recinfo_out, (share->fields * 2 + 2) * sizeof(MARIA_COLUMNDEF),
keydef_out, share->keys * sizeof(MARIA_KEYDEF),
&keyseg,
diff --git a/storage/maria/lockman.c b/storage/maria/lockman.c
index 590935967af..2eeb3c339bf 100644
--- a/storage/maria/lockman.c
+++ b/storage/maria/lockman.c
@@ -554,7 +554,7 @@ static void initialize_bucket(LOCKMAN *lm, LOCK * volatile *node,
{
int res;
uint parent= my_clear_highest_bit(bucket);
- LOCK *dummy= (LOCK *)my_malloc(sizeof(LOCK), MYF(MY_WME));
+ LOCK *dummy= (LOCK *)my_malloc(PSI_INSTRUMENT_ME, sizeof(LOCK), MYF(MY_WME));
LOCK **tmp= 0, *cur;
LOCK * volatile *el= lf_dynarray_lvalue(&lm->array, parent);
diff --git a/storage/maria/ma_backup.c b/storage/maria/ma_backup.c
index 79270425b38..83b521b1cad 100644
--- a/storage/maria/ma_backup.c
+++ b/storage/maria/ma_backup.c
@@ -59,7 +59,7 @@ int aria_get_capabilities(File kfile, ARIA_TABLE_CAPABILITIES *cap)
Allocate space for header information and for data that is too
big to keep on stack
*/
- if (!(disc_cache= my_malloc(info_length, MYF(MY_WME))))
+ if (!(disc_cache= my_malloc(PSI_NOT_INSTRUMENTED, info_length, MYF(MY_WME))))
DBUG_RETURN(ENOMEM);
if (my_pread(kfile, disc_cache, info_length, 0L, MYF(MY_NABP)))
diff --git a/storage/maria/ma_bitmap.c b/storage/maria/ma_bitmap.c
index e9e07a56706..391ffb4b2e6 100644
--- a/storage/maria/ma_bitmap.c
+++ b/storage/maria/ma_bitmap.c
@@ -238,8 +238,8 @@ my_bool _ma_bitmap_init(MARIA_SHARE *share, File file,
size*= 2;
#endif
- if (((bitmap->map= (uchar*) my_malloc(size, MYF(MY_WME))) == NULL) ||
- my_init_dynamic_array(&bitmap->pinned_pages,
+ if (!((bitmap->map= (uchar*) my_malloc(PSI_INSTRUMENT_ME, size, MYF(MY_WME)))) ||
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &bitmap->pinned_pages,
sizeof(MARIA_PINNED_PAGE), 1, 1, MYF(0)))
return 1;
diff --git a/storage/maria/ma_blockrec.c b/storage/maria/ma_blockrec.c
index be7634f7521..a03a4656a3e 100644
--- a/storage/maria/ma_blockrec.c
+++ b/storage/maria/ma_blockrec.c
@@ -491,7 +491,7 @@ my_bool _ma_init_block_record(MARIA_HA *info)
uint default_extents;
DBUG_ENTER("_ma_init_block_record");
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&row->empty_bits, share->base.pack_bytes,
&row->field_lengths,
share->base.max_field_lengths + 2,
@@ -530,12 +530,13 @@ my_bool _ma_init_block_record(MARIA_HA *info)
FULL_PAGE_SIZE(share) /
BLOB_SEGMENT_MIN_SIZE));
- if (my_init_dynamic_array(&info->bitmap_blocks,
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &info->bitmap_blocks,
sizeof(MARIA_BITMAP_BLOCK), default_extents,
64, MYF(0)))
goto err;
info->cur_row.extents_buffer_length= default_extents * ROW_EXTENT_SIZE;
- if (!(info->cur_row.extents= my_malloc(info->cur_row.extents_buffer_length,
+ if (!(info->cur_row.extents= my_malloc(PSI_INSTRUMENT_ME,
+ info->cur_row.extents_buffer_length,
MYF(MY_WME))))
goto err;
@@ -3235,7 +3236,7 @@ static my_bool write_block_record(MARIA_HA *info,
}
else
{
- if (!my_multi_malloc(MY_WME, &log_array,
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME), &log_array,
(uint) ((bitmap_blocks->count +
TRANSLOG_INTERNAL_PARTS + 2) *
sizeof(*log_array)),
@@ -5256,7 +5257,8 @@ my_bool _ma_scan_init_block_record(MARIA_HA *info)
*/
if (!(info->scan.bitmap_buff ||
((info->scan.bitmap_buff=
- (uchar *) my_malloc(share->block_size * 2, MYF(MY_WME))))))
+ (uchar *) my_malloc(PSI_INSTRUMENT_ME, share->block_size * 2,
+ MYF(MY_WME))))))
DBUG_RETURN(1);
info->scan.page_buff= info->scan.bitmap_buff + share->block_size;
info->scan.bitmap_end= info->scan.bitmap_buff + share->bitmap.max_total_size;
@@ -5311,7 +5313,8 @@ int _ma_scan_remember_block_record(MARIA_HA *info,
DBUG_ENTER("_ma_scan_remember_block_record");
if (!(info->scan_save))
{
- if (!(info->scan_save= my_malloc(ALIGN_SIZE(sizeof(*info->scan_save)) +
+ if (!(info->scan_save= my_malloc(PSI_INSTRUMENT_ME,
+ ALIGN_SIZE(sizeof(*info->scan_save)) +
info->s->block_size * 2,
MYF(MY_WME))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -7129,7 +7132,8 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn,
row.blob_length= ma_get_length(&header);
/* We need to build up a record (without blobs) in rec_buff */
- if (!(record= my_malloc(share->base.reclength, MYF(MY_WME))))
+ if (!(record= my_malloc(PSI_INSTRUMENT_ME, share->base.reclength,
+ MYF(MY_WME))))
DBUG_RETURN(1);
memcpy(record, null_bits, share->base.null_bytes);
@@ -7354,7 +7358,8 @@ my_bool _ma_apply_undo_row_update(MARIA_HA *info, LSN undo_lsn,
field_length_data_end= header;
/* Allocate buffer for current row & original row */
- if (!(current_record= my_malloc(share->base.reclength * 2, MYF(MY_WME))))
+ if (!(current_record= my_malloc(PSI_INSTRUMENT_ME, share->base.reclength * 2,
+ MYF(MY_WME))))
DBUG_RETURN(1);
orig_record= current_record+ share->base.reclength;
diff --git a/storage/maria/ma_check.c b/storage/maria/ma_check.c
index 8b4e34816d5..6f202e2a406 100644
--- a/storage/maria/ma_check.c
+++ b/storage/maria/ma_check.c
@@ -2078,7 +2078,8 @@ int maria_chk_data_link(HA_CHECK *param, MARIA_HA *info, my_bool extend)
puts("- check record links");
}
- if (!(record= (uchar*) my_malloc(share->base.default_rec_buff_size, MYF(0))))
+ if (!(record= (uchar*) my_malloc(PSI_INSTRUMENT_ME,
+ share->base.default_rec_buff_size, MYF(0))))
{
_ma_check_print_error(param,"Not enough memory for record");
DBUG_RETURN(-1);
@@ -2688,7 +2689,7 @@ int maria_repair(HA_CHECK *param, register MARIA_HA *info,
}
if (!(sort_param.record=
- (uchar *) my_malloc((uint)
+ (uchar *) my_malloc(PSI_INSTRUMENT_ME, (uint)
share->base.default_rec_buff_size, MYF(0))) ||
_ma_alloc_buffer(&sort_param.rec_buff, &sort_param.rec_buff_size,
share->base.default_rec_buff_size))
@@ -3628,7 +3629,7 @@ int maria_filecopy(HA_CHECK *param, File to,File from,my_off_t start,
DBUG_ENTER("maria_filecopy");
buff_length=(ulong) MY_MIN(param->write_buffer_length,length);
- if (!(buff=my_malloc(buff_length,MYF(0))))
+ if (!(buff=my_malloc(PSI_INSTRUMENT_ME, buff_length, MYF(0))))
{
buff=tmp_buff; buff_length=IO_SIZE;
}
@@ -3772,7 +3773,8 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info,
}
if (!(sort_param.record=
- (uchar*) my_malloc((size_t) share->base.default_rec_buff_size,
+ (uchar*) my_malloc(PSI_INSTRUMENT_ME,
+ (size_t) share->base.default_rec_buff_size,
MYF(0))) ||
_ma_alloc_buffer(&sort_param.rec_buff, &sort_param.rec_buff_size,
share->base.default_rec_buff_size))
@@ -3792,7 +3794,7 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info,
param->read_cache.end_of_file= sort_info.filelength;
sort_param.wordlist=NULL;
- init_alloc_root(&sort_param.wordroot, "sort", FTPARSER_MEMROOT_ALLOC_SIZE, 0,
+ init_alloc_root(PSI_INSTRUMENT_ME, &sort_param.wordroot, FTPARSER_MEMROOT_ALLOC_SIZE, 0,
MYF(param->malloc_flags));
sort_param.key_cmp=sort_key_cmp;
@@ -4356,7 +4358,7 @@ int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info,
del=share->state.state.del;
if (!(sort_param=(MARIA_SORT_PARAM *)
- my_malloc((uint) share->base.keys *
+ my_malloc(PSI_INSTRUMENT_ME, (uint) share->base.keys *
(sizeof(MARIA_SORT_PARAM) + share->base.pack_reclength),
MYF(MY_ZEROFILL))))
{
@@ -4440,8 +4442,7 @@ int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info,
(FT_MAX_WORD_LEN_FOR_SORT *
sort_param[i].keyinfo->seg->charset->mbmaxlen);
sort_param[i].key_length+=ft_max_word_len_for_sort-HA_FT_MAXBYTELEN;
- init_alloc_root(&sort_param[i].wordroot, "sort",
- FTPARSER_MEMROOT_ALLOC_SIZE, 0,
+ init_alloc_root(PSI_INSTRUMENT_ME, &sort_param[i].wordroot, FTPARSER_MEMROOT_ALLOC_SIZE, 0,
MYF(param->malloc_flags));
}
}
@@ -5423,7 +5424,7 @@ int _ma_sort_write_record(MARIA_SORT_PARAM *sort_param)
MARIA_DYN_DELETE_BLOCK_HEADER;
if (sort_info->buff_length < reclength)
{
- if (!(sort_info->buff=my_realloc(sort_info->buff, (uint) reclength,
+ if (!(sort_info->buff=my_realloc(PSI_INSTRUMENT_ME, sort_info->buff, (uint) reclength,
MYF(MY_FREE_ON_ERROR |
MY_ALLOW_ZERO_PTR))))
DBUG_RETURN(1);
@@ -5649,7 +5650,7 @@ static int sort_maria_ft_key_write(MARIA_SORT_PARAM *sort_param,
share->rec_reflength) &&
(share->options &
(HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
- ft_buf= (MA_SORT_FT_BUF *)my_malloc(sort_param->keyinfo->block_length +
+ ft_buf= (MA_SORT_FT_BUF *)my_malloc(PSI_INSTRUMENT_ME, sort_param->keyinfo->block_length +
sizeof(MA_SORT_FT_BUF), MYF(MY_WME));
if (!ft_buf)
@@ -5975,9 +5976,8 @@ static MA_SORT_KEY_BLOCKS *alloc_key_blocks(HA_CHECK *param, uint blocks,
MA_SORT_KEY_BLOCKS *block;
DBUG_ENTER("alloc_key_blocks");
- if (!(block= (MA_SORT_KEY_BLOCKS*) my_malloc((sizeof(MA_SORT_KEY_BLOCKS)+
- buffer_length+IO_SIZE)*blocks,
- MYF(0))))
+ if (!(block= (MA_SORT_KEY_BLOCKS*) my_malloc(PSI_INSTRUMENT_ME,
+ (sizeof(MA_SORT_KEY_BLOCKS)+buffer_length+IO_SIZE)*blocks, MYF(0))))
{
_ma_check_print_error(param,"Not enough memory for sort-key-blocks");
return(0);
@@ -6309,7 +6309,7 @@ void _ma_update_auto_increment_key(HA_CHECK *param, MARIA_HA *info,
We have to use an allocated buffer instead of info->rec_buff as
_ma_put_key_in_record() may use info->rec_buff
*/
- if (!(record= (uchar*) my_malloc((size_t) share->base.default_rec_buff_size,
+ if (!(record= (uchar*) my_malloc(PSI_INSTRUMENT_ME, (size_t) share->base.default_rec_buff_size,
MYF(0))))
{
_ma_check_print_error(param,"Not enough memory for extra record");
@@ -6972,7 +6972,7 @@ static void print_bitmap_description(MARIA_SHARE *share,
pgcache_page_no_t page,
uchar *bitmap_data)
{
- char *tmp= my_malloc(MAX_BITMAP_INFO_LENGTH, MYF(MY_WME));
+ char *tmp= my_malloc(PSI_INSTRUMENT_ME, MAX_BITMAP_INFO_LENGTH, MYF(MY_WME));
if (!tmp)
return;
_ma_get_bitmap_description(&share->bitmap, bitmap_data, page, tmp);
diff --git a/storage/maria/ma_checkpoint.c b/storage/maria/ma_checkpoint.c
index e525602f7a1..4b043f0795e 100644
--- a/storage/maria/ma_checkpoint.c
+++ b/storage/maria/ma_checkpoint.c
@@ -562,7 +562,7 @@ pthread_handler_t ma_checkpoint_background(void *arg)
DBUG_PRINT("info",("Maria background checkpoint thread starts"));
DBUG_ASSERT(interval > 0);
- PSI_CALL_set_thread_user_host(0,0,0,0);
+ PSI_CALL_set_thread_account(0,0,0,0);
/*
Recovery ended with all tables closed and a checkpoint: no need to take
@@ -790,7 +790,7 @@ static int collect_tables(LEX_STRING *str, LSN checkpoint_start_log_horizon)
}
}
if (unlikely((distinct_shares=
- (MARIA_SHARE **)my_malloc(nb * sizeof(MARIA_SHARE *),
+ (MARIA_SHARE **)my_malloc(PSI_INSTRUMENT_ME, nb * sizeof(MARIA_SHARE *),
MYF(MY_WME))) == NULL))
goto err;
for (total_names_length= 0, i= 0, pos= maria_open_list; pos; pos= pos->next)
@@ -823,7 +823,7 @@ static int collect_tables(LEX_STRING *str, LSN checkpoint_start_log_horizon)
LSN_STORE_SIZE + /* first_log_write_at_lsn */
1 /* end-of-name 0 */
) * nb + total_names_length;
- if (unlikely((str->str= my_malloc(str->length, MYF(MY_WME))) == NULL))
+ if (unlikely((str->str= my_malloc(PSI_INSTRUMENT_ME, str->length, MYF(MY_WME))) == NULL))
goto err;
ptr= str->str;
@@ -853,12 +853,12 @@ static int collect_tables(LEX_STRING *str, LSN checkpoint_start_log_horizon)
*/
#define STATE_COPIES 1024
state_copies= (struct st_state_copy *)
- my_malloc(STATE_COPIES * sizeof(struct st_state_copy), MYF(MY_WME));
- dfiles= (PAGECACHE_FILE *)my_realloc((uchar *)dfiles,
+ my_malloc(PSI_INSTRUMENT_ME, STATE_COPIES * sizeof(struct st_state_copy), MYF(MY_WME));
+ dfiles= (PAGECACHE_FILE *)my_realloc(PSI_INSTRUMENT_ME, (uchar *)dfiles,
/* avoid size of 0 for my_realloc */
MY_MAX(1, nb) * sizeof(PAGECACHE_FILE),
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
- kfiles= (PAGECACHE_FILE *)my_realloc((uchar *)kfiles,
+ kfiles= (PAGECACHE_FILE *)my_realloc(PSI_INSTRUMENT_ME, (uchar *)kfiles,
/* avoid size of 0 for my_realloc */
MY_MAX(1, nb) * sizeof(PAGECACHE_FILE),
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
diff --git a/storage/maria/ma_close.c b/storage/maria/ma_close.c
index 27be555ab70..d66e3bda4de 100644
--- a/storage/maria/ma_close.c
+++ b/storage/maria/ma_close.c
@@ -213,7 +213,7 @@ int maria_close(register MARIA_HA *info)
wrong status information.
*/
if ((history= (MARIA_STATE_HISTORY_CLOSED *)
- my_malloc(sizeof(*history), MYF(MY_WME))))
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(*history), MYF(MY_WME))))
{
history->create_rename_lsn= share->state.create_rename_lsn;
history->state_history= share->state_history;
diff --git a/storage/maria/ma_create.c b/storage/maria/ma_create.c
index 06139ed564d..a13190b0220 100644
--- a/storage/maria/ma_create.c
+++ b/storage/maria/ma_create.c
@@ -145,7 +145,8 @@ int maria_create(const char *name, enum data_file_type datafile_type,
}
if (!(rec_per_key_part=
- (double*) my_malloc((keys + uniques)*HA_MAX_KEY_SEG*sizeof(double) +
+ (double*) my_malloc(PSI_INSTRUMENT_ME,
+ (keys + uniques)*HA_MAX_KEY_SEG*sizeof(double) +
(keys + uniques)*HA_MAX_KEY_SEG*sizeof(ulong) +
sizeof(uint16) * columns,
MYF(MY_WME | MY_ZEROFILL))))
@@ -1028,7 +1029,8 @@ int maria_create(const char *name, enum data_file_type datafile_type,
{
/* Store columns in a more efficent order */
MARIA_COLUMNDEF **col_order, **pos;
- if (!(col_order= (MARIA_COLUMNDEF**) my_malloc(share.base.fields *
+ if (!(col_order= (MARIA_COLUMNDEF**) my_malloc(PSI_INSTRUMENT_ME,
+ share.base.fields *
sizeof(MARIA_COLUMNDEF*),
MYF(MY_WME))))
goto err;
@@ -1090,7 +1092,8 @@ int maria_create(const char *name, enum data_file_type datafile_type,
log_array[TRANSLOG_INTERNAL_PARTS + 1].length= 1 + 2 + 2 +
(uint) kfile_size_before_extension;
/* we are needing maybe 64 kB, so don't use the stack */
- log_data= my_malloc(log_array[TRANSLOG_INTERNAL_PARTS + 1].length, MYF(0));
+ log_data= my_malloc(PSI_INSTRUMENT_ME,
+ log_array[TRANSLOG_INTERNAL_PARTS + 1].length, MYF(0));
if ((log_data == NULL) ||
mysql_file_pread(file, 1 + 2 + 2 + log_data,
(size_t) kfile_size_before_extension, 0, MYF(MY_NABP)))
diff --git a/storage/maria/ma_crypt.c b/storage/maria/ma_crypt.c
index 95b84d38221..48861485012 100644
--- a/storage/maria/ma_crypt.c
+++ b/storage/maria/ma_crypt.c
@@ -101,7 +101,7 @@ int
ma_crypt_create(MARIA_SHARE* share)
{
MARIA_CRYPT_DATA *crypt_data=
- (MARIA_CRYPT_DATA*)my_malloc(sizeof(MARIA_CRYPT_DATA), MYF(MY_ZEROFILL));
+ (MARIA_CRYPT_DATA*)my_malloc(PSI_INSTRUMENT_ME, sizeof(MARIA_CRYPT_DATA), MYF(MY_ZEROFILL));
crypt_data->scheme.type= CRYPT_SCHEME_1;
crypt_data->scheme.locker= crypt_data_scheme_locker;
mysql_mutex_init(key_CRYPT_DATA_lock, &crypt_data->lock, MY_MUTEX_INIT_FAST);
@@ -165,7 +165,7 @@ ma_crypt_read(MARIA_SHARE* share, uchar *buff)
{
/* opening a table */
MARIA_CRYPT_DATA *crypt_data=
- (MARIA_CRYPT_DATA*)my_malloc(sizeof(MARIA_CRYPT_DATA), MYF(MY_ZEROFILL));
+ (MARIA_CRYPT_DATA*)my_malloc(PSI_INSTRUMENT_ME, sizeof(MARIA_CRYPT_DATA), MYF(MY_ZEROFILL));
crypt_data->scheme.type= type;
mysql_mutex_init(key_CRYPT_DATA_lock, &crypt_data->lock,
@@ -189,7 +189,7 @@ static int ma_decrypt(MARIA_SHARE *, MARIA_CRYPT_DATA *, const uchar *,
static my_bool ma_crypt_pre_read_hook(PAGECACHE_IO_HOOK_ARGS *args)
{
MARIA_SHARE *share= (MARIA_SHARE*) args->data;
- uchar *crypt_buf= my_malloc(share->block_size, MYF(0));
+ uchar *crypt_buf= my_malloc(PSI_INSTRUMENT_ME, share->block_size, MYF(0));
if (crypt_buf == NULL)
{
args->crypt_buf= NULL; /* for post-hook */
@@ -260,7 +260,7 @@ static my_bool ma_crypt_data_pre_write_hook(PAGECACHE_IO_HOOK_ARGS *args)
MARIA_SHARE *share= (MARIA_SHARE*) args->data;
const uint size= share->block_size;
uint key_version;
- uchar *crypt_buf= my_malloc(share->block_size, MYF(0));
+ uchar *crypt_buf= my_malloc(PSI_INSTRUMENT_ME, share->block_size, MYF(0));
if (crypt_buf == NULL)
{
@@ -385,7 +385,7 @@ static my_bool ma_crypt_index_pre_write_hook(PAGECACHE_IO_HOOK_ARGS *args)
const uint block_size= share->block_size;
const uint page_used= _ma_get_page_used(share, args->page);
uint key_version;
- uchar *crypt_buf= my_malloc(block_size, MYF(0));
+ uchar *crypt_buf= my_malloc(PSI_INSTRUMENT_ME, block_size, MYF(0));
if (crypt_buf == NULL)
{
args->crypt_buf= NULL; /* for post-hook */
diff --git a/storage/maria/ma_ft_boolean_search.c b/storage/maria/ma_ft_boolean_search.c
index 70ab6b2e3f6..596c50ee497 100644
--- a/storage/maria/ma_ft_boolean_search.c
+++ b/storage/maria/ma_ft_boolean_search.c
@@ -561,7 +561,7 @@ FT_INFO * maria_ft_init_boolean_search(MARIA_HA *info, uint keynr,
FTB_EXPR *ftbe;
FTB_WORD *ftbw;
- if (!(ftb=(FTB *)my_malloc(sizeof(FTB), MYF(MY_WME))))
+ if (!(ftb=(FTB *)my_malloc(PSI_INSTRUMENT_ME, sizeof(FTB), MYF(MY_WME))))
return 0;
ftb->please= (struct _ft_vft *) & _ma_ft_vft_boolean;
ftb->state=UNINITIALIZED;
@@ -574,7 +574,7 @@ FT_INFO * maria_ft_init_boolean_search(MARIA_HA *info, uint keynr,
bzero(& ftb->no_dupes, sizeof(TREE));
ftb->last_word= 0;
- init_alloc_root(&ftb->mem_root, "fulltext", 1024, 1024, 0);
+ init_alloc_root(PSI_INSTRUMENT_ME, &ftb->mem_root, 1024, 1024, 0);
ftb->queue.max_elements= 0;
if (!(ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR))))
goto err;
diff --git a/storage/maria/ma_ft_nlq_search.c b/storage/maria/ma_ft_nlq_search.c
index f7aa3afec9a..6c4e30bca83 100644
--- a/storage/maria/ma_ft_nlq_search.c
+++ b/storage/maria/ma_ft_nlq_search.c
@@ -291,7 +291,7 @@ FT_INFO *maria_ft_init_nlq_search(MARIA_HA *info, uint keynr, uchar *query,
If ndocs == 0, this will not allocate RAM for FT_INFO.doc[],
so if ndocs == 0, FT_INFO.doc[] must not be accessed.
*/
- dlist=(FT_INFO *)my_malloc(sizeof(FT_INFO)+
+ dlist=(FT_INFO *)my_malloc(PSI_INSTRUMENT_ME, sizeof(FT_INFO)+
sizeof(FT_DOC)*
(int)(aio.dtree.elements_in_tree-1),
MYF(0));
diff --git a/storage/maria/ma_ft_parser.c b/storage/maria/ma_ft_parser.c
index 2dfb4a77557..00532af0b47 100644
--- a/storage/maria/ma_ft_parser.c
+++ b/storage/maria/ma_ft_parser.c
@@ -347,9 +347,9 @@ MYSQL_FTPARSER_PARAM* maria_ftparser_alloc_param(MARIA_HA *info)
(ftb_check_phrase_internal, ftb_phrase_add_word). Thus MAX_PARAM_NR=2.
*/
info->ftparser_param= (MYSQL_FTPARSER_PARAM *)
- my_malloc(MAX_PARAM_NR * sizeof(MYSQL_FTPARSER_PARAM) *
+ my_malloc(PSI_INSTRUMENT_ME, MAX_PARAM_NR * sizeof(MYSQL_FTPARSER_PARAM) *
info->s->ftkeys, MYF(MY_WME | MY_ZEROFILL));
- init_alloc_root(&info->ft_memroot, "fulltext_parser",
+ init_alloc_root(PSI_INSTRUMENT_ME, &info->ft_memroot,
FTPARSER_MEMROOT_ALLOC_SIZE, 0, MYF(0));
}
return info->ftparser_param;
diff --git a/storage/maria/ma_init.c b/storage/maria/ma_init.c
index 12d39db806a..1e9095c19f0 100644
--- a/storage/maria/ma_init.c
+++ b/storage/maria/ma_init.c
@@ -71,10 +71,9 @@ int maria_init(void)
trnman_end_trans_hook= _ma_trnman_end_trans_hook;
maria_create_trn_hook= dummy_maria_create_trn_hook;
}
- my_hash_init(&maria_stored_state, &my_charset_bin, 32,
- 0, sizeof(LSN), 0, (my_hash_free_key) history_state_free, 0);
- DBUG_PRINT("info",("dummy_transaction_object: %p",
- &dummy_transaction_object));
+ my_hash_init(PSI_INSTRUMENT_ME, &maria_stored_state, &my_charset_bin, 32, 0,
+ sizeof(LSN), 0, (my_hash_free_key) history_state_free, 0);
+ DBUG_PRINT("info",("dummy_transaction_object: %p", &dummy_transaction_object));
return 0;
}
diff --git a/storage/maria/ma_loghandler.c b/storage/maria/ma_loghandler.c
index a55026e3251..6b861e6b657 100644
--- a/storage/maria/ma_loghandler.c
+++ b/storage/maria/ma_loghandler.c
@@ -1649,7 +1649,7 @@ static void translog_file_init(TRANSLOG_FILE *file, uint32 number,
static my_bool translog_create_new_file()
{
- TRANSLOG_FILE *file= (TRANSLOG_FILE*)my_malloc(sizeof(TRANSLOG_FILE),
+ TRANSLOG_FILE *file= (TRANSLOG_FILE*)my_malloc(PSI_INSTRUMENT_ME, sizeof(TRANSLOG_FILE),
MYF(0));
TRANSLOG_FILE *old= get_current_logfile();
@@ -3660,9 +3660,9 @@ my_bool translog_init_with_table(const char *directory,
&log_descriptor.new_goal_cond, 0) ||
mysql_rwlock_init(key_TRANSLOG_DESCRIPTOR_open_files_lock,
&log_descriptor.open_files_lock) ||
- my_init_dynamic_array(&log_descriptor.open_files,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &log_descriptor.open_files,
sizeof(TRANSLOG_FILE*), 10, 10, MYF(0)) ||
- my_init_dynamic_array(&log_descriptor.unfinished_files,
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, &log_descriptor.unfinished_files,
sizeof(struct st_file_counter),
10, 10, MYF(0)))
goto err;
@@ -3814,7 +3814,7 @@ my_bool translog_init_with_table(const char *directory,
We can't allocate all file together because they will be freed
one by one
*/
- TRANSLOG_FILE *file= (TRANSLOG_FILE *)my_malloc(sizeof(TRANSLOG_FILE),
+ TRANSLOG_FILE *file= (TRANSLOG_FILE *)my_malloc(PSI_INSTRUMENT_ME, sizeof(TRANSLOG_FILE),
MYF(0));
compile_time_assert(MY_FILEPOS_ERROR > 0xffffffffULL);
@@ -4016,8 +4016,8 @@ my_bool translog_init_with_table(const char *directory,
logs_found, old_log_was_recovered));
if (!logs_found)
{
- TRANSLOG_FILE *file= (TRANSLOG_FILE*)my_malloc(sizeof(TRANSLOG_FILE),
- MYF(MY_WME));
+ TRANSLOG_FILE *file= (TRANSLOG_FILE*)my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(TRANSLOG_FILE), MYF(MY_WME));
DBUG_PRINT("info", ("The log is not found => we will create new log"));
if (file == NULL)
goto err;
@@ -4084,7 +4084,7 @@ my_bool translog_init_with_table(const char *directory,
Log records will refer to a MARIA_SHARE by a unique 2-byte id; set up
structures for generating 2-byte ids:
*/
- id_to_share= (MARIA_SHARE **) my_malloc(SHARE_ID_MAX * sizeof(MARIA_SHARE*),
+ id_to_share= (MARIA_SHARE **) my_malloc(PSI_INSTRUMENT_ME, SHARE_ID_MAX * sizeof(MARIA_SHARE*),
MYF(MY_WME | MY_ZEROFILL));
if (unlikely(!id_to_share))
goto err;
@@ -5649,7 +5649,7 @@ translog_write_variable_record_mgroup(LSN *lsn,
used_buffs_init(&cursor.buffs);
chunk2_header[0]= TRANSLOG_CHUNK_NOHDR;
- if (my_init_dynamic_array(&groups,
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &groups,
sizeof(struct st_translog_group_descriptor),
10, 10, MYF(0)))
{
@@ -6994,7 +6994,7 @@ translog_variable_length_header(uchar *page, translog_size_t page_offset,
DBUG_PRINT("info", ("multi-group"));
grp_no= buff->groups_no= uint2korr(src + 2);
if (!(buff->groups=
- (TRANSLOG_GROUP*) my_malloc(sizeof(TRANSLOG_GROUP) * grp_no,
+ (TRANSLOG_GROUP*) my_malloc(PSI_INSTRUMENT_ME, sizeof(TRANSLOG_GROUP) * grp_no,
MYF(0))))
DBUG_RETURN(RECHEADER_READ_ERROR);
DBUG_PRINT("info", ("Groups: %u", (uint) grp_no));
diff --git a/storage/maria/ma_open.c b/storage/maria/ma_open.c
index c7080daa265..4cda524715b 100644
--- a/storage/maria/ma_open.c
+++ b/storage/maria/ma_open.c
@@ -117,7 +117,7 @@ static MARIA_HA *maria_clone_internal(MARIA_SHARE *share,
errpos= 5;
/* alloc and set up private structure parts */
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&m_info,sizeof(MARIA_HA),
&info.blobs,sizeof(MARIA_BLOB)*share->base.blobs,
&info.buff,(share->base.max_key_block_length*2+
@@ -166,7 +166,7 @@ static MARIA_HA *maria_clone_internal(MARIA_SHARE *share,
goto err;
/* The following should be big enough for all pinning purposes */
- if (my_init_dynamic_array(&info.pinned_pages,
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &info.pinned_pages,
sizeof(MARIA_PINNED_PAGE),
MY_MAX(share->base.blobs*2 + 4,
MARIA_MAX_TREE_LEVELS*3), 16, MYF(0)))
@@ -465,7 +465,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
Allocate space for header information and for data that is too
big to keep on stack
*/
- if (!(disk_cache= my_malloc(info_length+128, MYF(MY_WME))))
+ if (!(disk_cache= my_malloc(PSI_INSTRUMENT_ME, info_length+128, MYF(MY_WME))))
{
my_errno=ENOMEM;
goto err;
@@ -648,7 +648,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
share->index_file_name.length= strlen(index_name);
share->data_file_name.length= strlen(data_name);
share->open_file_name.length= strlen(name);
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
&share,sizeof(*share),
&rec_per_key_part,
sizeof(double) * key_parts,
@@ -1043,7 +1043,8 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
{
/* Table is not part of any active transaction; Create new history */
if (!(share->state_history= (MARIA_STATE_HISTORY *)
- my_malloc(sizeof(*share->state_history), MYF(MY_WME))))
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(*share->state_history),
+ MYF(MY_WME))))
goto err;
share->state_history->trid= 0; /* Visible by all */
share->state_history->state= share->state.state;
@@ -1244,7 +1245,7 @@ my_bool _ma_alloc_buffer(uchar **old_addr, size_t *old_size,
if (*old_size < new_size)
{
uchar *addr;
- if (!(addr= (uchar*) my_realloc(*old_addr, new_size,
+ if (!(addr= (uchar*) my_realloc(PSI_INSTRUMENT_ME, *old_addr, new_size,
MYF(MY_ALLOW_ZERO_PTR))))
return 1;
*old_addr= addr;
@@ -1636,7 +1637,7 @@ static uchar *_ma_state_info_read(uchar *ptr, MARIA_STATE_INFO *state)
/* Allocate memory for key parts if not already done */
if (!state->rec_per_key_part &&
- !my_multi_malloc(MY_WME,
+ !my_multi_malloc(PSI_INSTRUMENT_ME, MY_WME,
&state->rec_per_key_part,
sizeof(*state->rec_per_key_part) * key_parts,
&state->nulls_per_key_part,
diff --git a/storage/maria/ma_packrec.c b/storage/maria/ma_packrec.c
index 2e7add8f61d..b2cf7fb697a 100644
--- a/storage/maria/ma_packrec.c
+++ b/storage/maria/ma_packrec.c
@@ -228,7 +228,7 @@ static my_bool _ma_read_pack_info(MARIA_SHARE *share, File file,
- Distinct column values
*/
if (!(share->decode_trees=(MARIA_DECODE_TREE*)
- my_malloc((uint) (trees*sizeof(MARIA_DECODE_TREE)+
+ my_malloc(PSI_INSTRUMENT_ME, (uint) (trees*sizeof(MARIA_DECODE_TREE)+
intervall_length*sizeof(uchar)),
MYF(MY_WME))))
goto err0;
@@ -244,7 +244,7 @@ static my_bool _ma_read_pack_info(MARIA_SHARE *share, File file,
*/
length=(uint) (elements*2+trees*(1 << maria_quick_table_bits));
if (!(share->decode_tables=(uint16*)
- my_malloc((length+OFFSET_TABLE_SIZE)*sizeof(uint16)+
+ my_malloc(PSI_INSTRUMENT_ME, (length+OFFSET_TABLE_SIZE)*sizeof(uint16)+
(uint) (share->pack.header_length - sizeof(header)) +
share->base.extra_rec_buff_size,
MYF(MY_WME | MY_ZEROFILL))))
@@ -291,9 +291,9 @@ static my_bool _ma_read_pack_info(MARIA_SHARE *share, File file,
goto err3;
/* Reallocate the decoding tables to the used size. */
decode_table=(uint16*)
- my_realloc((uchar*) share->decode_tables,
+ my_realloc(PSI_INSTRUMENT_ME, (uchar*) share->decode_tables,
(uint) ((uchar*) decode_table - (uchar*) share->decode_tables),
- MYF(MY_HOLD_ON_ERROR));
+ MYF(0));
/* Fix the table addresses in the tree heads. */
{
my_ptrdiff_t diff= PTR_BYTE_DIFF(decode_table,share->decode_tables);
diff --git a/storage/maria/ma_pagecache.c b/storage/maria/ma_pagecache.c
index 13a2f18cc94..e08c18fb579 100644
--- a/storage/maria/ma_pagecache.c
+++ b/storage/maria/ma_pagecache.c
@@ -789,8 +789,8 @@ size_t init_pagecache(PAGECACHE *pagecache, size_t use_mem,
{
if (mysql_mutex_init(key_PAGECACHE_cache_lock,
&pagecache->cache_lock, MY_MUTEX_INIT_FAST) ||
- my_hash_init(&pagecache->files_in_flush, &my_charset_bin, 32,
- offsetof(struct st_file_in_flush, file),
+ my_hash_init(PSI_INSTRUMENT_ME, &pagecache->files_in_flush,
+ &my_charset_bin, 32, offsetof(struct st_file_in_flush, file),
sizeof(((struct st_file_in_flush *)NULL)->file),
NULL, NULL, 0))
goto err;
@@ -801,7 +801,7 @@ size_t init_pagecache(PAGECACHE *pagecache, size_t use_mem,
pagecache->mem_size= use_mem;
pagecache->block_size= block_size;
- pagecache->shift= my_bit_log2(block_size);
+ pagecache->shift= my_bit_log2_uint64(block_size);
pagecache->readwrite_flags= my_readwrite_flags | MY_NABP | MY_WAIT_IF_FULL;
pagecache->org_readwrite_flags= pagecache->readwrite_flags;
DBUG_PRINT("info", ("block_size: %u", block_size));
@@ -853,7 +853,7 @@ size_t init_pagecache(PAGECACHE *pagecache, size_t use_mem,
Allocate memory for blocks, hash_links and hash entries;
For each block 2 hash links are allocated
*/
- if (my_multi_malloc_large(MYF(MY_ZEROFILL),
+ if (my_multi_malloc_large(PSI_INSTRUMENT_ME, MYF(MY_ZEROFILL),
&pagecache->block_root,
(ulonglong) (blocks *
sizeof(PAGECACHE_BLOCK_LINK)),
@@ -2330,7 +2330,7 @@ static void add_pin(PAGECACHE_BLOCK_LINK *block)
#ifndef DBUG_OFF
{
PAGECACHE_PIN_INFO *info=
- (PAGECACHE_PIN_INFO *)my_malloc(sizeof(PAGECACHE_PIN_INFO), MYF(0));
+ (PAGECACHE_PIN_INFO *)my_malloc(PSI_INSTRUMENT_ME, sizeof(PAGECACHE_PIN_INFO), MYF(0));
info->thread= my_thread_var;
info_link(&block->pin_list, info);
}
@@ -2364,7 +2364,7 @@ static void remove_pin(PAGECACHE_BLOCK_LINK *block, my_bool any
static void info_add_lock(PAGECACHE_BLOCK_LINK *block, my_bool wl)
{
PAGECACHE_LOCK_INFO *info=
- (PAGECACHE_LOCK_INFO *)my_malloc(sizeof(PAGECACHE_LOCK_INFO), MYF(0));
+ (PAGECACHE_LOCK_INFO *)my_malloc(PSI_INSTRUMENT_ME, sizeof(PAGECACHE_LOCK_INFO), MYF(0));
info->thread= my_thread_var;
info->write_lock= wl;
info_link((PAGECACHE_PIN_INFO **)&block->lock_list,
@@ -4939,7 +4939,7 @@ static int flush_pagecache_blocks_int(PAGECACHE *pagecache,
if (count > FLUSH_CACHE &&
!(cache=
(PAGECACHE_BLOCK_LINK**)
- my_malloc(sizeof(PAGECACHE_BLOCK_LINK*)*count, MYF(0))))
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(PAGECACHE_BLOCK_LINK*)*count, MYF(0))))
{
cache= cache_buff;
count= FLUSH_CACHE;
@@ -5295,7 +5295,7 @@ my_bool pagecache_collect_changed_blocks_with_lsn(PAGECACHE *pagecache,
5 + /* pageno */
LSN_STORE_SIZE /* rec_lsn */
) * stored_list_size;
- if (NULL == (str->str= my_malloc(str->length, MYF(MY_WME))))
+ if (NULL == (str->str= my_malloc(PSI_INSTRUMENT_ME, str->length, MYF(MY_WME))))
goto err;
ptr= str->str;
int8store(ptr, (ulonglong)stored_list_size);
diff --git a/storage/maria/ma_preload.c b/storage/maria/ma_preload.c
index eefc9777be6..60fd9b09bb3 100644
--- a/storage/maria/ma_preload.c
+++ b/storage/maria/ma_preload.c
@@ -56,7 +56,7 @@ int maria_preload(MARIA_HA *info, ulonglong key_map, my_bool ignore_leaves)
block_length= share->pagecache->block_size;
- if (!(buff= (uchar *) my_malloc(block_length, MYF(MY_WME))))
+ if (!(buff= (uchar *) my_malloc(PSI_INSTRUMENT_ME, block_length, MYF(MY_WME))))
DBUG_RETURN(my_errno= HA_ERR_OUT_OF_MEM);
if (flush_pagecache_blocks(share->pagecache, &share->kfile, FLUSH_RELEASE))
diff --git a/storage/maria/ma_recovery.c b/storage/maria/ma_recovery.c
index 6ce158dd468..b47364749d3 100644
--- a/storage/maria/ma_recovery.c
+++ b/storage/maria/ma_recovery.c
@@ -152,7 +152,7 @@ static void enlarge_buffer(const TRANSLOG_HEADER_BUFFER *rec)
if (log_record_buffer.length < rec->record_length)
{
log_record_buffer.length= rec->record_length;
- log_record_buffer.str= my_realloc(log_record_buffer.str,
+ log_record_buffer.str= my_realloc(PSI_INSTRUMENT_ME, log_record_buffer.str,
rec->record_length,
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
}
@@ -296,10 +296,10 @@ int maria_apply_log(LSN from_lsn, LSN end_lsn,
DBUG_ASSERT(should_run_undo_phase || !take_checkpoints);
DBUG_ASSERT(end_lsn == LSN_IMPOSSIBLE || should_run_undo_phase == 0);
all_active_trans= (struct st_trn_for_recovery *)
- my_malloc((SHORT_TRID_MAX + 1) * sizeof(struct st_trn_for_recovery),
+ my_malloc(PSI_INSTRUMENT_ME, (SHORT_TRID_MAX + 1) * sizeof(struct st_trn_for_recovery),
MYF(MY_ZEROFILL));
all_tables= (struct st_table_for_recovery *)
- my_malloc((SHARE_ID_MAX + 1) * sizeof(struct st_table_for_recovery),
+ my_malloc(PSI_INSTRUMENT_ME, (SHARE_ID_MAX + 1) * sizeof(struct st_table_for_recovery),
MYF(MY_ZEROFILL));
save_error_handler_hook= error_handler_hook;
@@ -3342,19 +3342,19 @@ static LSN parse_checkpoint_record(LSN lsn)
/* dirty pages */
nb_dirty_pages= uint8korr(ptr);
- /* Ensure casts later will not loose significant bits. */
+ /* Ensure casts later will not lose significant bits. */
DBUG_ASSERT((nb_dirty_pages <= SIZE_T_MAX/sizeof(struct st_dirty_page)) &&
(nb_dirty_pages <= ULONG_MAX));
ptr+= 8;
tprint(tracef, "%lu dirty pages\n", (ulong) nb_dirty_pages);
- if (my_hash_init(&all_dirty_pages, &my_charset_bin, (ulong)nb_dirty_pages,
- offsetof(struct st_dirty_page, file_and_page_id),
+ if (my_hash_init(PSI_INSTRUMENT_ME, &all_dirty_pages, &my_charset_bin,
+ (ulong)nb_dirty_pages, offsetof(struct st_dirty_page, file_and_page_id),
sizeof(((struct st_dirty_page *)NULL)->file_and_page_id),
NULL, NULL, 0))
return LSN_ERROR;
dirty_pages_pool=
- (struct st_dirty_page *)my_malloc((size_t)nb_dirty_pages *
+ (struct st_dirty_page *)my_malloc(PSI_INSTRUMENT_ME, (size_t)nb_dirty_pages *
sizeof(struct st_dirty_page),
MYF(MY_WME));
if (unlikely(dirty_pages_pool == NULL))
diff --git a/storage/maria/ma_rt_index.c b/storage/maria/ma_rt_index.c
index b2efe298daa..6fddc8955c4 100644
--- a/storage/maria/ma_rt_index.c
+++ b/storage/maria/ma_rt_index.c
@@ -905,7 +905,7 @@ static my_bool maria_rtree_fill_reinsert_list(stPageList *ReinsertList,
if (ReinsertList->n_pages == ReinsertList->m_pages)
{
ReinsertList->m_pages += REINSERT_BUFFER_INC;
- if (!(ReinsertList->pages= (stPageLevel*)my_realloc((uchar*)ReinsertList->pages,
+ if (!(ReinsertList->pages= (stPageLevel*)my_realloc(PSI_INSTRUMENT_ME, (uchar*)ReinsertList->pages,
ReinsertList->m_pages * sizeof(stPageLevel), MYF(MY_ALLOW_ZERO_PTR))))
goto err;
}
diff --git a/storage/maria/ma_sort.c b/storage/maria/ma_sort.c
index 4dc6472bd15..8153ec701a0 100644
--- a/storage/maria/ma_sort.c
+++ b/storage/maria/ma_sort.c
@@ -194,12 +194,12 @@ int _ma_create_index_by_sort(MARIA_SORT_PARAM *info, my_bool no_messages,
}
if ((sort_keys= ((uchar**)
- my_malloc((size_t) (keys*(sort_length+sizeof(char*))+
+ my_malloc(PSI_INSTRUMENT_ME, (size_t) (keys*(sort_length+sizeof(char*))+
HA_FT_MAXBYTELEN),
MYF(0)))))
{
- if (my_init_dynamic_array(&buffpek, sizeof(BUFFPEK), maxbuffer,
- MY_MIN(maxbuffer/2, 1000), MYF(0)))
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &buffpek, sizeof(BUFFPEK),
+ maxbuffer, MY_MIN(maxbuffer/2, 1000), MYF(0)))
{
my_free(sort_keys);
sort_keys= 0;
@@ -428,11 +428,11 @@ static my_bool _ma_thr_find_all_keys_exec(MARIA_SORT_PARAM* sort_param)
while ((maxbuffer= (uint) (idx/(keys-1)+1)) != maxbuffer_org);
}
if ((sort_keys= (uchar **)
- my_malloc((size_t)(keys*(sort_length+sizeof(char*))+
+ my_malloc(PSI_INSTRUMENT_ME, (size_t)(keys*(sort_length+sizeof(char*))+
((sort_param->keyinfo->flag & HA_FULLTEXT) ?
HA_FT_MAXBYTELEN : 0)), MYF(0))))
{
- if (my_init_dynamic_array(&sort_param->buffpek, sizeof(BUFFPEK),
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &sort_param->buffpek, sizeof(BUFFPEK),
maxbuffer, MY_MIN(maxbuffer / 2, 1000), MYF(0)))
{
my_free(sort_keys);
@@ -628,7 +628,7 @@ int _ma_thr_write_keys(MARIA_SORT_PARAM *sort_param)
length=(size_t)param->sort_buffer_length;
while (length >= MIN_SORT_MEMORY)
{
- if ((mergebuf= my_malloc((size_t) length, MYF(0))))
+ if ((mergebuf= my_malloc(PSI_INSTRUMENT_ME, (size_t) length, MYF(0))))
break;
length=length*3/4;
}
diff --git a/storage/maria/ma_state.c b/storage/maria/ma_state.c
index 2eff64ec7cd..9bf60c465b5 100644
--- a/storage/maria/ma_state.c
+++ b/storage/maria/ma_state.c
@@ -79,8 +79,8 @@ my_bool _ma_setup_live_state(MARIA_HA *info)
}
/* Table was not used before, create new table state entry */
- if (!(tables= (MARIA_USED_TABLES*) my_malloc(sizeof(*tables),
- MYF(MY_WME | MY_ZEROFILL))))
+ if (!(tables= (MARIA_USED_TABLES*) my_malloc(PSI_INSTRUMENT_ME,
+ sizeof(*tables), MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(1);
tables->next= trn->used_tables;
trn->used_tables= tables;
@@ -495,7 +495,8 @@ my_bool _ma_trnman_end_trans_hook(TRN *trn, my_bool commit,
ensures that all history items are stored in the list in
decresing trid order.
*/
- if (!(history= my_malloc(sizeof(*history), MYF(MY_WME))))
+ if (!(history= my_malloc(PSI_INSTRUMENT_ME, sizeof(*history),
+ MYF(MY_WME))))
{
/* purecov: begin inspected */
error= 1;
diff --git a/storage/maria/ma_test2.c b/storage/maria/ma_test2.c
index 7b7b31a7738..d739cc4a7f1 100644
--- a/storage/maria/ma_test2.c
+++ b/storage/maria/ma_test2.c
@@ -1215,7 +1215,7 @@ static void put_blob_in_record(uchar *blob_pos, char **blob_buffer,
if (use_blob)
{
if (! *blob_buffer &&
- !(*blob_buffer=my_malloc((uint) use_blob,MYF(MY_WME))))
+ !(*blob_buffer=my_malloc(PSI_NOT_INSTRUMENTED, (uint) use_blob,MYF(MY_WME))))
{
use_blob= 0;
return;
diff --git a/storage/maria/ma_write.c b/storage/maria/ma_write.c
index 92d90d5c426..cdc34bb2438 100644
--- a/storage/maria/ma_write.c
+++ b/storage/maria/ma_write.c
@@ -892,8 +892,9 @@ ChangeSet@1.2562, 2008-04-09 07:41:40+02:00, serg@janus.mylan +9 -0
{
/* Yup. converting */
info->ft1_to_ft2=(DYNAMIC_ARRAY *)
- my_malloc(sizeof(DYNAMIC_ARRAY), MYF(MY_WME));
- my_init_dynamic_array(info->ft1_to_ft2, ft2len, 300, 50, MYF(0));
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(DYNAMIC_ARRAY), MYF(MY_WME));
+ my_init_dynamic_array(PSI_INSTRUMENT_ME, info->ft1_to_ft2, ft2len, 300,
+ 50, MYF(0));
/*
Now, adding all keys from the page to dynarray
@@ -1768,7 +1769,7 @@ int maria_init_bulk_insert(MARIA_HA *info, size_t cache_size, ha_rows rows)
cache_size/=total_keylength*16;
info->bulk_insert=(TREE *)
- my_malloc((sizeof(TREE)*share->base.keys+
+ my_malloc(PSI_INSTRUMENT_ME, (sizeof(TREE)*share->base.keys+
sizeof(bulk_insert_param)*num_keys),MYF(0));
if (!info->bulk_insert)
diff --git a/storage/maria/maria_chk.c b/storage/maria/maria_chk.c
index bd62859f66b..25ad7c5c86a 100644
--- a/storage/maria/maria_chk.c
+++ b/storage/maria/maria_chk.c
@@ -1900,8 +1900,8 @@ static int maria_sort_records(HA_CHECK *param,
goto err;
}
- if (!(sort_param.record=
- (uchar*) my_malloc((uint) share->base.default_rec_buff_size, MYF(0))))
+ if (!(sort_param.record= (uchar*) my_malloc(PSI_INSTRUMENT_ME,
+ (uint) share->base.default_rec_buff_size, MYF(0))))
{
_ma_check_print_error(param,"Not enough memory for record");
goto err;
diff --git a/storage/maria/maria_pack.c b/storage/maria/maria_pack.c
index 5bdeca327dd..fd8e6e5818c 100644
--- a/storage/maria/maria_pack.c
+++ b/storage/maria/maria_pack.c
@@ -441,7 +441,7 @@ static my_bool open_maria_files(PACK_MRG_INFO *mrg,char **names,uint count)
uint i,j;
mrg->count=0;
mrg->current=0;
- mrg->file=(MARIA_HA**) my_malloc(sizeof(MARIA_HA*)*count,MYF(MY_FAE));
+ mrg->file=(MARIA_HA**) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(MARIA_HA*)*count,MYF(MY_FAE));
mrg->free_file=1;
mrg->src_file_has_indexes_disabled= 0;
for (i=0; i < count ; i++)
@@ -528,7 +528,7 @@ static int compress(PACK_MRG_INFO *mrg,char *result_table)
< 0)
goto err;
length=(uint) share->base.keystart;
- if (!(buff= (uchar*) my_malloc(length,MYF(MY_WME))))
+ if (!(buff= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED, length, MYF(MY_WME))))
goto err;
if (my_pread(share->kfile.file, buff, length, 0L, MYF(MY_WME | MY_NABP)) ||
my_write(join_maria_file,buff,length,
@@ -775,9 +775,8 @@ static HUFF_COUNTS *init_huff_count(MARIA_HA *info,my_off_t records)
{
reg2 uint i;
reg1 HUFF_COUNTS *count;
- if ((count = (HUFF_COUNTS*) my_malloc(info->s->base.fields*
- sizeof(HUFF_COUNTS),
- MYF(MY_ZEROFILL | MY_WME))))
+ if ((count = (HUFF_COUNTS*) my_malloc(PSI_NOT_INSTRUMENTED,
+ info->s->base.fields*sizeof(HUFF_COUNTS), MYF(MY_ZEROFILL | MY_WME))))
{
for (i=0 ; i < info->s->base.fields ; i++)
{
@@ -804,7 +803,8 @@ static HUFF_COUNTS *init_huff_count(MARIA_HA *info,my_off_t records)
NULL, MYF(0));
if (records && type != FIELD_BLOB && type != FIELD_VARCHAR)
count[col_nr].tree_pos=count[col_nr].tree_buff =
- my_malloc(count[col_nr].field_length > 1 ? tree_buff_length : 2,
+ my_malloc(PSI_NOT_INSTRUMENTED,
+ count[col_nr].field_length > 1 ? tree_buff_length : 2,
MYF(MY_WME));
}
}
@@ -1448,8 +1448,8 @@ static HUFF_TREE* make_huff_trees(HUFF_COUNTS *huff_counts, uint trees)
HUFF_TREE *huff_tree;
DBUG_ENTER("make_huff_trees");
- if (!(huff_tree=(HUFF_TREE*) my_malloc(trees*sizeof(HUFF_TREE),
- MYF(MY_WME | MY_ZEROFILL))))
+ if (!(huff_tree=(HUFF_TREE*) my_malloc(PSI_NOT_INSTRUMENTED,
+ trees*sizeof(HUFF_TREE), MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(0);
for (tree=0 ; tree < trees ; tree++)
@@ -1526,16 +1526,15 @@ static int make_huff_tree(HUFF_TREE *huff_tree, HUFF_COUNTS *huff_counts)
if (!huff_tree->element_buffer)
{
if (!(huff_tree->element_buffer=
- (HUFF_ELEMENT*) my_malloc(found*2*sizeof(HUFF_ELEMENT),MYF(MY_WME))))
+ (HUFF_ELEMENT*) my_malloc(PSI_NOT_INSTRUMENTED,
+ found*2*sizeof(HUFF_ELEMENT),MYF(MY_WME))))
return 1;
}
else
{
HUFF_ELEMENT *temp;
- if (!(temp=
- (HUFF_ELEMENT*) my_realloc((uchar*) huff_tree->element_buffer,
- found*2*sizeof(HUFF_ELEMENT),
- MYF(MY_WME))))
+ if (!(temp= (HUFF_ELEMENT*) my_realloc(PSI_NOT_INSTRUMENTED,
+ (uchar*) huff_tree->element_buffer, found*2*sizeof(HUFF_ELEMENT), MYF(MY_WME))))
return 1;
huff_tree->element_buffer=temp;
}
@@ -1901,8 +1900,8 @@ static int make_huff_decode_table(HUFF_TREE *huff_tree, uint trees)
{
elements=huff_tree->counts->tree_buff ? huff_tree->elements : 256;
if (!(huff_tree->code =
- (ulonglong*) my_malloc(elements*
- (sizeof(ulonglong) + sizeof(uchar)),
+ (ulonglong*) my_malloc(PSI_NOT_INSTRUMENTED,
+ elements* (sizeof(ulonglong) + sizeof(uchar)),
MYF(MY_WME | MY_ZEROFILL))))
return 1;
huff_tree->code_len=(uchar*) (huff_tree->code+elements);
@@ -2803,8 +2802,8 @@ static char *make_old_name(char *new_name, char *old_name)
static void init_file_buffer(File file, pbool read_buffer)
{
file_buffer.file=file;
- file_buffer.buffer= (uchar*) my_malloc(ALIGN_SIZE(RECORD_CACHE_SIZE),
- MYF(MY_WME));
+ file_buffer.buffer= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED,
+ ALIGN_SIZE(RECORD_CACHE_SIZE), MYF(MY_WME));
file_buffer.end=file_buffer.buffer+ALIGN_SIZE(RECORD_CACHE_SIZE)-8;
file_buffer.pos_in_file=0;
error_on_write=0;
@@ -2860,7 +2859,8 @@ static int flush_buffer(ulong neaded_length)
{
uchar *tmp;
neaded_length+=256; /* some margin */
- tmp= (uchar*) my_realloc(file_buffer.buffer, neaded_length,MYF(MY_WME));
+ tmp= (uchar*) my_realloc(PSI_NOT_INSTRUMENTED, file_buffer.buffer,
+ neaded_length,MYF(MY_WME));
if (!tmp)
return 1;
file_buffer.pos= (tmp + (ulong) (file_buffer.pos - file_buffer.buffer));
diff --git a/storage/maria/maria_read_log.c b/storage/maria/maria_read_log.c
index f0dc331cf10..29c3c5a12e2 100644
--- a/storage/maria/maria_read_log.c
+++ b/storage/maria/maria_read_log.c
@@ -317,7 +317,7 @@ get_one_option(const struct my_option *opt,
char *pos;
if (!my_hash_inited(&tables_to_redo))
{
- my_hash_init2(&tables_to_redo, 16, &my_charset_bin,
+ my_hash_init2(PSI_INSTRUMENT_ME, &tables_to_redo, 16, &my_charset_bin,
16, 0, 0, my_hash_get_string, 0, 0, HASH_UNIQUE);
}
do
diff --git a/storage/maria/test_ma_backup.c b/storage/maria/test_ma_backup.c
index 4d0599dfc46..ce43109a38b 100644
--- a/storage/maria/test_ma_backup.c
+++ b/storage/maria/test_ma_backup.c
@@ -113,7 +113,7 @@ static int copy_table(const char *table_name, int stage)
cap.online_backup_safe);
printf("- Copying index file\n");
- copy_buffer= my_malloc(cap.block_size, MYF(0));
+ copy_buffer= my_malloc(PSI_NOT_INSTRUMENTED, cap.block_size, MYF(0));
for (block= 0 ; ; block++)
{
if ((error= aria_read_index(org_file, &cap, block, copy_buffer) ==
diff --git a/storage/maria/trnman.c b/storage/maria/trnman.c
index 6bc83a9ba88..c018205f25e 100644
--- a/storage/maria/trnman.c
+++ b/storage/maria/trnman.c
@@ -149,7 +149,7 @@ int trnman_init(TrID initial_trid)
DBUG_ENTER("trnman_init");
DBUG_PRINT("enter", ("initial_trid: %lu", (ulong) initial_trid));
- short_trid_to_active_trn= (TRN **)my_malloc(SHORT_TRID_MAX*sizeof(TRN*),
+ short_trid_to_active_trn= (TRN **)my_malloc(PSI_INSTRUMENT_ME, SHORT_TRID_MAX*sizeof(TRN*),
MYF(MY_WME|MY_ZEROFILL));
if (unlikely(!short_trid_to_active_trn))
DBUG_RETURN(1);
@@ -312,7 +312,7 @@ TRN *trnman_new_trn(WT_THD *wt)
(Like redo_lns, which is assumed to be 0 at start of row handling
and reset to zero before end of row handling)
*/
- trn= (TRN *)my_malloc(sizeof(TRN), MYF(MY_WME | MY_ZEROFILL));
+ trn= (TRN *)my_malloc(PSI_INSTRUMENT_ME, sizeof(TRN), MYF(MY_WME | MY_ZEROFILL));
if (unlikely(!trn))
{
DBUG_PRINT("info", ("mysql_mutex_unlock LOCK_trn_list"));
@@ -700,8 +700,8 @@ my_bool trnman_collect_transactions(LEX_STRING *str_act, LEX_STRING *str_com,
#endif
LSN_STORE_SIZE /* first_undo_lsn */
) * trnman_committed_transactions;
- if ((NULL == (str_act->str= my_malloc(str_act->length, MYF(MY_WME)))) ||
- (NULL == (str_com->str= my_malloc(str_com->length, MYF(MY_WME)))))
+ if ((NULL == (str_act->str= my_malloc(PSI_INSTRUMENT_ME, str_act->length, MYF(MY_WME)))) ||
+ (NULL == (str_com->str= my_malloc(PSI_INSTRUMENT_ME, str_com->length, MYF(MY_WME)))))
goto err;
/* First, the active transactions */
ptr= str_act->str + 2 + LSN_STORE_SIZE;
diff --git a/storage/maria/unittest/ma_pagecache_single.c b/storage/maria/unittest/ma_pagecache_single.c
index 00e6efad0e6..4cd62c52d86 100644
--- a/storage/maria/unittest/ma_pagecache_single.c
+++ b/storage/maria/unittest/ma_pagecache_single.c
@@ -576,11 +576,11 @@ int simple_delete_flush_test()
int simple_big_test()
{
- unsigned char *buffw= (unsigned char *) my_malloc(TEST_PAGE_SIZE, MYF(MY_WME));
- unsigned char *buffr= (unsigned char *) my_malloc(TEST_PAGE_SIZE, MYF(MY_WME));
+ unsigned char *buffw= (unsigned char *) my_malloc(PSI_NOT_INSTRUMENTED, TEST_PAGE_SIZE, MYF(MY_WME));
+ unsigned char *buffr= (unsigned char *) my_malloc(PSI_NOT_INSTRUMENTED, TEST_PAGE_SIZE, MYF(MY_WME));
struct file_desc *desc= ((struct file_desc *)
- my_malloc((PCACHE_SIZE/(TEST_PAGE_SIZE/2) + 1) *
- sizeof(struct file_desc), MYF(MY_WME)));
+ my_malloc(PSI_NOT_INSTRUMENTED,
+ (PCACHE_SIZE/(TEST_PAGE_SIZE/2) + 1) * sizeof(struct file_desc), MYF(MY_WME)));
int res, i;
DBUG_ENTER("simple_big_test");
diff --git a/storage/maria/unittest/sequence_storage.c b/storage/maria/unittest/sequence_storage.c
index c6c8caefca1..1e6b3fcb239 100644
--- a/storage/maria/unittest/sequence_storage.c
+++ b/storage/maria/unittest/sequence_storage.c
@@ -33,7 +33,8 @@ my_bool seq_storage_reader_init(SEQ_STORAGE *seq, const char *file)
seq->pos= 0;
if ((fd= my_fopen(file, O_RDONLY, MYF(MY_WME))) == NULL)
return 1;
- if (my_init_dynamic_array(&seq->seq, sizeof(ulong), 10, 10, MYF(0)))
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &seq->seq, sizeof(ulong), 10,
+ 10, MYF(0)))
return 1;
for(;;)
diff --git a/storage/maria/unittest/test_file.c b/storage/maria/unittest/test_file.c
index 354f691aaa9..8c9a5f66a2f 100644
--- a/storage/maria/unittest/test_file.c
+++ b/storage/maria/unittest/test_file.c
@@ -38,7 +38,7 @@
int test_file(PAGECACHE_FILE file, char *file_name,
off_t size, size_t buff_size, struct file_desc *desc)
{
- unsigned char *buffr= my_malloc(buff_size, MYF(0));
+ unsigned char *buffr= my_malloc(PSI_NOT_INSTRUMENTED, buff_size, MYF(0));
off_t pos= 0;
size_t byte;
int step= 0;
diff --git a/storage/maria/unittest/trnman-t.c b/storage/maria/unittest/trnman-t.c
index 00e84cb2456..e16d41b5821 100644
--- a/storage/maria/unittest/trnman-t.c
+++ b/storage/maria/unittest/trnman-t.c
@@ -80,7 +80,7 @@ void run_test(const char *test, pthread_handler handler, int n, int m)
litmus= 0;
- threads= (pthread_t *)my_malloc(sizeof(void *)*n, MYF(0));
+ threads= (pthread_t *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(void *)*n, MYF(0));
if (!threads)
{
diag("Out of memory");
diff --git a/storage/mroonga/ha_mroonga.cpp b/storage/mroonga/ha_mroonga.cpp
index 0d0ee3aab9d..5cdf062922b 100644
--- a/storage/mroonga/ha_mroonga.cpp
+++ b/storage/mroonga/ha_mroonga.cpp
@@ -228,9 +228,9 @@ Time_zone *mrn_my_tz_UTC;
HASH *mrn_table_def_cache;
#endif
-#ifdef MRN_HAVE_PSI_MEMORY_KEY
PSI_memory_key mrn_memory_key;
+#ifdef MRN_HAVE_PSI_MEMORY_KEY
static PSI_memory_info mrn_all_memory_keys[]=
{
{&mrn_memory_key, "Mroonga", 0}
diff --git a/storage/mroonga/mrn_mysql_compat.h b/storage/mroonga/mrn_mysql_compat.h
index bdb15637e31..08d874fabaf 100644
--- a/storage/mroonga/mrn_mysql_compat.h
+++ b/storage/mroonga/mrn_mysql_compat.h
@@ -60,19 +60,8 @@
# define KEY_N_KEY_PARTS(key) (key)->key_parts
#endif
-#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100213
# define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \
- init_alloc_root(PTR, "mroonga", SZ1, SZ2, FLAG)
-#elif defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000
-# define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \
- init_alloc_root(PTR, SZ1, SZ2, FLAG)
-#elif MYSQL_VERSION_ID >= 50706
-# define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \
- init_alloc_root(mrn_memory_key, PTR, SZ1, SZ2)
-#else
-# define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \
- init_alloc_root(PTR, SZ1, SZ2)
-#endif
+ init_alloc_root(mrn_memory_key, PTR, SZ1, SZ2, FLAG)
#if MYSQL_VERSION_ID < 100002 || !defined(MRN_MARIADB_P)
# define GTS_TABLE 0
@@ -144,11 +133,10 @@
# define MRN_SEVERITY_WARNING Sql_condition::WARN_LEVEL_WARN
#endif
-#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P)
-# define MRN_HAVE_PSI_MEMORY_KEY
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+#define MRN_HAVE_PSI_MEMORY_KEY
#endif
-#ifdef MRN_HAVE_PSI_MEMORY_KEY
# define mrn_my_malloc(size, flags) \
my_malloc(mrn_memory_key, size, flags)
# define mrn_my_strdup(string, flags) \
@@ -157,14 +145,6 @@
my_strndup(mrn_memory_key, string, size, flags)
# define mrn_my_multi_malloc(flags, ...) \
my_multi_malloc(mrn_memory_key, flags, __VA_ARGS__)
-#else
-# define mrn_my_malloc(size, flags) my_malloc(size, flags)
-# define mrn_my_strdup(string, flags) my_strdup(string, flags)
-# define mrn_my_strndup(string, size, flags) \
- my_strndup(string, size, flags)
-# define mrn_my_multi_malloc(flags, ...) \
- my_multi_malloc(flags, __VA_ARGS__)
-#endif
#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P)
# define MRN_STRING_FREE(string) string.mem_free();
@@ -240,40 +220,11 @@
((select_lex)->options)
#endif
-#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000
-# if MYSQL_VERSION_ID >= 100213
-# define mrn_init_sql_alloc(thd, mem_root) \
- init_sql_alloc(mem_root, "Mroonga", \
- TABLE_ALLOC_BLOCK_SIZE, \
- 0, \
- MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC))
-#elif MYSQL_VERSION_ID >= 100104
# define mrn_init_sql_alloc(thd, mem_root) \
- init_sql_alloc(mem_root, \
+ init_sql_alloc(mrn_memory_key, mem_root, \
TABLE_ALLOC_BLOCK_SIZE, \
0, \
MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC))
-# else
-# define mrn_init_sql_alloc(thd, mem_root) \
- init_sql_alloc(mem_root, \
- TABLE_ALLOC_BLOCK_SIZE, \
- 0, \
- MYF(0))
-# endif
-#else
-# if MYSQL_VERSION_ID >= 50709
-# define mrn_init_sql_alloc(thd, mem_root) \
- init_sql_alloc(mrn_memory_key, \
- mem_root, \
- TABLE_ALLOC_BLOCK_SIZE, \
- 0)
-# else
-# define mrn_init_sql_alloc(thd, mem_root) \
- init_sql_alloc(mem_root, \
- TABLE_ALLOC_BLOCK_SIZE, \
- 0)
-# endif
-#endif
#ifdef MRN_MARIADB_P
# define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning
@@ -288,7 +239,6 @@
#define MRN_ERROR_CODE_DATA_TRUNCATE(thd) \
(MRN_ABORT_ON_WARNING(thd) ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED)
-#if MYSQL_VERSION_ID >= 50709 && !defined(MRN_MARIADB_P)
# define mrn_my_hash_init(hash, \
charset, \
default_array_elements, \
@@ -297,25 +247,7 @@
get_key, \
free_element, \
flags) \
- my_hash_init(hash, \
- charset, \
- default_array_elements, \
- key_offset, \
- key_length, \
- get_key, \
- free_element, \
- flags, \
- mrn_memory_key)
-#else
-# define mrn_my_hash_init(hash, \
- charset, \
- default_array_elements, \
- key_offset, \
- key_length, \
- get_key, \
- free_element, \
- flags) \
- my_hash_init(hash, \
+ my_hash_init(mrn_memory_key, hash, \
charset, \
default_array_elements, \
key_offset, \
@@ -323,7 +255,6 @@
get_key, \
free_element, \
flags)
-#endif
#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000
# define mrn_strconvert(from_cs, \
diff --git a/storage/mroonga/mrn_variables.hpp b/storage/mroonga/mrn_variables.hpp
index f55b1fd35a0..8a0113c5e14 100644
--- a/storage/mroonga/mrn_variables.hpp
+++ b/storage/mroonga/mrn_variables.hpp
@@ -22,9 +22,7 @@
#include "mrn_mysql_compat.h"
-#ifdef MRN_HAVE_PSI_MEMORY_KEY
extern PSI_memory_key mrn_memory_key;
-#endif
namespace mrn {
namespace variables {
diff --git a/storage/myisam/ft_boolean_search.c b/storage/myisam/ft_boolean_search.c
index 406a9bbc951..a91467c5b8d 100644
--- a/storage/myisam/ft_boolean_search.c
+++ b/storage/myisam/ft_boolean_search.c
@@ -566,7 +566,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, uchar *query,
FTB_EXPR *ftbe;
FTB_WORD *ftbw;
- if (!(ftb=(FTB *)my_malloc(sizeof(FTB), MYF(MY_WME))))
+ if (!(ftb=(FTB *)my_malloc(mi_key_memory_FTB, sizeof(FTB), MYF(MY_WME))))
return 0;
ftb->please= (struct _ft_vft *) & _ft_vft_boolean;
ftb->state=UNINITIALIZED;
@@ -579,7 +579,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, uchar *query,
bzero(& ftb->no_dupes, sizeof(TREE));
ftb->last_word= 0;
- init_alloc_root(&ftb->mem_root, "fulltext", 1024, 1024, MYF(0));
+ init_alloc_root(mi_key_memory_FTB, &ftb->mem_root, 1024, 1024, MYF(0));
ftb->queue.max_elements= 0;
if (!(ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR))))
goto err;
diff --git a/storage/myisam/ft_nlq_search.c b/storage/myisam/ft_nlq_search.c
index 3e433b71761..eb95d1e0b94 100644
--- a/storage/myisam/ft_nlq_search.c
+++ b/storage/myisam/ft_nlq_search.c
@@ -287,7 +287,7 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, uchar *query,
If ndocs == 0, this will not allocate RAM for FT_INFO.doc[],
so if ndocs == 0, FT_INFO.doc[] must not be accessed.
*/
- dlist=(FT_INFO *)my_malloc(sizeof(FT_INFO)+
+ dlist=(FT_INFO *)my_malloc(mi_key_memory_FT_INFO, sizeof(FT_INFO)+
sizeof(FT_DOC)*
(int)(aio.dtree.elements_in_tree-1),
MYF(0));
diff --git a/storage/myisam/ft_parser.c b/storage/myisam/ft_parser.c
index 9f62250f760..4584dbd4b91 100644
--- a/storage/myisam/ft_parser.c
+++ b/storage/myisam/ft_parser.c
@@ -341,9 +341,10 @@ MYSQL_FTPARSER_PARAM* ftparser_alloc_param(MI_INFO *info)
(ftb_check_phrase_internal, ftb_phrase_add_word). Thus MAX_PARAM_NR=2.
*/
info->ftparser_param= (MYSQL_FTPARSER_PARAM *)
- my_malloc(MAX_PARAM_NR * sizeof(MYSQL_FTPARSER_PARAM) *
- info->s->ftkeys, MYF(MY_WME | MY_ZEROFILL));
- init_alloc_root(&info->ft_memroot, "fulltext_parser",
+ my_malloc(mi_key_memory_FTPARSER_PARAM,
+ MAX_PARAM_NR * sizeof(MYSQL_FTPARSER_PARAM) * info->s->ftkeys,
+ MYF(MY_WME | MY_ZEROFILL));
+ init_alloc_root(mi_key_memory_ft_memroot, &info->ft_memroot,
FTPARSER_MEMROOT_ALLOC_SIZE, 0, MYF(0));
}
return info->ftparser_param;
diff --git a/storage/myisam/ft_stopwords.c b/storage/myisam/ft_stopwords.c
index 3422a82a111..34c445cc163 100644
--- a/storage/myisam/ft_stopwords.c
+++ b/storage/myisam/ft_stopwords.c
@@ -59,7 +59,8 @@ int ft_init_stopwords()
DBUG_ENTER("ft_init_stopwords");
if (!stopwords3)
{
- if (!(stopwords3=(TREE *)my_malloc(sizeof(TREE),MYF(0))))
+ if (!(stopwords3=(TREE *)my_malloc(mi_key_memory_ft_stopwords,
+ sizeof(TREE), MYF(0))))
DBUG_RETURN(-1);
init_tree(stopwords3,0,0,sizeof(FT_STOPWORD),(qsort_cmp2)&FT_STOPWORD_cmp,
(ft_stopword_file ? (tree_element_free)&FT_STOPWORD_free : 0),
@@ -89,13 +90,15 @@ int ft_init_stopwords()
DBUG_RETURN(-1);
len=(size_t)my_seek(fd, 0L, MY_SEEK_END, MYF(0));
my_seek(fd, 0L, MY_SEEK_SET, MYF(0));
- if (!(start=buffer=my_malloc(len+1, MYF(MY_WME))))
+ if (!(start= buffer= my_malloc(mi_key_memory_ft_stopwords, len+1,
+ MYF(MY_WME))))
goto err0;
len=my_read(fd, buffer, len, MYF(MY_WME));
end=start+len;
while (ft_simple_get_word(ft_stopword_cs, &start, end, &w, TRUE))
{
- if (ft_add_stopword(my_strndup((char*) w.pos, w.len, MYF(0))))
+ if (ft_add_stopword(my_strndup(mi_key_memory_ft_stopwords,
+ (char*) w.pos, w.len, MYF(0))))
goto err1;
}
error=0;
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 38091dae0ba..0d3c28fff56 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -254,7 +254,7 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
TABLE_SHARE *share= table_arg->s;
uint options= share->db_options_in_use;
DBUG_ENTER("table2myisam");
- if (!(my_multi_malloc(MYF(MY_WME),
+ if (!(my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
recinfo_out, (share->fields * 2 + 2) * sizeof(MI_COLUMNDEF),
keydef_out, share->keys * sizeof(MI_KEYDEF),
&keyseg,
@@ -2520,7 +2520,7 @@ static int myisam_init(void *p)
else
myisam_recover_options= HA_RECOVER_OFF;
- myisam_block_size=(uint) 1 << my_bit_log2(opt_myisam_block_size);
+ myisam_block_size=(uint) 1 << my_bit_log2_uint64(opt_myisam_block_size);
hton= (handlerton *)p;
hton->db_type= DB_TYPE_MYISAM;
diff --git a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c
index 3f3c60a4249..88c6a4837e4 100644
--- a/storage/myisam/mi_check.c
+++ b/storage/myisam/mi_check.c
@@ -2139,7 +2139,7 @@ int filecopy(HA_CHECK *param, File to,File from,my_off_t start,
DBUG_ENTER("filecopy");
buff_length=(ulong) MY_MIN(param->write_buffer_length,length);
- if (!(buff=my_malloc(buff_length,MYF(0))))
+ if (!(buff=my_malloc(mi_key_memory_filecopy, buff_length, MYF(0))))
{
buff=tmp_buff; buff_length=IO_SIZE;
}
@@ -2294,8 +2294,8 @@ int mi_repair_by_sort(HA_CHECK *param, register MI_INFO *info,
mysql_file_seek(param->read_cache.file, 0L, MY_SEEK_END, MYF(0));
sort_param.wordlist=NULL;
- init_alloc_root(&sort_param.wordroot, "sort", FTPARSER_MEMROOT_ALLOC_SIZE, 0,
- MYF(param->malloc_flags));
+ init_alloc_root(mi_key_memory_MI_SORT_PARAM_wordroot, &sort_param.wordroot,
+ FTPARSER_MEMROOT_ALLOC_SIZE, 0, MYF(param->malloc_flags));
if (share->data_file_type == DYNAMIC_RECORD)
length=MY_MAX(share->base.min_pack_length+1,share->base.min_block_length);
@@ -2789,7 +2789,7 @@ int mi_repair_parallel(HA_CHECK *param, register MI_INFO *info,
if (share->options & HA_OPTION_COMPRESS_RECORD)
set_if_bigger(max_pack_reclength, share->max_pack_length);
if (!(sort_param=(MI_SORT_PARAM *)
- my_malloc((uint) share->base.keys *
+ my_malloc(mi_key_memory_MI_SORT_PARAM, (uint) share->base.keys *
(sizeof(MI_SORT_PARAM) + max_pack_reclength),
MYF(MY_ZEROFILL))))
{
@@ -2872,8 +2872,8 @@ int mi_repair_parallel(HA_CHECK *param, register MI_INFO *info,
uint ft_max_word_len_for_sort=FT_MAX_WORD_LEN_FOR_SORT*
sort_param[i].keyinfo->seg->charset->mbmaxlen;
sort_param[i].key_length+=ft_max_word_len_for_sort-HA_FT_MAXBYTELEN;
- init_alloc_root(&sort_param[i].wordroot, "sort",
- FTPARSER_MEMROOT_ALLOC_SIZE, 0,
+ init_alloc_root(mi_key_memory_MI_SORT_PARAM_wordroot,
+ &sort_param[i].wordroot, FTPARSER_MEMROOT_ALLOC_SIZE, 0,
MYF(param->malloc_flags));
}
}
@@ -3717,7 +3717,8 @@ int sort_write_record(MI_SORT_PARAM *sort_param)
MI_DYN_DELETE_BLOCK_HEADER;
if (sort_info->buff_length < reclength)
{
- if (!(sort_info->buff=my_realloc(sort_info->buff, (uint) reclength,
+ if (!(sort_info->buff=my_realloc(mi_key_memory_SORT_INFO_buffer,
+ sort_info->buff, (uint) reclength,
MYF(MY_FREE_ON_ERROR | MY_WME |
MY_ALLOW_ZERO_PTR))))
DBUG_RETURN(1);
@@ -3934,7 +3935,8 @@ static int sort_ft_key_write(MI_SORT_PARAM *sort_param, const void *a)
sort_info->info->s->rec_reflength) &&
(sort_info->info->s->options &
(HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
- ft_buf=(SORT_FT_BUF *)my_malloc(sort_param->keyinfo->block_length +
+ ft_buf=(SORT_FT_BUF *)my_malloc(mi_key_memory_SORT_FT_BUF,
+ sort_param->keyinfo->block_length +
sizeof(SORT_FT_BUF), MYF(MY_WME));
if (!ft_buf)
@@ -4205,7 +4207,8 @@ static SORT_KEY_BLOCKS *alloc_key_blocks(HA_CHECK *param, uint blocks,
SORT_KEY_BLOCKS *block;
DBUG_ENTER("alloc_key_blocks");
- if (!(block=(SORT_KEY_BLOCKS*) my_malloc((sizeof(SORT_KEY_BLOCKS)+
+ if (!(block=(SORT_KEY_BLOCKS*) my_malloc(mi_key_memory_SORT_KEY_BLOCKS,
+ (sizeof(SORT_KEY_BLOCKS)+
buffer_length+IO_SIZE)*blocks,
MYF(0))))
{
diff --git a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c
index c91c1af5f60..fcdb4569f4c 100644
--- a/storage/myisam/mi_create.c
+++ b/storage/myisam/mi_create.c
@@ -94,7 +94,8 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
ci->reloc_rows=ci->max_rows; /* Check if wrong parameter */
if (!(rec_per_key_part=
- (ulong*) my_malloc((keys + uniques)*HA_MAX_KEY_SEG*sizeof(long),
+ (ulong*) my_malloc(mi_key_memory_MYISAM_SHARE,
+ (keys + uniques) * HA_MAX_KEY_SEG * sizeof(long),
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(my_errno);
diff --git a/storage/myisam/mi_dynrec.c b/storage/myisam/mi_dynrec.c
index 69c13ab96cf..09c10040f9c 100644
--- a/storage/myisam/mi_dynrec.c
+++ b/storage/myisam/mi_dynrec.c
@@ -43,7 +43,7 @@ static int _mi_cmp_buffer(File file, const uchar *buff, my_off_t filepos,
/* Play it safe; We have a small stack when using threads */
#undef my_alloca
#undef my_afree
-#define my_alloca(A) my_malloc((A),MYF(0))
+#define my_alloca(A) my_malloc(PSI_NOT_INSTRUMENTED, (A),MYF(0))
#define my_afree(A) my_free((A))
/* Interface function from MI_INFO */
diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c
index 4d3c227dcc3..cca2afa0b03 100644
--- a/storage/myisam/mi_open.c
+++ b/storage/myisam/mi_open.c
@@ -310,7 +310,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
/* Add space for node pointer */
share->base.max_key_length+= share->base.key_reflength;
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(mi_key_memory_MYISAM_SHARE, MYF(MY_WME),
&share,sizeof(*share),
&share->state.rec_per_key_part,
sizeof(long)*base_key_parts,
@@ -599,7 +599,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
}
/* alloc and set up private structure parts */
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(mi_key_memory_MI_INFO, MYF(MY_WME),
&m_info,sizeof(MI_INFO),
&info.blobs,sizeof(MI_BLOB)*share->base.blobs,
&info.buff,(share->base.max_key_block_length*2+
@@ -759,7 +759,8 @@ uchar *mi_alloc_rec_buff(MI_INFO *info, ulong length, uchar **buf)
MI_REC_BUFF_OFFSET : 0);
if (extra && newptr)
newptr-= MI_REC_BUFF_OFFSET;
- if (!(newptr=(uchar*) my_realloc((uchar*)newptr, length+extra+8,
+ if (!(newptr=(uchar*) my_realloc(mi_key_memory_record_buffer,
+ (uchar*)newptr, length + extra + 8,
MYF(MY_ALLOW_ZERO_PTR))))
return NULL;
*((uint32 *) newptr)= (uint32) length;
@@ -1004,7 +1005,7 @@ uchar *mi_state_info_read(uchar *ptr, MI_STATE_INFO *state)
if (!state->rec_per_key_part)
{
- if (!my_multi_malloc(MY_WME,
+ if (!my_multi_malloc(mi_key_memory_MYISAM_SHARE, MYF(MY_WME),
&state->rec_per_key_part,sizeof(long)*key_parts,
&state->key_root, keys*sizeof(my_off_t),
&state->key_del, key_blocks*sizeof(my_off_t),
diff --git a/storage/myisam/mi_packrec.c b/storage/myisam/mi_packrec.c
index b28eaf21090..637b1e69bfd 100644
--- a/storage/myisam/mi_packrec.c
+++ b/storage/myisam/mi_packrec.c
@@ -195,8 +195,8 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
- Distinct column values
*/
if (!(share->decode_trees=(MI_DECODE_TREE*)
- my_malloc((uint) (trees*sizeof(MI_DECODE_TREE)+
- intervall_length*sizeof(uchar)),
+ my_malloc(mi_key_memory_MI_DECODE_TREE,
+ trees*sizeof(MI_DECODE_TREE) + intervall_length*sizeof(uchar),
MYF(MY_WME))))
goto err0;
intervall_buff=(uchar*) (share->decode_trees+trees);
@@ -218,7 +218,8 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
data, we add (BITS_SAVED / 8) - 1 bytes to the buffer size.
*/
if (!(share->decode_tables=(uint16*)
- my_malloc((length + OFFSET_TABLE_SIZE) * sizeof(uint16) +
+ my_malloc(mi_key_memory_MYISAM_SHARE_decode_tables,
+ (length + OFFSET_TABLE_SIZE) * sizeof(uint16) +
(uint) (share->pack.header_length - sizeof(header) +
(BITS_SAVED / 8) - 1), MYF(MY_WME | MY_ZEROFILL))))
goto err1;
@@ -258,9 +259,10 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
goto err3;
/* Reallocate the decoding tables to the used size. */
decode_table=(uint16*)
- my_realloc((uchar*) share->decode_tables,
+ my_realloc(mi_key_memory_MYISAM_SHARE_decode_tables,
+ (uchar*) share->decode_tables,
(uint) ((uchar*) decode_table - (uchar*) share->decode_tables),
- MYF(MY_HOLD_ON_ERROR));
+ MYF(0));
/* Fix the table addresses in the tree heads. */
{
my_ptrdiff_t diff=PTR_BYTE_DIFF(decode_table,share->decode_tables);
diff --git a/storage/myisam/mi_preload.c b/storage/myisam/mi_preload.c
index d52a2ea46ea..5f9132abe14 100644
--- a/storage/myisam/mi_preload.c
+++ b/storage/myisam/mi_preload.c
@@ -73,7 +73,8 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
length= info->preload_buff_size/block_length * block_length;
set_if_bigger(length, block_length);
- if (!(buff= (uchar *) my_malloc(length, MYF(MY_WME))))
+ if (!(buff= (uchar *) my_malloc(mi_key_memory_preload_buffer, length,
+ MYF(MY_WME))))
DBUG_RETURN(my_errno= HA_ERR_OUT_OF_MEM);
if (flush_key_blocks(share->key_cache, share->kfile, &share->dirty_part_map,
diff --git a/storage/myisam/mi_static.c b/storage/myisam/mi_static.c
index 3679ea4a329..d0c3995d9de 100644
--- a/storage/myisam/mi_static.c
+++ b/storage/myisam/mi_static.c
@@ -61,6 +61,28 @@ uint myisam_readnext_vec[]=
SEARCH_BIGGER, SEARCH_SMALLER, SEARCH_SMALLER
};
+PSI_memory_key mi_key_memory_MYISAM_SHARE;
+PSI_memory_key mi_key_memory_MI_INFO;
+PSI_memory_key mi_key_memory_MI_INFO_ft1_to_ft2;
+PSI_memory_key mi_key_memory_MI_INFO_bulk_insert;
+PSI_memory_key mi_key_memory_record_buffer;
+PSI_memory_key mi_key_memory_FTB;
+PSI_memory_key mi_key_memory_FT_INFO;
+PSI_memory_key mi_key_memory_FTPARSER_PARAM;
+PSI_memory_key mi_key_memory_ft_memroot;
+PSI_memory_key mi_key_memory_ft_stopwords;
+PSI_memory_key mi_key_memory_MI_SORT_PARAM;
+PSI_memory_key mi_key_memory_MI_SORT_PARAM_wordroot;
+PSI_memory_key mi_key_memory_SORT_FT_BUF;
+PSI_memory_key mi_key_memory_SORT_KEY_BLOCKS;
+PSI_memory_key mi_key_memory_filecopy;
+PSI_memory_key mi_key_memory_SORT_INFO_buffer;
+PSI_memory_key mi_key_memory_MI_DECODE_TREE;
+PSI_memory_key mi_key_memory_MYISAM_SHARE_decode_tables;
+PSI_memory_key mi_key_memory_preload_buffer;
+PSI_memory_key mi_key_memory_stPageList_pages;
+PSI_memory_key mi_key_memory_keycache_thread_var;
+
#ifdef HAVE_PSI_INTERFACE
PSI_mutex_key mi_key_mutex_MYISAM_SHARE_intern_lock,
mi_key_mutex_MI_SORT_INFO_mutex, mi_key_mutex_MI_CHECK_print_msg;
@@ -106,6 +128,31 @@ static PSI_thread_info all_myisam_threads[]=
{ &mi_key_thread_find_all_keys, "find_all_keys", 0},
};
+static PSI_memory_info all_myisam_memory[]=
+{
+ { &mi_key_memory_MYISAM_SHARE, "MYISAM_SHARE", 0},
+ { &mi_key_memory_MI_INFO, "MI_INFO", 0},
+ { &mi_key_memory_MI_INFO_ft1_to_ft2, "MI_INFO::ft1_to_ft2", 0},
+ { &mi_key_memory_MI_INFO_bulk_insert, "MI_INFO::bulk_insert", 0},
+ { &mi_key_memory_record_buffer, "record_buffer", 0},
+ { &mi_key_memory_FTB, "FTB", 0},
+ { &mi_key_memory_FT_INFO, "FT_INFO", 0},
+ { &mi_key_memory_FTPARSER_PARAM, "FTPARSER_PARAM", 0},
+ { &mi_key_memory_ft_memroot, "ft_memroot", 0},
+ { &mi_key_memory_ft_stopwords, "ft_stopwords", 0},
+ { &mi_key_memory_MI_SORT_PARAM, "MI_SORT_PARAM", 0},
+ { &mi_key_memory_MI_SORT_PARAM_wordroot, "MI_SORT_PARAM::wordroot", 0},
+ { &mi_key_memory_SORT_FT_BUF, "SORT_FT_BUF", 0},
+ { &mi_key_memory_SORT_KEY_BLOCKS, "SORT_KEY_BLOCKS", 0},
+ { &mi_key_memory_filecopy, "filecopy", 0},
+ { &mi_key_memory_SORT_INFO_buffer, "SORT_INFO::buffer", 0},
+ { &mi_key_memory_MI_DECODE_TREE, "MI_DECODE_TREE", 0},
+ { &mi_key_memory_MYISAM_SHARE_decode_tables, "MYISAM_SHARE::decode_tables", 0},
+ { &mi_key_memory_preload_buffer, "preload_buffer", 0},
+ { &mi_key_memory_stPageList_pages, "stPageList::pages", 0},
+ { &mi_key_memory_keycache_thread_var, "keycache_thread_var", 0}
+};
+
void init_myisam_psi_keys()
{
const char* category= "myisam";
@@ -125,6 +172,9 @@ void init_myisam_psi_keys()
count= array_elements(all_myisam_threads);
mysql_thread_register(category, all_myisam_threads, count);
+
+ count= array_elements(all_myisam_memory);
+ mysql_memory_register(category, all_myisam_memory, count);
}
#endif /* HAVE_PSI_INTERFACE */
diff --git a/storage/myisam/mi_test2.c b/storage/myisam/mi_test2.c
index 48a091e80de..5a66e958139 100644
--- a/storage/myisam/mi_test2.c
+++ b/storage/myisam/mi_test2.c
@@ -1021,7 +1021,7 @@ static void put_blob_in_record(uchar *blob_pos, char **blob_buffer)
if (rnd(10) == 0)
{
if (! *blob_buffer &&
- !(*blob_buffer=my_malloc((uint) use_blob,MYF(MY_WME))))
+ !(*blob_buffer=my_malloc(PSI_NOT_INSTRUMENTED, use_blob,MYF(MY_WME))))
{
use_blob=0;
return;
diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c
index 7345ab1604d..7d489908725 100644
--- a/storage/myisam/mi_write.c
+++ b/storage/myisam/mi_write.c
@@ -546,8 +546,10 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo,
{
/* yup. converting */
info->ft1_to_ft2=(DYNAMIC_ARRAY *)
- my_malloc(sizeof(DYNAMIC_ARRAY), MYF(MY_WME));
- my_init_dynamic_array(info->ft1_to_ft2, ft2len, 300, 50, MYF(0));
+ my_malloc(mi_key_memory_MI_INFO_ft1_to_ft2,
+ sizeof(DYNAMIC_ARRAY), MYF(MY_WME));
+ my_init_dynamic_array(mi_key_memory_MI_INFO_ft1_to_ft2,
+ info->ft1_to_ft2, ft2len, 300, 50, MYF(0));
/*
now, adding all keys from the page to dynarray
@@ -998,7 +1000,8 @@ int mi_init_bulk_insert(MI_INFO *info, size_t cache_size, ha_rows rows)
cache_size/=total_keylength*16;
info->bulk_insert=(TREE *)
- my_malloc((sizeof(TREE)*share->base.keys+
+ my_malloc(mi_key_memory_MI_INFO_bulk_insert,
+ (sizeof(TREE)*share->base.keys+
sizeof(bulk_insert_param)*num_keys),MYF(0));
if (!info->bulk_insert)
diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c
index 69c30dedb89..c4b274b3fe9 100644
--- a/storage/myisam/myisamchk.c
+++ b/storage/myisam/myisamchk.c
@@ -797,7 +797,7 @@ static void get_options(register int *argc,register char ***argv)
MYF(MY_WME))))
exit(1);
- myisam_block_size=(uint) 1 << my_bit_log2(opt_myisam_block_size);
+ myisam_block_size=(uint) 1 << my_bit_log2_uint64(opt_myisam_block_size);
return;
} /* get options */
diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h
index b92c012e5f4..c5975f42315 100644
--- a/storage/myisam/myisamdef.h
+++ b/storage/myisam/myisamdef.h
@@ -777,4 +777,26 @@ extern PSI_thread_key mi_key_thread_find_all_keys;
void init_myisam_psi_keys();
#endif /* HAVE_PSI_INTERFACE */
+extern PSI_memory_key mi_key_memory_MYISAM_SHARE;
+extern PSI_memory_key mi_key_memory_MI_INFO;
+extern PSI_memory_key mi_key_memory_MI_INFO_ft1_to_ft2;
+extern PSI_memory_key mi_key_memory_MI_INFO_bulk_insert;
+extern PSI_memory_key mi_key_memory_record_buffer;
+extern PSI_memory_key mi_key_memory_FTB;
+extern PSI_memory_key mi_key_memory_FT_INFO;
+extern PSI_memory_key mi_key_memory_FTPARSER_PARAM;
+extern PSI_memory_key mi_key_memory_ft_memroot;
+extern PSI_memory_key mi_key_memory_ft_stopwords;
+extern PSI_memory_key mi_key_memory_MI_SORT_PARAM;
+extern PSI_memory_key mi_key_memory_MI_SORT_PARAM_wordroot;
+extern PSI_memory_key mi_key_memory_SORT_FT_BUF;
+extern PSI_memory_key mi_key_memory_SORT_KEY_BLOCKS;
+extern PSI_memory_key mi_key_memory_filecopy;
+extern PSI_memory_key mi_key_memory_SORT_INFO_buffer;
+extern PSI_memory_key mi_key_memory_MI_DECODE_TREE;
+extern PSI_memory_key mi_key_memory_MYISAM_SHARE_decode_tables;
+extern PSI_memory_key mi_key_memory_preload_buffer;
+extern PSI_memory_key mi_key_memory_stPageList_pages;
+extern PSI_memory_key mi_key_memory_keycache_thread_var;
+
C_MODE_END
diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c
index 9bef2be929f..40d473dc532 100644
--- a/storage/myisam/myisamlog.c
+++ b/storage/myisam/myisamlog.c
@@ -422,7 +422,7 @@ static int examine_log(char * file_name, char **table_names)
* The additional space is needed for the sprintf commands two lines
* below.
*/
- file_info.show_name=my_memdup(isam_file_name,
+ file_info.show_name=my_memdup(PSI_NOT_INSTRUMENTED, isam_file_name,
(uint) strlen(isam_file_name)+10,
MYF(MY_WME));
if (file_info.id > 1)
@@ -451,8 +451,8 @@ static int examine_log(char * file_name, char **table_names)
if (!(file_info.isam= mi_open(isam_file_name,O_RDWR,
HA_OPEN_WAIT_IF_LOCKED)))
goto com_err;
- if (!(file_info.record=my_malloc(file_info.isam->s->base.reclength,
- MYF(MY_WME))))
+ if (!(file_info.record=my_malloc(PSI_NOT_INSTRUMENTED,
+ file_info.isam->s->base.reclength, MYF(MY_WME))))
goto end;
files_open++;
file_info.closed=0;
@@ -683,7 +683,7 @@ static int read_string(IO_CACHE *file, register uchar* *to, register uint length
if (*to)
my_free(*to);
- if (!(*to= (uchar*) my_malloc(length+1,MYF(MY_WME))) ||
+ if (!(*to= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED, length+1,MYF(MY_WME))) ||
my_b_read(file,(uchar*) *to,length))
{
if (*to)
diff --git a/storage/myisam/myisampack.c b/storage/myisam/myisampack.c
index b2a2909ad73..1267ddc724d 100644
--- a/storage/myisam/myisampack.c
+++ b/storage/myisam/myisampack.c
@@ -439,7 +439,7 @@ static my_bool open_isam_files(PACK_MRG_INFO *mrg, char **names, uint count)
uint i,j;
mrg->count=0;
mrg->current=0;
- mrg->file=(MI_INFO**) my_malloc(sizeof(MI_INFO*)*count,MYF(MY_FAE));
+ mrg->file=(MI_INFO**) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(MI_INFO*)*count,MYF(MY_FAE));
mrg->free_file=1;
mrg->src_file_has_indexes_disabled= 0;
for (i=0; i < count ; i++)
@@ -518,7 +518,7 @@ static int compress(PACK_MRG_INFO *mrg,char *result_table)
< 0)
goto err;
length=(uint) share->base.keystart;
- if (!(buff= (uchar*) my_malloc(length,MYF(MY_WME))))
+ if (!(buff= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED, length,MYF(MY_WME))))
goto err;
if (my_pread(share->kfile,buff,length,0L,MYF(MY_WME | MY_NABP)) ||
my_write(join_isam_file,buff,length,
@@ -798,7 +798,7 @@ static HUFF_COUNTS *init_huff_count(MI_INFO *info,my_off_t records)
{
reg2 uint i;
reg1 HUFF_COUNTS *count;
- if ((count = (HUFF_COUNTS*) my_malloc(info->s->base.fields*
+ if ((count = (HUFF_COUNTS*) my_malloc(PSI_NOT_INSTRUMENTED, info->s->base.fields*
sizeof(HUFF_COUNTS),
MYF(MY_ZEROFILL | MY_WME))))
{
@@ -825,7 +825,7 @@ static HUFF_COUNTS *init_huff_count(MI_INFO *info,my_off_t records)
NULL, MYF(0));
if (records && type != FIELD_BLOB && type != FIELD_VARCHAR)
count[i].tree_pos=count[i].tree_buff =
- my_malloc(count[i].field_length > 1 ? tree_buff_length : 2,
+ my_malloc(PSI_NOT_INSTRUMENTED, count[i].field_length > 1 ? tree_buff_length : 2,
MYF(MY_WME));
}
}
@@ -1476,7 +1476,7 @@ static HUFF_TREE* make_huff_trees(HUFF_COUNTS *huff_counts, uint trees)
HUFF_TREE *huff_tree;
DBUG_ENTER("make_huff_trees");
- if (!(huff_tree=(HUFF_TREE*) my_malloc(trees*sizeof(HUFF_TREE),
+ if (!(huff_tree=(HUFF_TREE*) my_malloc(PSI_NOT_INSTRUMENTED, trees*sizeof(HUFF_TREE),
MYF(MY_WME | MY_ZEROFILL))))
DBUG_RETURN(0);
@@ -1554,14 +1554,14 @@ static int make_huff_tree(HUFF_TREE *huff_tree, HUFF_COUNTS *huff_counts)
if (!huff_tree->element_buffer)
{
if (!(huff_tree->element_buffer=
- (HUFF_ELEMENT*) my_malloc(found*2*sizeof(HUFF_ELEMENT),MYF(MY_WME))))
+ (HUFF_ELEMENT*) my_malloc(PSI_NOT_INSTRUMENTED, found*2*sizeof(HUFF_ELEMENT),MYF(MY_WME))))
return 1;
}
else
{
HUFF_ELEMENT *temp;
if (!(temp=
- (HUFF_ELEMENT*) my_realloc((uchar*) huff_tree->element_buffer,
+ (HUFF_ELEMENT*) my_realloc(PSI_NOT_INSTRUMENTED, (uchar*) huff_tree->element_buffer,
found*2*sizeof(HUFF_ELEMENT),
MYF(MY_WME))))
return 1;
@@ -1930,7 +1930,7 @@ static int make_huff_decode_table(HUFF_TREE *huff_tree, uint trees)
{
elements=huff_tree->counts->tree_buff ? huff_tree->elements : 256;
if (!(huff_tree->code =
- (ulonglong*) my_malloc(elements*
+ (ulonglong*) my_malloc(PSI_NOT_INSTRUMENTED, elements*
(sizeof(ulonglong) + sizeof(uchar)),
MYF(MY_WME | MY_ZEROFILL))))
return 1;
@@ -2823,7 +2823,7 @@ static char *make_old_name(char *new_name, char *old_name)
static void init_file_buffer(File file, pbool read_buffer)
{
file_buffer.file=file;
- file_buffer.buffer= (uchar*) my_malloc(ALIGN_SIZE(RECORD_CACHE_SIZE),
+ file_buffer.buffer= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED, ALIGN_SIZE(RECORD_CACHE_SIZE),
MYF(MY_WME));
file_buffer.end=file_buffer.buffer+ALIGN_SIZE(RECORD_CACHE_SIZE)-8;
file_buffer.pos_in_file=0;
@@ -2880,7 +2880,7 @@ static int flush_buffer(ulong neaded_length)
{
char *tmp;
neaded_length+=256; /* some margin */
- tmp= my_realloc((char*) file_buffer.buffer, neaded_length,MYF(MY_WME));
+ tmp= my_realloc(PSI_NOT_INSTRUMENTED, (char*) file_buffer.buffer, neaded_length,MYF(MY_WME));
if (!tmp)
return 1;
file_buffer.pos= ((uchar*) tmp +
diff --git a/storage/myisam/rt_index.c b/storage/myisam/rt_index.c
index 08543ec2b22..651e2e79478 100644
--- a/storage/myisam/rt_index.c
+++ b/storage/myisam/rt_index.c
@@ -733,8 +733,11 @@ static int rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t page,
if (ReinsertList->n_pages == ReinsertList->m_pages)
{
ReinsertList->m_pages += REINSERT_BUFFER_INC;
- if (!(ReinsertList->pages = (stPageLevel*)my_realloc((uchar*)ReinsertList->pages,
- ReinsertList->m_pages * sizeof(stPageLevel), MYF(MY_ALLOW_ZERO_PTR))))
+ if (!(ReinsertList->pages = (stPageLevel*)
+ my_realloc(mi_key_memory_stPageList_pages,
+ (uchar*)ReinsertList->pages,
+ ReinsertList->m_pages * sizeof(stPageLevel),
+ MYF(MY_ALLOW_ZERO_PTR))))
goto err1;
}
/* save page to ReinsertList */
diff --git a/storage/myisam/sort.c b/storage/myisam/sort.c
index e586543363b..6fe38a3fd04 100644
--- a/storage/myisam/sort.c
+++ b/storage/myisam/sort.c
@@ -190,11 +190,12 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
}
if ((sort_keys= ((uchar **)
- my_malloc((size_t) (keys*(sort_length+sizeof(char*))+
+ my_malloc(PSI_INSTRUMENT_ME,
+ (size_t) (keys*(sort_length+sizeof(char*))+
HA_FT_MAXBYTELEN), MYF(0)))))
{
- if (my_init_dynamic_array(&buffpek, sizeof(BUFFPEK), maxbuffer,
- MY_MIN(maxbuffer/2, 1000), MYF(0)))
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &buffpek, sizeof(BUFFPEK),
+ maxbuffer, MY_MIN(maxbuffer/2, 1000), MYF(0)))
{
my_free(sort_keys);
sort_keys= 0;
@@ -406,12 +407,14 @@ static my_bool thr_find_all_keys_exec(MI_SORT_PARAM *sort_param)
}
while ((maxbuffer= (uint) (idx/(keys-1)+1)) != maxbuffer_org);
}
- if ((sort_keys= (uchar**) my_malloc((size_t)(keys * (sort_length + sizeof(char*)) +
+ if ((sort_keys= (uchar**) my_malloc(PSI_INSTRUMENT_ME,
+ (size_t)(keys * (sort_length + sizeof(char*)) +
((sort_param->keyinfo->flag & HA_FULLTEXT) ?
HA_FT_MAXBYTELEN : 0)), MYF(0))))
{
- if (my_init_dynamic_array(&sort_param->buffpek, sizeof(BUFFPEK),
- maxbuffer, MY_MIN(maxbuffer / 2, 1000), MYF(0)))
+ if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &sort_param->buffpek,
+ sizeof(BUFFPEK), maxbuffer,
+ MY_MIN(maxbuffer / 2, 1000), MYF(0)))
{
my_free(sort_keys);
sort_keys= NULL; /* Safety against double free on error. */
@@ -607,7 +610,8 @@ int thr_write_keys(MI_SORT_PARAM *sort_param)
length=param->sort_buffer_length;
while (length >= MIN_SORT_BUFFER)
{
- if ((mergebuf= my_malloc((size_t) length, MYF(0))))
+ if ((mergebuf= my_malloc(PSI_INSTRUMENT_ME,
+ (size_t) length, MYF(0))))
break;
length=length*3/4;
}
diff --git a/storage/myisammrg/ha_myisammrg.cc b/storage/myisammrg/ha_myisammrg.cc
index 14036a31b8c..4fd63020c6a 100644
--- a/storage/myisammrg/ha_myisammrg.cc
+++ b/storage/myisammrg/ha_myisammrg.cc
@@ -120,7 +120,7 @@ static handler *myisammrg_create_handler(handlerton *hton,
ha_myisammrg::ha_myisammrg(handlerton *hton, TABLE_SHARE *table_arg)
:handler(hton, table_arg), file(0), is_cloned(0)
{
- init_sql_alloc(&children_mem_root, "ha_myisammrg",
+ init_sql_alloc(rg_key_memory_children, &children_mem_root,
FN_REFLEN + ALLOC_ROOT_MIN_BLOCK_SIZE, 0, MYF(0));
}
diff --git a/storage/myisammrg/myrg_def.h b/storage/myisammrg/myrg_def.h
index 9ef65f220be..8bb79a73127 100644
--- a/storage/myisammrg/myrg_def.h
+++ b/storage/myisammrg/myrg_def.h
@@ -32,12 +32,13 @@ extern "C"
#endif
void myrg_print_wrong_table(const char *table_name);
-#ifdef HAVE_PSI_INTERFACE
+/* Always defined */
+extern PSI_memory_key rg_key_memory_MYRG_INFO;
C_MODE_START
extern PSI_mutex_key rg_key_mutex_MYRG_INFO_mutex;
+extern PSI_memory_key rg_key_memory_children;
extern PSI_file_key rg_key_file_MRG;
void init_myisammrg_psi_keys();
C_MODE_END
-#endif /* HAVE_PSI_INTERFACE */
diff --git a/storage/myisammrg/myrg_open.c b/storage/myisammrg/myrg_open.c
index 06c71dec14a..e19ce8f7cf3 100644
--- a/storage/myisammrg/myrg_open.c
+++ b/storage/myisammrg/myrg_open.c
@@ -108,7 +108,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
if (!m_info) /* First file */
{
key_parts=isam->s->base.key_parts;
- if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO) +
+ if (!(m_info= (MYRG_INFO*) my_malloc(rg_key_memory_MYRG_INFO,
+ sizeof(MYRG_INFO) +
files*sizeof(MYRG_TABLE) +
key_parts*sizeof(long),
MYF(MY_WME|MY_ZEROFILL))))
@@ -149,7 +150,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
if (bad_children)
goto bad_children;
- if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO),
+ if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(rg_key_memory_MYRG_INFO,
+ sizeof(MYRG_INFO),
MYF(MY_WME | MY_ZEROFILL))))
goto err;
/* Don't mark table readonly, for ALTER TABLE ... UNION=(...) to work */
@@ -285,7 +287,8 @@ MYRG_INFO *myrg_parent_open(const char *parent_name,
}
/* Allocate MERGE parent table structure. */
- if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO) +
+ if (!(m_info= (MYRG_INFO*) my_malloc(rg_key_memory_MYRG_INFO,
+ sizeof(MYRG_INFO) +
child_count * sizeof(MYRG_TABLE),
MYF(MY_WME | MY_ZEROFILL))))
goto err; /* purecov: inspected */
@@ -435,7 +438,8 @@ int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
if (!m_info->rec_per_key_part)
{
if(!(m_info->rec_per_key_part= (ulong*)
- my_malloc(key_parts * sizeof(long), MYF(MY_WME))))
+ my_malloc(rg_key_memory_MYRG_INFO,
+ key_parts * sizeof(long), MYF(MY_WME))))
goto err; /* purecov: inspected */
errpos= 1;
}
diff --git a/storage/myisammrg/myrg_static.c b/storage/myisammrg/myrg_static.c
index a2f5d074c9e..36ec25cb7d9 100644
--- a/storage/myisammrg/myrg_static.c
+++ b/storage/myisammrg/myrg_static.c
@@ -29,6 +29,9 @@ static const char *merge_insert_methods[] =
TYPELIB merge_insert_method= { array_elements(merge_insert_methods)-1,"",
merge_insert_methods, 0};
+PSI_memory_key rg_key_memory_MYRG_INFO;
+PSI_memory_key rg_key_memory_children;
+
#ifdef HAVE_PSI_INTERFACE
PSI_mutex_key rg_key_mutex_MYRG_INFO_mutex;
@@ -44,6 +47,12 @@ static PSI_file_info all_myisammrg_files[]=
{ &rg_key_file_MRG, "MRG", 0}
};
+static PSI_memory_info all_myisammrg_memory[]=
+{
+ { &rg_key_memory_MYRG_INFO, "MYRG_INFO", 0},
+ { &rg_key_memory_children, "children", 0}
+};
+
void init_myisammrg_psi_keys()
{
const char* category= "myisammrg";
@@ -54,6 +63,9 @@ void init_myisammrg_psi_keys()
count= array_elements(all_myisammrg_files);
mysql_file_register(category, all_myisammrg_files, count);
+
+ count= array_elements(all_myisammrg_memory);
+ mysql_memory_register(category, all_myisammrg_memory, count);
}
#endif /* HAVE_PSI_INTERFACE */
diff --git a/storage/oqgraph/ha_oqgraph.cc b/storage/oqgraph/ha_oqgraph.cc
index 20ebd49bd5d..1857b66fdfd 100644
--- a/storage/oqgraph/ha_oqgraph.cc
+++ b/storage/oqgraph/ha_oqgraph.cc
@@ -562,7 +562,7 @@ int ha_oqgraph::open(const char *name, int mode, uint test_if_locked)
init_tmp_table_share( thd, share, table->s->db.str, table->s->db.length, options->table_name, "");
// because of that, we need to reinitialize the memroot (to reset MY_THREAD_SPECIFIC flag)
DBUG_ASSERT(share->mem_root.used == NULL); // it's still empty
- init_sql_alloc(&share->mem_root, "share", TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0));
+ init_sql_alloc(PSI_INSTRUMENT_ME, &share->mem_root, TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0));
// What I think this code is doing:
// * Our OQGRAPH table is `database_blah/name`
diff --git a/storage/perfschema/CMakeLists.txt b/storage/perfschema/CMakeLists.txt
index e1839bc5b00..c871677d0a9 100644
--- a/storage/perfschema/CMakeLists.txt
+++ b/storage/perfschema/CMakeLists.txt
@@ -24,10 +24,14 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/sql
${CMAKE_BINARY_DIR}/sql
+ ${CMAKE_CURRENT_BINARY_DIR}
${PCRE_INCLUDES}
${SSL_INCLUDE_DIRS})
ADD_DEFINITIONS(-DMYSQL_SERVER)
+IF (SSL_DEFINES)
+ ADD_DEFINITIONS(${SSL_DEFINES})
+ENDIF()
#
# Maintainer: keep this list sorted, to avoid merge collisions.
@@ -42,27 +46,35 @@ cursor_by_user.h
pfs.h
pfs_account.h
pfs_atomic.h
+pfs_buffer_container.h
+pfs_builtin_memory.h
pfs_column_types.h
pfs_column_values.h
pfs_con_slice.h
pfs_defaults.h
pfs_digest.h
+pfs_program.h
+pfs_prepared_stmt.h
pfs_engine_table.h
pfs_events.h
pfs_events_stages.h
pfs_events_statements.h
+pfs_events_transactions.h
pfs_events_waits.h
pfs_global.h
pfs_host.h
pfs_instr.h
pfs_instr_class.h
pfs_lock.h
+pfs_memory.h
pfs_server.h
pfs_setup_actor.h
pfs_setup_object.h
pfs_stat.h
+pfs_status.h
pfs_timer.h
pfs_user.h
+pfs_variable.h
pfs_visitor.h
table_accounts.h
table_all_instr.h
@@ -74,11 +86,19 @@ table_esgs_global_by_event_name.h
table_esms_by_account_by_event_name.h
table_esms_by_host_by_event_name.h
table_esms_by_digest.h
+table_esms_by_program.h
+table_prepared_stmt_instances.h
table_esms_by_thread_by_event_name.h
table_esms_by_user_by_event_name.h
table_esms_global_by_event_name.h
+table_ets_by_account_by_event_name.h
+table_ets_by_host_by_event_name.h
+table_ets_by_thread_by_event_name.h
+table_ets_by_user_by_event_name.h
+table_ets_global_by_event_name.h
table_events_stages.h
table_events_statements.h
+table_events_transactions.h
table_events_waits.h
table_events_waits_summary.h
table_ews_by_account_by_event_name.h
@@ -87,6 +107,12 @@ table_ews_by_thread_by_event_name.h
table_ews_by_user_by_event_name.h
table_ews_global_by_event_name.h
table_file_instances.h
+table_md_locks.h
+table_mems_global_by_event_name.h
+table_mems_by_account_by_event_name.h
+table_mems_by_host_by_event_name.h
+table_mems_by_thread_by_event_name.h
+table_mems_by_user_by_event_name.h
table_file_summary_by_instance.h
table_file_summary_by_event_name.h
table_socket_instances.h
@@ -103,40 +129,68 @@ table_setup_instruments.h
table_setup_objects.h
table_setup_timers.h
table_sync_instances.h
+table_status_by_account.h
+table_status_by_host.h
+table_status_by_thread.h
+table_status_by_user.h
+table_global_status.h
+table_session_status.h
+table_variables_by_thread.h
+table_global_variables.h
+table_session_variables.h
+table_table_handles.h
table_threads.h
table_tiws_by_index_usage.h
table_tiws_by_table.h
table_tlws_by_table.h
table_users.h
+table_uvar_by_thread.h
cursor_by_thread_connect_attr.h
table_session_connect.h
table_session_connect_attrs.h
table_session_account_connect_attrs.h
+table_replication_connection_configuration.h
+table_replication_group_members.h
+table_replication_connection_status.h
+table_replication_applier_configuration.h
+table_replication_applier_status.h
+table_replication_applier_status_by_coordinator.h
+table_replication_applier_status_by_worker.h
+table_replication_group_member_stats.h
cursor_by_account.cc
cursor_by_host.cc
cursor_by_thread.cc
cursor_by_user.cc
ha_perfschema.cc
+mysqld_thd_manager.cc
pfs.cc
pfs_account.cc
pfs_autosize.cc
+pfs_buffer_container.cc
+pfs_builtin_memory.cc
pfs_column_values.cc
pfs_con_slice.cc
pfs_defaults.cc
pfs_digest.cc
+pfs_program.cc
+pfs_prepared_stmt.cc
pfs_engine_table.cc
pfs_events_stages.cc
pfs_events_statements.cc
+pfs_events_transactions.cc
pfs_events_waits.cc
pfs_global.cc
pfs_host.cc
pfs_instr.cc
pfs_instr_class.cc
+pfs_memory.cc
pfs_server.cc
pfs_setup_actor.cc
pfs_setup_object.cc
+pfs_status.cc
pfs_timer.cc
pfs_user.cc
+pfs_variable.cc
pfs_visitor.cc
table_accounts.cc
table_all_instr.cc
@@ -148,11 +202,19 @@ table_esgs_global_by_event_name.cc
table_esms_by_account_by_event_name.cc
table_esms_by_host_by_event_name.cc
table_esms_by_digest.cc
+table_esms_by_program.cc
+table_prepared_stmt_instances.cc
table_esms_by_thread_by_event_name.cc
table_esms_by_user_by_event_name.cc
table_esms_global_by_event_name.cc
+table_ets_by_account_by_event_name.cc
+table_ets_by_host_by_event_name.cc
+table_ets_by_thread_by_event_name.cc
+table_ets_by_user_by_event_name.cc
+table_ets_global_by_event_name.cc
table_events_stages.cc
table_events_statements.cc
+table_events_transactions.cc
table_events_waits.cc
table_events_waits_summary.cc
table_ews_by_account_by_event_name.cc
@@ -161,6 +223,12 @@ table_ews_by_thread_by_event_name.cc
table_ews_by_user_by_event_name.cc
table_ews_global_by_event_name.cc
table_file_instances.cc
+table_md_locks.cc
+table_mems_global_by_event_name.cc
+table_mems_by_account_by_event_name.cc
+table_mems_by_host_by_event_name.cc
+table_mems_by_thread_by_event_name.cc
+table_mems_by_user_by_event_name.cc
table_file_summary_by_instance.cc
table_file_summary_by_event_name.cc
table_socket_instances.cc
@@ -177,21 +245,127 @@ table_setup_instruments.cc
table_setup_objects.cc
table_setup_timers.cc
table_sync_instances.cc
+table_status_by_account.cc
+table_status_by_host.cc
+table_status_by_thread.cc
+table_status_by_user.cc
+table_global_status.cc
+table_session_status.cc
+#table_variables_by_thread.cc
+#table_global_variables.cc
+#table_session_variables.cc
+table_table_handles.cc
table_threads.cc
table_tiws_by_index_usage.cc
table_tiws_by_table.cc
table_tlws_by_table.cc
table_users.cc
+table_uvar_by_thread.cc
cursor_by_thread_connect_attr.cc
table_session_connect.cc
table_session_connect_attrs.cc
table_session_account_connect_attrs.cc
+table_replication_connection_configuration.cc
+#table_replication_group_members.cc
+#table_replication_connection_status.cc
+table_replication_applier_configuration.cc
+table_replication_applier_status.cc
+table_replication_applier_status_by_coordinator.cc
+#table_replication_applier_status_by_worker.cc
+#table_replication_group_member_stats.cc
)
-MYSQL_ADD_PLUGIN(perfschema ${PERFSCHEMA_SOURCES} STORAGE_ENGINE DEFAULT STATIC_ONLY)
+# Check for pthread_threadid_np()
+CHECK_C_SOURCE_COMPILES("
+#include <pthread.h>
+int main(int ac, char **av)
+{
+ unsigned long long tid64;
+ pthread_threadid_np(NULL, &tid64);
+ return (tid64 != 0 ? 0 : 1);
+}"
+HAVE_PTHREAD_THREADID_NP)
+
+# Check for gettid() system call
+CHECK_C_SOURCE_COMPILES("
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+int main(int ac, char **av)
+{
+ unsigned long long tid = syscall(SYS_gettid);
+ return (tid != 0 ? 0 : 1);
+}"
+HAVE_SYS_GETTID)
+
+# Check for pthread_getthreadid_np()
+CHECK_C_SOURCE_COMPILES("
+#include <pthread_np.h>
+int main(int ac, char **av)
+{
+ unsigned long long tid = pthread_getthreadid_np();
+ return (tid != 0 ? 0 : 1);
+}"
+HAVE_PTHREAD_GETTHREADID_NP)
+
+# Check for pthread_self() returning an integer type
+CHECK_C_SOURCE_COMPILES("
+#include <sys/types.h>
+#include <pthread.h>
+int main(int ac, char **av)
+{
+ unsigned long long tid = pthread_self();
+ return (tid != 0 ? 0 : 1);
+}"
+HAVE_INTEGER_PTHREAD_SELF
+FAIL_REGEX "warning: incompatible pointer to integer conversion"
+)
+
+CONFIGURE_FILE(pfs_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/pfs_config.h)
+
+MYSQL_ADD_PLUGIN(perfschema ${PERFSCHEMA_SOURCES} STORAGE_ENGINE DEFAULT
+ STATIC_ONLY RECOMPILE_FOR_EMBEDDED)
IF (TARGET perfschema)
ADD_DEPENDENCIES(perfschema GenServerSource)
IF(WITH_UNIT_TESTS)
ADD_SUBDIRECTORY(unittest)
ENDIF(WITH_UNIT_TESTS)
ENDIF(TARGET perfschema)
+
+# Only disable threads when building without *any* instrumentation,
+# as other instrumentations have a dependency on threads.
+OPTION(DISABLE_PSI_THREAD "Exclude the performance schema thread instrumentation" OFF)
+
+OPTION(DISABLE_PSI_MUTEX "Exclude the performance schema mutex instrumentation" OFF)
+OPTION(DISABLE_PSI_RWLOCK "Exclude the performance schema rwlock instrumentation" OFF)
+OPTION(DISABLE_PSI_COND "Exclude the performance schema condition instrumentation" OFF)
+OPTION(DISABLE_PSI_FILE "Exclude the performance schema file instrumentation" OFF)
+OPTION(DISABLE_PSI_TABLE "Exclude the performance schema table instrumentation" OFF)
+OPTION(DISABLE_PSI_SOCKET "Exclude the performance schema socket instrumentation" OFF)
+OPTION(DISABLE_PSI_STAGE "Exclude the performance schema stage instrumentation" OFF)
+OPTION(DISABLE_PSI_STATEMENT "Exclude the performance schema statement instrumentation" OFF)
+OPTION(DISABLE_PSI_SP "Exclude the performance schema stored procedure instrumentation" OFF)
+OPTION(DISABLE_PSI_PS "Exclude the performance schema prepared statements instances instrumentation" OFF)
+OPTION(DISABLE_PSI_IDLE "Exclude the performance schema idle instrumentation" OFF)
+OPTION(DISABLE_PSI_STATEMENT_DIGEST "Exclude the performance schema statement digest instrumentation" OFF)
+OPTION(DISABLE_PSI_METADATA "Exclude the performance schema metadata instrumentation" OFF)
+OPTION(DISABLE_PSI_MEMORY "Exclude the performance schema memory instrumentation" OFF)
+OPTION(DISABLE_PSI_TRANSACTION "Exclude the performance schema transaction instrumentation" OFF)
+
+MARK_AS_ADVANCED(DISABLE_PSI_THREAD)
+
+MARK_AS_ADVANCED(DISABLE_PSI_MUTEX)
+MARK_AS_ADVANCED(DISABLE_PSI_RWLOCK)
+MARK_AS_ADVANCED(DISABLE_PSI_COND)
+MARK_AS_ADVANCED(DISABLE_PSI_FILE)
+MARK_AS_ADVANCED(DISABLE_PSI_TABLE)
+MARK_AS_ADVANCED(DISABLE_PSI_SOCKET)
+MARK_AS_ADVANCED(DISABLE_PSI_STAGE)
+MARK_AS_ADVANCED(DISABLE_PSI_STATEMENT)
+MARK_AS_ADVANCED(DISABLE_PSI_SP)
+MARK_AS_ADVANCED(DISABLE_PSI_PS)
+MARK_AS_ADVANCED(DISABLE_PSI_IDLE)
+MARK_AS_ADVANCED(DISABLE_PSI_STATEMENT_DIGEST)
+MARK_AS_ADVANCED(DISABLE_PSI_METADATA)
+MARK_AS_ADVANCED(DISABLE_PSI_MEMORY)
+MARK_AS_ADVANCED(DISABLE_PSI_TRANSACTION)
diff --git a/storage/perfschema/cursor_by_account.cc b/storage/perfschema/cursor_by_account.cc
index f26318c42fc..1b208e00d65 100644
--- a/storage/perfschema/cursor_by_account.cc
+++ b/storage/perfschema/cursor_by_account.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -27,7 +27,13 @@
#include "my_global.h"
#include "cursor_by_account.h"
-#include "pfs_user.h"
+#include "pfs_buffer_container.h"
+
+ha_rows
+cursor_by_account::get_row_count(void)
+{
+ return global_account_container.get_row_count();
+}
cursor_by_account::cursor_by_account(const PFS_engine_table_share *share)
: PFS_engine_table(share, &m_pos),
@@ -44,17 +50,14 @@ int cursor_by_account::rnd_next(void)
{
PFS_account *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < account_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_account_iterator it= global_account_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &account_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -66,9 +69,9 @@ cursor_by_account::rnd_pos(const void *pos)
PFS_account *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < account_max);
- pfs= &account_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_account_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
diff --git a/storage/perfschema/cursor_by_account.h b/storage/perfschema/cursor_by_account.h
index c14a563b712..d689cf6c524 100644
--- a/storage/perfschema/cursor_by_account.h
+++ b/storage/perfschema/cursor_by_account.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -41,6 +41,8 @@
class cursor_by_account : public PFS_engine_table
{
public:
+ static ha_rows get_row_count();
+
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
diff --git a/storage/perfschema/cursor_by_host.cc b/storage/perfschema/cursor_by_host.cc
index c3397234e2e..6aa3423c0d1 100644
--- a/storage/perfschema/cursor_by_host.cc
+++ b/storage/perfschema/cursor_by_host.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -27,7 +27,13 @@
#include "my_global.h"
#include "cursor_by_host.h"
-#include "pfs_host.h"
+#include "pfs_buffer_container.h"
+
+ha_rows
+cursor_by_host::get_row_count(void)
+{
+ return global_host_container.get_row_count();
+}
cursor_by_host::cursor_by_host(const PFS_engine_table_share *share)
: PFS_engine_table(share, &m_pos),
@@ -42,19 +48,16 @@ void cursor_by_host::reset_position(void)
int cursor_by_host::rnd_next(void)
{
- PFS_host *host;
+ PFS_host *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < host_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_host_iterator it= global_host_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- host= & host_array[m_pos.m_index];
- if (host->m_lock.is_populated())
- {
- make_row(host);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -66,9 +69,9 @@ cursor_by_host::rnd_pos(const void *pos)
PFS_host *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < host_max);
- pfs= &host_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_host_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
diff --git a/storage/perfschema/cursor_by_host.h b/storage/perfschema/cursor_by_host.h
index ac68acf3945..8f256156b1f 100644
--- a/storage/perfschema/cursor_by_host.h
+++ b/storage/perfschema/cursor_by_host.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -41,6 +41,8 @@
class cursor_by_host : public PFS_engine_table
{
public:
+ static ha_rows get_row_count();
+
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
diff --git a/storage/perfschema/cursor_by_thread.cc b/storage/perfschema/cursor_by_thread.cc
index afdc9010b1f..5d56794bf94 100644
--- a/storage/perfschema/cursor_by_thread.cc
+++ b/storage/perfschema/cursor_by_thread.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -28,6 +28,13 @@
#include "my_global.h"
#include "cursor_by_thread.h"
#include "pfs_instr.h"
+#include "pfs_buffer_container.h"
+
+ha_rows
+cursor_by_thread::get_row_count(void)
+{
+ return global_thread_container.get_row_count();
+}
cursor_by_thread::cursor_by_thread(const PFS_engine_table_share *share)
: PFS_engine_table(share, &m_pos),
@@ -44,17 +51,14 @@ int cursor_by_thread::rnd_next(void)
{
PFS_thread *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < thread_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_thread_iterator it= global_thread_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &thread_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -66,9 +70,9 @@ cursor_by_thread::rnd_pos(const void *pos)
PFS_thread *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < thread_max);
- pfs= &thread_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_thread_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
diff --git a/storage/perfschema/cursor_by_thread.h b/storage/perfschema/cursor_by_thread.h
index db130088920..1fd803d906c 100644
--- a/storage/perfschema/cursor_by_thread.h
+++ b/storage/perfschema/cursor_by_thread.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -41,6 +41,8 @@
class cursor_by_thread : public PFS_engine_table
{
public:
+ static ha_rows get_row_count();
+
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
diff --git a/storage/perfschema/cursor_by_thread_connect_attr.cc b/storage/perfschema/cursor_by_thread_connect_attr.cc
index 90a200b809a..b4462a8d748 100644
--- a/storage/perfschema/cursor_by_thread_connect_attr.cc
+++ b/storage/perfschema/cursor_by_thread_connect_attr.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -22,6 +22,20 @@
#include "my_global.h"
#include "cursor_by_thread_connect_attr.h"
+#include "pfs_buffer_container.h"
+
+ha_rows
+cursor_by_thread_connect_attr::get_row_count(void)
+{
+ /*
+ The real number of attributes per thread does not matter,
+ we only need to hint the optimizer there are many per thread,
+ so abusing session_connect_attrs_size_per_thread
+ (which is a number of bytes, not attributes)
+ */
+ return global_thread_container.get_row_count() *
+ session_connect_attrs_size_per_thread;
+}
cursor_by_thread_connect_attr::cursor_by_thread_connect_attr(
const PFS_engine_table_share *share) :
@@ -31,14 +45,14 @@ cursor_by_thread_connect_attr::cursor_by_thread_connect_attr(
int cursor_by_thread_connect_attr::rnd_next(void)
{
PFS_thread *thread;
+ bool has_more_thread= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_thread();
+ has_more_thread;
m_pos.next_thread())
{
- thread= &thread_array[m_pos.m_index_1];
-
- if (thread->m_lock.is_populated())
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
{
make_row(thread, m_pos.m_index_2);
if (m_row_exists)
@@ -48,6 +62,7 @@ int cursor_by_thread_connect_attr::rnd_next(void)
}
}
}
+
return HA_ERR_END_OF_FILE;
}
@@ -57,15 +72,14 @@ int cursor_by_thread_connect_attr::rnd_pos(const void *pos)
PFS_thread *thread;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
-
- thread= &thread_array[m_pos.m_index_1];
- if (!thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
- make_row(thread, m_pos.m_index_2);
- if (m_row_exists)
- return 0;
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
+ {
+ make_row(thread, m_pos.m_index_2);
+ if (m_row_exists)
+ return 0;
+ }
return HA_ERR_RECORD_DELETED;
}
diff --git a/storage/perfschema/cursor_by_thread_connect_attr.h b/storage/perfschema/cursor_by_thread_connect_attr.h
index 69d1b5ec0c0..7aa31115b30 100644
--- a/storage/perfschema/cursor_by_thread_connect_attr.h
+++ b/storage/perfschema/cursor_by_thread_connect_attr.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2012, 2015, 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, version 2.0,
@@ -32,6 +32,10 @@
@{
*/
+/**
+ Position of a cursor on abstract table
+ PERFORMANCE_SCHEMA.SESSION_CONNECT_ATTRS.
+*/
struct pos_connect_attr_by_thread_by_attr
: public PFS_double_index
{
@@ -39,11 +43,6 @@ struct pos_connect_attr_by_thread_by_attr
: PFS_double_index(0, 0)
{}
- inline bool has_more_thread(void)
- {
- return (m_index_1 < thread_max);
- }
-
inline void next_thread(void)
{
m_index_1++;
@@ -61,6 +60,8 @@ struct pos_connect_attr_by_thread_by_attr
class cursor_by_thread_connect_attr : public PFS_engine_table
{
public:
+ static ha_rows get_row_count();
+
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
diff --git a/storage/perfschema/cursor_by_user.cc b/storage/perfschema/cursor_by_user.cc
index 273d186b01c..7699bcf1fc8 100644
--- a/storage/perfschema/cursor_by_user.cc
+++ b/storage/perfschema/cursor_by_user.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -27,7 +27,13 @@
#include "my_global.h"
#include "cursor_by_user.h"
-#include "pfs_user.h"
+#include "pfs_buffer_container.h"
+
+ha_rows
+cursor_by_user::get_row_count(void)
+{
+ return global_user_container.get_row_count();
+}
cursor_by_user::cursor_by_user(const PFS_engine_table_share *share)
: PFS_engine_table(share, &m_pos),
@@ -44,17 +50,14 @@ int cursor_by_user::rnd_next(void)
{
PFS_user *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < user_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_user_iterator it= global_user_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &user_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -66,9 +69,9 @@ cursor_by_user::rnd_pos(const void *pos)
PFS_user *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < user_max);
- pfs= &user_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_user_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
diff --git a/storage/perfschema/cursor_by_user.h b/storage/perfschema/cursor_by_user.h
index 06554ebb228..d31f886170c 100644
--- a/storage/perfschema/cursor_by_user.h
+++ b/storage/perfschema/cursor_by_user.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -41,6 +41,8 @@
class cursor_by_user : public PFS_engine_table
{
public:
+ static ha_rows get_row_count();
+
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
diff --git a/storage/perfschema/gen_pfs_lex_token.cc b/storage/perfschema/gen_pfs_lex_token.cc
deleted file mode 100644
index 5a51a8aeb2f..00000000000
--- a/storage/perfschema/gen_pfs_lex_token.cc
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- Copyright (c) 2011, 2014, 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, version 2.0,
- as published by the Free Software Foundation.
-
- This program is also distributed with certain software (including
- but not limited to OpenSSL) that is licensed under separate terms,
- as designated in a particular file or component or in included license
- documentation. The authors of MySQL hereby grant you an additional
- permission to link the program and your derivative works with the
- separately licensed software that they have included with MySQL.
-
- 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, version 2.0, 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, Fifth Floor, Boston, MA 02110-1335 USA */
-
-#include <my_global.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-/* We only need the tokens here */
-#define YYSTYPE_IS_DECLARED
-#include <../sql/sql_yacc.h>
-#include <lex.h>
-
-#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
-
-/*
- This is a tool used during build only,
- so MY_MAX_TOKEN does not need to be exact,
- only big enough to hold:
- - 256 character terminal tokens
- - YYNTOKENS named terminal tokens
- from bison.
- See also YYMAXUTOK.
-*/
-#define MY_MAX_TOKEN 1000
-/** Generated token. */
-struct gen_lex_token_string
-{
- const char *m_token_string;
- int m_token_length;
- bool m_append_space;
- bool m_start_expr;
-};
-
-gen_lex_token_string compiled_token_array[MY_MAX_TOKEN];
-int max_token_seen= 0;
-
-char char_tokens[256];
-
-int tok_pfs_generic_value= 0;
-int tok_pfs_generic_value_list= 0;
-int tok_pfs_row_single_value= 0;
-int tok_pfs_row_single_value_list= 0;
-int tok_pfs_row_multiple_value= 0;
-int tok_pfs_row_multiple_value_list= 0;
-int tok_pfs_unused= 0;
-
-void set_token(int tok, const char *str)
-{
- if (tok <= 0)
- {
- fprintf(stderr, "Bad token found\n");
- exit(1);
- }
-
- if (tok > max_token_seen)
- {
- max_token_seen= tok;
- }
-
- if (max_token_seen >= MY_MAX_TOKEN)
- {
- fprintf(stderr, "Added that many new keywords ? Increase MY_MAX_TOKEN\n");
- exit(1);
- }
-
- compiled_token_array[tok].m_token_string= str;
- compiled_token_array[tok].m_token_length= strlen(str);
- compiled_token_array[tok].m_append_space= true;
- compiled_token_array[tok].m_start_expr= false;
-}
-
-void set_start_expr_token(int tok)
-{
- compiled_token_array[tok].m_start_expr= true;
-}
-
-void compute_tokens()
-{
- int tok;
- unsigned int i;
- char *str;
-
- /*
- Default value.
- */
- for (tok= 0; tok < MY_MAX_TOKEN; tok++)
- {
- compiled_token_array[tok].m_token_string= "(unknown)";
- compiled_token_array[tok].m_token_length= 9;
- compiled_token_array[tok].m_append_space= true;
- compiled_token_array[tok].m_start_expr= false;
- }
-
- /*
- Tokens made of just one terminal character
- */
- for (tok=0; tok < 256; tok++)
- {
- str= & char_tokens[tok];
- str[0]= (char) tok;
- compiled_token_array[tok].m_token_string= str;
- compiled_token_array[tok].m_token_length= 1;
- compiled_token_array[tok].m_append_space= true;
- }
-
- max_token_seen= 255;
-
- /*
- String terminal tokens, used in sql_yacc.yy
- */
- set_token(NEG, "~");
- set_token(TABLE_REF_PRIORITY, "TABLE_REF_PRIORITY");
-
- /*
- Tokens hard coded in sql_lex.cc
- */
-
- set_token(WITH_CUBE_SYM, "WITH CUBE");
- set_token(WITH_ROLLUP_SYM, "WITH ROLLUP");
- set_token(NOT2_SYM, "!");
- set_token(OR2_SYM, "|");
- set_token(PARAM_MARKER, "?");
- set_token(SET_VAR, ":=");
- set_token(UNDERSCORE_CHARSET, "(_charset)");
- set_token(END_OF_INPUT, "");
-
- /*
- Values.
- These tokens are all normalized later,
- so this strings will never be displayed.
- */
- set_token(BIN_NUM, "(bin)");
- set_token(DECIMAL_NUM, "(decimal)");
- set_token(FLOAT_NUM, "(float)");
- set_token(HEX_NUM, "(hex)");
- set_token(LEX_HOSTNAME, "(hostname)");
- set_token(LONG_NUM, "(long)");
- set_token(NUM, "(num)");
- set_token(TEXT_STRING, "(text)");
- set_token(NCHAR_STRING, "(nchar)");
- set_token(ULONGLONG_NUM, "(ulonglong)");
-
- /*
- Identifiers.
- */
- set_token(IDENT, "(id)");
- set_token(IDENT_QUOTED, "(id_quoted)");
-
- /*
- Unused tokens
- */
- set_token(LOCATOR_SYM, "LOCATOR");
- set_token(SERVER_OPTIONS, "SERVER_OPTIONS");
- set_token(UDF_RETURNS_SYM, "UDF_RETURNS");
-
- /*
- See symbols[] in sql/lex.h
- */
- for (i= 0; i< sizeof(symbols)/sizeof(symbols[0]); i++)
- {
- set_token(symbols[i].tok, symbols[i].name);
- }
-
- /*
- See sql_functions[] in sql/lex.h
- */
- for (i= 0; i< sizeof(sql_functions)/sizeof(sql_functions[0]); i++)
- {
- set_token(sql_functions[i].tok, sql_functions[i].name);
- }
-
- /*
- Additional FAKE tokens,
- used internally to normalize a digest text.
- */
-
- max_token_seen++;
- tok_pfs_generic_value= max_token_seen;
- set_token(tok_pfs_generic_value, "?");
-
- max_token_seen++;
- tok_pfs_generic_value_list= max_token_seen;
- set_token(tok_pfs_generic_value_list, "?, ...");
-
- max_token_seen++;
- tok_pfs_row_single_value= max_token_seen;
- set_token(tok_pfs_row_single_value, "(?)");
-
- max_token_seen++;
- tok_pfs_row_single_value_list= max_token_seen;
- set_token(tok_pfs_row_single_value_list, "(?) /* , ... */");
-
- max_token_seen++;
- tok_pfs_row_multiple_value= max_token_seen;
- set_token(tok_pfs_row_multiple_value, "(...)");
-
- max_token_seen++;
- tok_pfs_row_multiple_value_list= max_token_seen;
- set_token(tok_pfs_row_multiple_value_list, "(...) /* , ... */");
-
- max_token_seen++;
- tok_pfs_unused= max_token_seen;
- set_token(tok_pfs_unused, "UNUSED");
-
- /*
- Fix whitespace for some special tokens.
- */
-
- /*
- The lexer parses "@@variable" as '@', '@', 'variable',
- returning a token for '@' alone.
-
- This is incorrect, '@' is not really a token,
- because the syntax "@ @ variable" (with spaces) is not accepted:
- The lexer keeps some internal state after the '@' fake token.
-
- To work around this, digest text are printed as "@@variable".
- */
- compiled_token_array[(int) '@'].m_append_space= false;
-
- /*
- Define additional properties for tokens.
-
- List all the token that are followed by an expression.
- This is needed to differentiate unary from binary
- '+' and '-' operators, because we want to:
- - reduce <unary +> <NUM> to <?>,
- - preserve <...> <binary +> <NUM> as is.
- */
- set_start_expr_token('(');
- set_start_expr_token(',');
- set_start_expr_token(EVERY_SYM);
- set_start_expr_token(AT_SYM);
- set_start_expr_token(STARTS_SYM);
- set_start_expr_token(ENDS_SYM);
- set_start_expr_token(DEFAULT);
- set_start_expr_token(RETURN_SYM);
- set_start_expr_token(IF_SYM);
- set_start_expr_token(ELSEIF_SYM);
- set_start_expr_token(CASE_SYM);
- set_start_expr_token(WHEN_SYM);
- set_start_expr_token(WHILE_SYM);
- set_start_expr_token(UNTIL_SYM);
- set_start_expr_token(SELECT_SYM);
-
- set_start_expr_token(OR_SYM);
- set_start_expr_token(OR2_SYM);
- set_start_expr_token(XOR);
- set_start_expr_token(AND_SYM);
- set_start_expr_token(AND_AND_SYM);
- set_start_expr_token(NOT_SYM);
- set_start_expr_token(BETWEEN_SYM);
- set_start_expr_token(LIKE);
- set_start_expr_token(REGEXP);
-
- set_start_expr_token('|');
- set_start_expr_token('&');
- set_start_expr_token(SHIFT_LEFT);
- set_start_expr_token(SHIFT_RIGHT);
- set_start_expr_token('+');
- set_start_expr_token('-');
- set_start_expr_token(INTERVAL_SYM);
- set_start_expr_token('*');
- set_start_expr_token('/');
- set_start_expr_token('%');
- set_start_expr_token(DIV_SYM);
- set_start_expr_token(MOD_SYM);
- set_start_expr_token('^');
-}
-
-void print_tokens()
-{
- int tok;
-
- printf("lex_token_string lex_token_array[]=\n");
- printf("{\n");
- printf("/* PART 1: character tokens. */\n");
-
- for (tok= 0; tok<256; tok++)
- {
- printf("/* %03d */ { \"\\x%02x\", 1, %s, %s},\n",
- tok,
- tok,
- compiled_token_array[tok].m_append_space ? "true" : "false",
- compiled_token_array[tok].m_start_expr ? "true" : "false");
- }
-
- printf("/* PART 2: named tokens. */\n");
-
- for (tok= 256; tok<= max_token_seen; tok++)
- {
- printf("/* %03d */ { \"%s\", %d, %s, %s},\n",
- tok,
- compiled_token_array[tok].m_token_string,
- compiled_token_array[tok].m_token_length,
- compiled_token_array[tok].m_append_space ? "true" : "false",
- compiled_token_array[tok].m_start_expr ? "true" : "false");
- }
-
- printf("/* DUMMY */ { \"\", 0, false, false}\n");
- printf("};\n");
-
- printf("/* PFS specific tokens. */\n");
- printf("#define TOK_PFS_GENERIC_VALUE %d\n", tok_pfs_generic_value);
- printf("#define TOK_PFS_GENERIC_VALUE_LIST %d\n", tok_pfs_generic_value_list);
- printf("#define TOK_PFS_ROW_SINGLE_VALUE %d\n", tok_pfs_row_single_value);
- printf("#define TOK_PFS_ROW_SINGLE_VALUE_LIST %d\n", tok_pfs_row_single_value_list);
- printf("#define TOK_PFS_ROW_MULTIPLE_VALUE %d\n", tok_pfs_row_multiple_value);
- printf("#define TOK_PFS_ROW_MULTIPLE_VALUE_LIST %d\n", tok_pfs_row_multiple_value_list);
- printf("#define TOK_PFS_UNUSED %d\n", tok_pfs_unused);
-}
-
-int main(int argc,char **argv)
-{
- puts("/*");
- puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2011"));
- puts("*/");
-
- printf("/*\n");
- printf(" This file is generated, do not edit.\n");
- printf(" See file storage/perfschema/gen_pfs_lex_token.cc.\n");
- printf("*/\n");
- printf("struct lex_token_string\n");
- printf("{\n");
- printf(" const char *m_token_string;\n");
- printf(" int m_token_length;\n");
- printf(" bool m_append_space;\n");
- printf(" bool m_start_expr;\n");
- printf("};\n");
- printf("typedef struct lex_token_string lex_token_string;\n");
-
- compute_tokens();
- print_tokens();
-
- return 0;
-}
-
diff --git a/storage/perfschema/ha_perfschema.cc b/storage/perfschema/ha_perfschema.cc
index 0972d0dae21..2261b4feff1 100644
--- a/storage/perfschema/ha_perfschema.cc
+++ b/storage/perfschema/ha_perfschema.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2016, 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, version 2.0,
@@ -36,10 +36,14 @@
#include "pfs_account.h"
#include "pfs_host.h"
#include "pfs_user.h"
-#include "pfs_account.h"
+#include "pfs_program.h"
+#include "pfs_prepared_stmt.h"
+#include "pfs_buffer_container.h"
handlerton *pfs_hton= NULL;
+#define PFS_ENABLED() (pfs_initialized && (pfs_enabled || m_table_share->m_perpetual))
+
static handler* pfs_create_handler(handlerton *hton,
TABLE_SHARE *table,
MEM_ROOT *mem_root)
@@ -131,6 +135,15 @@ static int pfs_done_func(void *p)
DBUG_RETURN(0);
}
+static int show_func_mutex_instances_lost(THD *thd, SHOW_VAR *var, char *buff)
+{
+ var->type= SHOW_LONG;
+ var->value= buff;
+ long *value= reinterpret_cast<long*>(buff);
+ *value= global_mutex_container.get_lost_counter();
+ return 0;
+}
+
static struct st_mysql_show_var pfs_status_vars[]=
{
{"Performance_schema_mutex_classes_lost",
@@ -145,34 +158,42 @@ static struct st_mysql_show_var pfs_status_vars[]=
(char*) &file_class_lost, SHOW_LONG_NOFLUSH},
{"Performance_schema_socket_classes_lost",
(char*) &socket_class_lost, SHOW_LONG_NOFLUSH},
+ {"Performance_schema_memory_classes_lost",
+ (char*) &memory_class_lost, SHOW_LONG_NOFLUSH},
{"Performance_schema_mutex_instances_lost",
- (char*) &mutex_lost, SHOW_LONG},
+ (char*) &show_func_mutex_instances_lost, SHOW_FUNC},
{"Performance_schema_rwlock_instances_lost",
- (char*) &rwlock_lost, SHOW_LONG},
+ (char*) &global_rwlock_container.m_lost, SHOW_LONG},
{"Performance_schema_cond_instances_lost",
- (char*) &cond_lost, SHOW_LONG},
+ (char*) &global_cond_container.m_lost, SHOW_LONG},
{"Performance_schema_thread_instances_lost",
- (char*) &thread_lost, SHOW_LONG},
+ (char*) &global_thread_container.m_lost, SHOW_LONG},
{"Performance_schema_file_instances_lost",
- (char*) &file_lost, SHOW_LONG},
+ (char*) &global_file_container.m_lost, SHOW_LONG},
{"Performance_schema_file_handles_lost",
(char*) &file_handle_lost, SHOW_LONG},
{"Performance_schema_socket_instances_lost",
- (char*) &socket_lost, SHOW_LONG},
+ (char*) &global_socket_container.m_lost, SHOW_LONG},
{"Performance_schema_locker_lost",
(char*) &locker_lost, SHOW_LONG},
/* table shares, can be flushed */
{"Performance_schema_table_instances_lost",
- (char*) &table_share_lost, SHOW_LONG},
+ (char*) &global_table_share_container.m_lost, SHOW_LONG},
/* table handles, can be flushed */
{"Performance_schema_table_handles_lost",
- (char*) &table_lost, SHOW_LONG},
+ (char*) &global_table_container.m_lost, SHOW_LONG},
+ /* table lock stats, can be flushed */
+ {"Performance_schema_table_lock_stat_lost",
+ (char*) &global_table_share_lock_container.m_lost, SHOW_LONG},
+ /* table index stats, can be flushed */
+ {"Performance_schema_index_stat_lost",
+ (char*) &global_table_share_index_container.m_lost, SHOW_LONG},
{"Performance_schema_hosts_lost",
- (char*) &host_lost, SHOW_LONG},
+ (char*) &global_host_container.m_lost, SHOW_LONG},
{"Performance_schema_users_lost",
- (char*) &user_lost, SHOW_LONG},
+ (char*) &global_user_container.m_lost, SHOW_LONG},
{"Performance_schema_accounts_lost",
- (char*) &account_lost, SHOW_LONG},
+ (char*) &global_account_container.m_lost, SHOW_LONG},
{"Performance_schema_stage_classes_lost",
(char*) &stage_class_lost, SHOW_LONG},
{"Performance_schema_statement_classes_lost",
@@ -181,6 +202,14 @@ static struct st_mysql_show_var pfs_status_vars[]=
(char*) &digest_lost, SHOW_LONG},
{"Performance_schema_session_connect_attrs_lost",
(char*) &session_connect_attrs_lost, SHOW_LONG},
+ {"Performance_schema_program_lost",
+ (char*) &global_program_container.m_lost, SHOW_LONG},
+ {"Performance_schema_nested_statement_lost",
+ (char*) &nested_statement_lost, SHOW_LONG},
+ {"Performance_schema_prepared_statements_lost",
+ (char*) &global_prepared_stmt_container.m_lost, SHOW_LONG},
+ {"Performance_schema_metadata_lock_lost",
+ (char*) &global_mdl_container.m_lost, SHOW_LONG},
{NullS, NullS, SHOW_LONG}
};
@@ -262,7 +291,7 @@ int ha_perfschema::write_row(const uchar *buf)
int result;
DBUG_ENTER("ha_perfschema::write_row");
- if (!pfs_initialized)
+ if (!PFS_ENABLED())
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
DBUG_ASSERT(m_table_share);
@@ -284,7 +313,7 @@ void ha_perfschema::use_hidden_primary_key(void)
int ha_perfschema::update_row(const uchar *old_data, const uchar *new_data)
{
DBUG_ENTER("ha_perfschema::update_row");
- if (!pfs_initialized)
+ if (!PFS_ENABLED())
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
if (is_executed_by_slave())
@@ -298,7 +327,7 @@ int ha_perfschema::update_row(const uchar *old_data, const uchar *new_data)
int ha_perfschema::delete_row(const uchar *buf)
{
DBUG_ENTER("ha_perfschema::delete_row");
- if (!pfs_initialized)
+ if (!PFS_ENABLED())
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
DBUG_ASSERT(m_table);
@@ -339,7 +368,7 @@ int ha_perfschema::rnd_end(void)
int ha_perfschema::rnd_next(uchar *buf)
{
DBUG_ENTER("ha_perfschema::rnd_next");
- if (!pfs_initialized)
+ if (!PFS_ENABLED())
{
table->status= STATUS_NOT_FOUND;
DBUG_RETURN(HA_ERR_END_OF_FILE);
@@ -370,7 +399,7 @@ void ha_perfschema::position(const uchar *record)
int ha_perfschema::rnd_pos(uchar *buf, uchar *pos)
{
DBUG_ENTER("ha_perfschema::rnd_pos");
- if (!pfs_initialized)
+ if (!PFS_ENABLED())
{
table->status= STATUS_NOT_FOUND;
DBUG_RETURN(HA_ERR_END_OF_FILE);
@@ -400,7 +429,7 @@ int ha_perfschema::delete_all_rows(void)
int result;
DBUG_ENTER("ha_perfschema::delete_all_rows");
- if (!pfs_initialized)
+ if (!PFS_ENABLED())
DBUG_RETURN(0);
if (is_executed_by_slave())
diff --git a/storage/perfschema/ha_perfschema.h b/storage/perfschema/ha_perfschema.h
index 18ac035831d..36ea124056d 100644
--- a/storage/perfschema/ha_perfschema.h
+++ b/storage/perfschema/ha_perfschema.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
diff --git a/storage/perfschema/my_thread.h b/storage/perfschema/my_thread.h
new file mode 100644
index 00000000000..542035bda0f
--- /dev/null
+++ b/storage/perfschema/my_thread.h
@@ -0,0 +1,111 @@
+#ifndef STORAGE_PERFSCHEMA_MY_THREAD_INCLUDED
+#define STORAGE_PERFSCHEMA_MY_THREAD_INCLUDED
+
+#include <my_pthread.h>
+#include <m_string.h>
+#include "pfs_config.h"
+
+#ifdef HAVE_SYS_GETTID
+#include <sys/types.h>
+#include <sys/syscall.h>
+#endif
+
+typedef pthread_key_t thread_local_key_t;
+typedef pthread_t my_thread_handle;
+typedef pthread_attr_t my_thread_attr_t;
+typedef uint32 my_thread_os_id_t;
+
+#define LOCK_plugin_delete LOCK_plugin
+
+static inline int my_create_thread_local_key(thread_local_key_t *key, void (*destructor)(void*))
+{ return pthread_key_create(key, destructor); }
+
+static inline int my_delete_thread_local_key(thread_local_key_t key)
+{ return pthread_key_delete(key); }
+
+static inline void *my_get_thread_local(thread_local_key_t key)
+{ return pthread_getspecific(key); }
+
+static inline int my_set_thread_local(thread_local_key_t key, const void *ptr)
+{ return pthread_setspecific(key, ptr); }
+
+static inline int my_thread_create(my_thread_handle *thread,
+ const my_thread_attr_t *attr, void *(*start_routine)(void *), void *arg)
+{ return pthread_create(thread, attr, start_routine, arg); }
+
+static inline my_thread_os_id_t my_thread_os_id()
+{
+#ifdef HAVE_PTHREAD_THREADID_NP
+ /*
+ macOS.
+
+ Be careful to use this version first, and to not use SYS_gettid on macOS,
+ as SYS_gettid has a different meaning compared to linux gettid().
+ */
+ uint64_t tid64;
+ pthread_threadid_np(nullptr, &tid64);
+ return (pid_t)tid64;
+#else
+#ifdef HAVE_SYS_GETTID
+ /*
+ Linux.
+ See man gettid
+ See GLIBC Bug 6399 - gettid() should have a wrapper
+ https://sourceware.org/bugzilla/show_bug.cgi?id=6399
+ */
+ return syscall(SYS_gettid);
+#else
+#ifdef _WIN32
+ /* Windows */
+ return GetCurrentThreadId();
+#else
+#ifdef HAVE_PTHREAD_GETTHREADID_NP
+ /* FreeBSD 10.2 */
+ return pthread_getthreadid_np();
+#else
+#ifdef HAVE_INTEGER_PTHREAD_SELF
+ /* Unknown platform, fallback. */
+ return pthread_self();
+#else
+ /* Feature not available. */
+ return 0;
+#endif /* HAVE_INTEGER_PTHREAD_SELF */
+#endif /* HAVE_PTHREAD_GETTHREADID_NP */
+#endif /* _WIN32 */
+#endif /* HAVE_SYS_GETTID */
+#endif /* HAVE_SYS_THREAD_SELFID */
+}
+
+#define CHANNEL_NAME_LENGTH MAX_CONNECTION_NAME
+
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL,
+ SHOW_SCOPE_SESSION,
+ SHOW_SCOPE_ALL
+};
+typedef enum enum_mysql_show_scope SHOW_SCOPE;
+
+#define SHOW_VAR_MAX_NAME_LEN NAME_LEN
+
+static inline char *my_stpnmov(char *dst, const char *src, size_t n)
+{ return strnmov(dst, src, n); }
+
+static inline size_t bin_to_hex_str(char *to, size_t to_len,
+ const char *from, size_t from_len)
+{
+ if (to_len < from_len * 2 + 1)
+ return 0 ;
+ for (size_t i=0; i < from_len; i++, from++)
+ {
+ *to++=_dig_vec_upper[((unsigned char) *from) >> 4];
+ *to++=_dig_vec_upper[((unsigned char) *from) & 0xF];
+ }
+ *to= '\0';
+ return from_len * 2 + 1;
+}
+
+#define thd_get_psi(X) ((X)->get_psi())
+
+#endif
diff --git a/storage/perfschema/mysqld_thd_manager.cc b/storage/perfschema/mysqld_thd_manager.cc
new file mode 100644
index 00000000000..61282b7e024
--- /dev/null
+++ b/storage/perfschema/mysqld_thd_manager.cc
@@ -0,0 +1,39 @@
+#include "mysqld_thd_manager.h"
+#include "sql_class.h"
+
+static Global_THD_manager manager;
+Global_THD_manager* Global_THD_manager::get_instance()
+{
+ return &manager;
+}
+
+struct find_thd_arg
+{
+ Find_THD_Impl *func;
+ THD *cur;
+};
+
+static my_bool find_thd_cb(THD *tmp, find_thd_arg *arg)
+{
+ arg->cur= tmp;
+ return (*arg->func)(tmp);
+}
+
+THD* Global_THD_manager::find_thd(Find_THD_Impl *func)
+{
+ find_thd_arg arg= {func, NULL};
+ if (THD_list_iterator::iterator()->iterate(find_thd_cb, &arg))
+ return arg.cur;
+ return NULL;
+}
+
+static my_bool do_for_all_cb(THD *tmp, Do_THD_Impl *arg)
+{
+ (*arg)(tmp);
+ return 0;
+}
+
+void Global_THD_manager::do_for_all_thd(Do_THD_Impl *arg)
+{
+ THD_list_iterator::iterator()->iterate(do_for_all_cb, arg);
+}
diff --git a/storage/perfschema/mysqld_thd_manager.h b/storage/perfschema/mysqld_thd_manager.h
new file mode 100644
index 00000000000..fbb6f86a8c4
--- /dev/null
+++ b/storage/perfschema/mysqld_thd_manager.h
@@ -0,0 +1,29 @@
+#ifndef STORAGE_PERFSCHEMA_MYSQL_THD_MANAGER_INCLUDED
+#define STORAGE_PERFSCHEMA_MYSQL_THD_MANAGER_INCLUDED
+#include "my_global.h"
+#include "my_thread.h"
+
+class Find_THD_Impl
+{
+ public:
+ virtual ~Find_THD_Impl() {}
+ virtual bool operator()(THD *thd) = 0;
+};
+
+class Do_THD_Impl
+{
+ public:
+ virtual ~Do_THD_Impl() {}
+ virtual void operator()(THD*) = 0;
+};
+
+class Global_THD_manager
+{
+ public:
+ static Global_THD_manager* get_instance();
+ THD* find_thd(Find_THD_Impl *func);
+ void do_for_all_thd(Do_THD_Impl *arg);
+};
+
+ulong get_system_variable_hash_records(void);
+#endif
diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc
index 2f1081b3836..1bb712f64cc 100644
--- a/storage/perfschema/pfs.cc
+++ b/storage/perfschema/pfs.cc
@@ -26,6 +26,19 @@
*/
#include "my_global.h"
#include "thr_lock.h"
+
+/* Make sure exported prototypes match the implementation. */
+#include "pfs_file_provider.h"
+#include "pfs_idle_provider.h"
+#include "pfs_memory_provider.h"
+#include "pfs_metadata_provider.h"
+#include "pfs_socket_provider.h"
+#include "pfs_stage_provider.h"
+#include "pfs_statement_provider.h"
+#include "pfs_table_provider.h"
+#include "pfs_thread_provider.h"
+#include "pfs_transaction_provider.h"
+
#include "mysql/psi/psi.h"
#include "mysql/psi/mysql_thread.h"
#include "my_pthread.h"
@@ -42,11 +55,48 @@
#include "pfs_events_waits.h"
#include "pfs_events_stages.h"
#include "pfs_events_statements.h"
+#include "pfs_events_transactions.h"
#include "pfs_setup_actor.h"
#include "pfs_setup_object.h"
#include "sql_error.h"
#include "sp_head.h"
+#include "mdl.h" /* mdl_key_init */
#include "pfs_digest.h"
+#include "pfs_program.h"
+#include "pfs_prepared_stmt.h"
+
+using std::min;
+
+/*
+ This is a development tool to investigate memory statistics,
+ do not use in production.
+*/
+#undef PFS_PARANOID
+
+#ifdef PFS_PARANOID
+static void report_memory_accounting_error(
+ const char *api_name,
+ PFS_thread *new_thread,
+ size_t size,
+ PFS_memory_class *klass,
+ PFS_thread *old_thread)
+{
+ pfs_print_error("%s "
+ "thread <%d> of class <%s> "
+ "not owner of <%d> bytes in class <%s> "
+ "allocated by thread <%d> of class <%s>\n",
+ api_name,
+ new_thread->m_thread_internal_id,
+ new_thread->m_class->m_name,
+ size, klass->m_name,
+ old_thread->m_thread_internal_id,
+ old_thread->m_class->m_name);
+
+ DBUG_ASSERT(strcmp(new_thread->m_class->m_name, "thread/sql/event_worker") != 0);
+ DBUG_ASSERT(strcmp(new_thread->m_class->m_name, "thread/sql/event_scheduler") != 0);
+ DBUG_ASSERT(strcmp(new_thread->m_class->m_name, "thread/sql/one_connection") != 0);
+}
+#endif /* PFS_PARANOID */
/**
@page PAGE_PERFORMANCE_SCHEMA The Performance Schema main page
@@ -393,14 +443,14 @@ static inline int mysql_mutex_lock(
struct PSI_mutex_locker *locker= NULL;
............... (a)
- locker= PSI_server->start_mutex_wait(&state, that->p_psi,
- PSI_MUTEX_LOCK, locker, src_file, src_line);
+ locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->p_psi, PSI_MUTEX_LOCK,
+ locker, src_file, src_line);
............... (b)
result= pthread_mutex_lock(&that->m_mutex);
............... (c)
- PSI_server->end_mutex_wait(locker, result);
+ PSI_MUTEX_CALL(end_mutex_wait)(locker, result);
return result;
}
@@ -420,6 +470,62 @@ static inline int mysql_mutex_lock(...)
return result;
}
@endverbatim
+
+ When the performance schema instrumentation is compiled in,
+ and when the code compiled is internal to the server implementation,
+ PSI_MUTEX_CALL expands directly to functions calls in the performance schema,
+ to make (a) and (c) calls as efficient as possible.
+
+@verbatim
+static inline int mysql_mutex_lock(...)
+{
+ int result;
+ struct PSI_mutex_locker_state state;
+ struct PSI_mutex_locker *locker= NULL;
+
+ ............... (a)
+ locker= pfs_start_mutex_wait_v1(&state, that->p_psi, PSI_MUTEX_LOCK,
+ locker, src_file, src_line);
+
+ ............... (b)
+ result= pthread_mutex_lock(&that->m_mutex);
+
+ ............... (c)
+ pfs_end_mutex_wait_v1(locker, result);
+
+ return result;
+}
+@endverbatim
+
+ When the performance schema instrumentation is compiled in,
+ and when the code compiled is external to the server implementation
+ (typically, a dynamic plugin),
+ PSI_MUTEX_CALL expands to dynamic calls to the underlying implementation,
+ using the PSI_server entry point.
+ This makes (a) and (c) slower, as a function pointer is used instead of a static call,
+ but also independent of the implementation, for binary compatibility.
+
+@verbatim
+static inline int mysql_mutex_lock(...)
+{
+ int result;
+ struct PSI_mutex_locker_state state;
+ struct PSI_mutex_locker *locker= NULL;
+
+ ............... (a)
+ locker= PSI_server->start_mutex_wait(&state, that->p_psi, PSI_MUTEX_LOCK,
+ locker, src_file, src_line);
+
+ ............... (b)
+ result= pthread_mutex_lock(&that->m_mutex);
+
+ ............... (c)
+ PSI_server->end_mutex_wait(locker, result);
+
+ return result;
+}
+@endverbatim
+
*/
/**
@@ -1102,6 +1208,134 @@ static inline int mysql_mutex_lock(...)
@c table_events_statements_common::make_row()
- [I] EVENTS_STATEMENTS_SUMMARY_BY_DIGEST
@c table_esms_by_digest::make_row()
+
+@section IMPL_TRANSACTION Implementation for transactions consumers
+
+ For transactions, the tables that contains individual event data are:
+ - EVENTS_TRANSACTIONS_CURRENT
+ - EVENTS_TRANSACTIONS_HISTORY
+ - EVENTS_TRANSACTIONS_HISTORY_LONG
+
+ For transactions, the tables that contains aggregated data are:
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME
+
+@verbatim
+ transaction_locker(T, TX)
+ |
+ | [1]
+ |
+1a |-> pfs_thread(T).event_name(TX) =====>> [A], [B], [C], [D], [E]
+ | |
+ | | [2]
+ | |
+ | 2a |-> pfs_account(U, H).event_name(TX) =====>> [B], [C], [D], [E]
+ | . |
+ | . | [3-RESET]
+ | . |
+ | 2b .....+-> pfs_user(U).event_name(TX) =====>> [C]
+ | . |
+ | 2c .....+-> pfs_host(H).event_name(TX) =====>> [D], [E]
+ | . . |
+ | . . | [4-RESET]
+ | 2d . . |
+1b |----+----+----+-> pfs_transaction_class(TX) =====>> [E]
+ |
+1c |-> pfs_thread(T).transaction_current(TX) =====>> [F]
+ |
+1d |-> pfs_thread(T).transaction_history(TX) =====>> [G]
+ |
+1e |-> transaction_history_long(TX) =====>> [H]
+
+@endverbatim
+
+ Implemented as:
+ - [1] @c start_transaction_v1(), end_transaction_v1()
+ (1a, 1b) is an aggregation by EVENT_NAME,
+ (1c, 1d, 1e) is an aggregation by TIME,
+ all of these are orthogonal,
+ and implemented in end_transaction_v1().
+ - [2] @c delete_thread_v1(), @c aggregate_thread_transactions()
+ - [3] @c PFS_account::aggregate_transactions()
+ - [4] @c PFS_host::aggregate_transactions()
+
+ - [A] EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME,
+ @c table_ets_by_thread_by_event_name::make_row()
+ - [B] EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME,
+ @c table_ets_by_account_by_event_name::make_row()
+ - [C] EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME,
+ @c table_ets_by_user_by_event_name::make_row()
+ - [D] EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME,
+ @c table_ets_by_host_by_event_name::make_row()
+ - [E] EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME,
+ @c table_ets_global_by_event_name::make_row()
+ - [F] EVENTS_TRANSACTIONS_CURRENT,
+ @c table_events_transactions_current::rnd_next(),
+ @c table_events_transactions_common::make_row()
+ - [G] EVENTS_TRANSACTIONS_HISTORY,
+ @c table_events_transactions_history::rnd_next(),
+ @c table_events_transactions_common::make_row()
+ - [H] EVENTS_TRANSACTIONS_HISTORY_LONG,
+ @c table_events_transactions_history_long::rnd_next(),
+ @c table_events_transactions_common::make_row()
+
+@section IMPL_MEMORY Implementation for memory instruments
+
+ For memory, there are no tables that contains individual event data.
+
+ For memory, the tables that contains aggregated data are:
+ - MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
+ - MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME
+ - MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ - MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME
+ - MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME
+
+@verbatim
+ memory_event(T, S)
+ |
+ | [1]
+ |
+1a |-> pfs_thread(T).event_name(S) =====>> [A], [B], [C], [D], [E]
+ | |
+ | | [2]
+ | |
+1+ | 2a |-> pfs_account(U, H).event_name(S) =====>> [B], [C], [D], [E]
+ | . |
+ | . | [3-RESET]
+ | . |
+1+ | 2b .....+-> pfs_user(U).event_name(S) =====>> [C]
+ | . |
+1+ | 2c .....+-> pfs_host(H).event_name(S) =====>> [D], [E]
+ | . . |
+ | . . | [4-RESET]
+ | 2d . . |
+1b |----+----+----+-> global.event_name(S) =====>> [E]
+
+@endverbatim
+
+ Implemented as:
+ - [1] @c pfs_memory_alloc_v1(),
+ @c pfs_memory_realloc_v1(),
+ @c pfs_memory_free_v1().
+ - [1+] are overflows that can happen during [1a],
+ implemented with @c carry_memory_stat_delta()
+ - [2] @c delete_thread_v1(), @c aggregate_thread_memory()
+ - [3] @c PFS_account::aggregate_memory()
+ - [4] @c PFS_host::aggregate_memory()
+ - [A] EVENTS_STATEMENTS_SUMMARY_BY_THREAD_BY_EVENT_NAME,
+ @c table_mems_by_thread_by_event_name::make_row()
+ - [B] EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME,
+ @c table_mems_by_account_by_event_name::make_row()
+ - [C] EVENTS_STATEMENTS_SUMMARY_BY_USER_BY_EVENT_NAME,
+ @c table_mems_by_user_by_event_name::make_row()
+ - [D] EVENTS_STATEMENTS_SUMMARY_BY_HOST_BY_EVENT_NAME,
+ @c table_mems_by_host_by_event_name::make_row()
+ - [E] EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_EVENT_NAME,
+ @c table_mems_global_by_event_name::make_row()
+
*/
/**
@@ -1117,9 +1351,35 @@ static inline int mysql_mutex_lock(...)
@ingroup Performance_schema_implementation
*/
-pthread_key(PFS_thread*, THR_PFS);
+thread_local_key_t THR_PFS;
+thread_local_key_t THR_PFS_VG; // global_variables
+thread_local_key_t THR_PFS_SV; // session_variables
+thread_local_key_t THR_PFS_VBT; // variables_by_thread
+thread_local_key_t THR_PFS_SG; // global_status
+thread_local_key_t THR_PFS_SS; // session_status
+thread_local_key_t THR_PFS_SBT; // status_by_thread
+thread_local_key_t THR_PFS_SBU; // status_by_user
+thread_local_key_t THR_PFS_SBH; // status_by_host
+thread_local_key_t THR_PFS_SBA; // status_by_account
+
bool THR_PFS_initialized= false;
+static inline PFS_thread*
+my_thread_get_THR_PFS()
+{
+ DBUG_ASSERT(THR_PFS_initialized);
+ PFS_thread *thread= static_cast<PFS_thread*>(my_get_thread_local(THR_PFS));
+ DBUG_ASSERT(thread == NULL || sanitize_thread(thread) != NULL);
+ return thread;
+}
+
+static inline void
+my_thread_set_THR_PFS(PFS_thread *pfs)
+{
+ DBUG_ASSERT(THR_PFS_initialized);
+ my_set_thread_local(THR_PFS, pfs);
+}
+
/**
Conversion map from PSI_mutex_operation to enum_operation_type.
Indexed by enum PSI_mutex_operation.
@@ -1139,7 +1399,14 @@ static enum_operation_type rwlock_operation_map[]=
OPERATION_TYPE_READLOCK,
OPERATION_TYPE_WRITELOCK,
OPERATION_TYPE_TRYREADLOCK,
- OPERATION_TYPE_TRYWRITELOCK
+ OPERATION_TYPE_TRYWRITELOCK,
+
+ OPERATION_TYPE_SHAREDLOCK,
+ OPERATION_TYPE_SHAREDEXCLUSIVELOCK,
+ OPERATION_TYPE_EXCLUSIVELOCK,
+ OPERATION_TYPE_TRYSHAREDLOCK,
+ OPERATION_TYPE_TRYSHAREDEXCLUSIVELOCK,
+ OPERATION_TYPE_TRYEXCLUSIVELOCK,
};
/**
@@ -1244,7 +1511,7 @@ static enum_operation_type socket_operation_map[]=
@return 0 for success, non zero for errors
*/
static int build_prefix(const LEX_CSTRING *prefix, const char *category,
- char *output, int *output_length)
+ char *output, size_t *output_length)
{
size_t len= strlen(category);
char *out_ptr= output;
@@ -1268,52 +1535,56 @@ static int build_prefix(const LEX_CSTRING *prefix, const char *category,
/* output = prefix + category + '/' */
memcpy(out_ptr, prefix->str, prefix_length);
out_ptr+= prefix_length;
- memcpy(out_ptr, category, len);
- out_ptr+= len;
- *out_ptr= '/';
- out_ptr++;
- *output_length= (int)(out_ptr - output);
+ if (len > 0)
+ {
+ memcpy(out_ptr, category, len);
+ out_ptr+= len;
+ *out_ptr= '/';
+ out_ptr++;
+ }
+ *output_length= int(out_ptr - output);
return 0;
}
-#define REGISTER_BODY_V1(KEY_T, PREFIX, REGISTER_FUNC) \
- KEY_T key; \
- char formatted_name[PFS_MAX_INFO_NAME_LENGTH]; \
- int prefix_length; \
- int len; \
- int full_length; \
- \
- DBUG_ASSERT(category != NULL); \
- DBUG_ASSERT(info != NULL); \
- if (unlikely(build_prefix(&PREFIX, category, \
- formatted_name, &prefix_length))) \
- { \
- for (; count>0; count--, info++) \
- *(info->m_key)= 0; \
- return ; \
- } \
- \
- for (; count>0; count--, info++) \
- { \
- DBUG_ASSERT(info->m_key != NULL); \
- DBUG_ASSERT(info->m_name != NULL); \
- len= (int)strlen(info->m_name); \
- full_length= prefix_length + len; \
- if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH)) \
- { \
- memcpy(formatted_name + prefix_length, info->m_name, len); \
- key= REGISTER_FUNC(formatted_name, full_length, info->m_flags); \
- } \
- else \
- { \
- pfs_print_error("REGISTER_BODY_V1: name too long <%s> <%s>\n", \
- category, info->m_name); \
- key= 0; \
- } \
- \
- *(info->m_key)= key; \
- } \
+#define REGISTER_BODY_V1(KEY_T, PREFIX, REGISTER_FUNC) \
+ KEY_T key; \
+ char formatted_name[PFS_MAX_INFO_NAME_LENGTH]; \
+ size_t prefix_length; \
+ size_t len; \
+ size_t full_length; \
+ \
+ DBUG_ASSERT(category != NULL); \
+ DBUG_ASSERT(info != NULL); \
+ if (unlikely(build_prefix(&PREFIX, category, \
+ formatted_name, &prefix_length)) || \
+ ! pfs_initialized) \
+ { \
+ for (; count>0; count--, info++) \
+ *(info->m_key)= 0; \
+ return ; \
+ } \
+ \
+ for (; count>0; count--, info++) \
+ { \
+ DBUG_ASSERT(info->m_key != NULL); \
+ DBUG_ASSERT(info->m_name != NULL); \
+ len= strlen(info->m_name); \
+ full_length= prefix_length + len; \
+ if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH)) \
+ { \
+ memcpy(formatted_name + prefix_length, info->m_name, len); \
+ key= REGISTER_FUNC(formatted_name, (uint)full_length, info->m_flags); \
+ } \
+ else \
+ { \
+ pfs_print_error("REGISTER_BODY_V1: name too long <%s> <%s>\n", \
+ category, info->m_name); \
+ key= 0; \
+ } \
+ \
+ *(info->m_key)= key; \
+ } \
return;
/* Use C linkage for the interface functions. */
@@ -1324,9 +1595,9 @@ C_MODE_START
Implementation of the mutex instrumentation interface.
@sa PSI_v1::register_mutex.
*/
-static void register_mutex_v1(const char *category,
- PSI_mutex_info_v1 *info,
- int count)
+void pfs_register_mutex_v1(const char *category,
+ PSI_mutex_info_v1 *info,
+ int count)
{
REGISTER_BODY_V1(PSI_mutex_key,
mutex_instrument_prefix,
@@ -1337,22 +1608,80 @@ static void register_mutex_v1(const char *category,
Implementation of the rwlock instrumentation interface.
@sa PSI_v1::register_rwlock.
*/
-static void register_rwlock_v1(const char *category,
- PSI_rwlock_info_v1 *info,
- int count)
+void pfs_register_rwlock_v1(const char *category,
+ PSI_rwlock_info_v1 *info,
+ int count)
{
- REGISTER_BODY_V1(PSI_rwlock_key,
- rwlock_instrument_prefix,
- register_rwlock_class)
+ PSI_rwlock_key key;
+ char rw_formatted_name[PFS_MAX_INFO_NAME_LENGTH];
+ char sx_formatted_name[PFS_MAX_INFO_NAME_LENGTH];
+ size_t rw_prefix_length;
+ size_t sx_prefix_length;
+ size_t len;
+ size_t full_length;
+
+ DBUG_ASSERT(category != NULL);
+ DBUG_ASSERT(info != NULL);
+ if (build_prefix(&rwlock_instrument_prefix, category,
+ rw_formatted_name, &rw_prefix_length) ||
+ build_prefix(&sxlock_instrument_prefix, category,
+ sx_formatted_name, &sx_prefix_length) ||
+ ! pfs_initialized)
+ {
+ for (; count>0; count--, info++)
+ *(info->m_key)= 0;
+ return ;
+ }
+
+ for (; count>0; count--, info++)
+ {
+ DBUG_ASSERT(info->m_key != NULL);
+ DBUG_ASSERT(info->m_name != NULL);
+ len= strlen(info->m_name);
+
+ if (info->m_flags & PSI_RWLOCK_FLAG_SX)
+ {
+ full_length= sx_prefix_length + len;
+ if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH))
+ {
+ memcpy(sx_formatted_name + sx_prefix_length, info->m_name, len);
+ key= register_rwlock_class(sx_formatted_name, (uint)full_length, info->m_flags);
+ }
+ else
+ {
+ pfs_print_error("REGISTER_BODY_V1: (sx) name too long <%s> <%s>\n",
+ category, info->m_name);
+ key= 0;
+ }
+ }
+ else
+ {
+ full_length= rw_prefix_length + len;
+ if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH))
+ {
+ memcpy(rw_formatted_name + rw_prefix_length, info->m_name, len);
+ key= register_rwlock_class(rw_formatted_name, (uint)full_length, info->m_flags);
+ }
+ else
+ {
+ pfs_print_error("REGISTER_BODY_V1: (rw) name too long <%s> <%s>\n",
+ category, info->m_name);
+ key= 0;
+ }
+ }
+
+ *(info->m_key)= key;
+ }
+ return;
}
/**
Implementation of the cond instrumentation interface.
@sa PSI_v1::register_cond.
*/
-static void register_cond_v1(const char *category,
- PSI_cond_info_v1 *info,
- int count)
+void pfs_register_cond_v1(const char *category,
+ PSI_cond_info_v1 *info,
+ int count)
{
REGISTER_BODY_V1(PSI_cond_key,
cond_instrument_prefix,
@@ -1363,9 +1692,9 @@ static void register_cond_v1(const char *category,
Implementation of the thread instrumentation interface.
@sa PSI_v1::register_thread.
*/
-static void register_thread_v1(const char *category,
- PSI_thread_info_v1 *info,
- int count)
+void pfs_register_thread_v1(const char *category,
+ PSI_thread_info_v1 *info,
+ int count)
{
REGISTER_BODY_V1(PSI_thread_key,
thread_instrument_prefix,
@@ -1376,29 +1705,30 @@ static void register_thread_v1(const char *category,
Implementation of the file instrumentation interface.
@sa PSI_v1::register_file.
*/
-static void register_file_v1(const char *category,
- PSI_file_info_v1 *info,
- int count)
+void pfs_register_file_v1(const char *category,
+ PSI_file_info_v1 *info,
+ int count)
{
REGISTER_BODY_V1(PSI_file_key,
file_instrument_prefix,
register_file_class)
}
-static void register_stage_v1(const char *category,
- PSI_stage_info_v1 **info_array,
- int count)
+void pfs_register_stage_v1(const char *category,
+ PSI_stage_info_v1 **info_array,
+ int count)
{
char formatted_name[PFS_MAX_INFO_NAME_LENGTH];
- int prefix_length;
- int len;
- int full_length;
+ size_t prefix_length;
+ size_t len;
+ size_t full_length;
PSI_stage_info_v1 *info;
DBUG_ASSERT(category != NULL);
DBUG_ASSERT(info_array != NULL);
if (unlikely(build_prefix(&stage_instrument_prefix, category,
- formatted_name, &prefix_length)))
+ formatted_name, &prefix_length)) ||
+ ! pfs_initialized)
{
for (; count>0; count--, info_array++)
(*info_array)->m_key= 0;
@@ -1411,13 +1741,14 @@ static void register_stage_v1(const char *category,
DBUG_ASSERT(info != NULL);
DBUG_ASSERT(info->m_name != NULL);
len= (int)strlen(info->m_name);
+ DBUG_ASSERT(len <= 64); // see table_threads.cc near PROCESSLIST_STATE
full_length= prefix_length + len;
if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH))
{
memcpy(formatted_name + prefix_length, info->m_name, len);
info->m_key= register_stage_class(formatted_name,
- prefix_length,
- full_length,
+ (uint)prefix_length,
+ (uint)full_length,
info->m_flags);
}
else
@@ -1430,19 +1761,20 @@ static void register_stage_v1(const char *category,
return;
}
-static void register_statement_v1(const char *category,
- PSI_statement_info_v1 *info,
- int count)
+void pfs_register_statement_v1(const char *category,
+ PSI_statement_info_v1 *info,
+ int count)
{
char formatted_name[PFS_MAX_INFO_NAME_LENGTH];
- int prefix_length;
- int len;
- int full_length;
+ size_t prefix_length;
+ size_t len;
+ size_t full_length;
DBUG_ASSERT(category != NULL);
DBUG_ASSERT(info != NULL);
if (unlikely(build_prefix(&statement_instrument_prefix,
- category, formatted_name, &prefix_length)))
+ category, formatted_name, &prefix_length)) ||
+ ! pfs_initialized)
{
for (; count>0; count--, info++)
info->m_key= 0;
@@ -1459,7 +1791,7 @@ static void register_statement_v1(const char *category,
if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH))
{
memcpy(formatted_name + prefix_length, info->m_name, len);
- info->m_key= register_statement_class(formatted_name, full_length, info->m_flags);
+ info->m_key= register_statement_class(formatted_name, (uint)full_length, info->m_flags);
}
else
{
@@ -1471,9 +1803,9 @@ static void register_statement_v1(const char *category,
return;
}
-static void register_socket_v1(const char *category,
- PSI_socket_info_v1 *info,
- int count)
+void pfs_register_socket_v1(const char *category,
+ PSI_socket_info_v1 *info,
+ int count)
{
REGISTER_BODY_V1(PSI_socket_key,
socket_instrument_prefix,
@@ -1486,8 +1818,6 @@ static void register_socket_v1(const char *category,
klass= find_##T##_class(KEY); \
if (unlikely(klass == NULL)) \
return NULL; \
- if (! klass->m_enabled) \
- return NULL; \
pfs= create_##T(klass, ID); \
return reinterpret_cast<PSI_##T *> (pfs)
@@ -1495,8 +1825,8 @@ static void register_socket_v1(const char *category,
Implementation of the mutex instrumentation interface.
@sa PSI_v1::init_mutex.
*/
-static PSI_mutex*
-init_mutex_v1(PSI_mutex_key key, const void *identity)
+PSI_mutex*
+pfs_init_mutex_v1(PSI_mutex_key key, const void *identity)
{
INIT_BODY_V1(mutex, key, identity);
}
@@ -1505,7 +1835,7 @@ init_mutex_v1(PSI_mutex_key key, const void *identity)
Implementation of the mutex instrumentation interface.
@sa PSI_v1::destroy_mutex.
*/
-static void destroy_mutex_v1(PSI_mutex* mutex)
+void pfs_destroy_mutex_v1(PSI_mutex* mutex)
{
PFS_mutex *pfs= reinterpret_cast<PFS_mutex*> (mutex);
@@ -1518,8 +1848,8 @@ static void destroy_mutex_v1(PSI_mutex* mutex)
Implementation of the rwlock instrumentation interface.
@sa PSI_v1::init_rwlock.
*/
-static PSI_rwlock*
-init_rwlock_v1(PSI_rwlock_key key, const void *identity)
+PSI_rwlock*
+pfs_init_rwlock_v1(PSI_rwlock_key key, const void *identity)
{
INIT_BODY_V1(rwlock, key, identity);
}
@@ -1528,7 +1858,7 @@ init_rwlock_v1(PSI_rwlock_key key, const void *identity)
Implementation of the rwlock instrumentation interface.
@sa PSI_v1::destroy_rwlock.
*/
-static void destroy_rwlock_v1(PSI_rwlock* rwlock)
+void pfs_destroy_rwlock_v1(PSI_rwlock* rwlock)
{
PFS_rwlock *pfs= reinterpret_cast<PFS_rwlock*> (rwlock);
@@ -1541,8 +1871,8 @@ static void destroy_rwlock_v1(PSI_rwlock* rwlock)
Implementation of the cond instrumentation interface.
@sa PSI_v1::init_cond.
*/
-static PSI_cond*
-init_cond_v1(PSI_cond_key key, const void *identity)
+PSI_cond*
+pfs_init_cond_v1(PSI_cond_key key, const void *identity)
{
INIT_BODY_V1(cond, key, identity);
}
@@ -1551,7 +1881,7 @@ init_cond_v1(PSI_cond_key key, const void *identity)
Implementation of the cond instrumentation interface.
@sa PSI_v1::destroy_cond.
*/
-static void destroy_cond_v1(PSI_cond* cond)
+void pfs_destroy_cond_v1(PSI_cond* cond)
{
PFS_cond *pfs= reinterpret_cast<PFS_cond*> (cond);
@@ -1564,14 +1894,14 @@ static void destroy_cond_v1(PSI_cond* cond)
Implementation of the table instrumentation interface.
@sa PSI_v1::get_table_share.
*/
-static PSI_table_share*
-get_table_share_v1(my_bool temporary, TABLE_SHARE *share)
+PSI_table_share*
+pfs_get_table_share_v1(my_bool temporary, TABLE_SHARE *share)
{
/* Ignore temporary tables and views. */
if (temporary || share->is_view)
return NULL;
/* An instrumented thread is required, for LF_PINS. */
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
PFS_table_share* pfs_share;
@@ -1583,7 +1913,7 @@ get_table_share_v1(my_bool temporary, TABLE_SHARE *share)
Implementation of the table instrumentation interface.
@sa PSI_v1::release_table_share.
*/
-static void release_table_share_v1(PSI_table_share* share)
+void pfs_release_table_share_v1(PSI_table_share* share)
{
PFS_table_share* pfs= reinterpret_cast<PFS_table_share*> (share);
@@ -1597,15 +1927,15 @@ static void release_table_share_v1(PSI_table_share* share)
Implementation of the table instrumentation interface.
@sa PSI_v1::drop_table_share.
*/
-static void
-drop_table_share_v1(my_bool temporary,
- const char *schema_name, int schema_name_length,
- const char *table_name, int table_name_length)
+void
+pfs_drop_table_share_v1(my_bool temporary,
+ const char *schema_name, int schema_name_length,
+ const char *table_name, int table_name_length)
{
/* Ignore temporary tables. */
if (temporary)
return;
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return;
/* TODO: temporary tables */
@@ -1617,8 +1947,8 @@ drop_table_share_v1(my_bool temporary,
Implementation of the table instrumentation interface.
@sa PSI_v1::open_table.
*/
-static PSI_table*
-open_table_v1(PSI_table_share *share, const void *identity)
+PSI_table*
+pfs_open_table_v1(PSI_table_share *share, const void *identity)
{
PFS_table_share *pfs_table_share= reinterpret_cast<PFS_table_share*> (share);
@@ -1641,7 +1971,8 @@ open_table_v1(PSI_table_share *share, const void *identity)
if (! global_table_io_class.m_enabled && ! global_table_lock_class.m_enabled)
return NULL;
- PFS_thread *thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *thread= my_thread_get_THR_PFS();
+
if (unlikely(thread == NULL))
return NULL;
@@ -1653,12 +1984,13 @@ open_table_v1(PSI_table_share *share, const void *identity)
Implementation of the table instrumentation interface.
@sa PSI_v1::unbind_table.
*/
-static void unbind_table_v1(PSI_table *table)
+void pfs_unbind_table_v1(PSI_table *table)
{
PFS_table *pfs= reinterpret_cast<PFS_table*> (table);
if (likely(pfs != NULL))
{
pfs->m_thread_owner= NULL;
+ pfs->m_owner_event_id= 0;
}
}
@@ -1666,43 +1998,42 @@ static void unbind_table_v1(PSI_table *table)
Implementation of the table instrumentation interface.
@sa PSI_v1::rebind_table.
*/
-static PSI_table *
-rebind_table_v1(PSI_table_share *share, const void *identity, PSI_table *table)
+PSI_table *
+pfs_rebind_table_v1(PSI_table_share *share, const void *identity, PSI_table *table)
{
PFS_table *pfs= reinterpret_cast<PFS_table*> (table);
if (likely(pfs != NULL))
{
- PFS_thread *thread;
DBUG_ASSERT(pfs->m_thread_owner == NULL);
- if (psi_unlikely(! flag_global_instrumentation))
+ if (unlikely(! pfs->m_share->m_enabled))
{
destroy_table(pfs);
return NULL;
}
- /* The table handle was already instrumented, reuse it for this thread. */
- thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
-
- if (unlikely(! pfs->m_share->m_enabled))
+ if (unlikely(! global_table_io_class.m_enabled && ! global_table_lock_class.m_enabled))
{
destroy_table(pfs);
return NULL;
}
- if (unlikely(! global_table_io_class.m_enabled && ! global_table_lock_class.m_enabled))
+ if (psi_unlikely(! flag_global_instrumentation))
{
destroy_table(pfs);
return NULL;
}
+ /* The table handle was already instrumented, reuse it for this thread. */
+ PFS_thread *thread= my_thread_get_THR_PFS();
pfs->m_thread_owner= thread;
+ if (thread != NULL)
+ pfs->m_owner_event_id= thread->m_event_id;
+ else
+ pfs->m_owner_event_id= 0;
return table;
}
- if (psi_unlikely(! flag_global_instrumentation))
- return NULL;
-
/* See open_table_v1() */
PFS_table_share *pfs_table_share= reinterpret_cast<PFS_table_share*> (share);
@@ -1716,7 +2047,10 @@ rebind_table_v1(PSI_table_share *share, const void *identity, PSI_table *table)
if (! global_table_io_class.m_enabled && ! global_table_lock_class.m_enabled)
return NULL;
- PFS_thread *thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ if (! flag_global_instrumentation)
+ return NULL;
+
+ PFS_thread *thread= my_thread_get_THR_PFS();
if (unlikely(thread == NULL))
return NULL;
@@ -1728,31 +2062,29 @@ rebind_table_v1(PSI_table_share *share, const void *identity, PSI_table *table)
Implementation of the table instrumentation interface.
@sa PSI_v1::close_table.
*/
-static void close_table_v1(PSI_table *table)
+void pfs_close_table_v1(TABLE_SHARE *server_share, PSI_table *table)
{
PFS_table *pfs= reinterpret_cast<PFS_table*> (table);
if (unlikely(pfs == NULL))
return;
- pfs->aggregate();
+ pfs->aggregate(server_share);
destroy_table(pfs);
}
-static PSI_socket*
-init_socket_v1(PSI_socket_key key, const my_socket *fd,
- const struct sockaddr *addr, socklen_t addr_len)
+PSI_socket*
+pfs_init_socket_v1(PSI_socket_key key, const my_socket *fd,
+ const struct sockaddr *addr, socklen_t addr_len)
{
PFS_socket_class *klass;
PFS_socket *pfs;
klass= find_socket_class(key);
if (unlikely(klass == NULL))
return NULL;
- if (! klass->m_enabled)
- return NULL;
pfs= create_socket(klass, fd, addr, addr_len);
return reinterpret_cast<PSI_socket *> (pfs);
}
-static void destroy_socket_v1(PSI_socket *socket)
+void pfs_destroy_socket_v1(PSI_socket *socket)
{
PFS_socket *pfs= reinterpret_cast<PFS_socket*> (socket);
@@ -1765,7 +2097,7 @@ static void destroy_socket_v1(PSI_socket *socket)
Implementation of the file instrumentation interface.
@sa PSI_v1::create_file.
*/
-static void create_file_v1(PSI_file_key key, const char *name, File file)
+void pfs_create_file_v1(PSI_file_key key, const char *name, File file)
{
if (psi_unlikely(! flag_global_instrumentation))
return;
@@ -1779,7 +2111,7 @@ static void create_file_v1(PSI_file_key key, const char *name, File file)
return;
/* A thread is needed for LF_PINS */
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return;
@@ -1821,7 +2153,7 @@ struct PFS_spawn_thread_arg
void *m_user_arg;
};
-void* pfs_spawn_thread(void *arg)
+extern "C" void* pfs_spawn_thread(void *arg)
{
PFS_spawn_thread_arg *typed_arg= (PFS_spawn_thread_arg*) arg;
void *user_arg;
@@ -1853,7 +2185,7 @@ void* pfs_spawn_thread(void *arg)
{
pfs= NULL;
}
- my_pthread_setspecific_ptr(THR_PFS, pfs);
+ my_thread_set_THR_PFS(pfs);
/*
Secondly, free the memory allocated in spawn_thread_v1().
@@ -1875,15 +2207,16 @@ void* pfs_spawn_thread(void *arg)
Implementation of the thread instrumentation interface.
@sa PSI_v1::spawn_thread.
*/
-static int spawn_thread_v1(PSI_thread_key key,
- pthread_t *thread, const pthread_attr_t *attr,
- void *(*start_routine)(void*), void *arg)
+int pfs_spawn_thread_v1(PSI_thread_key key,
+ my_thread_handle *thread, const my_thread_attr_t *attr,
+ void *(*start_routine)(void*), void *arg)
{
PFS_spawn_thread_arg *psi_arg;
PFS_thread *parent;
/* psi_arg can not be global, and can not be a local variable. */
- psi_arg= (PFS_spawn_thread_arg*) my_malloc(sizeof(PFS_spawn_thread_arg),
+ psi_arg= (PFS_spawn_thread_arg*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(PFS_spawn_thread_arg),
MYF(MY_WME));
if (unlikely(psi_arg == NULL))
return EAGAIN;
@@ -1893,7 +2226,7 @@ static int spawn_thread_v1(PSI_thread_key key,
psi_arg->m_user_start_routine= start_routine;
psi_arg->m_user_arg= arg;
- parent= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ parent= my_thread_get_THR_PFS();
if (parent != NULL)
{
/*
@@ -1916,7 +2249,7 @@ static int spawn_thread_v1(PSI_thread_key key,
psi_arg->m_hostname_length= 0;
}
- int result= pthread_create(thread, attr, pfs_spawn_thread, psi_arg);
+ int result= my_thread_create(thread, attr, pfs_spawn_thread, psi_arg);
if (unlikely(result != 0))
my_free(psi_arg);
return result;
@@ -1926,14 +2259,22 @@ static int spawn_thread_v1(PSI_thread_key key,
Implementation of the thread instrumentation interface.
@sa PSI_v1::new_thread.
*/
-static PSI_thread*
-new_thread_v1(PSI_thread_key key, const void *identity, ulonglong processlist_id)
+PSI_thread*
+pfs_new_thread_v1(PSI_thread_key key, const void *identity, ulonglong processlist_id)
{
PFS_thread *pfs;
PFS_thread_class *klass= find_thread_class(key);
if (likely(klass != NULL))
+ {
pfs= create_thread(klass, identity, processlist_id);
+ if (pfs != NULL)
+ {
+ PFS_thread *parent= my_thread_get_THR_PFS();
+ if (parent != NULL)
+ pfs->m_parent_thread_internal_id= parent->m_parent_thread_internal_id;
+ }
+ }
else
pfs= NULL;
@@ -1944,7 +2285,7 @@ new_thread_v1(PSI_thread_key key, const void *identity, ulonglong processlist_id
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_id.
*/
-static void set_thread_id_v1(PSI_thread *thread, ulonglong processlist_id)
+void pfs_set_thread_id_v1(PSI_thread *thread, ulonglong processlist_id)
{
PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread);
if (unlikely(pfs == NULL))
@@ -1954,12 +2295,36 @@ static void set_thread_id_v1(PSI_thread *thread, ulonglong processlist_id)
/**
Implementation of the thread instrumentation interface.
+ @sa PSI_v1::set_thread_THD.
+*/
+void pfs_set_thread_THD_v1(PSI_thread *thread, THD *thd)
+{
+ PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread);
+ if (unlikely(pfs == NULL))
+ return;
+ pfs->m_thd= thd;
+}
+
+/**
+ Implementation of the thread instrumentation interface.
+ @sa PSI_v1::set_thread_os_thread_id.
+*/
+void pfs_set_thread_os_id_v1(PSI_thread *thread)
+{
+ PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread);
+ if (unlikely(pfs == NULL))
+ return;
+ pfs->m_thread_os_id= my_thread_os_id();
+}
+
+/**
+ Implementation of the thread instrumentation interface.
@sa PSI_v1::get_thread_id.
*/
-static PSI_thread*
-get_thread_v1(void)
+PSI_thread*
+pfs_get_thread_v1(void)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs= my_thread_get_THR_PFS();
return reinterpret_cast<PSI_thread*> (pfs);
}
@@ -1967,9 +2332,10 @@ get_thread_v1(void)
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_user.
*/
-static void set_thread_user_v1(const char *user, int user_len)
+void pfs_set_thread_user_v1(const char *user, int user_len)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ pfs_dirty_state dirty_state;
+ PFS_thread *pfs= my_thread_get_THR_PFS();
DBUG_ASSERT((user != NULL) || (user_len == 0));
DBUG_ASSERT(user_len >= 0);
@@ -1980,7 +2346,7 @@ static void set_thread_user_v1(const char *user, int user_len)
aggregate_thread(pfs, pfs->m_account, pfs->m_user, pfs->m_host);
- pfs->m_session_lock.allocated_to_dirty();
+ pfs->m_session_lock.allocated_to_dirty(& dirty_state);
clear_thread_account(pfs);
@@ -1990,37 +2356,44 @@ static void set_thread_user_v1(const char *user, int user_len)
set_thread_account(pfs);
- bool enabled= true;
- if (flag_thread_instrumentation)
+ bool enabled;
+ bool history;
+ if (pfs->m_account != NULL)
+ {
+ enabled= pfs->m_account->m_enabled;
+ history= pfs->m_account->m_history;
+ }
+ else
{
if ((pfs->m_username_length > 0) && (pfs->m_hostname_length > 0))
{
- /*
- TODO: performance improvement.
- Once performance_schema.USERS is exposed,
- we can use PFS_user::m_enabled instead of looking up
- SETUP_ACTORS every time.
- */
lookup_setup_actor(pfs,
pfs->m_username, pfs->m_username_length,
pfs->m_hostname, pfs->m_hostname_length,
- &enabled);
+ &enabled, &history);
+ }
+ else
+ {
+ /* There is no setting for background threads */
+ enabled= true;
+ history= true;
}
}
+ pfs->set_enabled(enabled);
+ pfs->set_history(history);
- pfs->m_enabled= enabled;
-
- pfs->m_session_lock.dirty_to_allocated();
+ pfs->m_session_lock.dirty_to_allocated(& dirty_state);
}
/**
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_account.
*/
-static void set_thread_account_v1(const char *user, int user_len,
- const char *host, int host_len)
+void pfs_set_thread_account_v1(const char *user, int user_len,
+ const char *host, int host_len)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ pfs_dirty_state dirty_state;
+ PFS_thread *pfs= my_thread_get_THR_PFS();
DBUG_ASSERT((user != NULL) || (user_len == 0));
DBUG_ASSERT(user_len >= 0);
@@ -2033,7 +2406,7 @@ static void set_thread_account_v1(const char *user, int user_len,
if (unlikely(pfs == NULL))
return;
- pfs->m_session_lock.allocated_to_dirty();
+ pfs->m_session_lock.allocated_to_dirty(& dirty_state);
clear_thread_account(pfs);
@@ -2047,35 +2420,42 @@ static void set_thread_account_v1(const char *user, int user_len,
set_thread_account(pfs);
- bool enabled= true;
- if (flag_thread_instrumentation)
+ bool enabled;
+ bool history;
+ if (pfs->m_account != NULL)
+ {
+ enabled= pfs->m_account->m_enabled;
+ history= pfs->m_account->m_history;
+ }
+ else
{
if ((pfs->m_username_length > 0) && (pfs->m_hostname_length > 0))
{
- /*
- TODO: performance improvement.
- Once performance_schema.USERS is exposed,
- we can use PFS_user::m_enabled instead of looking up
- SETUP_ACTORS every time.
- */
lookup_setup_actor(pfs,
pfs->m_username, pfs->m_username_length,
pfs->m_hostname, pfs->m_hostname_length,
- &enabled);
+ &enabled, &history);
+ }
+ else
+ {
+ /* There is no setting for background threads */
+ enabled= true;
+ history= true;
}
}
- pfs->m_enabled= enabled;
+ pfs->set_enabled(enabled);
+ pfs->set_history(history);
- pfs->m_session_lock.dirty_to_allocated();
+ pfs->m_session_lock.dirty_to_allocated(& dirty_state);
}
/**
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_db.
*/
-static void set_thread_db_v1(const char* db, int db_len)
+void pfs_set_thread_db_v1(const char* db, int db_len)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs= my_thread_get_THR_PFS();
DBUG_ASSERT((db != NULL) || (db_len == 0));
DBUG_ASSERT(db_len >= 0);
@@ -2083,11 +2463,12 @@ static void set_thread_db_v1(const char* db, int db_len)
if (likely(pfs != NULL))
{
- pfs->m_stmt_lock.allocated_to_dirty();
+ pfs_dirty_state dirty_state;
+ pfs->m_stmt_lock.allocated_to_dirty(& dirty_state);
if (db_len > 0)
memcpy(pfs->m_dbname, db, db_len);
pfs->m_dbname_length= db_len;
- pfs->m_stmt_lock.dirty_to_allocated();
+ pfs->m_stmt_lock.dirty_to_allocated(& dirty_state);
}
}
@@ -2095,9 +2476,9 @@ static void set_thread_db_v1(const char* db, int db_len)
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_command.
*/
-static void set_thread_command_v1(int command)
+void pfs_set_thread_command_v1(int command)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs= my_thread_get_THR_PFS();
DBUG_ASSERT(command >= 0);
DBUG_ASSERT(command <= (int) COM_END);
@@ -2109,12 +2490,27 @@ static void set_thread_command_v1(int command)
}
/**
+Implementation of the thread instrumentation interface.
+@sa PSI_v1::set_thread_connection_type.
+*/
+void pfs_set_connection_type_v1(opaque_vio_type conn_type)
+{
+ PFS_thread *pfs= my_thread_get_THR_PFS();
+
+ if (likely(pfs != NULL))
+ {
+ pfs->m_connection_type= static_cast<enum_vio_type> (conn_type);
+ }
+}
+
+
+/**
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_start_time.
*/
-static void set_thread_start_time_v1(time_t start_time)
+void pfs_set_thread_start_time_v1(time_t start_time)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs= my_thread_get_THR_PFS();
if (likely(pfs != NULL))
{
@@ -2126,7 +2522,7 @@ static void set_thread_start_time_v1(time_t start_time)
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_state.
*/
-static void set_thread_state_v1(const char* state)
+void pfs_set_thread_state_v1(const char* state)
{
/* DEPRECATED. */
}
@@ -2135,9 +2531,10 @@ static void set_thread_state_v1(const char* state)
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread_info.
*/
-static void set_thread_info_v1(const char* info, uint info_len)
+void pfs_set_thread_info_v1(const char* info, uint info_len)
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ pfs_dirty_state dirty_state;
+ PFS_thread *pfs= my_thread_get_THR_PFS();
DBUG_ASSERT((info != NULL) || (info_len == 0));
@@ -2148,16 +2545,16 @@ static void set_thread_info_v1(const char* info, uint info_len)
if (info_len > sizeof(pfs->m_processlist_info))
info_len= sizeof(pfs->m_processlist_info);
- pfs->m_stmt_lock.allocated_to_dirty();
+ pfs->m_stmt_lock.allocated_to_dirty(& dirty_state);
memcpy(pfs->m_processlist_info, info, info_len);
pfs->m_processlist_info_length= info_len;
- pfs->m_stmt_lock.dirty_to_allocated();
+ pfs->m_stmt_lock.dirty_to_allocated(& dirty_state);
}
else
{
- pfs->m_stmt_lock.allocated_to_dirty();
+ pfs->m_stmt_lock.allocated_to_dirty(& dirty_state);
pfs->m_processlist_info_length= 0;
- pfs->m_stmt_lock.dirty_to_allocated();
+ pfs->m_stmt_lock.dirty_to_allocated(& dirty_state);
}
}
}
@@ -2166,23 +2563,23 @@ static void set_thread_info_v1(const char* info, uint info_len)
Implementation of the thread instrumentation interface.
@sa PSI_v1::set_thread.
*/
-static void set_thread_v1(PSI_thread* thread)
+void pfs_set_thread_v1(PSI_thread* thread)
{
PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread);
- my_pthread_setspecific_ptr(THR_PFS, pfs);
+ my_thread_set_THR_PFS(pfs);
}
/**
Implementation of the thread instrumentation interface.
@sa PSI_v1::delete_current_thread.
*/
-static void delete_current_thread_v1(void)
+void pfs_delete_current_thread_v1(void)
{
- PFS_thread *thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *thread= my_thread_get_THR_PFS();
if (thread != NULL)
{
aggregate_thread(thread, thread->m_account, thread->m_user, thread->m_host);
- my_pthread_setspecific_ptr(THR_PFS, NULL);
+ my_thread_set_THR_PFS(NULL);
destroy_thread(thread);
}
}
@@ -2191,7 +2588,7 @@ static void delete_current_thread_v1(void)
Implementation of the thread instrumentation interface.
@sa PSI_v1::delete_thread.
*/
-static void delete_thread_v1(PSI_thread *thread)
+void pfs_delete_thread_v1(PSI_thread *thread)
{
PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread);
@@ -2206,10 +2603,10 @@ static void delete_thread_v1(PSI_thread *thread)
Implementation of the mutex instrumentation interface.
@sa PSI_v1::start_mutex_wait.
*/
-static PSI_mutex_locker*
-start_mutex_wait_v1(PSI_mutex_locker_state *state,
- PSI_mutex *mutex, PSI_mutex_operation op,
- const char *src_file, uint src_line)
+PSI_mutex_locker*
+pfs_start_mutex_wait_v1(PSI_mutex_locker_state *state,
+ PSI_mutex *mutex, PSI_mutex_operation op,
+ const char *src_file, uint src_line)
{
PFS_mutex *pfs_mutex= reinterpret_cast<PFS_mutex*> (mutex);
DBUG_ASSERT((int) op >= 0);
@@ -2227,7 +2624,7 @@ start_mutex_wait_v1(PSI_mutex_locker_state *state,
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
if (! pfs_thread->m_enabled)
@@ -2259,7 +2656,7 @@ start_mutex_wait_v1(PSI_mutex_locker_state *state,
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= pfs_mutex->m_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -2304,11 +2701,11 @@ start_mutex_wait_v1(PSI_mutex_locker_state *state,
@sa PSI_v1::start_rwlock_rdwait
@sa PSI_v1::start_rwlock_wrwait
*/
-static PSI_rwlock_locker*
-start_rwlock_wait_v1(PSI_rwlock_locker_state *state,
- PSI_rwlock *rwlock,
- PSI_rwlock_operation op,
- const char *src_file, uint src_line)
+PSI_rwlock_locker*
+pfs_start_rwlock_wait_v1(PSI_rwlock_locker_state *state,
+ PSI_rwlock *rwlock,
+ PSI_rwlock_operation op,
+ const char *src_file, uint src_line)
{
PFS_rwlock *pfs_rwlock= reinterpret_cast<PFS_rwlock*> (rwlock);
DBUG_ASSERT(static_cast<int> (op) >= 0);
@@ -2317,6 +2714,26 @@ start_rwlock_wait_v1(PSI_rwlock_locker_state *state,
DBUG_ASSERT(pfs_rwlock != NULL);
DBUG_ASSERT(pfs_rwlock->m_class != NULL);
+ /* Operations supported for READ WRITE LOCK */
+
+ DBUG_ASSERT( pfs_rwlock->m_class->is_shared_exclusive()
+ || (op == PSI_RWLOCK_READLOCK)
+ || (op == PSI_RWLOCK_WRITELOCK)
+ || (op == PSI_RWLOCK_TRYREADLOCK)
+ || (op == PSI_RWLOCK_TRYWRITELOCK)
+ );
+
+ /* Operations supported for SHARED EXCLUSIVE LOCK */
+
+ DBUG_ASSERT( ! pfs_rwlock->m_class->is_shared_exclusive()
+ || (op == PSI_RWLOCK_SHAREDLOCK)
+ || (op == PSI_RWLOCK_SHAREDEXCLUSIVELOCK)
+ || (op == PSI_RWLOCK_EXCLUSIVELOCK)
+ || (op == PSI_RWLOCK_TRYSHAREDLOCK)
+ || (op == PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK)
+ || (op == PSI_RWLOCK_TRYEXCLUSIVELOCK)
+ );
+
if (! pfs_rwlock->m_enabled)
return NULL;
@@ -2325,7 +2742,7 @@ start_rwlock_wait_v1(PSI_rwlock_locker_state *state,
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
if (! pfs_thread->m_enabled)
@@ -2357,7 +2774,7 @@ start_rwlock_wait_v1(PSI_rwlock_locker_state *state,
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= pfs_rwlock->m_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -2394,18 +2811,49 @@ start_rwlock_wait_v1(PSI_rwlock_locker_state *state,
state->m_flags= flags;
state->m_rwlock= rwlock;
+ state->m_operation= op;
return reinterpret_cast<PSI_rwlock_locker*> (state);
}
+PSI_rwlock_locker*
+pfs_start_rwlock_rdwait_v1(PSI_rwlock_locker_state *state,
+ PSI_rwlock *rwlock,
+ PSI_rwlock_operation op,
+ const char *src_file, uint src_line)
+{
+ DBUG_ASSERT((op == PSI_RWLOCK_READLOCK) ||
+ (op == PSI_RWLOCK_TRYREADLOCK) ||
+ (op == PSI_RWLOCK_SHAREDLOCK) ||
+ (op == PSI_RWLOCK_TRYSHAREDLOCK));
+
+ return pfs_start_rwlock_wait_v1(state, rwlock, op, src_file, src_line);
+}
+
+PSI_rwlock_locker*
+pfs_start_rwlock_wrwait_v1(PSI_rwlock_locker_state *state,
+ PSI_rwlock *rwlock,
+ PSI_rwlock_operation op,
+ const char *src_file, uint src_line)
+{
+ DBUG_ASSERT((op == PSI_RWLOCK_WRITELOCK) ||
+ (op == PSI_RWLOCK_TRYWRITELOCK) ||
+ (op == PSI_RWLOCK_SHAREDEXCLUSIVELOCK) ||
+ (op == PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK) ||
+ (op == PSI_RWLOCK_EXCLUSIVELOCK) ||
+ (op == PSI_RWLOCK_TRYEXCLUSIVELOCK));
+
+ return pfs_start_rwlock_wait_v1(state, rwlock, op, src_file, src_line);
+}
+
/**
Implementation of the cond instrumentation interface.
@sa PSI_v1::start_cond_wait.
*/
-static PSI_cond_locker*
-start_cond_wait_v1(PSI_cond_locker_state *state,
- PSI_cond *cond, PSI_mutex *mutex,
- PSI_cond_operation op,
- const char *src_file, uint src_line)
+PSI_cond_locker*
+pfs_start_cond_wait_v1(PSI_cond_locker_state *state,
+ PSI_cond *cond, PSI_mutex *mutex,
+ PSI_cond_operation op,
+ const char *src_file, uint src_line)
{
/*
Note about the unused PSI_mutex *mutex parameter:
@@ -2433,7 +2881,7 @@ start_cond_wait_v1(PSI_cond_locker_state *state,
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
if (! pfs_thread->m_enabled)
@@ -2465,7 +2913,7 @@ start_cond_wait_v1(PSI_cond_locker_state *state,
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= pfs_cond->m_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -2553,12 +3001,12 @@ static inline PFS_TL_LOCK_TYPE external_lock_flags_to_lock_type(uint flags)
Implementation of the table instrumentation interface.
@sa PSI_v1::start_table_io_wait_v1
*/
-static PSI_table_locker*
-start_table_io_wait_v1(PSI_table_locker_state *state,
- PSI_table *table,
- PSI_table_io_operation op,
- uint index,
- const char *src_file, uint src_line)
+PSI_table_locker*
+pfs_start_table_io_wait_v1(PSI_table_locker_state *state,
+ PSI_table *table,
+ PSI_table_io_operation op,
+ uint index,
+ const char *src_file, uint src_line)
{
DBUG_ASSERT(static_cast<int> (op) >= 0);
DBUG_ASSERT(static_cast<uint> (op) < array_elements(table_io_operation_map));
@@ -2570,7 +3018,7 @@ start_table_io_wait_v1(PSI_table_locker_state *state,
if (! pfs_table->m_io_enabled)
return NULL;
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
uint flags;
ulonglong timer_start= 0;
@@ -2609,7 +3057,7 @@ start_table_io_wait_v1(PSI_table_locker_state *state,
wait->m_nesting_event_type= parent_event->m_event_type;
PFS_table_share *share= pfs_table->m_share;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= &global_table_io_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -2655,12 +3103,12 @@ start_table_io_wait_v1(PSI_table_locker_state *state,
Implementation of the table instrumentation interface.
@sa PSI_v1::start_table_lock_wait.
*/
-static PSI_table_locker*
-start_table_lock_wait_v1(PSI_table_locker_state *state,
- PSI_table *table,
- PSI_table_lock_operation op,
- ulong op_flags,
- const char *src_file, uint src_line)
+PSI_table_locker*
+pfs_start_table_lock_wait_v1(PSI_table_locker_state *state,
+ PSI_table *table,
+ PSI_table_lock_operation op,
+ ulong op_flags,
+ const char *src_file, uint src_line)
{
DBUG_ASSERT(state != NULL);
DBUG_ASSERT((op == PSI_TABLE_LOCK) || (op == PSI_TABLE_EXTERNAL_LOCK));
@@ -2673,7 +3121,7 @@ start_table_lock_wait_v1(PSI_table_locker_state *state,
if (! pfs_table->m_lock_enabled)
return NULL;
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
PFS_TL_LOCK_TYPE lock_type;
@@ -2681,6 +3129,7 @@ start_table_lock_wait_v1(PSI_table_locker_state *state,
{
case PSI_TABLE_LOCK:
lock_type= lock_flags_to_lock_type(op_flags);
+ pfs_table->m_internal_lock= lock_type;
break;
case PSI_TABLE_EXTERNAL_LOCK:
/*
@@ -2688,8 +3137,12 @@ start_table_lock_wait_v1(PSI_table_locker_state *state,
there is no handler::external_unlock().
*/
if (op_flags == F_UNLCK)
+ {
+ pfs_table->m_external_lock= PFS_TL_NONE;
return NULL;
+ }
lock_type= external_lock_flags_to_lock_type(op_flags);
+ pfs_table->m_external_lock= lock_type;
break;
default:
lock_type= PFS_TL_READ;
@@ -2735,7 +3188,7 @@ start_table_lock_wait_v1(PSI_table_locker_state *state,
wait->m_nesting_event_type= parent_event->m_event_type;
PFS_table_share *share= pfs_table->m_share;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= &global_table_lock_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -2780,11 +3233,11 @@ start_table_lock_wait_v1(PSI_table_locker_state *state,
Implementation of the file instrumentation interface.
@sa PSI_v1::get_thread_file_name_locker.
*/
-static PSI_file_locker*
-get_thread_file_name_locker_v1(PSI_file_locker_state *state,
- PSI_file_key key,
- PSI_file_operation op,
- const char *name, const void *identity)
+PSI_file_locker*
+pfs_get_thread_file_name_locker_v1(PSI_file_locker_state *state,
+ PSI_file_key key,
+ PSI_file_operation op,
+ const char *name, const void *identity)
{
DBUG_ASSERT(static_cast<int> (op) >= 0);
DBUG_ASSERT(static_cast<uint> (op) < array_elements(file_operation_map));
@@ -2799,7 +3252,7 @@ get_thread_file_name_locker_v1(PSI_file_locker_state *state,
return NULL;
/* Needed for the LF_HASH */
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
@@ -2831,7 +3284,7 @@ get_thread_file_name_locker_v1(PSI_file_locker_state *state,
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= klass;
wait->m_timer_start= 0;
wait->m_timer_end= 0;
@@ -2858,9 +3311,9 @@ get_thread_file_name_locker_v1(PSI_file_locker_state *state,
Implementation of the file instrumentation interface.
@sa PSI_v1::get_thread_file_stream_locker.
*/
-static PSI_file_locker*
-get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
- PSI_file *file, PSI_file_operation op)
+PSI_file_locker*
+pfs_get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
+ PSI_file *file, PSI_file_operation op)
{
PFS_file *pfs_file= reinterpret_cast<PFS_file*> (file);
DBUG_ASSERT(static_cast<int> (op) >= 0);
@@ -2875,16 +3328,20 @@ get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
if (! pfs_file->m_enabled)
return NULL;
+ /* Needed for the LF_HASH */
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+
uint flags;
+ /* Always populated */
+ state->m_thread= reinterpret_cast<PSI_thread *> (pfs_thread);
+
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
- if (unlikely(pfs_thread == NULL))
- return NULL;
if (! pfs_thread->m_enabled)
return NULL;
- state->m_thread= reinterpret_cast<PSI_thread *> (pfs_thread);
flags= STATE_FLAG_THREAD;
if (pfs_file->m_timed)
@@ -2907,7 +3364,7 @@ get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= klass;
wait->m_timer_start= 0;
wait->m_timer_end= 0;
@@ -2924,7 +3381,6 @@ get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
}
else
{
- state->m_thread= NULL;
if (pfs_file->m_timed)
{
flags= STATE_FLAG_TIMED;
@@ -2948,9 +3404,9 @@ get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
Implementation of the file instrumentation interface.
@sa PSI_v1::get_thread_file_descriptor_locker.
*/
-static PSI_file_locker*
-get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
- File file, PSI_file_operation op)
+PSI_file_locker*
+pfs_get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
+ File file, PSI_file_operation op)
{
int index= static_cast<int> (file);
DBUG_ASSERT(static_cast<int> (op) >= 0);
@@ -2981,16 +3437,20 @@ get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
DBUG_ASSERT(pfs_file->m_class != NULL);
PFS_file_class *klass= pfs_file->m_class;
+ /* Needed for the LF_HASH */
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+
uint flags;
+ /* Always populated */
+ state->m_thread= reinterpret_cast<PSI_thread *> (pfs_thread);
+
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
- if (unlikely(pfs_thread == NULL))
- return NULL;
if (! pfs_thread->m_enabled)
return NULL;
- state->m_thread= reinterpret_cast<PSI_thread *> (pfs_thread);
flags= STATE_FLAG_THREAD;
if (pfs_file->m_timed)
@@ -3013,7 +3473,7 @@ get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= klass;
wait->m_timer_start= 0;
wait->m_timer_end= 0;
@@ -3030,7 +3490,6 @@ get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
}
else
{
- state->m_thread= NULL;
if (pfs_file->m_timed)
{
flags= STATE_FLAG_TIMED;
@@ -3052,12 +3511,12 @@ get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
/** Socket locker */
-static PSI_socket_locker*
-start_socket_wait_v1(PSI_socket_locker_state *state,
- PSI_socket *socket,
- PSI_socket_operation op,
- size_t count,
- const char *src_file, uint src_line)
+PSI_socket_locker*
+pfs_start_socket_wait_v1(PSI_socket_locker_state *state,
+ PSI_socket *socket,
+ PSI_socket_operation op,
+ size_t count,
+ const char *src_file, uint src_line)
{
DBUG_ASSERT(static_cast<int> (op) >= 0);
DBUG_ASSERT(static_cast<uint> (op) < array_elements(socket_operation_map));
@@ -3080,7 +3539,7 @@ start_socket_wait_v1(PSI_socket_locker_state *state,
as different threads may use concurrently the same socket,
for example during a KILL.
*/
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
@@ -3114,7 +3573,7 @@ start_socket_wait_v1(PSI_socket_locker_state *state,
wait->m_event_type= EVENT_TYPE_WAIT;
wait->m_nesting_event_id= parent_event->m_event_id;
wait->m_nesting_event_type= parent_event->m_event_type;
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= pfs_socket->m_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -3177,7 +3636,7 @@ start_socket_wait_v1(PSI_socket_locker_state *state,
Implementation of the mutex instrumentation interface.
@sa PSI_v1::unlock_mutex.
*/
-static void unlock_mutex_v1(PSI_mutex *mutex)
+void pfs_unlock_mutex_v1(PSI_mutex *mutex)
{
PFS_mutex *pfs_mutex= reinterpret_cast<PFS_mutex*> (mutex);
@@ -3214,7 +3673,7 @@ static void unlock_mutex_v1(PSI_mutex *mutex)
Implementation of the rwlock instrumentation interface.
@sa PSI_v1::unlock_rwlock.
*/
-static void unlock_rwlock_v1(PSI_rwlock *rwlock)
+void pfs_unlock_rwlock_v1(PSI_rwlock *rwlock)
{
PFS_rwlock *pfs_rwlock= reinterpret_cast<PFS_rwlock*> (rwlock);
DBUG_ASSERT(pfs_rwlock != NULL);
@@ -3292,34 +3751,38 @@ static void unlock_rwlock_v1(PSI_rwlock *rwlock)
Implementation of the cond instrumentation interface.
@sa PSI_v1::signal_cond.
*/
-static void signal_cond_v1(PSI_cond* cond)
+void pfs_signal_cond_v1(PSI_cond* cond)
{
+#ifdef PFS_LATER
PFS_cond *pfs_cond= reinterpret_cast<PFS_cond*> (cond);
DBUG_ASSERT(pfs_cond != NULL);
pfs_cond->m_cond_stat.m_signal_count++;
+#endif
}
/**
Implementation of the cond instrumentation interface.
@sa PSI_v1::broadcast_cond.
*/
-static void broadcast_cond_v1(PSI_cond* cond)
+void pfs_broadcast_cond_v1(PSI_cond* cond)
{
+#ifdef PFS_LATER
PFS_cond *pfs_cond= reinterpret_cast<PFS_cond*> (cond);
DBUG_ASSERT(pfs_cond != NULL);
pfs_cond->m_cond_stat.m_broadcast_count++;
+#endif
}
/**
Implementation of the idle instrumentation interface.
@sa PSI_v1::start_idle_wait.
*/
-static PSI_idle_locker*
-start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_line)
+PSI_idle_locker*
+pfs_start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_line)
{
DBUG_ASSERT(state != NULL);
@@ -3334,7 +3797,7 @@ start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
if (!pfs_thread->m_enabled)
@@ -3372,7 +3835,7 @@ start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_
wait->m_nesting_event_id= 0;
/* no need to set wait->m_nesting_event_type */
- wait->m_thread= pfs_thread;
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
wait->m_class= &global_idle_class;
wait->m_timer_start= timer_start;
wait->m_timer_end= 0;
@@ -3404,7 +3867,7 @@ start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_
Implementation of the mutex instrumentation interface.
@sa PSI_v1::end_idle_wait.
*/
-static void end_idle_wait_v1(PSI_idle_locker* locker)
+void pfs_end_idle_wait_v1(PSI_idle_locker* locker)
{
PSI_idle_locker_state *state= reinterpret_cast<PSI_idle_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3423,7 +3886,7 @@ static void end_idle_wait_v1(PSI_idle_locker* locker)
{
PFS_thread *thread= reinterpret_cast<PFS_thread *> (state->m_thread);
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
if (flags & STATE_FLAG_TIMED)
{
@@ -3443,9 +3906,9 @@ static void end_idle_wait_v1(PSI_idle_locker* locker)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3469,7 +3932,7 @@ static void end_idle_wait_v1(PSI_idle_locker* locker)
Implementation of the mutex instrumentation interface.
@sa PSI_v1::end_mutex_wait.
*/
-static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc)
+void pfs_end_mutex_wait_v1(PSI_mutex_locker* locker, int rc)
{
PSI_mutex_locker_state *state= reinterpret_cast<PSI_mutex_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3505,9 +3968,12 @@ static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc)
if (flags & STATE_FLAG_THREAD)
{
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
uint index= mutex->m_class->m_event_name_index;
+ DBUG_ASSERT(index <= wait_class_max);
+ DBUG_ASSERT(sanitize_thread(thread) != NULL);
+
if (flags & STATE_FLAG_TIMED)
{
/* Aggregate to EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME (timed) */
@@ -3526,9 +3992,9 @@ static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3541,7 +4007,7 @@ static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc)
Implementation of the rwlock instrumentation interface.
@sa PSI_v1::end_rwlock_rdwait.
*/
-static void end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc)
+void pfs_end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc)
{
PSI_rwlock_locker_state *state= reinterpret_cast<PSI_rwlock_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3586,7 +4052,7 @@ static void end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc)
DBUG_ASSERT(thread != NULL);
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
uint index= rwlock->m_class->m_event_name_index;
if (state->m_flags & STATE_FLAG_TIMED)
@@ -3607,9 +4073,9 @@ static void end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3622,7 +4088,7 @@ static void end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc)
Implementation of the rwlock instrumentation interface.
@sa PSI_v1::end_rwlock_wrwait.
*/
-static void end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc)
+void pfs_end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc)
{
PSI_rwlock_locker_state *state= reinterpret_cast<PSI_rwlock_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3652,15 +4118,20 @@ static void end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc)
/* Thread safe : we are protected by the instrumented rwlock */
rwlock->m_writer= thread;
rwlock->m_last_written= timer_end;
- /* Reset the readers stats, they could be off */
- rwlock->m_readers= 0;
- rwlock->m_last_read= 0;
+
+ if ((state->m_operation != PSI_RWLOCK_SHAREDEXCLUSIVELOCK) &&
+ (state->m_operation != PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK))
+ {
+ /* Reset the readers stats, they could be off */
+ rwlock->m_readers= 0;
+ rwlock->m_last_read= 0;
+ }
}
if (state->m_flags & STATE_FLAG_THREAD)
{
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
uint index= rwlock->m_class->m_event_name_index;
if (state->m_flags & STATE_FLAG_TIMED)
@@ -3681,9 +4152,9 @@ static void end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3696,7 +4167,7 @@ static void end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc)
Implementation of the cond instrumentation interface.
@sa PSI_v1::end_cond_wait.
*/
-static void end_cond_wait_v1(PSI_cond_locker* locker, int rc)
+void pfs_end_cond_wait_v1(PSI_cond_locker* locker, int rc)
{
PSI_cond_locker_state *state= reinterpret_cast<PSI_cond_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3726,7 +4197,7 @@ static void end_cond_wait_v1(PSI_cond_locker* locker, int rc)
DBUG_ASSERT(thread != NULL);
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
uint index= cond->m_class->m_event_name_index;
if (state->m_flags & STATE_FLAG_TIMED)
@@ -3747,9 +4218,9 @@ static void end_cond_wait_v1(PSI_cond_locker* locker, int rc)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3762,7 +4233,7 @@ static void end_cond_wait_v1(PSI_cond_locker* locker, int rc)
Implementation of the table instrumentation interface.
@sa PSI_v1::end_table_io_wait.
*/
-static void end_table_io_wait_v1(PSI_table_locker* locker)
+void pfs_end_table_io_wait_v1(PSI_table_locker* locker, ulonglong numrows)
{
PSI_table_locker_state *state= reinterpret_cast<PSI_table_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3808,11 +4279,11 @@ static void end_table_io_wait_v1(PSI_table_locker* locker)
{
timer_end= state->m_timer();
wait_time= timer_end - state->m_timer_start;
- stat->aggregate_value(wait_time);
+ stat->aggregate_many_value(wait_time, numrows);
}
else
{
- stat->aggregate_counted();
+ stat->aggregate_counted(numrows);
}
if (flags & STATE_FLAG_THREAD)
@@ -3821,7 +4292,7 @@ static void end_table_io_wait_v1(PSI_table_locker* locker)
DBUG_ASSERT(thread != NULL);
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
/*
Aggregate to EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
@@ -3829,11 +4300,11 @@ static void end_table_io_wait_v1(PSI_table_locker* locker)
*/
if (flags & STATE_FLAG_TIMED)
{
- event_name_array[GLOBAL_TABLE_IO_EVENT_INDEX].aggregate_value(wait_time);
+ event_name_array[GLOBAL_TABLE_IO_EVENT_INDEX].aggregate_many_value(wait_time, numrows);
}
else
{
- event_name_array[GLOBAL_TABLE_IO_EVENT_INDEX].aggregate_counted();
+ event_name_array[GLOBAL_TABLE_IO_EVENT_INDEX].aggregate_counted(numrows);
}
if (flags & STATE_FLAG_EVENT)
@@ -3843,9 +4314,10 @@ static void end_table_io_wait_v1(PSI_table_locker* locker)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ wait->m_number_of_bytes= static_cast<size_t>(numrows);
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3860,7 +4332,7 @@ static void end_table_io_wait_v1(PSI_table_locker* locker)
Implementation of the table instrumentation interface.
@sa PSI_v1::end_table_lock_wait.
*/
-static void end_table_lock_wait_v1(PSI_table_locker* locker)
+void pfs_end_table_lock_wait_v1(PSI_table_locker* locker)
{
PSI_table_locker_state *state= reinterpret_cast<PSI_table_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3892,7 +4364,7 @@ static void end_table_lock_wait_v1(PSI_table_locker* locker)
DBUG_ASSERT(thread != NULL);
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
/*
Aggregate to EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
@@ -3914,9 +4386,9 @@ static void end_table_lock_wait_v1(PSI_table_locker* locker)
wait->m_timer_end= timer_end;
wait->m_end_event_id= thread->m_event_id;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -3927,23 +4399,23 @@ static void end_table_lock_wait_v1(PSI_table_locker* locker)
table->m_has_lock_stats= true;
}
-static void start_file_wait_v1(PSI_file_locker *locker,
- size_t count,
- const char *src_file,
- uint src_line);
+void pfs_start_file_wait_v1(PSI_file_locker *locker,
+ size_t count,
+ const char *src_file,
+ uint src_line);
-static void end_file_wait_v1(PSI_file_locker *locker,
- size_t count);
+void pfs_end_file_wait_v1(PSI_file_locker *locker,
+ size_t count);
/**
Implementation of the file instrumentation interface.
@sa PSI_v1::start_file_open_wait.
*/
-static void start_file_open_wait_v1(PSI_file_locker *locker,
- const char *src_file,
- uint src_line)
+void pfs_start_file_open_wait_v1(PSI_file_locker *locker,
+ const char *src_file,
+ uint src_line)
{
- start_file_wait_v1(locker, 0, src_file, src_line);
+ pfs_start_file_wait_v1(locker, 0, src_file, src_line);
return;
}
@@ -3952,8 +4424,9 @@ static void start_file_open_wait_v1(PSI_file_locker *locker,
Implementation of the file instrumentation interface.
@sa PSI_v1::end_file_open_wait.
*/
-static PSI_file* end_file_open_wait_v1(PSI_file_locker *locker,
- void *result)
+PSI_file*
+pfs_end_file_open_wait_v1(PSI_file_locker *locker,
+ void *result)
{
PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -3981,7 +4454,7 @@ static PSI_file* end_file_open_wait_v1(PSI_file_locker *locker,
break;
}
- end_file_wait_v1(locker, 0);
+ pfs_end_file_wait_v1(locker, 0);
return state->m_file;
}
@@ -3990,7 +4463,7 @@ static PSI_file* end_file_open_wait_v1(PSI_file_locker *locker,
Implementation of the file instrumentation interface.
@sa PSI_v1::end_file_open_wait_and_bind_to_descriptor.
*/
-static void end_file_open_wait_and_bind_to_descriptor_v1
+void pfs_end_file_open_wait_and_bind_to_descriptor_v1
(PSI_file_locker *locker, File file)
{
PFS_file *pfs_file= NULL;
@@ -4008,7 +4481,7 @@ static void end_file_open_wait_and_bind_to_descriptor_v1
state->m_file= reinterpret_cast<PSI_file*> (pfs_file);
}
- end_file_wait_v1(locker, 0);
+ pfs_end_file_wait_v1(locker, 0);
if (likely(index >= 0))
{
@@ -4025,12 +4498,35 @@ static void end_file_open_wait_and_bind_to_descriptor_v1
/**
Implementation of the file instrumentation interface.
+ @sa PSI_v1::end_temp_file_open_wait_and_bind_to_descriptor.
+*/
+void pfs_end_temp_file_open_wait_and_bind_to_descriptor_v1
+ (PSI_file_locker *locker, File file, const char *filename)
+{
+ DBUG_ASSERT(filename != NULL);
+ PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ /* Set filename that was generated during creation of temporary file. */
+ state->m_name= filename;
+ pfs_end_file_open_wait_and_bind_to_descriptor_v1(locker, file);
+
+ PFS_file *pfs_file= reinterpret_cast<PFS_file *> (state->m_file);
+ if (pfs_file != NULL)
+ {
+ pfs_file->m_temporary= true;
+ }
+}
+
+
+/**
+ Implementation of the file instrumentation interface.
@sa PSI_v1::start_file_wait.
*/
-static void start_file_wait_v1(PSI_file_locker *locker,
- size_t count,
- const char *src_file,
- uint src_line)
+void pfs_start_file_wait_v1(PSI_file_locker *locker,
+ size_t count,
+ const char *src_file,
+ uint src_line)
{
ulonglong timer_start= 0;
PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
@@ -4060,8 +4556,8 @@ static void start_file_wait_v1(PSI_file_locker *locker,
Implementation of the file instrumentation interface.
@sa PSI_v1::end_file_wait.
*/
-static void end_file_wait_v1(PSI_file_locker *locker,
- size_t byte_count)
+void pfs_end_file_wait_v1(PSI_file_locker *locker,
+ size_t byte_count)
{
PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -4139,7 +4635,7 @@ static void end_file_wait_v1(PSI_file_locker *locker,
DBUG_ASSERT(thread != NULL);
PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
+ event_name_array= thread->write_instr_class_waits_stats();
uint index= klass->m_event_name_index;
if (flags & STATE_FLAG_TIMED)
@@ -4165,9 +4661,9 @@ static void end_file_wait_v1(PSI_file_locker *locker,
wait->m_weak_file= file;
wait->m_weak_version= (file ? file->get_version() : 0);
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -4180,9 +4676,9 @@ static void end_file_wait_v1(PSI_file_locker *locker,
Implementation of the file instrumentation interface.
@sa PSI_v1::start_file_close_wait.
*/
-static void start_file_close_wait_v1(PSI_file_locker *locker,
- const char *src_file,
- uint src_line)
+void pfs_start_file_close_wait_v1(PSI_file_locker *locker,
+ const char *src_file,
+ uint src_line)
{
PFS_thread *thread;
const char *name;
@@ -4208,7 +4704,7 @@ static void start_file_close_wait_v1(PSI_file_locker *locker,
break;
}
- start_file_wait_v1(locker, 0, src_file, src_line);
+ pfs_start_file_wait_v1(locker, 0, src_file, src_line);
return;
}
@@ -4217,12 +4713,12 @@ static void start_file_close_wait_v1(PSI_file_locker *locker,
Implementation of the file instrumentation interface.
@sa PSI_v1::end_file_close_wait.
*/
-static void end_file_close_wait_v1(PSI_file_locker *locker, int rc)
+void pfs_end_file_close_wait_v1(PSI_file_locker *locker, int rc)
{
PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
- end_file_wait_v1(locker, 0);
+ pfs_end_file_wait_v1(locker, 0);
if (rc == 0)
{
@@ -4233,6 +4729,17 @@ static void end_file_close_wait_v1(PSI_file_locker *locker, int rc)
switch(state->m_operation)
{
case PSI_FILE_CLOSE:
+ if (file != NULL)
+ {
+ if (file->m_temporary)
+ {
+ DBUG_ASSERT(file->m_file_stat.m_open_count <= 1);
+ destroy_file(thread, file);
+ }
+ else
+ release_file(file);
+ }
+ break;
case PSI_FILE_STREAM_CLOSE:
if (file != NULL)
release_file(file);
@@ -4249,22 +4756,50 @@ static void end_file_close_wait_v1(PSI_file_locker *locker, int rc)
return;
}
-static void start_stage_v1(PSI_stage_key key, const char *src_file, int src_line)
+/**
+ Implementation of the file instrumentation interface.
+ @sa PSI_v1::end_file_rename_wait.
+*/
+void pfs_end_file_rename_wait_v1(PSI_file_locker *locker, const char *old_name,
+ const char *new_name, int rc)
+{
+ PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+ DBUG_ASSERT(state->m_operation == PSI_FILE_RENAME);
+
+ if (rc == 0)
+ {
+ PFS_thread *thread= reinterpret_cast<PFS_thread *> (state->m_thread);
+
+ uint old_len= (uint)strlen(old_name);
+ uint new_len= (uint)strlen(new_name);
+
+ find_and_rename_file(thread, old_name, old_len, new_name, new_len);
+ }
+
+ pfs_end_file_wait_v1(locker, 0);
+ return;
+}
+
+PSI_stage_progress*
+pfs_start_stage_v1(PSI_stage_key key, const char *src_file, int src_line)
{
ulonglong timer_value= 0;
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
- return;
+ return NULL;
/* Always update column threads.processlist_state. */
pfs_thread->m_stage= key;
+ /* Default value when the stage is not instrumented for progress */
+ pfs_thread->m_stage_progress= NULL;
if (psi_unlikely(! flag_global_instrumentation))
- return;
+ return NULL;
if (flag_thread_instrumentation && ! pfs_thread->m_enabled)
- return;
+ return NULL;
PFS_events_stages *pfs= & pfs_thread->m_stage_current;
PFS_events_waits *child_wait= & pfs_thread->m_events_waits_stack[0];
@@ -4274,7 +4809,7 @@ static void start_stage_v1(PSI_stage_key key, const char *src_file, int src_line
if (old_class != NULL)
{
PFS_stage_stat *event_name_array;
- event_name_array= pfs_thread->m_instr_class_stages_stats;
+ event_name_array= pfs_thread->write_instr_class_stages_stats();
uint index= old_class->m_event_name_index;
/* Finish old event */
@@ -4296,9 +4831,9 @@ static void start_stage_v1(PSI_stage_key key, const char *src_file, int src_line
if (flag_events_stages_current)
{
pfs->m_end_event_id= pfs_thread->m_event_id;
- if (flag_events_stages_history)
+ if (pfs_thread->m_flag_events_stages_history)
insert_events_stages_history(pfs_thread, pfs);
- if (flag_events_stages_history_long)
+ if (pfs_thread->m_flag_events_stages_history_long)
insert_events_stages_history_long(pfs);
}
@@ -4315,10 +4850,10 @@ static void start_stage_v1(PSI_stage_key key, const char *src_file, int src_line
PFS_stage_class *new_klass= find_stage_class(key);
if (unlikely(new_klass == NULL))
- return;
+ return NULL;
if (! new_klass->m_enabled)
- return;
+ return NULL;
pfs->m_class= new_klass;
if (new_klass->m_timed)
@@ -4337,8 +4872,7 @@ static void start_stage_v1(PSI_stage_key key, const char *src_file, int src_line
if (flag_events_stages_current)
{
- /* m_thread_internal_id is immutable and already set */
- DBUG_ASSERT(pfs->m_thread_internal_id == pfs_thread->m_thread_internal_id);
+ pfs->m_thread_internal_id= pfs_thread->m_thread_internal_id;
pfs->m_event_id= pfs_thread->m_event_id++;
pfs->m_end_event_id= 0;
pfs->m_source_file= src_file;
@@ -4348,17 +4882,37 @@ static void start_stage_v1(PSI_stage_key key, const char *src_file, int src_line
child_wait->m_event_id= pfs->m_event_id;
child_wait->m_event_type= EVENT_TYPE_STAGE;
}
+
+ if (new_klass->is_progress())
+ {
+ pfs_thread->m_stage_progress= & pfs->m_progress;
+ pfs->m_progress.m_work_completed= 0;
+ pfs->m_progress.m_work_estimated= 0;
+ }
+
+ return pfs_thread->m_stage_progress;
}
-static void end_stage_v1()
+PSI_stage_progress*
+pfs_get_current_stage_progress_v1(void)
+{
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+
+ return pfs_thread->m_stage_progress;
+}
+
+void pfs_end_stage_v1()
{
ulonglong timer_value= 0;
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return;
pfs_thread->m_stage= 0;
+ pfs_thread->m_stage_progress= NULL;
if (psi_unlikely(! flag_global_instrumentation))
return;
@@ -4372,7 +4926,7 @@ static void end_stage_v1()
if (old_class != NULL)
{
PFS_stage_stat *event_name_array;
- event_name_array= pfs_thread->m_instr_class_stages_stats;
+ event_name_array= pfs_thread->write_instr_class_stages_stats();
uint index= old_class->m_event_name_index;
/* Finish old event */
@@ -4394,9 +4948,9 @@ static void end_stage_v1()
if (flag_events_stages_current)
{
pfs->m_end_event_id= pfs_thread->m_event_id;
- if (flag_events_stages_history)
+ if (pfs_thread->m_flag_events_stages_history)
insert_events_stages_history(pfs_thread, pfs);
- if (flag_events_stages_history_long)
+ if (pfs_thread->m_flag_events_stages_history_long)
insert_events_stages_history_long(pfs);
}
@@ -4411,10 +4965,10 @@ static void end_stage_v1()
}
}
-static PSI_statement_locker*
-get_thread_statement_locker_v1(PSI_statement_locker_state *state,
- PSI_statement_key key,
- const void *charset)
+PSI_statement_locker*
+pfs_get_thread_statement_locker_v1(PSI_statement_locker_state *state,
+ PSI_statement_key key,
+ const void *charset, PSI_sp_share *sp_share)
{
DBUG_ASSERT(state != NULL);
DBUG_ASSERT(charset != NULL);
@@ -4431,7 +4985,7 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
if (flag_thread_instrumentation)
{
- PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
if (unlikely(pfs_thread == NULL))
return NULL;
if (! pfs_thread->m_enabled)
@@ -4448,14 +5002,16 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
if (pfs_thread->m_events_statements_count >= statement_stack_max)
{
+ nested_statement_lost++;
return NULL;
}
- pfs_thread->m_stmt_lock.allocated_to_dirty();
+ pfs_dirty_state dirty_state;
+ pfs_thread->m_stmt_lock.allocated_to_dirty(& dirty_state);
PFS_events_statements *pfs= & pfs_thread->m_statement_stack[pfs_thread->m_events_statements_count];
- /* m_thread_internal_id is immutable and already set */
- DBUG_ASSERT(pfs->m_thread_internal_id == pfs_thread->m_thread_internal_id);
+ pfs->m_thread_internal_id= pfs_thread->m_thread_internal_id;
pfs->m_event_id= event_id;
+ pfs->m_event_type= EVENT_TYPE_STATEMENT;
pfs->m_end_event_id= 0;
pfs->m_class= klass;
pfs->m_timer_start= 0;
@@ -4497,18 +5053,68 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
/* New waits will have this statement as parent, if no stage is instrumented */
PFS_events_waits *child_wait= & pfs_thread->m_events_waits_stack[0];
- child_wait->m_nesting_event_id= event_id;
- child_wait->m_nesting_event_type= EVENT_TYPE_STATEMENT;
+ child_wait->m_event_id= event_id;
+ child_wait->m_event_type= EVENT_TYPE_STATEMENT;
+
+ PFS_events_statements *parent_statement= NULL;
+ PFS_events_transactions *parent_transaction= &pfs_thread->m_transaction_current;
+ ulonglong parent_event= 0;
+ enum_event_type parent_type= EVENT_TYPE_STATEMENT;
+ uint parent_level= 0;
+
+ if (pfs_thread->m_events_statements_count > 0)
+ {
+ parent_statement= pfs - 1;
+ parent_event= parent_statement->m_event_id;
+ parent_type= parent_statement->m_event_type;
+ parent_level= parent_statement->m_nesting_event_level + 1;
+ }
+
+ if (parent_transaction->m_state == TRANS_STATE_ACTIVE &&
+ parent_transaction->m_event_id > parent_event)
+ {
+ parent_event= parent_transaction->m_event_id;
+ parent_type= parent_transaction->m_event_type;
+ }
+
+ pfs->m_nesting_event_id= parent_event;
+ pfs->m_nesting_event_type= parent_type;
+ pfs->m_nesting_event_level= parent_level;
+
+ /* Set parent Stored Procedure information for this statement. */
+ if(sp_share)
+ {
+ PFS_program *parent_sp= reinterpret_cast<PFS_program*>(sp_share);
+ pfs->m_sp_type= parent_sp->m_type;
+ memcpy(pfs->m_schema_name, parent_sp->m_schema_name,
+ parent_sp->m_schema_name_length);
+ pfs->m_schema_name_length= parent_sp->m_schema_name_length;
+ memcpy(pfs->m_object_name, parent_sp->m_object_name,
+ parent_sp->m_object_name_length);
+ pfs->m_object_name_length= parent_sp->m_object_name_length;
+ }
+ else
+ {
+ pfs->m_sp_type= NO_OBJECT_TYPE;
+ pfs->m_schema_name_length= 0;
+ pfs->m_object_name_length= 0;
+ }
state->m_statement= pfs;
flags|= STATE_FLAG_EVENT;
pfs_thread->m_events_statements_count++;
- pfs_thread->m_stmt_lock.dirty_to_allocated();
+ pfs_thread->m_stmt_lock.dirty_to_allocated(& dirty_state);
+ }
+ else
+ {
+ state->m_statement= NULL;
}
}
else
{
+ state->m_statement= NULL;
+
if (klass->m_timed)
flags= STATE_FLAG_TIMED;
else
@@ -4542,16 +5148,18 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
state->m_no_good_index_used= 0;
state->m_digest= NULL;
+ state->m_cs_number= ((CHARSET_INFO *)charset)->number;
state->m_schema_name_length= 0;
- state->m_cs_number= ((CHARSET_INFO *)charset)->number;
+ state->m_parent_sp_share= sp_share;
+ state->m_parent_prepared_stmt= NULL;
return reinterpret_cast<PSI_statement_locker*> (state);
}
-static PSI_statement_locker*
-refine_statement_v1(PSI_statement_locker *locker,
- PSI_statement_key key)
+PSI_statement_locker*
+pfs_refine_statement_v1(PSI_statement_locker *locker,
+ PSI_statement_key key)
{
PSI_statement_locker_state *state= reinterpret_cast<PSI_statement_locker_state*> (locker);
if (state == NULL)
@@ -4597,9 +5205,9 @@ refine_statement_v1(PSI_statement_locker *locker,
return reinterpret_cast<PSI_statement_locker*> (state);
}
-static void start_statement_v1(PSI_statement_locker *locker,
- const char *db, uint db_len,
- const char *src_file, uint src_line)
+void pfs_start_statement_v1(PSI_statement_locker *locker,
+ const char *db, uint db_len,
+ const char *src_file, uint src_line)
{
PSI_statement_locker_state *state= reinterpret_cast<PSI_statement_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -4636,8 +5244,8 @@ static void start_statement_v1(PSI_statement_locker *locker,
}
}
-static void set_statement_text_v1(PSI_statement_locker *locker,
- const char *text, uint text_len)
+void pfs_set_statement_text_v1(PSI_statement_locker *locker,
+ const char *text, uint text_len)
{
PSI_statement_locker_state *state= reinterpret_cast<PSI_statement_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -4649,9 +5257,9 @@ static void set_statement_text_v1(PSI_statement_locker *locker,
{
PFS_events_statements *pfs= reinterpret_cast<PFS_events_statements*> (state->m_statement);
DBUG_ASSERT(pfs != NULL);
- if (text_len > sizeof (pfs->m_sqltext))
+ if (text_len > pfs_max_sqltext)
{
- text_len= sizeof(pfs->m_sqltext);
+ text_len= (uint)pfs_max_sqltext;
pfs->m_sqltext_truncated= true;
}
if (text_len)
@@ -4697,101 +5305,101 @@ static void set_statement_text_v1(PSI_statement_locker *locker,
} \
return;
-static void set_statement_lock_time_v1(PSI_statement_locker *locker,
- ulonglong count)
+void pfs_set_statement_lock_time_v1(PSI_statement_locker *locker,
+ ulonglong count)
{
SET_STATEMENT_ATTR_BODY(locker, m_lock_time, count);
}
-static void set_statement_rows_sent_v1(PSI_statement_locker *locker,
- ulonglong count)
+void pfs_set_statement_rows_sent_v1(PSI_statement_locker *locker,
+ ulonglong count)
{
SET_STATEMENT_ATTR_BODY(locker, m_rows_sent, count);
}
-static void set_statement_rows_examined_v1(PSI_statement_locker *locker,
- ulonglong count)
+void pfs_set_statement_rows_examined_v1(PSI_statement_locker *locker,
+ ulonglong count)
{
SET_STATEMENT_ATTR_BODY(locker, m_rows_examined, count);
}
-static void inc_statement_created_tmp_disk_tables_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_created_tmp_disk_tables_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_created_tmp_disk_tables, count);
}
-static void inc_statement_created_tmp_tables_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_created_tmp_tables_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_created_tmp_tables, count);
}
-static void inc_statement_select_full_join_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_select_full_join_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_select_full_join, count);
}
-static void inc_statement_select_full_range_join_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_select_full_range_join_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_select_full_range_join, count);
}
-static void inc_statement_select_range_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_select_range_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_select_range, count);
}
-static void inc_statement_select_range_check_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_select_range_check_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_select_range_check, count);
}
-static void inc_statement_select_scan_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_select_scan_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_select_scan, count);
}
-static void inc_statement_sort_merge_passes_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_sort_merge_passes_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_sort_merge_passes, count);
}
-static void inc_statement_sort_range_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_sort_range_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_sort_range, count);
}
-static void inc_statement_sort_rows_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_sort_rows_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_sort_rows, count);
}
-static void inc_statement_sort_scan_v1(PSI_statement_locker *locker,
- ulong count)
+void pfs_inc_statement_sort_scan_v1(PSI_statement_locker *locker,
+ ulong count)
{
INC_STATEMENT_ATTR_BODY(locker, m_sort_scan, count);
}
-static void set_statement_no_index_used_v1(PSI_statement_locker *locker)
+void pfs_set_statement_no_index_used_v1(PSI_statement_locker *locker)
{
SET_STATEMENT_ATTR_BODY(locker, m_no_index_used, 1);
}
-static void set_statement_no_good_index_used_v1(PSI_statement_locker *locker)
+void pfs_set_statement_no_good_index_used_v1(PSI_statement_locker *locker)
{
SET_STATEMENT_ATTR_BODY(locker, m_no_good_index_used, 1);
}
-static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
+void pfs_end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
{
PSI_statement_locker_state *state= reinterpret_cast<PSI_statement_locker_state*> (locker);
Diagnostics_area *da= reinterpret_cast<Diagnostics_area*> (stmt_da);
@@ -4823,12 +5431,14 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
*/
const sql_digest_storage *digest_storage= NULL;
PFS_statement_stat *digest_stat= NULL;
+ PFS_program *pfs_program= NULL;
+ PFS_prepared_stmt *pfs_prepared_stmt= NULL;
if (flags & STATE_FLAG_THREAD)
{
PFS_thread *thread= reinterpret_cast<PFS_thread *> (state->m_thread);
DBUG_ASSERT(thread != NULL);
- event_name_array= thread->m_instr_class_statements_stats;
+ event_name_array= thread->write_instr_class_statements_stats();
/* Aggregate to EVENTS_STATEMENTS_SUMMARY_BY_THREAD_BY_EVENT_NAME */
stat= & event_name_array[index];
@@ -4850,7 +5460,8 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
PFS_events_statements *pfs= reinterpret_cast<PFS_events_statements*> (state->m_statement);
DBUG_ASSERT(pfs != NULL);
- thread->m_stmt_lock.allocated_to_dirty();
+ pfs_dirty_state dirty_state;
+ thread->m_stmt_lock.allocated_to_dirty(& dirty_state);
switch(da->status())
{
@@ -4858,7 +5469,8 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
case Diagnostics_area::DA_EMPTY:
break;
case Diagnostics_area::DA_OK:
- memcpy(pfs->m_message_text, da->message(), MYSQL_ERRMSG_SIZE);
+ memcpy(pfs->m_message_text, da->message(),
+ MYSQL_ERRMSG_SIZE);
pfs->m_message_text[MYSQL_ERRMSG_SIZE]= 0;
pfs->m_rows_affected= da->affected_rows();
pfs->m_warning_count= da->statement_warn_count();
@@ -4868,11 +5480,12 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
pfs->m_warning_count= da->statement_warn_count();
break;
case Diagnostics_area::DA_ERROR:
- memcpy(pfs->m_message_text, da->message(), MYSQL_ERRMSG_SIZE);
+ memcpy(pfs->m_message_text, da->message(),
+ MYSQL_ERRMSG_SIZE);
pfs->m_message_text[MYSQL_ERRMSG_SIZE]= 0;
pfs->m_sql_errno= da->sql_errno();
- pfs->m_error_count++;
memcpy(pfs->m_sqlstate, da->get_sqlstate(), SQLSTATE_LENGTH);
+ pfs->m_error_count++;
break;
case Diagnostics_area::DA_DISABLED:
break;
@@ -4892,21 +5505,24 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
pfs->m_digest_storage.copy(digest_storage);
}
- if (flag_events_statements_history)
+ pfs_program= reinterpret_cast<PFS_program*>(state->m_parent_sp_share);
+ pfs_prepared_stmt= reinterpret_cast<PFS_prepared_stmt*>(state->m_parent_prepared_stmt);
+
+ if (thread->m_flag_events_statements_history)
insert_events_statements_history(thread, pfs);
- if (flag_events_statements_history_long)
+ if (thread->m_flag_events_statements_history_long)
insert_events_statements_history_long(pfs);
DBUG_ASSERT(thread->m_events_statements_count > 0);
thread->m_events_statements_count--;
- thread->m_stmt_lock.dirty_to_allocated();
+ thread->m_stmt_lock.dirty_to_allocated(& dirty_state);
}
}
else
{
if (flags & STATE_FLAG_DIGEST)
{
- PFS_thread *thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *thread= my_thread_get_THR_PFS();
/* An instrumented thread is required, for LF_PINS. */
if (thread != NULL)
@@ -4929,6 +5545,8 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
stat= & event_name_array[index];
}
+ stat->mark_used();
+
if (flags & STATE_FLAG_TIMED)
{
/* Aggregate to EVENTS_STATEMENTS_SUMMARY_..._BY_EVENT_NAME (timed) */
@@ -4959,6 +5577,8 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
if (digest_stat != NULL)
{
+ digest_stat->mark_used();
+
if (flags & STATE_FLAG_TIMED)
{
digest_stat->aggregate_value(wait_time);
@@ -4986,6 +5606,103 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
digest_stat->m_no_good_index_used+= state->m_no_good_index_used;
}
+ if(pfs_program != NULL)
+ {
+ PFS_statement_stat *sub_stmt_stat= NULL;
+ sub_stmt_stat= &pfs_program->m_stmt_stat;
+ if(sub_stmt_stat != NULL)
+ {
+ sub_stmt_stat->mark_used();
+
+ if (flags & STATE_FLAG_TIMED)
+ {
+ sub_stmt_stat->aggregate_value(wait_time);
+ }
+ else
+ {
+ sub_stmt_stat->aggregate_counted();
+ }
+
+ sub_stmt_stat->m_lock_time+= state->m_lock_time;
+ sub_stmt_stat->m_rows_sent+= state->m_rows_sent;
+ sub_stmt_stat->m_rows_examined+= state->m_rows_examined;
+ sub_stmt_stat->m_created_tmp_disk_tables+= state->m_created_tmp_disk_tables;
+ sub_stmt_stat->m_created_tmp_tables+= state->m_created_tmp_tables;
+ sub_stmt_stat->m_select_full_join+= state->m_select_full_join;
+ sub_stmt_stat->m_select_full_range_join+= state->m_select_full_range_join;
+ sub_stmt_stat->m_select_range+= state->m_select_range;
+ sub_stmt_stat->m_select_range_check+= state->m_select_range_check;
+ sub_stmt_stat->m_select_scan+= state->m_select_scan;
+ sub_stmt_stat->m_sort_merge_passes+= state->m_sort_merge_passes;
+ sub_stmt_stat->m_sort_range+= state->m_sort_range;
+ sub_stmt_stat->m_sort_rows+= state->m_sort_rows;
+ sub_stmt_stat->m_sort_scan+= state->m_sort_scan;
+ sub_stmt_stat->m_no_index_used+= state->m_no_index_used;
+ sub_stmt_stat->m_no_good_index_used+= state->m_no_good_index_used;
+ }
+ }
+
+ if (pfs_prepared_stmt != NULL)
+ {
+ if(state->m_in_prepare)
+ {
+ PFS_single_stat *prepared_stmt_stat= NULL;
+ prepared_stmt_stat= &pfs_prepared_stmt->m_prepare_stat;
+ if(prepared_stmt_stat != NULL)
+ {
+ if (flags & STATE_FLAG_TIMED)
+ {
+ prepared_stmt_stat->aggregate_value(wait_time);
+ }
+ else
+ {
+ prepared_stmt_stat->aggregate_counted();
+ }
+ }
+ }
+ else
+ {
+ PFS_statement_stat *prepared_stmt_stat= NULL;
+ prepared_stmt_stat= &pfs_prepared_stmt->m_execute_stat;
+ if(prepared_stmt_stat != NULL)
+ {
+ if (flags & STATE_FLAG_TIMED)
+ {
+ prepared_stmt_stat->aggregate_value(wait_time);
+ }
+ else
+ {
+ prepared_stmt_stat->aggregate_counted();
+ }
+
+ prepared_stmt_stat->m_lock_time+= state->m_lock_time;
+ prepared_stmt_stat->m_rows_sent+= state->m_rows_sent;
+ prepared_stmt_stat->m_rows_examined+= state->m_rows_examined;
+ prepared_stmt_stat->m_created_tmp_disk_tables+= state->m_created_tmp_disk_tables;
+ prepared_stmt_stat->m_created_tmp_tables+= state->m_created_tmp_tables;
+ prepared_stmt_stat->m_select_full_join+= state->m_select_full_join;
+ prepared_stmt_stat->m_select_full_range_join+= state->m_select_full_range_join;
+ prepared_stmt_stat->m_select_range+= state->m_select_range;
+ prepared_stmt_stat->m_select_range_check+= state->m_select_range_check;
+ prepared_stmt_stat->m_select_scan+= state->m_select_scan;
+ prepared_stmt_stat->m_sort_merge_passes+= state->m_sort_merge_passes;
+ prepared_stmt_stat->m_sort_range+= state->m_sort_range;
+ prepared_stmt_stat->m_sort_rows+= state->m_sort_rows;
+ prepared_stmt_stat->m_sort_scan+= state->m_sort_scan;
+ prepared_stmt_stat->m_no_index_used+= state->m_no_index_used;
+ prepared_stmt_stat->m_no_good_index_used+= state->m_no_good_index_used;
+ }
+ }
+ }
+
+ PFS_statement_stat *sub_stmt_stat= NULL;
+ if (pfs_program != NULL)
+ sub_stmt_stat= &pfs_program->m_stmt_stat;
+
+ PFS_statement_stat *prepared_stmt_stat= NULL;
+ if (pfs_prepared_stmt != NULL && !state->m_in_prepare)
+ prepared_stmt_stat= &pfs_prepared_stmt->m_execute_stat;
+
switch (da->status())
{
case Diagnostics_area::DA_OK_BULK:
@@ -4999,6 +5716,16 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
digest_stat->m_rows_affected+= da->affected_rows();
digest_stat->m_warning_count+= da->statement_warn_count();
}
+ if(sub_stmt_stat != NULL)
+ {
+ sub_stmt_stat->m_rows_affected+= da->affected_rows();
+ sub_stmt_stat->m_warning_count+= da->statement_warn_count();
+ }
+ if (prepared_stmt_stat != NULL)
+ {
+ prepared_stmt_stat->m_rows_affected+= da->affected_rows();
+ prepared_stmt_stat->m_warning_count+= da->statement_warn_count();
+ }
break;
case Diagnostics_area::DA_EOF:
stat->m_warning_count+= da->statement_warn_count();
@@ -5006,6 +5733,14 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
{
digest_stat->m_warning_count+= da->statement_warn_count();
}
+ if(sub_stmt_stat != NULL)
+ {
+ sub_stmt_stat->m_warning_count+= da->statement_warn_count();
+ }
+ if (prepared_stmt_stat != NULL)
+ {
+ prepared_stmt_stat->m_warning_count+= da->statement_warn_count();
+ }
break;
case Diagnostics_area::DA_ERROR:
stat->m_error_count++;
@@ -5013,17 +5748,476 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da)
{
digest_stat->m_error_count++;
}
+ if (sub_stmt_stat != NULL)
+ {
+ sub_stmt_stat->m_error_count++;
+ }
+ if (prepared_stmt_stat != NULL)
+ {
+ prepared_stmt_stat->m_error_count++;
+ }
break;
case Diagnostics_area::DA_DISABLED:
break;
}
}
+static inline enum_object_type sp_type_to_object_type(uint sp_type)
+{
+ enum enum_sp_type value= static_cast<enum enum_sp_type> (sp_type);
+
+ switch (value)
+ {
+ case SP_TYPE_FUNCTION:
+ return OBJECT_TYPE_FUNCTION;
+ case SP_TYPE_PROCEDURE:
+ return OBJECT_TYPE_PROCEDURE;
+ case SP_TYPE_PACKAGE:
+ return OBJECT_TYPE_PACKAGE;
+ case SP_TYPE_PACKAGE_BODY:
+ return OBJECT_TYPE_PACKAGE_BODY;
+ case SP_TYPE_TRIGGER:
+ return OBJECT_TYPE_TRIGGER;
+ case SP_TYPE_EVENT:
+ return OBJECT_TYPE_EVENT;
+ default:
+ DBUG_ASSERT(false);
+ /* Dead code */
+ return NO_OBJECT_TYPE;
+ }
+}
+
+/**
+ Implementation of the stored program instrumentation interface.
+ @sa PSI_v1::get_sp_share.
+*/
+PSI_sp_share *pfs_get_sp_share_v1(uint sp_type,
+ const char* schema_name,
+ uint schema_name_length,
+ const char* object_name,
+ uint object_name_length)
+{
+
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+
+ if (object_name_length > COL_OBJECT_NAME_SIZE)
+ object_name_length= COL_OBJECT_NAME_SIZE;
+ if (schema_name_length > COL_OBJECT_SCHEMA_SIZE)
+ schema_name_length= COL_OBJECT_SCHEMA_SIZE;
+
+ PFS_program *pfs_program;
+ pfs_program= find_or_create_program(pfs_thread,
+ sp_type_to_object_type(sp_type),
+ object_name,
+ object_name_length,
+ schema_name,
+ schema_name_length);
+
+ return reinterpret_cast<PSI_sp_share *>(pfs_program);
+}
+
+void pfs_release_sp_share_v1(PSI_sp_share* sp_share)
+{
+ /* Unused */
+ return;
+}
+
+PSI_sp_locker* pfs_start_sp_v1(PSI_sp_locker_state *state,
+ PSI_sp_share *sp_share)
+{
+ DBUG_ASSERT(state != NULL);
+ if (! flag_global_instrumentation)
+ return NULL;
+
+ if (flag_thread_instrumentation)
+ {
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+ if (! pfs_thread->m_enabled)
+ return NULL;
+ }
+
+ /*
+ sp share might be null in case when stat array is full and no new
+ stored program stats are being inserted into it.
+ */
+ PFS_program *pfs_program= reinterpret_cast<PFS_program*>(sp_share);
+ if (pfs_program == NULL || !pfs_program->m_enabled)
+ return NULL;
+
+ state->m_flags= 0;
+
+ if(pfs_program->m_timed)
+ {
+ state->m_flags|= STATE_FLAG_TIMED;
+ state->m_timer_start= get_timer_raw_value_and_function(statement_timer,
+ & state->m_timer);
+ }
+
+ state->m_sp_share= sp_share;
+
+ return reinterpret_cast<PSI_sp_locker*> (state);
+}
+
+void pfs_end_sp_v1(PSI_sp_locker *locker)
+{
+ PSI_sp_locker_state *state= reinterpret_cast<PSI_sp_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ ulonglong timer_end;
+ ulonglong wait_time;
+
+ PFS_program *pfs_program= reinterpret_cast<PFS_program *>(state->m_sp_share);
+ PFS_sp_stat *stat= &pfs_program->m_sp_stat;
+
+ if (state->m_flags & STATE_FLAG_TIMED)
+ {
+ timer_end= state->m_timer();
+ wait_time= timer_end - state->m_timer_start;
+
+ /* Now use this timer_end and wait_time for timing information. */
+ stat->aggregate_value(wait_time);
+ }
+ else
+ {
+ stat->aggregate_counted();
+ }
+}
+
+void pfs_drop_sp_v1(uint sp_type,
+ const char* schema_name,
+ uint schema_name_length,
+ const char* object_name,
+ uint object_name_length)
+{
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return;
+
+ if (object_name_length > COL_OBJECT_NAME_SIZE)
+ object_name_length= COL_OBJECT_NAME_SIZE;
+ if (schema_name_length > COL_OBJECT_SCHEMA_SIZE)
+ schema_name_length= COL_OBJECT_SCHEMA_SIZE;
+
+ drop_program(pfs_thread,
+ sp_type_to_object_type(sp_type),
+ object_name, object_name_length,
+ schema_name, schema_name_length);
+}
+
+PSI_transaction_locker*
+pfs_get_thread_transaction_locker_v1(PSI_transaction_locker_state *state,
+ const void *xid,
+ ulonglong trxid,
+ int isolation_level,
+ my_bool read_only,
+ my_bool autocommit)
+{
+ DBUG_ASSERT(state != NULL);
+
+ if (!flag_global_instrumentation)
+ return NULL;
+
+ if (!global_transaction_class.m_enabled)
+ return NULL;
+
+ uint flags;
+
+ if (flag_thread_instrumentation)
+ {
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+ if (!pfs_thread->m_enabled)
+ return NULL;
+ state->m_thread= reinterpret_cast<PSI_thread *> (pfs_thread);
+ flags= STATE_FLAG_THREAD;
+
+ if (global_transaction_class.m_timed)
+ flags|= STATE_FLAG_TIMED;
+
+ if (flag_events_transactions_current)
+ {
+ ulonglong event_id= pfs_thread->m_event_id++;
+
+ PFS_events_transactions *pfs= &pfs_thread->m_transaction_current;
+ pfs->m_thread_internal_id = pfs_thread->m_thread_internal_id;
+ pfs->m_event_id= event_id;
+ pfs->m_event_type= EVENT_TYPE_TRANSACTION;
+ pfs->m_end_event_id= 0;
+ pfs->m_class= &global_transaction_class;
+ pfs->m_timer_start= 0;
+ pfs->m_timer_end= 0;
+ if (xid != NULL)
+ pfs->m_xid= *(PSI_xid *)xid;
+ pfs->m_xa= false;
+ pfs->m_xa_state= TRANS_STATE_XA_NOTR;
+ pfs->m_trxid= trxid;
+ pfs->m_isolation_level= (enum_isolation_level)isolation_level;
+ pfs->m_read_only= read_only;
+ pfs->m_autocommit= autocommit;
+ pfs->m_savepoint_count= 0;
+ pfs->m_rollback_to_savepoint_count= 0;
+ pfs->m_release_savepoint_count= 0;
+
+ uint statements_count= pfs_thread->m_events_statements_count;
+ if (statements_count > 0)
+ {
+ PFS_events_statements *pfs_statement=
+ &pfs_thread->m_statement_stack[statements_count - 1];
+ pfs->m_nesting_event_id= pfs_statement->m_event_id;
+ pfs->m_nesting_event_type= pfs_statement->m_event_type;
+ }
+ else
+ {
+ pfs->m_nesting_event_id= 0;
+ /* pfs->m_nesting_event_type not used when m_nesting_event_id is 0 */
+ }
+
+ state->m_transaction= pfs;
+ flags|= STATE_FLAG_EVENT;
+ }
+ }
+ else
+ {
+ if (global_transaction_class.m_timed)
+ flags= STATE_FLAG_TIMED;
+ else
+ flags= 0;
+ }
+
+ state->m_class= &global_transaction_class;
+ state->m_flags= flags;
+ state->m_autocommit= autocommit;
+ state->m_read_only= read_only;
+ state->m_savepoint_count= 0;
+ state->m_rollback_to_savepoint_count= 0;
+ state->m_release_savepoint_count= 0;
+
+ return reinterpret_cast<PSI_transaction_locker*> (state);
+}
+
+void pfs_start_transaction_v1(PSI_transaction_locker *locker,
+ const char *src_file, uint src_line)
+{
+ PSI_transaction_locker_state *state= reinterpret_cast<PSI_transaction_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ uint flags= state->m_flags;
+ ulonglong timer_start= 0;
+
+ if (flags & STATE_FLAG_TIMED)
+ {
+ timer_start= get_timer_raw_value_and_function(transaction_timer, &state->m_timer);
+ state->m_timer_start= timer_start;
+ }
+
+ if (flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_transactions *pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction);
+ DBUG_ASSERT(pfs != NULL);
+
+ pfs->m_timer_start= timer_start;
+ pfs->m_source_file= src_file;
+ pfs->m_source_line= src_line;
+ pfs->m_state= TRANS_STATE_ACTIVE;
+ //pfs->m_sid.clear();
+ bzero(&pfs->m_gtid_spec, sizeof(pfs->m_gtid_spec));
+ }
+}
+
+void pfs_set_transaction_gtid_v1(PSI_transaction_locker *locker,
+ const void *sid,
+ const void *gtid_spec)
+{
+ PSI_transaction_locker_state *state= reinterpret_cast<PSI_transaction_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+ DBUG_ASSERT(sid != NULL);
+ DBUG_ASSERT(gtid_spec != NULL);
+
+ if (state->m_flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_transactions *pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction);
+ DBUG_ASSERT(pfs != NULL);
+ //pfs->m_sid= *(rpl_sid *)sid;
+ pfs->m_gtid_spec= *(Gtid_specification*)gtid_spec;
+ }
+}
+
+void pfs_set_transaction_xid_v1(PSI_transaction_locker *locker,
+ const void *xid,
+ int xa_state)
+{
+ PSI_transaction_locker_state *state= reinterpret_cast<PSI_transaction_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ if (state->m_flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_transactions *pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction);
+ DBUG_ASSERT(pfs != NULL);
+ DBUG_ASSERT(xid != NULL);
+
+ pfs->m_xid= *(PSI_xid *)xid;
+ pfs->m_xa_state= (enum_xa_transaction_state)xa_state;
+ pfs->m_xa= true;
+ }
+ return;
+}
+
+void pfs_set_transaction_xa_state_v1(PSI_transaction_locker *locker,
+ int xa_state)
+{
+ PSI_transaction_locker_state *state= reinterpret_cast<PSI_transaction_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ if (state->m_flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_transactions *pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction);
+ DBUG_ASSERT(pfs != NULL);
+
+ pfs->m_xa_state= (enum_xa_transaction_state)xa_state;
+ pfs->m_xa= true;
+ }
+ return;
+}
+
+void pfs_set_transaction_trxid_v1(PSI_transaction_locker *locker,
+ const ulonglong *trxid)
+{
+ DBUG_ASSERT(trxid != NULL);
+
+ PSI_transaction_locker_state *state= reinterpret_cast<PSI_transaction_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ if (state->m_flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_transactions *pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction);
+ DBUG_ASSERT(pfs != NULL);
+
+ if (pfs->m_trxid == 0)
+ pfs->m_trxid= *trxid;
+ }
+}
+
+#define INC_TRANSACTION_ATTR_BODY(LOCKER, ATTR, VALUE) \
+ PSI_transaction_locker_state *state; \
+ state= reinterpret_cast<PSI_transaction_locker_state*> (LOCKER); \
+ if (unlikely(state == NULL)) \
+ return; \
+ state->ATTR+= VALUE; \
+ if (state->m_flags & STATE_FLAG_EVENT) \
+ { \
+ PFS_events_transactions *pfs; \
+ pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction); \
+ DBUG_ASSERT(pfs != NULL); \
+ pfs->ATTR+= VALUE; \
+ } \
+ return;
+
+
+void pfs_inc_transaction_savepoints_v1(PSI_transaction_locker *locker,
+ ulong count)
+{
+ INC_TRANSACTION_ATTR_BODY(locker, m_savepoint_count, count);
+}
+
+void pfs_inc_transaction_rollback_to_savepoint_v1(PSI_transaction_locker *locker,
+ ulong count)
+{
+ INC_TRANSACTION_ATTR_BODY(locker, m_rollback_to_savepoint_count, count);
+}
+
+void pfs_inc_transaction_release_savepoint_v1(PSI_transaction_locker *locker,
+ ulong count)
+{
+ INC_TRANSACTION_ATTR_BODY(locker, m_release_savepoint_count, count);
+}
+
+void pfs_end_transaction_v1(PSI_transaction_locker *locker, my_bool commit)
+{
+ PSI_transaction_locker_state *state= reinterpret_cast<PSI_transaction_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ ulonglong timer_end= 0;
+ ulonglong wait_time= 0;
+ uint flags= state->m_flags;
+
+ if (flags & STATE_FLAG_TIMED)
+ {
+ timer_end= state->m_timer();
+ wait_time= timer_end - state->m_timer_start;
+ }
+
+ PFS_transaction_stat *stat;
+
+ if (flags & STATE_FLAG_THREAD)
+ {
+ PFS_thread *pfs_thread= reinterpret_cast<PFS_thread *> (state->m_thread);
+ DBUG_ASSERT(pfs_thread != NULL);
+
+ /* Aggregate to EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME */
+ stat= &pfs_thread->write_instr_class_transactions_stats()[GLOBAL_TRANSACTION_INDEX];
+
+ if (flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_transactions *pfs= reinterpret_cast<PFS_events_transactions*> (state->m_transaction);
+ DBUG_ASSERT(pfs != NULL);
+
+ /* events_transactions_current may have been cleared while the transaction was active */
+ if (unlikely(pfs->m_class == NULL))
+ return;
+
+ pfs->m_timer_end= timer_end;
+ pfs->m_end_event_id= pfs_thread->m_event_id;
+
+ pfs->m_state= (commit ? TRANS_STATE_COMMITTED : TRANS_STATE_ROLLED_BACK);
+
+ if (pfs->m_xa)
+ pfs->m_xa_state= (commit ? TRANS_STATE_XA_COMMITTED : TRANS_STATE_XA_ROLLBACK_ONLY);
+
+ if (pfs_thread->m_flag_events_transactions_history)
+ insert_events_transactions_history(pfs_thread, pfs);
+ if (pfs_thread->m_flag_events_transactions_history_long)
+ insert_events_transactions_history_long(pfs);
+ }
+ }
+ else
+ {
+ /* Aggregate to EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME */
+ stat= &global_transaction_stat;
+ }
+
+ if (flags & STATE_FLAG_TIMED)
+ {
+ /* Aggregate to EVENTS_TRANSACTIONS_SUMMARY_..._BY_EVENT_NAME (timed) */
+ if(state->m_read_only)
+ stat->m_read_only_stat.aggregate_value(wait_time);
+ else
+ stat->m_read_write_stat.aggregate_value(wait_time);
+ }
+ else
+ {
+ /* Aggregate to EVENTS_TRANSACTIONS_SUMMARY_..._BY_EVENT_NAME (counted) */
+ if(state->m_read_only)
+ stat->m_read_only_stat.aggregate_counted();
+ else
+ stat->m_read_write_stat.aggregate_counted();
+ }
+
+ stat->m_savepoint_count+= state->m_savepoint_count;
+ stat->m_rollback_to_savepoint_count+= state->m_rollback_to_savepoint_count;
+ stat->m_release_savepoint_count+= state->m_release_savepoint_count;
+}
+
+
/**
Implementation of the socket instrumentation interface.
@sa PSI_v1::end_socket_wait.
*/
-static void end_socket_wait_v1(PSI_socket_locker *locker, size_t byte_count)
+void pfs_end_socket_wait_v1(PSI_socket_locker *locker, size_t byte_count)
{
PSI_socket_locker_state *state= reinterpret_cast<PSI_socket_locker_state*> (locker);
DBUG_ASSERT(state != NULL);
@@ -5096,9 +6290,9 @@ static void end_socket_wait_v1(PSI_socket_locker *locker, size_t byte_count)
wait->m_end_event_id= thread->m_event_id;
wait->m_number_of_bytes= bytes;
- if (flag_events_waits_history)
+ if (thread->m_flag_events_waits_history)
insert_events_waits_history(thread, wait);
- if (flag_events_waits_history_long)
+ if (thread->m_flag_events_waits_history_long)
insert_events_waits_history_long(wait);
thread->m_events_waits_current--;
@@ -5106,7 +6300,7 @@ static void end_socket_wait_v1(PSI_socket_locker *locker, size_t byte_count)
}
}
-static void set_socket_state_v1(PSI_socket *socket, PSI_socket_state state)
+void pfs_set_socket_state_v1(PSI_socket *socket, PSI_socket_state state)
{
DBUG_ASSERT((state == PSI_SOCKET_STATE_IDLE) || (state == PSI_SOCKET_STATE_ACTIVE));
PFS_socket *pfs= reinterpret_cast<PFS_socket*>(socket);
@@ -5119,10 +6313,10 @@ static void set_socket_state_v1(PSI_socket *socket, PSI_socket_state state)
/**
Set socket descriptor and address info.
*/
-static void set_socket_info_v1(PSI_socket *socket,
- const my_socket *fd,
- const struct sockaddr *addr,
- socklen_t addr_len)
+void pfs_set_socket_info_v1(PSI_socket *socket,
+ const my_socket *fd,
+ const struct sockaddr *addr,
+ socklen_t addr_len)
{
PFS_socket *pfs= reinterpret_cast<PFS_socket*>(socket);
DBUG_ASSERT(pfs != NULL);
@@ -5148,11 +6342,11 @@ static void set_socket_info_v1(PSI_socket *socket,
Implementation of the socket instrumentation interface.
@sa PSI_v1::set_socket_info.
*/
-static void set_socket_thread_owner_v1(PSI_socket *socket)
+void pfs_set_socket_thread_owner_v1(PSI_socket *socket)
{
PFS_socket *pfs_socket= reinterpret_cast<PFS_socket*>(socket);
DBUG_ASSERT(pfs_socket != NULL);
- pfs_socket->m_thread_owner= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ pfs_socket->m_thread_owner= my_thread_get_THR_PFS();
}
struct PSI_digest_locker*
@@ -5189,30 +6383,81 @@ void pfs_digest_end_v1(PSI_digest_locker *locker, const sql_digest_storage *dige
}
}
+PSI_prepared_stmt*
+pfs_create_prepared_stmt_v1(void *identity, uint stmt_id,
+ PSI_statement_locker *locker,
+ const char *stmt_name, size_t stmt_name_length)
+{
+ PSI_statement_locker_state *state= reinterpret_cast<PSI_statement_locker_state*> (locker);
+ PFS_events_statements *pfs_stmt= reinterpret_cast<PFS_events_statements*> (state->m_statement);
+ PFS_program *pfs_program= reinterpret_cast<PFS_program *>(state->m_parent_sp_share);
+
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+
+ PFS_prepared_stmt *pfs= create_prepared_stmt(identity,
+ pfs_thread, pfs_program,
+ pfs_stmt, stmt_id,
+ stmt_name, static_cast<uint>(stmt_name_length));
+
+ state->m_parent_prepared_stmt= reinterpret_cast<PSI_prepared_stmt*>(pfs);
+ state->m_in_prepare= true;
+
+ return reinterpret_cast<PSI_prepared_stmt*>(pfs);
+}
+
+void pfs_execute_prepared_stmt_v1 (PSI_statement_locker *locker,
+ PSI_prepared_stmt* ps)
+{
+ PSI_statement_locker_state *state= reinterpret_cast<PSI_statement_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ state->m_parent_prepared_stmt= ps;
+ state->m_in_prepare= false;
+}
+
+void pfs_destroy_prepared_stmt_v1(PSI_prepared_stmt* prepared_stmt)
+{
+ PFS_prepared_stmt *pfs_prepared_stmt= reinterpret_cast<PFS_prepared_stmt*>(prepared_stmt);
+ delete_prepared_stmt(pfs_prepared_stmt);
+ return;
+}
+
+void pfs_reprepare_prepared_stmt_v1(PSI_prepared_stmt* prepared_stmt)
+{
+ PFS_prepared_stmt *pfs_prepared_stmt= reinterpret_cast<PFS_prepared_stmt*>(prepared_stmt);
+ PFS_single_stat *prepared_stmt_stat= &pfs_prepared_stmt->m_reprepare_stat;
+
+ if (prepared_stmt_stat != NULL)
+ prepared_stmt_stat->aggregate_counted();
+ return;
+}
+
/**
Implementation of the thread attribute connection interface
@sa PSI_v1::set_thread_connect_attr.
*/
-static int set_thread_connect_attrs_v1(const char *buffer, uint length,
- const void *from_cs)
+int pfs_set_thread_connect_attrs_v1(const char *buffer, uint length,
+ const void *from_cs)
{
-
- PFS_thread *thd= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
+ PFS_thread *thd= my_thread_get_THR_PFS();
DBUG_ASSERT(buffer != NULL);
if (likely(thd != NULL) && session_connect_attrs_size_per_thread > 0)
{
+ pfs_dirty_state dirty_state;
const CHARSET_INFO *cs = static_cast<const CHARSET_INFO *> (from_cs);
/* copy from the input buffer as much as we can fit */
uint copy_size= (uint)(length < session_connect_attrs_size_per_thread ?
length : session_connect_attrs_size_per_thread);
- thd->m_session_lock.allocated_to_dirty();
+ thd->m_session_lock.allocated_to_dirty(& dirty_state);
memcpy(thd->m_session_connect_attrs, buffer, copy_size);
thd->m_session_connect_attrs_length= copy_size;
thd->m_session_connect_attrs_cs_number= cs->number;
- thd->m_session_lock.dirty_to_allocated();
+ thd->m_session_lock.dirty_to_allocated(& dirty_state);
if (copy_size == length)
return 0;
@@ -5223,6 +6468,532 @@ static int set_thread_connect_attrs_v1(const char *buffer, uint length,
return 0;
}
+void pfs_register_memory_v1(const char *category,
+ PSI_memory_info_v1 *info,
+ int count)
+{
+ REGISTER_BODY_V1(PSI_memory_key,
+ memory_instrument_prefix,
+ register_memory_class)
+}
+
+PSI_memory_key pfs_memory_alloc_v1(PSI_memory_key key, size_t size, PSI_thread **owner)
+{
+ PFS_thread ** owner_thread= reinterpret_cast<PFS_thread**>(owner);
+ DBUG_ASSERT(owner_thread != NULL);
+
+ if (! flag_global_instrumentation)
+ {
+ *owner_thread= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+
+ PFS_memory_class *klass= find_memory_class(key);
+ if (klass == NULL)
+ {
+ *owner_thread= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+
+ if (! klass->m_enabled)
+ {
+ *owner_thread= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ uint index= klass->m_event_name_index;
+ PFS_memory_stat_delta delta_buffer;
+ PFS_memory_stat_delta *delta;
+
+ if (flag_thread_instrumentation && ! klass->is_global())
+ {
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ {
+ *owner_thread= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+ if (! pfs_thread->m_enabled)
+ {
+ *owner_thread= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+
+ /* Aggregate to MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME */
+ event_name_array= pfs_thread->write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ delta= stat->count_alloc(size, &delta_buffer);
+
+ if (delta != NULL)
+ {
+ pfs_thread->carry_memory_stat_delta(delta, index);
+ }
+
+ /* Flag this memory as owned by the current thread. */
+ *owner_thread= pfs_thread;
+ }
+ else
+ {
+ /* Aggregate to MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME */
+ event_name_array= global_instr_class_memory_array;
+ stat= & event_name_array[index];
+ (void) stat->count_alloc(size, &delta_buffer);
+
+ *owner_thread= NULL;
+ }
+
+ return key;
+}
+
+PSI_memory_key pfs_memory_realloc_v1(PSI_memory_key key, size_t old_size, size_t new_size, PSI_thread **owner)
+{
+ PFS_thread ** owner_thread_hdl= reinterpret_cast<PFS_thread**>(owner);
+ DBUG_ASSERT(owner != NULL);
+
+ PFS_memory_class *klass= find_memory_class(key);
+ if (klass == NULL)
+ {
+ *owner_thread_hdl= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ uint index= klass->m_event_name_index;
+ PFS_memory_stat_delta delta_buffer;
+ PFS_memory_stat_delta *delta;
+
+ if (flag_thread_instrumentation && ! klass->is_global())
+ {
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (likely(pfs_thread != NULL))
+ {
+#ifdef PFS_PARANOID
+ PFS_thread *owner_thread= *owner_thread_hdl;
+ if (owner_thread != pfs_thread)
+ {
+ owner_thread= sanitize_thread(owner_thread);
+ if (owner_thread != NULL)
+ {
+ report_memory_accounting_error("pfs_memory_realloc_v1",
+ pfs_thread, old_size, klass, owner_thread);
+ }
+ }
+#endif /* PFS_PARANOID */
+
+ /* Aggregate to MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME */
+ event_name_array= pfs_thread->write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+
+ if (flag_global_instrumentation && klass->m_enabled)
+ {
+ delta= stat->count_realloc(old_size, new_size, &delta_buffer);
+ *owner_thread_hdl= pfs_thread;
+ }
+ else
+ {
+ delta= stat->count_free(old_size, &delta_buffer);
+ *owner_thread_hdl= NULL;
+ key= PSI_NOT_INSTRUMENTED;
+ }
+
+ if (delta != NULL)
+ {
+ pfs_thread->carry_memory_stat_delta(delta, index);
+ }
+ return key;
+ }
+ }
+
+ /* Aggregate to MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME */
+ event_name_array= global_instr_class_memory_array;
+ stat= & event_name_array[index];
+
+ if (flag_global_instrumentation && klass->m_enabled)
+ {
+ (void) stat->count_realloc(old_size, new_size, &delta_buffer);
+ }
+ else
+ {
+ (void) stat->count_free(old_size, &delta_buffer);
+ key= PSI_NOT_INSTRUMENTED;
+ }
+
+ *owner_thread_hdl= NULL;
+ return key;
+}
+
+PSI_memory_key pfs_memory_claim_v1(PSI_memory_key key, size_t size, PSI_thread **owner)
+{
+ PFS_thread ** owner_thread= reinterpret_cast<PFS_thread**>(owner);
+ DBUG_ASSERT(owner_thread != NULL);
+
+ PFS_memory_class *klass= find_memory_class(key);
+ if (klass == NULL)
+ {
+ *owner_thread= NULL;
+ return PSI_NOT_INSTRUMENTED;
+ }
+
+ /*
+ Do not check klass->m_enabled.
+ Do not check flag_global_instrumentation.
+ If a memory alloc was instrumented,
+ the corresponding free must be instrumented.
+ */
+
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ uint index= klass->m_event_name_index;
+ PFS_memory_stat_delta delta_buffer;
+ PFS_memory_stat_delta *delta;
+
+ if (flag_thread_instrumentation)
+ {
+ PFS_thread *old_thread= sanitize_thread(*owner_thread);
+ PFS_thread *new_thread= my_thread_get_THR_PFS();
+ if (old_thread != new_thread)
+ {
+ if (old_thread != NULL)
+ {
+ event_name_array= old_thread->write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ delta= stat->count_free(size, &delta_buffer);
+
+ if (delta != NULL)
+ {
+ old_thread->carry_memory_stat_delta(delta, index);
+ }
+ }
+
+ if (new_thread != NULL)
+ {
+ event_name_array= new_thread->write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ delta= stat->count_alloc(size, &delta_buffer);
+
+ if (delta != NULL)
+ {
+ new_thread->carry_memory_stat_delta(delta, index);
+ }
+ }
+
+ *owner_thread= new_thread;
+ }
+
+ return key;
+ }
+
+ *owner_thread= NULL;
+ return key;
+}
+
+void pfs_memory_free_v1(PSI_memory_key key, size_t size, PSI_thread *owner)
+{
+ PFS_memory_class *klass= find_memory_class(key);
+ if (klass == NULL)
+ return;
+
+ /*
+ Do not check klass->m_enabled.
+ Do not check flag_global_instrumentation.
+ If a memory alloc was instrumented,
+ the corresponding free must be instrumented.
+ */
+
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ uint index= klass->m_event_name_index;
+ PFS_memory_stat_delta delta_buffer;
+ PFS_memory_stat_delta *delta;
+
+ if (flag_thread_instrumentation && ! klass->is_global())
+ {
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (likely(pfs_thread != NULL))
+ {
+#ifdef PFS_PARANOID
+ PFS_thread *owner_thread= reinterpret_cast<PFS_thread*>(owner);
+
+ if (owner_thread != pfs_thread)
+ {
+ owner_thread= sanitize_thread(owner_thread);
+ if (owner_thread != NULL)
+ {
+ report_memory_accounting_error("pfs_memory_free_v1",
+ pfs_thread, size, klass, owner_thread);
+ }
+ }
+#endif /* PFS_PARANOID */
+
+ /*
+ Do not check pfs_thread->m_enabled.
+ If a memory alloc was instrumented,
+ the corresponding free must be instrumented.
+ */
+ /* Aggregate to MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME */
+ event_name_array= pfs_thread->write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ delta= stat->count_free(size, &delta_buffer);
+
+ if (delta != NULL)
+ {
+ pfs_thread->carry_memory_stat_delta(delta, index);
+ }
+ return;
+ }
+ }
+
+ /* Aggregate to MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME */
+ event_name_array= global_instr_class_memory_array;
+ if (event_name_array)
+ {
+ stat= & event_name_array[index];
+ (void) stat->count_free(size, &delta_buffer);
+ }
+ return;
+}
+
+void pfs_unlock_table_v1(PSI_table *table)
+{
+ PFS_table *pfs_table= reinterpret_cast<PFS_table*> (table);
+
+ DBUG_ASSERT(pfs_table != NULL);
+
+ pfs_table->m_internal_lock= PFS_TL_NONE;
+ return;
+}
+
+PSI_metadata_lock *
+pfs_create_metadata_lock_v1(
+ void *identity,
+ const MDL_key *mdl_key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line)
+{
+ if (! flag_global_instrumentation)
+ return NULL;
+
+ if (! global_metadata_class.m_enabled)
+ return NULL;
+
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (pfs_thread == NULL)
+ return NULL;
+
+ PFS_metadata_lock *pfs;
+ pfs= create_metadata_lock(identity, mdl_key,
+ mdl_type, mdl_duration, mdl_status,
+ src_file, src_line);
+
+ if (pfs != NULL)
+ {
+ pfs->m_owner_thread_id= pfs_thread->m_thread_internal_id;
+ pfs->m_owner_event_id= pfs_thread->m_event_id;
+ }
+
+ return reinterpret_cast<PSI_metadata_lock *> (pfs);
+}
+
+void
+pfs_set_metadata_lock_status_v1(PSI_metadata_lock *lock, opaque_mdl_status mdl_status)
+{
+ PFS_metadata_lock *pfs= reinterpret_cast<PFS_metadata_lock*> (lock);
+ DBUG_ASSERT(pfs != NULL);
+ pfs->m_mdl_status= mdl_status;
+}
+
+void
+pfs_destroy_metadata_lock_v1(PSI_metadata_lock *lock)
+{
+ PFS_metadata_lock *pfs= reinterpret_cast<PFS_metadata_lock*> (lock);
+ DBUG_ASSERT(pfs != NULL);
+ destroy_metadata_lock(pfs);
+}
+
+PSI_metadata_locker *
+pfs_start_metadata_wait_v1(PSI_metadata_locker_state *state,
+ PSI_metadata_lock *lock,
+ const char *src_file,
+ uint src_line)
+{
+ PFS_metadata_lock *pfs_lock= reinterpret_cast<PFS_metadata_lock*> (lock);
+ DBUG_ASSERT(state != NULL);
+ DBUG_ASSERT(pfs_lock != NULL);
+
+ if (! pfs_lock->m_enabled)
+ return NULL;
+
+ uint flags;
+ ulonglong timer_start= 0;
+
+ if (flag_thread_instrumentation)
+ {
+ PFS_thread *pfs_thread= my_thread_get_THR_PFS();
+ if (unlikely(pfs_thread == NULL))
+ return NULL;
+ if (! pfs_thread->m_enabled)
+ return NULL;
+ state->m_thread= reinterpret_cast<PSI_thread *> (pfs_thread);
+ flags= STATE_FLAG_THREAD;
+
+ if (pfs_lock->m_timed)
+ {
+ timer_start= get_timer_raw_value_and_function(wait_timer, & state->m_timer);
+ state->m_timer_start= timer_start;
+ flags|= STATE_FLAG_TIMED;
+ }
+
+ if (flag_events_waits_current)
+ {
+ if (unlikely(pfs_thread->m_events_waits_current >=
+ & pfs_thread->m_events_waits_stack[WAIT_STACK_SIZE]))
+ {
+ locker_lost++;
+ return NULL;
+ }
+ PFS_events_waits *wait= pfs_thread->m_events_waits_current;
+ state->m_wait= wait;
+ flags|= STATE_FLAG_EVENT;
+
+ PFS_events_waits *parent_event= wait - 1;
+ wait->m_event_type= EVENT_TYPE_WAIT;
+ wait->m_nesting_event_id= parent_event->m_event_id;
+ wait->m_nesting_event_type= parent_event->m_event_type;
+
+ wait->m_thread_internal_id= pfs_thread->m_thread_internal_id;
+ wait->m_class= &global_metadata_class;
+ wait->m_timer_start= timer_start;
+ wait->m_timer_end= 0;
+ wait->m_object_instance_addr= pfs_lock->m_identity;
+ wait->m_event_id= pfs_thread->m_event_id++;
+ wait->m_end_event_id= 0;
+ wait->m_weak_metadata_lock= pfs_lock;
+ wait->m_weak_version= pfs_lock->get_version();
+ wait->m_operation= OPERATION_TYPE_METADATA;
+ wait->m_source_file= src_file;
+ wait->m_source_line= src_line;
+ wait->m_wait_class= WAIT_CLASS_METADATA;
+
+ pfs_thread->m_events_waits_current++;
+ }
+ }
+ else
+ {
+ if (pfs_lock->m_timed)
+ {
+ timer_start= get_timer_raw_value_and_function(wait_timer, & state->m_timer);
+ state->m_timer_start= timer_start;
+ flags= STATE_FLAG_TIMED;
+ state->m_thread= NULL;
+ }
+ else
+ {
+ /*
+ Complete shortcut.
+ */
+ /* Aggregate to EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME (counted) */
+ global_metadata_stat.aggregate_counted();
+ return NULL;
+ }
+ }
+
+ state->m_flags= flags;
+ state->m_metadata_lock= lock;
+ return reinterpret_cast<PSI_metadata_locker*> (state);
+}
+
+void
+pfs_end_metadata_wait_v1(PSI_metadata_locker *locker,
+ int rc)
+{
+ PSI_metadata_locker_state *state= reinterpret_cast<PSI_metadata_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
+ ulonglong timer_end= 0;
+ ulonglong wait_time= 0;
+
+ PFS_thread *thread= reinterpret_cast<PFS_thread *> (state->m_thread);
+
+ uint flags= state->m_flags;
+
+ if (flags & STATE_FLAG_TIMED)
+ {
+ timer_end= state->m_timer();
+ wait_time= timer_end - state->m_timer_start;
+ }
+
+ if (flags & STATE_FLAG_THREAD)
+ {
+ PFS_single_stat *event_name_array;
+ event_name_array= thread->write_instr_class_waits_stats();
+
+ if (flags & STATE_FLAG_TIMED)
+ {
+ /* Aggregate to EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME (timed) */
+ event_name_array[GLOBAL_METADATA_EVENT_INDEX].aggregate_value(wait_time);
+ }
+ else
+ {
+ /* Aggregate to EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME (counted) */
+ event_name_array[GLOBAL_METADATA_EVENT_INDEX].aggregate_counted();
+ }
+
+ if (flags & STATE_FLAG_EVENT)
+ {
+ PFS_events_waits *wait= reinterpret_cast<PFS_events_waits*> (state->m_wait);
+ DBUG_ASSERT(wait != NULL);
+
+ wait->m_timer_end= timer_end;
+ wait->m_end_event_id= thread->m_event_id;
+ if (thread->m_flag_events_waits_history)
+ insert_events_waits_history(thread, wait);
+ if (thread->m_flag_events_waits_history_long)
+ insert_events_waits_history_long(wait);
+ thread->m_events_waits_current--;
+
+ DBUG_ASSERT(wait == thread->m_events_waits_current);
+ }
+ }
+ else
+ {
+ if (flags & STATE_FLAG_TIMED)
+ {
+ /* Aggregate to EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME (timed) */
+ global_metadata_stat.aggregate_value(wait_time);
+ }
+ else
+ {
+ /* Aggregate to EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME (counted) */
+ global_metadata_stat.aggregate_counted();
+ }
+ }
+}
+
+void pfs_set_prepared_stmt_text_v1(PSI_prepared_stmt *prepared_stmt,
+ const char *text,
+ uint text_len)
+{
+ PFS_prepared_stmt *pfs_prepared_stmt =
+ reinterpret_cast<PFS_prepared_stmt *>(prepared_stmt);
+ DBUG_ASSERT(pfs_prepared_stmt != NULL);
+
+ uint max_len = COL_INFO_SIZE;
+ if (text_len > max_len)
+ {
+ text_len = max_len;
+ }
+
+ memcpy(pfs_prepared_stmt->m_sqltext, text, text_len);
+ pfs_prepared_stmt->m_sqltext_length = text_len;
+
+ return;
+}
/**
Implementation of the instrumentation interface.
@@ -5230,103 +7001,140 @@ static int set_thread_connect_attrs_v1(const char *buffer, uint length,
*/
PSI_v1 PFS_v1=
{
- register_mutex_v1,
- register_rwlock_v1,
- register_cond_v1,
- register_thread_v1,
- register_file_v1,
- register_stage_v1,
- register_statement_v1,
- register_socket_v1,
- init_mutex_v1,
- destroy_mutex_v1,
- init_rwlock_v1,
- destroy_rwlock_v1,
- init_cond_v1,
- destroy_cond_v1,
- init_socket_v1,
- destroy_socket_v1,
- get_table_share_v1,
- release_table_share_v1,
- drop_table_share_v1,
- open_table_v1,
- unbind_table_v1,
- rebind_table_v1,
- close_table_v1,
- create_file_v1,
- spawn_thread_v1,
- new_thread_v1,
- set_thread_id_v1,
- get_thread_v1,
- set_thread_user_v1,
- set_thread_account_v1,
- set_thread_db_v1,
- set_thread_command_v1,
- set_thread_start_time_v1,
- set_thread_state_v1,
- set_thread_info_v1,
- set_thread_v1,
- delete_current_thread_v1,
- delete_thread_v1,
- get_thread_file_name_locker_v1,
- get_thread_file_stream_locker_v1,
- get_thread_file_descriptor_locker_v1,
- unlock_mutex_v1,
- unlock_rwlock_v1,
- signal_cond_v1,
- broadcast_cond_v1,
- start_idle_wait_v1,
- end_idle_wait_v1,
- start_mutex_wait_v1,
- end_mutex_wait_v1,
- start_rwlock_wait_v1, /* read */
- end_rwlock_rdwait_v1,
- start_rwlock_wait_v1, /* write */
- end_rwlock_wrwait_v1,
- start_cond_wait_v1,
- end_cond_wait_v1,
- start_table_io_wait_v1,
- end_table_io_wait_v1,
- start_table_lock_wait_v1,
- end_table_lock_wait_v1,
- start_file_open_wait_v1,
- end_file_open_wait_v1,
- end_file_open_wait_and_bind_to_descriptor_v1,
- start_file_wait_v1,
- end_file_wait_v1,
- start_file_close_wait_v1,
- end_file_close_wait_v1,
- start_stage_v1,
- end_stage_v1,
- get_thread_statement_locker_v1,
- refine_statement_v1,
- start_statement_v1,
- set_statement_text_v1,
- set_statement_lock_time_v1,
- set_statement_rows_sent_v1,
- set_statement_rows_examined_v1,
- inc_statement_created_tmp_disk_tables_v1,
- inc_statement_created_tmp_tables_v1,
- inc_statement_select_full_join_v1,
- inc_statement_select_full_range_join_v1,
- inc_statement_select_range_v1,
- inc_statement_select_range_check_v1,
- inc_statement_select_scan_v1,
- inc_statement_sort_merge_passes_v1,
- inc_statement_sort_range_v1,
- inc_statement_sort_rows_v1,
- inc_statement_sort_scan_v1,
- set_statement_no_index_used_v1,
- set_statement_no_good_index_used_v1,
- end_statement_v1,
- start_socket_wait_v1,
- end_socket_wait_v1,
- set_socket_state_v1,
- set_socket_info_v1,
- set_socket_thread_owner_v1,
+ pfs_register_mutex_v1,
+ pfs_register_rwlock_v1,
+ pfs_register_cond_v1,
+ pfs_register_thread_v1,
+ pfs_register_file_v1,
+ pfs_register_stage_v1,
+ pfs_register_statement_v1,
+ pfs_register_socket_v1,
+ pfs_init_mutex_v1,
+ pfs_destroy_mutex_v1,
+ pfs_init_rwlock_v1,
+ pfs_destroy_rwlock_v1,
+ pfs_init_cond_v1,
+ pfs_destroy_cond_v1,
+ pfs_init_socket_v1,
+ pfs_destroy_socket_v1,
+ pfs_get_table_share_v1,
+ pfs_release_table_share_v1,
+ pfs_drop_table_share_v1,
+ pfs_open_table_v1,
+ pfs_unbind_table_v1,
+ pfs_rebind_table_v1,
+ pfs_close_table_v1,
+ pfs_create_file_v1,
+ pfs_spawn_thread_v1,
+ pfs_new_thread_v1,
+ pfs_set_thread_id_v1,
+ pfs_set_thread_THD_v1,
+ pfs_set_thread_os_id_v1,
+ pfs_get_thread_v1,
+ pfs_set_thread_user_v1,
+ pfs_set_thread_account_v1,
+ pfs_set_thread_db_v1,
+ pfs_set_thread_command_v1,
+ pfs_set_connection_type_v1,
+ pfs_set_thread_start_time_v1,
+ pfs_set_thread_state_v1,
+ pfs_set_thread_info_v1,
+ pfs_set_thread_v1,
+ pfs_delete_current_thread_v1,
+ pfs_delete_thread_v1,
+ pfs_get_thread_file_name_locker_v1,
+ pfs_get_thread_file_stream_locker_v1,
+ pfs_get_thread_file_descriptor_locker_v1,
+ pfs_unlock_mutex_v1,
+ pfs_unlock_rwlock_v1,
+ pfs_signal_cond_v1,
+ pfs_broadcast_cond_v1,
+ pfs_start_idle_wait_v1,
+ pfs_end_idle_wait_v1,
+ pfs_start_mutex_wait_v1,
+ pfs_end_mutex_wait_v1,
+ pfs_start_rwlock_rdwait_v1,
+ pfs_end_rwlock_rdwait_v1,
+ pfs_start_rwlock_wrwait_v1,
+ pfs_end_rwlock_wrwait_v1,
+ pfs_start_cond_wait_v1,
+ pfs_end_cond_wait_v1,
+ pfs_start_table_io_wait_v1,
+ pfs_end_table_io_wait_v1,
+ pfs_start_table_lock_wait_v1,
+ pfs_end_table_lock_wait_v1,
+ pfs_start_file_open_wait_v1,
+ pfs_end_file_open_wait_v1,
+ pfs_end_file_open_wait_and_bind_to_descriptor_v1,
+ pfs_end_temp_file_open_wait_and_bind_to_descriptor_v1,
+ pfs_start_file_wait_v1,
+ pfs_end_file_wait_v1,
+ pfs_start_file_close_wait_v1,
+ pfs_end_file_close_wait_v1,
+ pfs_end_file_rename_wait_v1,
+ pfs_start_stage_v1,
+ pfs_get_current_stage_progress_v1,
+ pfs_end_stage_v1,
+ pfs_get_thread_statement_locker_v1,
+ pfs_refine_statement_v1,
+ pfs_start_statement_v1,
+ pfs_set_statement_text_v1,
+ pfs_set_statement_lock_time_v1,
+ pfs_set_statement_rows_sent_v1,
+ pfs_set_statement_rows_examined_v1,
+ pfs_inc_statement_created_tmp_disk_tables_v1,
+ pfs_inc_statement_created_tmp_tables_v1,
+ pfs_inc_statement_select_full_join_v1,
+ pfs_inc_statement_select_full_range_join_v1,
+ pfs_inc_statement_select_range_v1,
+ pfs_inc_statement_select_range_check_v1,
+ pfs_inc_statement_select_scan_v1,
+ pfs_inc_statement_sort_merge_passes_v1,
+ pfs_inc_statement_sort_range_v1,
+ pfs_inc_statement_sort_rows_v1,
+ pfs_inc_statement_sort_scan_v1,
+ pfs_set_statement_no_index_used_v1,
+ pfs_set_statement_no_good_index_used_v1,
+ pfs_end_statement_v1,
+ pfs_get_thread_transaction_locker_v1,
+ pfs_start_transaction_v1,
+ pfs_set_transaction_xid_v1,
+ pfs_set_transaction_xa_state_v1,
+ pfs_set_transaction_gtid_v1,
+ pfs_set_transaction_trxid_v1,
+ pfs_inc_transaction_savepoints_v1,
+ pfs_inc_transaction_rollback_to_savepoint_v1,
+ pfs_inc_transaction_release_savepoint_v1,
+ pfs_end_transaction_v1,
+ pfs_start_socket_wait_v1,
+ pfs_end_socket_wait_v1,
+ pfs_set_socket_state_v1,
+ pfs_set_socket_info_v1,
+ pfs_set_socket_thread_owner_v1,
+ pfs_create_prepared_stmt_v1,
+ pfs_destroy_prepared_stmt_v1,
+ pfs_reprepare_prepared_stmt_v1,
+ pfs_execute_prepared_stmt_v1,
+ pfs_set_prepared_stmt_text_v1,
pfs_digest_start_v1,
pfs_digest_end_v1,
- set_thread_connect_attrs_v1,
+ pfs_set_thread_connect_attrs_v1,
+ pfs_start_sp_v1,
+ pfs_end_sp_v1,
+ pfs_drop_sp_v1,
+ pfs_get_sp_share_v1,
+ pfs_release_sp_share_v1,
+ pfs_register_memory_v1,
+ pfs_memory_alloc_v1,
+ pfs_memory_realloc_v1,
+ pfs_memory_claim_v1,
+ pfs_memory_free_v1,
+ pfs_unlock_table_v1,
+ pfs_create_metadata_lock_v1,
+ pfs_set_metadata_lock_status_v1,
+ pfs_destroy_metadata_lock_v1,
+ pfs_start_metadata_wait_v1,
+ pfs_end_metadata_wait_v1
};
static void* get_interface(int version)
diff --git a/storage/perfschema/pfs.h b/storage/perfschema/pfs.h
index 3649143f8fa..69b23be4206 100644
--- a/storage/perfschema/pfs.h
+++ b/storage/perfschema/pfs.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2016, 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, version 2.0,
@@ -30,7 +30,8 @@
#define HAVE_PSI_1
-#include <my_pthread.h>
+#include <my_global.h>
+#include "my_thread.h"
#include <mysql/psi/psi.h>
/**
@@ -39,9 +40,24 @@
*/
extern struct PSI_bootstrap PFS_bootstrap;
/** Performance schema Thread Local Storage key. */
-extern pthread_key(PFS_thread*, THR_PFS);
-/** True when @c THR_PFS is initialized. */
+extern pthread_key_t THR_PFS;
+extern pthread_key_t THR_PFS_VG; // global_variables
+extern pthread_key_t THR_PFS_SV; // session_variables
+extern pthread_key_t THR_PFS_VBT; // variables_by_thread
+extern pthread_key_t THR_PFS_SG; // global_status
+extern pthread_key_t THR_PFS_SS; // session_status
+extern pthread_key_t THR_PFS_SBT; // status_by_thread
+extern pthread_key_t THR_PFS_SBU; // status_by_user
+extern pthread_key_t THR_PFS_SBA; // status_by_host
+extern pthread_key_t THR_PFS_SBH; // status_by_account
+
+/** True when @c THR_PFS and all other Performance Schema TLS keys are initialized. */
extern bool THR_PFS_initialized;
+#define PSI_VOLATILITY_UNKNOWN 0
+#define PSI_VOLATILITY_SESSION 1
+
+#define PSI_COUNT_VOLATILITY 2
+
#endif
diff --git a/storage/perfschema/pfs_account.cc b/storage/perfschema/pfs_account.cc
index be2153e84ae..b6090d064c9 100644
--- a/storage/perfschema/pfs_account.cc
+++ b/storage/perfschema/pfs_account.cc
@@ -22,7 +22,7 @@
/**
@file storage/perfschema/pfs_account.cc
- Performance schema user@host (implementation).
+ Performance schema account (implementation).
*/
#include "my_global.h"
@@ -37,21 +37,13 @@
#include "pfs_account.h"
#include "pfs_global.h"
#include "pfs_instr_class.h"
+#include "pfs_buffer_container.h"
/**
@addtogroup Performance_schema_buffers
@{
*/
-ulong account_max;
-ulong account_lost;
-
-PFS_account *account_array= NULL;
-
-static PFS_single_stat *account_instr_class_waits_array= NULL;
-static PFS_stage_stat *account_instr_class_stages_array= NULL;
-static PFS_statement_stat *account_instr_class_statements_array= NULL;
-
LF_HASH account_hash;
static bool account_hash_inited= false;
@@ -62,75 +54,16 @@ static bool account_hash_inited= false;
*/
int init_account(const PFS_global_param *param)
{
- uint index;
-
- account_max= param->m_account_sizing;
-
- account_array= NULL;
- account_instr_class_waits_array= NULL;
- account_instr_class_stages_array= NULL;
- account_instr_class_statements_array= NULL;
- uint waits_sizing= account_max * wait_class_max;
- uint stages_sizing= account_max * stage_class_max;
- uint statements_sizing= account_max * statement_class_max;
-
- if (account_max > 0)
- {
- account_array= PFS_MALLOC_ARRAY(account_max, sizeof(PFS_account), PFS_account,
- MYF(MY_ZEROFILL));
- if (unlikely(account_array == NULL))
- return 1;
- }
-
- if (waits_sizing > 0)
- {
- account_instr_class_waits_array=
- PFS_connection_slice::alloc_waits_slice(waits_sizing);
- if (unlikely(account_instr_class_waits_array == NULL))
- return 1;
- }
-
- if (stages_sizing > 0)
- {
- account_instr_class_stages_array=
- PFS_connection_slice::alloc_stages_slice(stages_sizing);
- if (unlikely(account_instr_class_stages_array == NULL))
- return 1;
- }
-
- if (statements_sizing > 0)
- {
- account_instr_class_statements_array=
- PFS_connection_slice::alloc_statements_slice(statements_sizing);
- if (unlikely(account_instr_class_statements_array == NULL))
- return 1;
- }
-
- for (index= 0; index < account_max; index++)
- {
- account_array[index].m_instr_class_waits_stats=
- &account_instr_class_waits_array[index * wait_class_max];
- account_array[index].m_instr_class_stages_stats=
- &account_instr_class_stages_array[index * stage_class_max];
- account_array[index].m_instr_class_statements_stats=
- &account_instr_class_statements_array[index * statement_class_max];
- }
+ if (global_account_container.init(param->m_account_sizing))
+ return 1;
return 0;
}
-/** Cleanup all the user buffers. */
+/** Cleanup all the account buffers. */
void cleanup_account(void)
{
- pfs_free(account_array);
- account_array= NULL;
- pfs_free(account_instr_class_waits_array);
- account_instr_class_waits_array= NULL;
- pfs_free(account_instr_class_stages_array);
- account_instr_class_stages_array= 0;
- pfs_free(account_instr_class_statements_array);
- account_instr_class_statements_array=0;
- account_max= 0;
+ global_account_container.cleanup();
}
C_MODE_START
@@ -154,13 +87,12 @@ C_MODE_END
Initialize the user hash.
@return 0 on success
*/
-int init_account_hash(void)
+int init_account_hash(const PFS_global_param *param)
{
- if ((! account_hash_inited) && (account_max > 0))
+ if ((! account_hash_inited) && (param->m_account_sizing != 0))
{
lf_hash_init(&account_hash, sizeof(PFS_account*), LF_HASH_UNIQUE,
0, 0, account_hash_get_key, &my_charset_bin);
- /* account_hash.size= account_max; */
account_hash_inited= true;
}
return 0;
@@ -217,16 +149,10 @@ find_or_create_account(PFS_thread *thread,
const char *username, uint username_length,
const char *hostname, uint hostname_length)
{
- if (account_max == 0)
- {
- account_lost++;
- return NULL;
- }
-
LF_PINS *pins= get_account_hash_pins(thread);
if (unlikely(pins == NULL))
{
- account_lost++;
+ global_account_container.m_lost++;
return NULL;
}
@@ -235,8 +161,10 @@ find_or_create_account(PFS_thread *thread,
hostname, hostname_length);
PFS_account **entry;
+ PFS_account *pfs;
uint retry_count= 0;
const uint retry_max= 3;
+ pfs_dirty_state dirty_state;
search:
entry= reinterpret_cast<PFS_account**>
@@ -244,7 +172,6 @@ search:
key.m_hash_key, key.m_key_length));
if (entry && (entry != MY_ERRPTR))
{
- PFS_account *pfs;
pfs= *entry;
pfs->inc_refcount();
lf_hash_search_unpin(pins);
@@ -253,93 +180,94 @@ search:
lf_hash_search_unpin(pins);
- PFS_scan scan;
- uint random= randomized_index(username, account_max);
-
- for (scan.init(random, account_max);
- scan.has_pass();
- scan.next_pass())
+ pfs= global_account_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- PFS_account *pfs= account_array + scan.first();
- PFS_account *pfs_last= account_array + scan.last();
- for ( ; pfs < pfs_last; pfs++)
+ pfs->m_key= key;
+ if (username_length > 0)
+ pfs->m_username= &pfs->m_key.m_hash_key[0];
+ else
+ pfs->m_username= NULL;
+ pfs->m_username_length= username_length;
+
+ if (hostname_length > 0)
+ pfs->m_hostname= &pfs->m_key.m_hash_key[username_length + 1];
+ else
+ pfs->m_hostname= NULL;
+ pfs->m_hostname_length= hostname_length;
+
+ pfs->m_user= find_or_create_user(thread, username, username_length);
+ pfs->m_host= find_or_create_host(thread, hostname, hostname_length);
+
+ pfs->init_refcount();
+ pfs->reset_stats();
+ pfs->m_disconnected_count= 0;
+
+ if (username_length > 0 && hostname_length > 0)
+ {
+ lookup_setup_actor(thread, username, username_length, hostname, hostname_length,
+ & pfs->m_enabled, & pfs->m_history);
+ }
+ else
{
- if (pfs->m_lock.is_free())
+ pfs->m_enabled= true;
+ pfs->m_history= true;
+ }
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&account_hash, pins, &pfs);
+ if (likely(res == 0))
+ {
+ return pfs;
+ }
+
+ if (pfs->m_user)
+ {
+ pfs->m_user->release();
+ pfs->m_user= NULL;
+ }
+ if (pfs->m_host)
+ {
+ pfs->m_host->release();
+ pfs->m_host= NULL;
+ }
+
+ global_account_container.deallocate(pfs);
+
+ if (res > 0)
+ {
+ if (++retry_count > retry_max)
{
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_key= key;
- if (username_length > 0)
- pfs->m_username= &pfs->m_key.m_hash_key[0];
- else
- pfs->m_username= NULL;
- pfs->m_username_length= username_length;
-
- if (hostname_length > 0)
- pfs->m_hostname= &pfs->m_key.m_hash_key[username_length + 1];
- else
- pfs->m_hostname= NULL;
- pfs->m_hostname_length= hostname_length;
-
- pfs->m_user= find_or_create_user(thread, username, username_length);
- pfs->m_host= find_or_create_host(thread, hostname, hostname_length);
-
- pfs->init_refcount();
- pfs->reset_stats();
- pfs->m_disconnected_count= 0;
-
- int res;
- res= lf_hash_insert(&account_hash, pins, &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- return pfs;
- }
-
- if (pfs->m_user)
- {
- pfs->m_user->release();
- pfs->m_user= NULL;
- }
- if (pfs->m_host)
- {
- pfs->m_host->release();
- pfs->m_host= NULL;
- }
-
- pfs->m_lock.dirty_to_free();
-
- if (res > 0)
- {
- if (++retry_count > retry_max)
- {
- account_lost++;
- return NULL;
- }
- goto search;
- }
-
- account_lost++;
- return NULL;
- }
+ global_account_container.m_lost++;
+ return NULL;
}
+ goto search;
}
+
+ global_account_container.m_lost++;
+ return NULL;
}
- account_lost++;
return NULL;
}
-void PFS_account::aggregate(PFS_user *safe_user, PFS_host *safe_host)
+void PFS_account::aggregate(bool alive, PFS_user *safe_user, PFS_host *safe_host)
{
aggregate_waits(safe_user, safe_host);
aggregate_stages(safe_user, safe_host);
aggregate_statements(safe_user, safe_host);
+ aggregate_transactions(safe_user, safe_host);
+ aggregate_memory(alive, safe_user, safe_host);
+ aggregate_status(safe_user, safe_host);
aggregate_stats(safe_user, safe_host);
}
void PFS_account::aggregate_waits(PFS_user *safe_user, PFS_host *safe_host)
{
+ if (read_instr_class_waits_stats() == NULL)
+ return;
+
if (likely(safe_user != NULL && safe_host != NULL))
{
/*
@@ -348,9 +276,9 @@ void PFS_account::aggregate_waits(PFS_user *safe_user, PFS_host *safe_host)
- EVENTS_WAITS_SUMMARY_BY_HOST_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_event_names(m_instr_class_waits_stats,
- safe_user->m_instr_class_waits_stats,
- safe_host->m_instr_class_waits_stats);
+ aggregate_all_event_names(write_instr_class_waits_stats(),
+ safe_user->write_instr_class_waits_stats(),
+ safe_host->write_instr_class_waits_stats());
return;
}
@@ -360,8 +288,8 @@ void PFS_account::aggregate_waits(PFS_user *safe_user, PFS_host *safe_host)
Aggregate EVENTS_WAITS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
- EVENTS_WAITS_SUMMARY_BY_USER_BY_EVENT_NAME
*/
- aggregate_all_event_names(m_instr_class_waits_stats,
- safe_user->m_instr_class_waits_stats);
+ aggregate_all_event_names(write_instr_class_waits_stats(),
+ safe_user->write_instr_class_waits_stats());
return;
}
@@ -371,8 +299,8 @@ void PFS_account::aggregate_waits(PFS_user *safe_user, PFS_host *safe_host)
Aggregate EVENTS_WAITS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
- EVENTS_WAITS_SUMMARY_BY_HOST_BY_EVENT_NAME
*/
- aggregate_all_event_names(m_instr_class_waits_stats,
- safe_host->m_instr_class_waits_stats);
+ aggregate_all_event_names(write_instr_class_waits_stats(),
+ safe_host->write_instr_class_waits_stats());
return;
}
@@ -383,6 +311,9 @@ void PFS_account::aggregate_waits(PFS_user *safe_user, PFS_host *safe_host)
void PFS_account::aggregate_stages(PFS_user *safe_user, PFS_host *safe_host)
{
+ if (read_instr_class_stages_stats() == NULL)
+ return;
+
if (likely(safe_user != NULL && safe_host != NULL))
{
/*
@@ -391,9 +322,9 @@ void PFS_account::aggregate_stages(PFS_user *safe_user, PFS_host *safe_host)
- EVENTS_STAGES_SUMMARY_BY_HOST_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_stages(m_instr_class_stages_stats,
- safe_user->m_instr_class_stages_stats,
- safe_host->m_instr_class_stages_stats);
+ aggregate_all_stages(write_instr_class_stages_stats(),
+ safe_user->write_instr_class_stages_stats(),
+ safe_host->write_instr_class_stages_stats());
return;
}
@@ -405,8 +336,8 @@ void PFS_account::aggregate_stages(PFS_user *safe_user, PFS_host *safe_host)
- EVENTS_STAGES_SUMMARY_GLOBAL_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_stages(m_instr_class_stages_stats,
- safe_user->m_instr_class_stages_stats,
+ aggregate_all_stages(write_instr_class_stages_stats(),
+ safe_user->write_instr_class_stages_stats(),
global_instr_class_stages_array);
return;
}
@@ -417,8 +348,8 @@ void PFS_account::aggregate_stages(PFS_user *safe_user, PFS_host *safe_host)
Aggregate EVENTS_STAGES_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
- EVENTS_STAGES_SUMMARY_BY_HOST_BY_EVENT_NAME
*/
- aggregate_all_stages(m_instr_class_stages_stats,
- safe_host->m_instr_class_stages_stats);
+ aggregate_all_stages(write_instr_class_stages_stats(),
+ safe_host->write_instr_class_stages_stats());
return;
}
@@ -426,13 +357,16 @@ void PFS_account::aggregate_stages(PFS_user *safe_user, PFS_host *safe_host)
Aggregate EVENTS_STAGES_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
- EVENTS_STAGES_SUMMARY_GLOBAL_BY_EVENT_NAME
*/
- aggregate_all_stages(m_instr_class_stages_stats,
+ aggregate_all_stages(write_instr_class_stages_stats(),
global_instr_class_stages_array);
return;
}
void PFS_account::aggregate_statements(PFS_user *safe_user, PFS_host *safe_host)
{
+ if (read_instr_class_statements_stats() == NULL)
+ return;
+
if (likely(safe_user != NULL && safe_host != NULL))
{
/*
@@ -441,9 +375,9 @@ void PFS_account::aggregate_statements(PFS_user *safe_user, PFS_host *safe_host)
- EVENTS_STATEMENTS_SUMMARY_BY_HOST_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_statements(m_instr_class_statements_stats,
- safe_user->m_instr_class_statements_stats,
- safe_host->m_instr_class_statements_stats);
+ aggregate_all_statements(write_instr_class_statements_stats(),
+ safe_user->write_instr_class_statements_stats(),
+ safe_host->write_instr_class_statements_stats());
return;
}
@@ -455,8 +389,8 @@ void PFS_account::aggregate_statements(PFS_user *safe_user, PFS_host *safe_host)
- EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_statements(m_instr_class_statements_stats,
- safe_user->m_instr_class_statements_stats,
+ aggregate_all_statements(write_instr_class_statements_stats(),
+ safe_user->write_instr_class_statements_stats(),
global_instr_class_statements_array);
return;
}
@@ -467,8 +401,8 @@ void PFS_account::aggregate_statements(PFS_user *safe_user, PFS_host *safe_host)
Aggregate EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
- EVENTS_STATEMENTS_SUMMARY_BY_HOST_BY_EVENT_NAME
*/
- aggregate_all_statements(m_instr_class_statements_stats,
- safe_host->m_instr_class_statements_stats);
+ aggregate_all_statements(write_instr_class_statements_stats(),
+ safe_host->write_instr_class_statements_stats());
return;
}
@@ -476,11 +410,169 @@ void PFS_account::aggregate_statements(PFS_user *safe_user, PFS_host *safe_host)
Aggregate EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
- EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_EVENT_NAME
*/
- aggregate_all_statements(m_instr_class_statements_stats,
+ aggregate_all_statements(write_instr_class_statements_stats(),
global_instr_class_statements_array);
return;
}
+void PFS_account::aggregate_transactions(PFS_user *safe_user, PFS_host *safe_host)
+{
+ if (read_instr_class_transactions_stats() == NULL)
+ return;
+
+ if (likely(safe_user != NULL && safe_host != NULL))
+ {
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_transactions(write_instr_class_transactions_stats(),
+ safe_user->write_instr_class_transactions_stats(),
+ safe_host->write_instr_class_transactions_stats());
+ return;
+ }
+
+ if (safe_user != NULL)
+ {
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_transactions(write_instr_class_transactions_stats(),
+ safe_user->write_instr_class_transactions_stats(),
+ &global_transaction_stat);
+ return;
+ }
+
+ if (safe_host != NULL)
+ {
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME
+ */
+ aggregate_all_transactions(write_instr_class_transactions_stats(),
+ safe_host->write_instr_class_transactions_stats());
+ return;
+ }
+
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME
+ */
+ aggregate_all_transactions(write_instr_class_transactions_stats(),
+ &global_transaction_stat);
+ return;
+}
+
+void PFS_account::aggregate_memory(bool alive, PFS_user *safe_user, PFS_host *safe_host)
+{
+ if (read_instr_class_memory_stats() == NULL)
+ return;
+
+ if (likely(safe_user != NULL && safe_host != NULL))
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME
+ - MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_memory(alive,
+ write_instr_class_memory_stats(),
+ safe_user->write_instr_class_memory_stats(),
+ safe_host->write_instr_class_memory_stats());
+ return;
+ }
+
+ if (safe_user != NULL)
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME
+ - MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_memory(alive,
+ write_instr_class_memory_stats(),
+ safe_user->write_instr_class_memory_stats(),
+ global_instr_class_memory_array);
+ return;
+ }
+
+ if (safe_host != NULL)
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME
+ */
+ aggregate_all_memory(alive,
+ write_instr_class_memory_stats(),
+ safe_host->write_instr_class_memory_stats());
+ return;
+ }
+
+ /*
+ Aggregate MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME
+ */
+ aggregate_all_memory(alive,
+ write_instr_class_memory_stats(),
+ global_instr_class_memory_array);
+ return;
+}
+
+void PFS_account::aggregate_status(PFS_user *safe_user, PFS_host *safe_host)
+{
+ if (likely(safe_user != NULL && safe_host != NULL))
+ {
+ /*
+ Aggregate STATUS_BY_ACCOUNT to:
+ - STATUS_BY_USER
+ - STATUS_BY_HOST
+ */
+ safe_user->m_status_stats.aggregate(& m_status_stats);
+ safe_host->m_status_stats.aggregate(& m_status_stats);
+ m_status_stats.reset();
+ return;
+ }
+
+ if (safe_user != NULL)
+ {
+ /*
+ Aggregate STATUS_BY_ACCOUNT to:
+ - STATUS_BY_USER
+ - GLOBAL_STATUS
+ */
+ safe_user->m_status_stats.aggregate(& m_status_stats);
+ //m_status_stats.aggregate_to(& global_status_var);
+ m_status_stats.reset();
+ return;
+ }
+
+ if (safe_host != NULL)
+ {
+ /*
+ Aggregate STATUS_BY_ACCOUNT to:
+ - STATUS_BY_HOST
+ */
+ safe_host->m_status_stats.aggregate(& m_status_stats);
+ m_status_stats.reset();
+ return;
+ }
+
+ /*
+ Aggregate STATUS_BY_ACCOUNT to:
+ - GLOBAL_STATUS
+ */
+ //m_status_stats.aggregate_to(& global_status_var);
+ m_status_stats.reset();
+ return;
+}
+
void PFS_account::aggregate_stats(PFS_user *safe_user, PFS_host *safe_host)
{
if (likely(safe_user != NULL && safe_host != NULL))
@@ -514,19 +606,42 @@ void PFS_account::release()
dec_refcount();
}
-PFS_account *sanitize_account(PFS_account *unsafe)
+void PFS_account::carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index)
{
- if ((&account_array[0] <= unsafe) &&
- (unsafe < &account_array[account_max]))
- return unsafe;
- return NULL;
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ PFS_memory_stat_delta delta_buffer;
+ PFS_memory_stat_delta *remaining_delta;
+
+ event_name_array= write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ remaining_delta= stat->apply_delta(delta, &delta_buffer);
+
+ if (remaining_delta == NULL)
+ return;
+
+ if (m_user != NULL)
+ {
+ m_user->carry_memory_stat_delta(remaining_delta, index);
+ /* do not return, need to process m_host below */
+ }
+
+ if (m_host != NULL)
+ {
+ m_host->carry_memory_stat_delta(remaining_delta, index);
+ return;
+ }
+
+ carry_global_memory_stat_delta(remaining_delta, index);
}
-void purge_account(PFS_thread *thread, PFS_account *account,
- PFS_user *safe_user, PFS_host *safe_host)
+PFS_account *sanitize_account(PFS_account *unsafe)
{
- account->aggregate(safe_user, safe_host);
+ return global_account_container.sanitize(unsafe);
+}
+void purge_account(PFS_thread *thread, PFS_account *account)
+{
LF_PINS *pins= get_account_hash_pins(thread);
if (unlikely(pins == NULL))
return;
@@ -544,6 +659,7 @@ void purge_account(PFS_thread *thread, PFS_account *account,
lf_hash_delete(&account_hash, pins,
account->m_key.m_hash_key,
account->m_key.m_key_length);
+ account->aggregate(false, account->m_user, account->m_host);
if (account->m_user != NULL)
{
account->m_user->release();
@@ -554,37 +670,78 @@ void purge_account(PFS_thread *thread, PFS_account *account,
account->m_host->release();
account->m_host= NULL;
}
- account->m_lock.allocated_to_free();
+ global_account_container.deallocate(account);
}
}
lf_hash_search_unpin(pins);
}
-/** Purge non connected user@host, reset stats of connected user@host. */
+class Proc_purge_account
+ : public PFS_buffer_processor<PFS_account>
+{
+public:
+ Proc_purge_account(PFS_thread *thread)
+ : m_thread(thread)
+ {}
+
+ virtual void operator()(PFS_account *pfs)
+ {
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ pfs->aggregate(true, user, host);
+
+ if (pfs->get_refcount() == 0)
+ purge_account(m_thread, pfs);
+ }
+
+private:
+ PFS_thread *m_thread;
+};
+
+/** Purge non connected accounts, reset stats of connected account. */
void purge_all_account(void)
{
PFS_thread *thread= PFS_thread::get_current_thread();
if (unlikely(thread == NULL))
return;
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= account_array + account_max;
- PFS_user *user;
- PFS_host *host;
+ Proc_purge_account proc(thread);
+ global_account_container.apply(proc);
+}
- for ( ; pfs < pfs_last; pfs++)
+class Proc_update_accounts_derived_flags
+ : public PFS_buffer_processor<PFS_account>
+{
+public:
+ Proc_update_accounts_derived_flags(PFS_thread *thread)
+ : m_thread(thread)
+ {}
+
+ virtual void operator()(PFS_account *pfs)
{
- if (pfs->m_lock.is_populated())
+ if (pfs->m_username_length > 0 && pfs->m_hostname_length > 0)
{
- user= sanitize_user(pfs->m_user);
- host= sanitize_host(pfs->m_host);
- pfs->aggregate_stats(user, host);
-
- if (pfs->get_refcount() == 0)
- purge_account(thread, pfs, user, host);
+ lookup_setup_actor(m_thread,
+ pfs->m_username, pfs->m_username_length,
+ pfs->m_hostname, pfs->m_hostname_length,
+ & pfs->m_enabled, & pfs->m_history);
+ }
+ else
+ {
+ pfs->m_enabled= true;
+ pfs->m_history= true;
}
}
+
+private:
+ PFS_thread *m_thread;
+};
+
+void update_accounts_derived_flags(PFS_thread *thread)
+{
+ Proc_update_accounts_derived_flags proc(thread);
+ global_account_container.apply(proc);
}
/** @} */
diff --git a/storage/perfschema/pfs_account.h b/storage/perfschema/pfs_account.h
index cd7b1520df5..8a966f4c4a9 100644
--- a/storage/perfschema/pfs_account.h
+++ b/storage/perfschema/pfs_account.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -25,23 +25,26 @@
/**
@file storage/perfschema/pfs_account.h
- Performance schema user@host (declarations).
+ Performance schema account (declarations).
*/
#include "pfs_lock.h"
#include "lf.h"
#include "pfs_con_slice.h"
+#include "mysql_com.h" /* USERNAME_LENGTH */
struct PFS_global_param;
struct PFS_user;
struct PFS_host;
struct PFS_thread;
+struct PFS_memory_stat_delta;
/**
@addtogroup Performance_schema_buffers
@{
*/
+/** Hash key for an account. */
struct PFS_account_key
{
/**
@@ -53,6 +56,7 @@ struct PFS_account_key
uint m_key_length;
};
+/** Per account statistics. */
struct PFS_ALIGNED PFS_account : PFS_connection_slice
{
public:
@@ -76,16 +80,25 @@ public:
PFS_atomic::add_32(& m_refcount, -1);
}
- void aggregate(PFS_user *safe_user, PFS_host *safe_host);
+ void aggregate(bool alive, PFS_user *safe_user, PFS_host *safe_host);
void aggregate_waits(PFS_user *safe_user, PFS_host *safe_host);
void aggregate_stages(PFS_user *safe_user, PFS_host *safe_host);
void aggregate_statements(PFS_user *safe_user, PFS_host *safe_host);
+ void aggregate_transactions(PFS_user *safe_user, PFS_host *safe_host);
+ void aggregate_memory(bool alive, PFS_user *safe_user, PFS_host *safe_host);
+ void aggregate_status(PFS_user *safe_user, PFS_host *safe_host);
void aggregate_stats(PFS_user *safe_user, PFS_host *safe_host);
void release(void);
+ void carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index);
+
/** Internal lock. */
pfs_lock m_lock;
PFS_account_key m_key;
+ /** True if this account is enabled, per rules in table SETUP_ACTORS. */
+ bool m_enabled;
+ /** True if this account has history enabled, per rules in table SETUP_ACTORS. */
+ bool m_history;
const char *m_username;
uint m_username_length;
const char *m_hostname;
@@ -101,7 +114,7 @@ private:
int init_account(const PFS_global_param *param);
void cleanup_account(void);
-int init_account_hash(void);
+int init_account_hash(const PFS_global_param *param);
void cleanup_account_hash(void);
PFS_account *
@@ -112,15 +125,9 @@ find_or_create_account(PFS_thread *thread,
PFS_account *sanitize_account(PFS_account *unsafe);
void purge_all_account(void);
+void update_accounts_derived_flags(PFS_thread *thread);
-/* For iterators and show status. */
-
-extern ulong account_max;
-extern ulong account_lost;
-
-/* Exposing the data directly, for iterators. */
-
-extern PFS_account *account_array;
+/* For show status. */
extern LF_HASH account_hash;
diff --git a/storage/perfschema/pfs_atomic.h b/storage/perfschema/pfs_atomic.h
index 00d1197970b..959b66dccb2 100644
--- a/storage/perfschema/pfs_atomic.h
+++ b/storage/perfschema/pfs_atomic.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2009, 2013, 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, version 2.0,
@@ -35,101 +35,101 @@ class PFS_atomic
{
public:
/** Atomic load. */
- static inline int32 load_32(volatile int32 *ptr)
+ static inline int32 load_32(int32 *ptr)
{
return my_atomic_load32(ptr);
}
/** Atomic load. */
- static inline int64 load_64(volatile int64 *ptr)
+ static inline int64 load_64(int64 *ptr)
{
return my_atomic_load64(ptr);
}
/** Atomic load. */
- static inline uint32 load_u32(volatile uint32 *ptr)
+ static inline uint32 load_u32(uint32 *ptr)
{
return (uint32) my_atomic_load32((int32*) ptr);
}
/** Atomic load. */
- static inline uint64 load_u64(volatile uint64 *ptr)
+ static inline uint64 load_u64(uint64 *ptr)
{
return (uint64) my_atomic_load64((int64*) ptr);
}
/** Atomic store. */
- static inline void store_32(volatile int32 *ptr, int32 value)
+ static inline void store_32(int32 *ptr, int32 value)
{
my_atomic_store32(ptr, value);
}
/** Atomic store. */
- static inline void store_64(volatile int64 *ptr, int64 value)
+ static inline void store_64(int64 *ptr, int64 value)
{
my_atomic_store64(ptr, value);
}
/** Atomic store. */
- static inline void store_u32(volatile uint32 *ptr, uint32 value)
+ static inline void store_u32(uint32 *ptr, uint32 value)
{
my_atomic_store32((int32*) ptr, (int32) value);
}
/** Atomic store. */
- static inline void store_u64(volatile uint64 *ptr, uint64 value)
+ static inline void store_u64(uint64 *ptr, uint64 value)
{
my_atomic_store64((int64*) ptr, (int64) value);
}
/** Atomic add. */
- static inline int32 add_32(volatile int32 *ptr, int32 value)
+ static inline int32 add_32(int32 *ptr, int32 value)
{
return my_atomic_add32(ptr, value);
}
/** Atomic add. */
- static inline int64 add_64(volatile int64 *ptr, int64 value)
+ static inline int64 add_64(int64 *ptr, int64 value)
{
return my_atomic_add64(ptr, value);
}
/** Atomic add. */
- static inline uint32 add_u32(volatile uint32 *ptr, uint32 value)
+ static inline uint32 add_u32(uint32 *ptr, uint32 value)
{
return (uint32) my_atomic_add32((int32*) ptr, (int32) value);
}
/** Atomic add. */
- static inline uint64 add_u64(volatile uint64 *ptr, uint64 value)
+ static inline uint64 add_u64(uint64 *ptr, uint64 value)
{
return (uint64) my_atomic_add64((int64*) ptr, (int64) value);
}
/** Atomic compare and swap. */
- static inline bool cas_32(volatile int32 *ptr, int32 *old_value,
+ static inline bool cas_32(int32 *ptr, int32 *old_value,
int32 new_value)
{
return my_atomic_cas32(ptr, old_value, new_value);
}
/** Atomic compare and swap. */
- static inline bool cas_64(volatile int64 *ptr, int64 *old_value,
+ static inline bool cas_64(int64 *ptr, int64 *old_value,
int64 new_value)
{
return my_atomic_cas64(ptr, old_value, new_value);
}
/** Atomic compare and swap. */
- static inline bool cas_u32(volatile uint32 *ptr, uint32 *old_value,
+ static inline bool cas_u32(uint32 *ptr, uint32 *old_value,
uint32 new_value)
{
return my_atomic_cas32((int32*) ptr, (int32*) old_value,
- (uint32) new_value);
+ (uint32) new_value);
}
/** Atomic compare and swap. */
- static inline bool cas_u64(volatile uint64 *ptr, uint64 *old_value,
+ static inline bool cas_u64(uint64 *ptr, uint64 *old_value,
uint64 new_value)
{
return my_atomic_cas64((int64*) ptr, (int64*) old_value,
diff --git a/storage/perfschema/pfs_autosize.cc b/storage/perfschema/pfs_autosize.cc
index e15a85fe2d6..024f5519c0e 100644
--- a/storage/perfschema/pfs_autosize.cc
+++ b/storage/perfschema/pfs_autosize.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2012, 2015, 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, version 2.0,
@@ -30,47 +30,17 @@
#include "pfs_server.h"
#include "set_var.h"
+#include "my_thread.h" /* For pthread_t */
+/* Make sure HAVE_PSI_XXX_INTERFACE flags are set */
+#include "mysql/psi/psi.h"
+
#include <algorithm>
using std::min;
using std::max;
-static const ulong fixed_mutex_instances= 500;
-static const ulong fixed_rwlock_instances= 200;
-static const ulong fixed_cond_instances= 50;
-static const ulong fixed_file_instances= 200;
-static const ulong fixed_socket_instances= 10;
-static const ulong fixed_thread_instances= 50;
-
-static const ulong mutex_per_connection= 3;
-static const ulong rwlock_per_connection= 1;
-static const ulong cond_per_connection= 2;
-static const ulong file_per_connection= 0;
-static const ulong socket_per_connection= 1;
-static const ulong thread_per_connection= 1;
-
-static const ulong mutex_per_handle= 0;
-static const ulong rwlock_per_handle= 0;
-static const ulong cond_per_handle= 0;
-static const ulong file_per_handle= 0;
-static const ulong socket_per_handle= 0;
-static const ulong thread_per_handle= 0;
-
-static const ulong mutex_per_share= 5;
-static const ulong rwlock_per_share= 3;
-static const ulong cond_per_share= 1;
-static const ulong file_per_share= 3;
-static const ulong socket_per_share= 0;
-static const ulong thread_per_share= 0;
-
+/** Performance schema sizing heuristics. */
struct PFS_sizing_data
{
- /** Default value for @c PFS_param.m_account_sizing. */
- ulong m_account_sizing;
- /** Default value for @c PFS_param.m_user_sizing. */
- ulong m_user_sizing;
- /** Default value for @c PFS_param.m_host_sizing. */
- ulong m_host_sizing;
-
/** Default value for @c PFS_param.m_events_waits_history_sizing. */
ulong m_events_waits_history_sizing;
/** Default value for @c PFS_param.m_events_waits_history_long_sizing. */
@@ -83,103 +53,46 @@ struct PFS_sizing_data
ulong m_events_statements_history_sizing;
/** Default value for @c PFS_param.m_events_statements_history_long_sizing. */
ulong m_events_statements_history_long_sizing;
+ /** Default value for @c PFS_param.m_events_transactions_history_sizing. */
+ ulong m_events_transactions_history_sizing;
+ /** Default value for @c PFS_param.m_events_transactions_history_long_sizing. */
+ ulong m_events_transactions_history_long_sizing;
/** Default value for @c PFS_param.m_digest_sizing. */
ulong m_digest_sizing;
/** Default value for @c PFS_param.m_session_connect_attrs_sizing. */
ulong m_session_connect_attrs_sizing;
-
- /**
- Minimum number of tables to keep statistics for.
- On small deployments, all the tables can fit into the table definition cache,
- and this value can be 0.
- On big deployments, the table definition cache is only a subset of all the tables
- in the database, which are accounted for here.
- */
- ulong m_min_number_of_tables;
-
- /**
- Load factor for 'volatile' objects (mutexes, table handles, ...).
- Instrumented objects that:
- - use little memory
- - are created/destroyed very frequently
- should be stored in a low density (mostly empty) memory buffer,
- to optimize for speed.
- */
- float m_load_factor_volatile;
- /**
- Load factor for 'normal' objects (files).
- Instrumented objects that:
- - use a medium amount of memory
- - are created/destroyed
- should be stored in a medium density memory buffer,
- as a trade off between space and speed.
- */
- float m_load_factor_normal;
- /**
- Load factor for 'static' objects (table shares).
- Instrumented objects that:
- - use a lot of memory
- - are created/destroyed very rarely
- can be stored in a high density (mostly packed) memory buffer,
- to optimize for space.
- */
- float m_load_factor_static;
};
PFS_sizing_data small_data=
{
- /* Account / user / host */
- 10, 5, 20,
/* History sizes */
- 10, 100, 10, 100, 10, 100,
+ 5, 100, 5, 100, 5, 100, 5, 100,
/* Digests */
1000,
/* Session connect attrs. */
- 512,
- /* Min tables */
- 200,
- /* Load factors */
- 0.90f, 0.90f, 0.90f
+ 512
};
PFS_sizing_data medium_data=
{
- /* Account / user / host */
- 100, 100, 100,
/* History sizes */
- 20, 1000, 20, 1000, 20, 1000,
+ 10, 1000, 10, 1000, 10, 1000, 10, 1000,
/* Digests */
5000,
/* Session connect attrs. */
- 512,
- /* Min tables */
- 500,
- /* Load factors */
- 0.70f, 0.80f, 0.90f
+ 512
};
PFS_sizing_data large_data=
{
- /* Account / user / host */
- 100, 100, 100,
/* History sizes */
- 20, 10000, 20, 10000, 20, 10000,
+ 10, 10000, 10, 10000, 10, 10000, 10, 10000,
/* Digests */
10000,
/* Session connect attrs. */
- 512,
- /* Min tables */
- 10000,
- /* Load factors */
- 0.50f, 0.65f, 0.80f
+ 512
};
-static inline ulong apply_load_factor(ulong raw_value, float factor)
-{
- float value = ((float) raw_value) / factor;
- return (ulong) ceil(value);
-}
-
PFS_sizing_data *estimate_hints(PFS_global_param *param)
{
if ((param->m_hints.m_max_connections <= MAX_CONNECTIONS_DEFAULT) &&
@@ -204,47 +117,6 @@ PFS_sizing_data *estimate_hints(PFS_global_param *param)
static void apply_heuristic(PFS_global_param *p, PFS_sizing_data *h)
{
- ulong count;
- ulong con = p->m_hints.m_max_connections;
- ulong handle = p->m_hints.m_table_open_cache;
- ulong share = p->m_hints.m_table_definition_cache;
- ulong file = p->m_hints.m_open_files_limit;
-
- if (p->m_table_sizing < 0)
- {
- count= handle;
-
- SYSVAR_AUTOSIZE(p->m_table_sizing,
- apply_load_factor(count, h->m_load_factor_volatile));
- }
-
- if (p->m_table_share_sizing < 0)
- {
- count= share;
-
- count= max<ulong>(count, h->m_min_number_of_tables);
- SYSVAR_AUTOSIZE(p->m_table_share_sizing,
- apply_load_factor(count, h->m_load_factor_static));
- }
-
- if (p->m_account_sizing < 0)
- {
- SYSVAR_AUTOSIZE(p->m_account_sizing,
- h->m_account_sizing);
- }
-
- if (p->m_user_sizing < 0)
- {
- SYSVAR_AUTOSIZE(p->m_user_sizing,
- h->m_user_sizing);
- }
-
- if (p->m_host_sizing < 0)
- {
- SYSVAR_AUTOSIZE(p->m_host_sizing,
- h->m_host_sizing);
- }
-
if (p->m_events_waits_history_sizing < 0)
{
SYSVAR_AUTOSIZE(p->m_events_waits_history_sizing,
@@ -287,107 +159,157 @@ static void apply_heuristic(PFS_global_param *p, PFS_sizing_data *h)
h->m_digest_sizing);
}
- if (p->m_session_connect_attrs_sizing < 0)
+ if (p->m_events_transactions_history_sizing < 0)
{
- SYSVAR_AUTOSIZE(p->m_session_connect_attrs_sizing,
- h->m_session_connect_attrs_sizing);
+ SYSVAR_AUTOSIZE(p->m_events_transactions_history_sizing,
+ h->m_events_transactions_history_sizing);
}
- if (p->m_mutex_sizing < 0)
+ if (p->m_events_transactions_history_long_sizing < 0)
{
- count= fixed_mutex_instances
- + con * mutex_per_connection
- + handle * mutex_per_handle
- + share * mutex_per_share;
-
- SYSVAR_AUTOSIZE(p->m_mutex_sizing,
- apply_load_factor(count, h->m_load_factor_volatile));
+ SYSVAR_AUTOSIZE(p->m_events_transactions_history_long_sizing,
+ h->m_events_transactions_history_long_sizing);
}
- if (p->m_rwlock_sizing < 0)
- {
- count= fixed_rwlock_instances
- + con * rwlock_per_connection
- + handle * rwlock_per_handle
- + share * rwlock_per_share;
-
- SYSVAR_AUTOSIZE(p->m_rwlock_sizing,
- apply_load_factor(count, h->m_load_factor_volatile));
- }
-
- if (p->m_cond_sizing < 0)
- {
- ulong count;
- count= fixed_cond_instances
- + con * cond_per_connection
- + handle * cond_per_handle
- + share * cond_per_share;
-
- SYSVAR_AUTOSIZE(p->m_cond_sizing,
- apply_load_factor(count, h->m_load_factor_volatile));
- }
-
- if (p->m_file_sizing < 0)
+ if (p->m_session_connect_attrs_sizing < 0)
{
- count= fixed_file_instances
- + con * file_per_connection
- + handle * file_per_handle
- + share * file_per_share;
-
- count= max<ulong>(count, file);
- SYSVAR_AUTOSIZE(p->m_file_sizing,
- apply_load_factor(count, h->m_load_factor_normal));
+ SYSVAR_AUTOSIZE(p->m_session_connect_attrs_sizing,
+ h->m_session_connect_attrs_sizing);
}
+}
- if (p->m_socket_sizing < 0)
+void pfs_automated_sizing(PFS_global_param *param)
+{
+ if (param->m_enabled)
{
- count= fixed_socket_instances
- + con * socket_per_connection
- + handle * socket_per_handle
- + share * socket_per_share;
-
- SYSVAR_AUTOSIZE(p->m_socket_sizing,
- apply_load_factor(count, h->m_load_factor_volatile));
+#ifndef HAVE_PSI_MUTEX_INTERFACE
+ param->m_mutex_class_sizing= 0;
+ param->m_mutex_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_RWLOCK_INTERFACE
+ param->m_rwlock_class_sizing= 0;
+ param->m_rwlock_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_COND_INTERFACE
+ param->m_cond_class_sizing= 0;
+ param->m_cond_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_FILE_INTERFACE
+ param->m_file_class_sizing= 0;
+ param->m_file_sizing= 0;
+ param->m_file_handle_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_TABLE_INTERFACE
+ param->m_table_share_sizing= 0;
+ param->m_table_sizing= 0;
+ param->m_table_lock_stat_sizing= 0;
+ param->m_index_stat_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_SOCKET_INTERFACE
+ param->m_socket_class_sizing= 0;
+ param->m_socket_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_STAGE_INTERFACE
+ param->m_stage_class_sizing= 0;
+ param->m_events_stages_history_sizing= 0;
+ param->m_events_stages_history_long_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_STATEMENT_INTERFACE
+ param->m_statement_class_sizing= 0;
+ param->m_events_statements_history_sizing= 0;
+ param->m_events_statements_history_long_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_SP_INTERFACE
+ param->m_program_sizing= 0;
+ if (param->m_statement_stack_sizing > 1)
+ param->m_statement_stack_sizing= 1;
+#endif
+
+#ifndef HAVE_PSI_PS_INTERFACE
+ param->m_prepared_stmt_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_STATEMENT_DIGEST_INTERFACE
+ param->m_digest_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_METADATA_INTERFACE
+ param->m_metadata_lock_sizing= 0;
+#endif
+
+#ifndef HAVE_PSI_MEMORY_INTERFACE
+ param->m_memory_class_sizing= 0;
+#endif
+
+ PFS_sizing_data *heuristic;
+ heuristic= estimate_hints(param);
+ apply_heuristic(param, heuristic);
+
+ DBUG_ASSERT(param->m_events_waits_history_sizing >= 0);
+ DBUG_ASSERT(param->m_events_waits_history_long_sizing >= 0);
+ DBUG_ASSERT(param->m_events_stages_history_sizing >= 0);
+ DBUG_ASSERT(param->m_events_stages_history_long_sizing >= 0);
+ DBUG_ASSERT(param->m_events_statements_history_sizing >= 0);
+ DBUG_ASSERT(param->m_events_statements_history_long_sizing >= 0);
+ DBUG_ASSERT(param->m_events_transactions_history_sizing >= 0);
+ DBUG_ASSERT(param->m_events_transactions_history_long_sizing >= 0);
+ DBUG_ASSERT(param->m_session_connect_attrs_sizing >= 0);
}
-
- if (p->m_thread_sizing < 0)
+ else
{
- count= fixed_thread_instances
- + con * thread_per_connection
- + handle * thread_per_handle
- + share * thread_per_share;
-
- SYSVAR_AUTOSIZE(p->m_thread_sizing,
- apply_load_factor(count, h->m_load_factor_volatile));
+ /*
+ The Performance Schema is disabled. Set the instrument sizings to zero to
+ disable all instrumentation while retaining support for the status and
+ system variable tables, the host cache table and the replication tables.
+ */
+ SYSVAR_AUTOSIZE(param->m_mutex_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_rwlock_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_cond_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_thread_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_table_share_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_table_lock_stat_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_index_stat_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_file_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_mutex_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_rwlock_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_cond_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_thread_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_table_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_file_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_file_handle_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_socket_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_socket_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_waits_history_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_waits_history_long_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_setup_actor_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_setup_object_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_host_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_user_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_account_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_stage_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_stages_history_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_stages_history_long_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_statement_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_statements_history_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_statements_history_long_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_digest_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_program_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_prepared_stmt_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_transactions_history_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_events_transactions_history_long_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_session_connect_attrs_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_statement_stack_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_memory_class_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_metadata_lock_sizing, 0);
+ SYSVAR_AUTOSIZE(param->m_max_digest_length, 0);
+ SYSVAR_AUTOSIZE(param->m_max_sql_text_length, 0);
}
}
-
-void pfs_automated_sizing(PFS_global_param *param)
-{
- PFS_sizing_data *heuristic;
- heuristic= estimate_hints(param);
- apply_heuristic(param, heuristic);
-
- DBUG_ASSERT(param->m_account_sizing >= 0);
- DBUG_ASSERT(param->m_digest_sizing >= 0);
- DBUG_ASSERT(param->m_host_sizing >= 0);
- DBUG_ASSERT(param->m_user_sizing >= 0);
-
- DBUG_ASSERT(param->m_events_waits_history_sizing >= 0);
- DBUG_ASSERT(param->m_events_waits_history_long_sizing >= 0);
- DBUG_ASSERT(param->m_events_stages_history_sizing >= 0);
- DBUG_ASSERT(param->m_events_stages_history_long_sizing >= 0);
- DBUG_ASSERT(param->m_events_statements_history_sizing >= 0);
- DBUG_ASSERT(param->m_events_statements_history_long_sizing >= 0);
- DBUG_ASSERT(param->m_session_connect_attrs_sizing >= 0);
-
- DBUG_ASSERT(param->m_mutex_sizing >= 0);
- DBUG_ASSERT(param->m_rwlock_sizing >= 0);
- DBUG_ASSERT(param->m_cond_sizing >= 0);
- DBUG_ASSERT(param->m_file_sizing >= 0);
- DBUG_ASSERT(param->m_socket_sizing >= 0);
- DBUG_ASSERT(param->m_thread_sizing >= 0);
- DBUG_ASSERT(param->m_table_sizing >= 0);
- DBUG_ASSERT(param->m_table_share_sizing >= 0);
-}
-
diff --git a/storage/perfschema/pfs_buffer_container.cc b/storage/perfschema/pfs_buffer_container.cc
new file mode 100644
index 00000000000..cd87cb247e2
--- /dev/null
+++ b/storage/perfschema/pfs_buffer_container.cc
@@ -0,0 +1,883 @@
+/* Copyright (c) 2014, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include "my_global.h"
+#include "pfs_global.h"
+#include "pfs_lock.h"
+#include "pfs_account.h"
+#include "pfs_user.h"
+#include "pfs_host.h"
+#include "pfs_buffer_container.h"
+#include "pfs_builtin_memory.h"
+
+PFS_buffer_default_allocator<PFS_mutex> default_mutex_allocator(& builtin_memory_mutex);
+PFS_mutex_container global_mutex_container(& default_mutex_allocator);
+
+PFS_buffer_default_allocator<PFS_rwlock> default_rwlock_allocator(& builtin_memory_rwlock);
+PFS_rwlock_container global_rwlock_container(& default_rwlock_allocator);
+
+PFS_buffer_default_allocator<PFS_cond> default_cond_allocator(& builtin_memory_cond);
+PFS_cond_container global_cond_container(& default_cond_allocator);
+
+PFS_buffer_default_allocator<PFS_file> default_file_allocator(& builtin_memory_file);
+PFS_file_container global_file_container(& default_file_allocator);
+
+PFS_buffer_default_allocator<PFS_socket> default_socket_allocator(& builtin_memory_socket);
+PFS_socket_container global_socket_container(& default_socket_allocator);
+
+PFS_buffer_default_allocator<PFS_metadata_lock> default_mdl_allocator(& builtin_memory_mdl);
+PFS_mdl_container global_mdl_container(& default_mdl_allocator);
+
+PFS_buffer_default_allocator<PFS_setup_actor> default_setup_actor_allocator(& builtin_memory_setup_actor);
+PFS_setup_actor_container global_setup_actor_container(& default_setup_actor_allocator);
+
+PFS_buffer_default_allocator<PFS_setup_object> default_setup_object_allocator(& builtin_memory_setup_object);
+PFS_setup_object_container global_setup_object_container(& default_setup_object_allocator);
+
+PFS_buffer_default_allocator<PFS_table> default_table_allocator(& builtin_memory_table);
+PFS_table_container global_table_container(& default_table_allocator);
+
+PFS_buffer_default_allocator<PFS_table_share> default_table_share_allocator(& builtin_memory_table_share);
+PFS_table_share_container global_table_share_container(& default_table_share_allocator);
+
+PFS_buffer_default_allocator<PFS_table_share_index> default_table_share_index_allocator(& builtin_memory_table_share_index);
+PFS_table_share_index_container global_table_share_index_container(& default_table_share_index_allocator);
+
+PFS_buffer_default_allocator<PFS_table_share_lock> default_table_share_lock_allocator(& builtin_memory_table_share_lock);
+PFS_table_share_lock_container global_table_share_lock_container(& default_table_share_lock_allocator);
+
+PFS_buffer_default_allocator<PFS_program> default_program_allocator(& builtin_memory_program);
+PFS_program_container global_program_container(& default_program_allocator);
+
+PFS_buffer_default_allocator<PFS_prepared_stmt> default_prepared_stmt_allocator(& builtin_memory_prepared_stmt);
+PFS_prepared_stmt_container global_prepared_stmt_container(& default_prepared_stmt_allocator);
+
+int PFS_account_allocator::alloc_array(PFS_account_array *array)
+{
+ size_t size= array->m_max;
+ size_t index;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ array->m_ptr= NULL;
+ array->m_full= true;
+ array->m_instr_class_waits_array= NULL;
+ array->m_instr_class_stages_array= NULL;
+ array->m_instr_class_statements_array= NULL;
+ array->m_instr_class_transactions_array= NULL;
+ array->m_instr_class_memory_array= NULL;
+
+ if (size > 0)
+ {
+ array->m_ptr=
+ PFS_MALLOC_ARRAY(& builtin_memory_account,
+ size, sizeof(PFS_account), PFS_account, MYF(MY_ZEROFILL));
+ if (array->m_ptr == NULL)
+ return 1;
+ }
+
+ if (waits_sizing > 0)
+ {
+ array->m_instr_class_waits_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_account_waits,
+ waits_sizing, sizeof(PFS_single_stat), PFS_single_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_waits_array == NULL)
+ return 1;
+
+ for (index=0; index < waits_sizing; index++)
+ array->m_instr_class_waits_array[index].reset();
+ }
+
+ if (stages_sizing > 0)
+ {
+ array->m_instr_class_stages_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_account_stages,
+ stages_sizing, sizeof(PFS_stage_stat), PFS_stage_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_stages_array == NULL)
+ return 1;
+
+ for (index=0; index < stages_sizing; index++)
+ array->m_instr_class_stages_array[index].reset();
+ }
+
+ if (statements_sizing > 0)
+ {
+ array->m_instr_class_statements_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_account_statements,
+ statements_sizing, sizeof(PFS_statement_stat), PFS_statement_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_statements_array == NULL)
+ return 1;
+
+ for (index=0; index < statements_sizing; index++)
+ array->m_instr_class_statements_array[index].reset();
+ }
+
+ if (transactions_sizing > 0)
+ {
+ array->m_instr_class_transactions_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_account_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat), PFS_transaction_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_transactions_array == NULL)
+ return 1;
+
+ for (index=0; index < transactions_sizing; index++)
+ array->m_instr_class_transactions_array[index].reset();
+ }
+
+ if (memory_sizing > 0)
+ {
+ array->m_instr_class_memory_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_account_memory,
+ memory_sizing, sizeof(PFS_memory_stat), PFS_memory_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_memory_array == NULL)
+ return 1;
+
+ for (index=0; index < memory_sizing; index++)
+ array->m_instr_class_memory_array[index].reset();
+ }
+
+ for (index= 0; index < size; index++)
+ {
+ array->m_ptr[index].set_instr_class_waits_stats(
+ & array->m_instr_class_waits_array[index * wait_class_max]);
+ array->m_ptr[index].set_instr_class_stages_stats(
+ & array->m_instr_class_stages_array[index * stage_class_max]);
+ array->m_ptr[index].set_instr_class_statements_stats(
+ & array->m_instr_class_statements_array[index * statement_class_max]);
+ array->m_ptr[index].set_instr_class_transactions_stats(
+ & array->m_instr_class_transactions_array[index * transaction_class_max]);
+ array->m_ptr[index].set_instr_class_memory_stats(
+ & array->m_instr_class_memory_array[index * memory_class_max]);
+ }
+
+ array->m_full= false;
+ return 0;
+}
+
+void PFS_account_allocator::free_array(PFS_account_array *array)
+{
+ size_t size= array->m_max;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ PFS_FREE_ARRAY(& builtin_memory_account,
+ size, sizeof(PFS_account), array->m_ptr);
+ array->m_ptr= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_account_waits,
+ waits_sizing, sizeof(PFS_single_stat),
+ array->m_instr_class_waits_array);
+ array->m_instr_class_waits_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_account_stages,
+ stages_sizing, sizeof(PFS_stage_stat),
+ array->m_instr_class_stages_array);
+ array->m_instr_class_stages_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_account_statements,
+ statements_sizing, sizeof(PFS_statement_stat),
+ array->m_instr_class_statements_array);
+ array->m_instr_class_statements_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_account_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat),
+ array->m_instr_class_transactions_array);
+ array->m_instr_class_transactions_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_account_memory,
+ memory_sizing, sizeof(PFS_memory_stat),
+ array->m_instr_class_memory_array);
+ array->m_instr_class_memory_array= NULL;
+}
+
+PFS_account_allocator account_allocator;
+PFS_account_container global_account_container(& account_allocator);
+
+int PFS_host_allocator::alloc_array(PFS_host_array *array)
+{
+ size_t size= array->m_max;
+ PFS_host *pfs;
+ size_t index;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ array->m_ptr= NULL;
+ array->m_full= true;
+ array->m_instr_class_waits_array= NULL;
+ array->m_instr_class_stages_array= NULL;
+ array->m_instr_class_statements_array= NULL;
+ array->m_instr_class_transactions_array= NULL;
+ array->m_instr_class_memory_array= NULL;
+
+ if (size > 0)
+ {
+ array->m_ptr=
+ PFS_MALLOC_ARRAY(& builtin_memory_host,
+ size, sizeof(PFS_host), PFS_host, MYF(MY_ZEROFILL));
+ if (array->m_ptr == NULL)
+ return 1;
+ }
+
+ if (waits_sizing > 0)
+ {
+ array->m_instr_class_waits_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_host_waits,
+ waits_sizing, sizeof(PFS_single_stat), PFS_single_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_waits_array == NULL)
+ return 1;
+
+ for (index=0; index < waits_sizing; index++)
+ array->m_instr_class_waits_array[index].reset();
+ }
+
+ if (stages_sizing > 0)
+ {
+ array->m_instr_class_stages_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_host_stages,
+ stages_sizing, sizeof(PFS_stage_stat), PFS_stage_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_stages_array == NULL)
+ return 1;
+
+ for (index=0; index < stages_sizing; index++)
+ array->m_instr_class_stages_array[index].reset();
+ }
+
+ if (statements_sizing > 0)
+ {
+ array->m_instr_class_statements_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_host_statements,
+ statements_sizing, sizeof(PFS_statement_stat), PFS_statement_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_statements_array == NULL)
+ return 1;
+
+ for (index=0; index < statements_sizing; index++)
+ array->m_instr_class_statements_array[index].reset();
+ }
+
+ if (transactions_sizing > 0)
+ {
+ array->m_instr_class_transactions_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_host_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat), PFS_transaction_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_transactions_array == NULL)
+ return 1;
+
+ for (index=0; index < transactions_sizing; index++)
+ array->m_instr_class_transactions_array[index].reset();
+ }
+
+ if (memory_sizing > 0)
+ {
+ array->m_instr_class_memory_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_host_memory,
+ memory_sizing, sizeof(PFS_memory_stat), PFS_memory_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_memory_array == NULL)
+ return 1;
+
+ for (index=0; index < memory_sizing; index++)
+ array->m_instr_class_memory_array[index].reset();
+ }
+
+ for (index= 0; index < size; index++)
+ {
+ pfs= & array->m_ptr[index];
+
+ pfs->set_instr_class_waits_stats(
+ & array->m_instr_class_waits_array[index * wait_class_max]);
+ pfs->set_instr_class_stages_stats(
+ & array->m_instr_class_stages_array[index * stage_class_max]);
+ pfs->set_instr_class_statements_stats(
+ & array->m_instr_class_statements_array[index * statement_class_max]);
+ pfs->set_instr_class_transactions_stats(
+ & array->m_instr_class_transactions_array[index * transaction_class_max]);
+ pfs->set_instr_class_memory_stats(
+ & array->m_instr_class_memory_array[index * memory_class_max]);
+ }
+
+ array->m_full= false;
+ return 0;
+}
+
+void PFS_host_allocator::free_array(PFS_host_array *array)
+{
+ size_t size= array->m_max;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ PFS_FREE_ARRAY(& builtin_memory_host,
+ size, sizeof(PFS_host), array->m_ptr);
+ array->m_ptr= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_host_waits,
+ waits_sizing, sizeof(PFS_single_stat),
+ array->m_instr_class_waits_array);
+ array->m_instr_class_waits_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_host_stages,
+ stages_sizing, sizeof(PFS_stage_stat),
+ array->m_instr_class_stages_array);
+ array->m_instr_class_stages_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_host_statements,
+ statements_sizing, sizeof(PFS_statement_stat),
+ array->m_instr_class_statements_array);
+ array->m_instr_class_statements_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_host_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat),
+ array->m_instr_class_transactions_array);
+ array->m_instr_class_transactions_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_host_memory,
+ memory_sizing, sizeof(PFS_memory_stat),
+ array->m_instr_class_memory_array);
+ array->m_instr_class_memory_array= NULL;
+}
+
+PFS_host_allocator host_allocator;
+PFS_host_container global_host_container(& host_allocator);
+
+int PFS_thread_allocator::alloc_array(PFS_thread_array *array)
+{
+ size_t size= array->m_max;
+ PFS_thread *pfs;
+ PFS_events_statements *pfs_stmt;
+ unsigned char *pfs_tokens;
+
+ size_t index;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ size_t waits_history_sizing= size * events_waits_history_per_thread;
+ size_t stages_history_sizing= size * events_stages_history_per_thread;
+ size_t statements_history_sizing= size * events_statements_history_per_thread;
+ size_t statements_stack_sizing= size * statement_stack_max;
+ size_t transactions_history_sizing= size * events_transactions_history_per_thread;
+ size_t session_connect_attrs_sizing= size * session_connect_attrs_size_per_thread;
+
+ size_t current_sqltext_sizing= size * pfs_max_sqltext * statement_stack_max;
+ size_t history_sqltext_sizing= size * pfs_max_sqltext * events_statements_history_per_thread;
+ size_t current_digest_tokens_sizing= size * pfs_max_digest_length * statement_stack_max;
+ size_t history_digest_tokens_sizing= size * pfs_max_digest_length * events_statements_history_per_thread;
+
+ array->m_ptr= NULL;
+ array->m_full= true;
+ array->m_instr_class_waits_array= NULL;
+ array->m_instr_class_stages_array= NULL;
+ array->m_instr_class_statements_array= NULL;
+ array->m_instr_class_transactions_array= NULL;
+ array->m_instr_class_memory_array= NULL;
+
+ array->m_waits_history_array= NULL;
+ array->m_stages_history_array= NULL;
+ array->m_statements_history_array= NULL;
+ array->m_statements_stack_array= NULL;
+ array->m_transactions_history_array= NULL;
+ array->m_session_connect_attrs_array= NULL;
+
+ array->m_current_stmts_text_array= NULL;
+ array->m_current_stmts_digest_token_array= NULL;
+ array->m_history_stmts_text_array= NULL;
+ array->m_history_stmts_digest_token_array= NULL;
+
+ if (size > 0)
+ {
+ array->m_ptr=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread,
+ size, sizeof(PFS_thread), PFS_thread, MYF(MY_ZEROFILL));
+ if (array->m_ptr == NULL)
+ return 1;
+ }
+
+ if (waits_sizing > 0)
+ {
+ array->m_instr_class_waits_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_waits,
+ waits_sizing, sizeof(PFS_single_stat), PFS_single_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_waits_array == NULL)
+ return 1;
+
+ for (index=0; index < waits_sizing; index++)
+ array->m_instr_class_waits_array[index].reset();
+ }
+
+ if (stages_sizing > 0)
+ {
+ array->m_instr_class_stages_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_stages,
+ stages_sizing, sizeof(PFS_stage_stat), PFS_stage_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_stages_array == NULL)
+ return 1;
+
+ for (index=0; index < stages_sizing; index++)
+ array->m_instr_class_stages_array[index].reset();
+ }
+
+ if (statements_sizing > 0)
+ {
+ array->m_instr_class_statements_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_statements,
+ statements_sizing, sizeof(PFS_statement_stat), PFS_statement_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_statements_array == NULL)
+ return 1;
+
+ for (index=0; index < statements_sizing; index++)
+ array->m_instr_class_statements_array[index].reset();
+ }
+
+ if (transactions_sizing > 0)
+ {
+ array->m_instr_class_transactions_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat), PFS_transaction_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_transactions_array == NULL)
+ return 1;
+
+ for (index=0; index < transactions_sizing; index++)
+ array->m_instr_class_transactions_array[index].reset();
+ }
+
+ if (memory_sizing > 0)
+ {
+ array->m_instr_class_memory_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_memory,
+ memory_sizing, sizeof(PFS_memory_stat), PFS_memory_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_memory_array == NULL)
+ return 1;
+
+ for (index=0; index < memory_sizing; index++)
+ array->m_instr_class_memory_array[index].reset();
+ }
+
+ if (waits_history_sizing > 0)
+ {
+ array->m_waits_history_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_waits_history,
+ waits_history_sizing, sizeof(PFS_events_waits), PFS_events_waits, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_waits_history_array == NULL))
+ return 1;
+ }
+
+ if (stages_history_sizing > 0)
+ {
+ array->m_stages_history_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_stages_history,
+ stages_history_sizing, sizeof(PFS_events_stages), PFS_events_stages, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_stages_history_array == NULL))
+ return 1;
+ }
+
+ if (statements_history_sizing > 0)
+ {
+ array->m_statements_history_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_statements_history,
+ statements_history_sizing, sizeof(PFS_events_statements), PFS_events_statements, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_statements_history_array == NULL))
+ return 1;
+ }
+
+ if (statements_stack_sizing > 0)
+ {
+ array->m_statements_stack_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_statements_stack,
+ statements_stack_sizing, sizeof(PFS_events_statements), PFS_events_statements, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_statements_stack_array == NULL))
+ return 1;
+ }
+
+ if (transactions_history_sizing > 0)
+ {
+ array->m_transactions_history_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_thread_transaction_history,
+ transactions_history_sizing, sizeof(PFS_events_transactions), PFS_events_transactions, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_transactions_history_array == NULL))
+ return 1;
+ }
+
+ if (session_connect_attrs_sizing > 0)
+ {
+ array->m_session_connect_attrs_array=
+ (char *)pfs_malloc(& builtin_memory_thread_session_connect_attrs,
+ session_connect_attrs_sizing, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_session_connect_attrs_array == NULL))
+ return 1;
+ }
+
+ if (current_sqltext_sizing > 0)
+ {
+ array->m_current_stmts_text_array=
+ (char *)pfs_malloc(& builtin_memory_thread_statements_stack_sqltext,
+ current_sqltext_sizing, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_current_stmts_text_array == NULL))
+ return 1;
+ }
+
+ if (history_sqltext_sizing > 0)
+ {
+ array->m_history_stmts_text_array=
+ (char *)pfs_malloc(& builtin_memory_thread_statements_history_sqltext,
+ history_sqltext_sizing, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_history_stmts_text_array == NULL))
+ return 1;
+ }
+
+ if (current_digest_tokens_sizing > 0)
+ {
+ array->m_current_stmts_digest_token_array=
+ (unsigned char *)pfs_malloc(& builtin_memory_thread_statements_stack_tokens,
+ current_digest_tokens_sizing, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_current_stmts_digest_token_array == NULL))
+ return 1;
+ }
+
+ if (history_digest_tokens_sizing > 0)
+ {
+ array->m_history_stmts_digest_token_array=
+ (unsigned char *)pfs_malloc(& builtin_memory_thread_statements_history_tokens,
+ history_digest_tokens_sizing, MYF(MY_ZEROFILL));
+ if (unlikely(array->m_history_stmts_digest_token_array == NULL))
+ return 1;
+ }
+
+ for (index= 0; index < size; index++)
+ {
+ pfs= & array->m_ptr[index];
+
+ pfs->set_instr_class_waits_stats(
+ & array->m_instr_class_waits_array[index * wait_class_max]);
+ pfs->set_instr_class_stages_stats(
+ & array->m_instr_class_stages_array[index * stage_class_max]);
+ pfs->set_instr_class_statements_stats(
+ & array->m_instr_class_statements_array[index * statement_class_max]);
+ pfs->set_instr_class_transactions_stats(
+ & array->m_instr_class_transactions_array[index * transaction_class_max]);
+ pfs->set_instr_class_memory_stats(
+ & array->m_instr_class_memory_array[index * memory_class_max]);
+
+ pfs->m_waits_history=
+ & array->m_waits_history_array[index * events_waits_history_per_thread];
+ pfs->m_stages_history=
+ & array->m_stages_history_array[index * events_stages_history_per_thread];
+ pfs->m_statements_history=
+ & array->m_statements_history_array[index * events_statements_history_per_thread];
+ pfs->m_statement_stack=
+ & array->m_statements_stack_array[index * statement_stack_max];
+ pfs->m_transactions_history=
+ & array->m_transactions_history_array[index * events_transactions_history_per_thread];
+ pfs->m_session_connect_attrs=
+ & array->m_session_connect_attrs_array[index * session_connect_attrs_size_per_thread];
+ }
+
+ for (index= 0; index < statements_stack_sizing; index++)
+ {
+ pfs_stmt= & array->m_statements_stack_array[index];
+
+ pfs_stmt->m_sqltext= & array->m_current_stmts_text_array[index * pfs_max_sqltext];
+
+ pfs_tokens= & array->m_current_stmts_digest_token_array[index * pfs_max_digest_length];
+ pfs_stmt->m_digest_storage.reset(pfs_tokens, pfs_max_digest_length);
+ }
+
+ for (index= 0; index < statements_history_sizing; index++)
+ {
+ pfs_stmt= & array->m_statements_history_array[index];
+
+ pfs_stmt->m_sqltext= & array->m_history_stmts_text_array[index * pfs_max_sqltext];
+
+ pfs_tokens= & array->m_history_stmts_digest_token_array[index * pfs_max_digest_length];
+ pfs_stmt->m_digest_storage.reset(pfs_tokens, pfs_max_digest_length);
+ }
+
+ array->m_full= false;
+ return 0;
+}
+
+void PFS_thread_allocator::free_array(PFS_thread_array *array)
+{
+ size_t size= array->m_max;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ size_t waits_history_sizing= size * events_waits_history_per_thread;
+ size_t stages_history_sizing= size * events_stages_history_per_thread;
+ size_t statements_history_sizing= size * events_statements_history_per_thread;
+ size_t statements_stack_sizing= size * statement_stack_max;
+ size_t transactions_history_sizing= size * events_transactions_history_per_thread;
+ size_t session_connect_attrs_sizing= size * session_connect_attrs_size_per_thread;
+
+ size_t current_sqltext_sizing= size * pfs_max_sqltext * statement_stack_max;
+ size_t history_sqltext_sizing= size * pfs_max_sqltext * events_statements_history_per_thread;
+ size_t current_digest_tokens_sizing= size * pfs_max_digest_length * statement_stack_max;
+ size_t history_digest_tokens_sizing= size * pfs_max_digest_length * events_statements_history_per_thread;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread,
+ size, sizeof(PFS_thread), array->m_ptr);
+ array->m_ptr= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_waits,
+ waits_sizing, sizeof(PFS_single_stat),
+ array->m_instr_class_waits_array);
+ array->m_instr_class_waits_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_stages,
+ stages_sizing, sizeof(PFS_stage_stat),
+ array->m_instr_class_stages_array);
+ array->m_instr_class_stages_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_statements,
+ statements_sizing, sizeof(PFS_statement_stat),
+ array->m_instr_class_statements_array);
+ array->m_instr_class_statements_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat),
+ array->m_instr_class_transactions_array);
+ array->m_instr_class_transactions_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_memory,
+ memory_sizing, sizeof(PFS_memory_stat),
+ array->m_instr_class_memory_array);
+ array->m_instr_class_memory_array= NULL;
+
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_waits_history,
+ waits_history_sizing, sizeof(PFS_events_waits),
+ array->m_waits_history_array);
+ array->m_waits_history_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_stages_history,
+ stages_history_sizing, sizeof(PFS_events_stages),
+ array->m_stages_history_array);
+ array->m_stages_history_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_statements_history,
+ statements_history_sizing, sizeof(PFS_events_statements),
+ array->m_statements_history_array);
+ array->m_statements_history_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_statements_stack,
+ statements_stack_sizing, sizeof(PFS_events_statements),
+ array->m_statements_stack_array);
+ array->m_statements_stack_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_thread_transaction_history,
+ transactions_history_sizing, sizeof(PFS_events_transactions),
+ array->m_transactions_history_array);
+ array->m_transactions_history_array= NULL;
+
+ pfs_free(& builtin_memory_thread_session_connect_attrs,
+ session_connect_attrs_sizing,
+ array->m_session_connect_attrs_array);
+ array->m_session_connect_attrs_array= NULL;
+
+ pfs_free(& builtin_memory_thread_statements_stack_sqltext,
+ current_sqltext_sizing,
+ array->m_current_stmts_text_array);
+ array->m_current_stmts_text_array= NULL;
+
+ pfs_free(& builtin_memory_thread_statements_history_sqltext,
+ history_sqltext_sizing,
+ array->m_history_stmts_text_array);
+ array->m_history_stmts_text_array= NULL;
+
+ pfs_free(& builtin_memory_thread_statements_stack_tokens,
+ current_digest_tokens_sizing,
+ array->m_current_stmts_digest_token_array);
+ array->m_current_stmts_digest_token_array= NULL;
+
+ pfs_free(& builtin_memory_thread_statements_history_tokens,
+ history_digest_tokens_sizing,
+ array->m_history_stmts_digest_token_array);
+ array->m_history_stmts_digest_token_array= NULL;
+}
+
+PFS_thread_allocator thread_allocator;
+PFS_thread_container global_thread_container(& thread_allocator);
+
+int PFS_user_allocator::alloc_array(PFS_user_array *array)
+{
+ size_t size= array->m_max;
+ PFS_user *pfs;
+ size_t index;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ array->m_ptr= NULL;
+ array->m_full= true;
+ array->m_instr_class_waits_array= NULL;
+ array->m_instr_class_stages_array= NULL;
+ array->m_instr_class_statements_array= NULL;
+ array->m_instr_class_transactions_array= NULL;
+ array->m_instr_class_memory_array= NULL;
+
+ if (size > 0)
+ {
+ array->m_ptr=
+ PFS_MALLOC_ARRAY(& builtin_memory_user,
+ size, sizeof(PFS_user), PFS_user, MYF(MY_ZEROFILL));
+ if (array->m_ptr == NULL)
+ return 1;
+ }
+
+ if (waits_sizing > 0)
+ {
+ array->m_instr_class_waits_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_user_waits,
+ waits_sizing, sizeof(PFS_single_stat), PFS_single_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_waits_array == NULL)
+ return 1;
+
+ for (index=0; index < waits_sizing; index++)
+ array->m_instr_class_waits_array[index].reset();
+ }
+
+ if (stages_sizing > 0)
+ {
+ array->m_instr_class_stages_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_user_stages,
+ stages_sizing, sizeof(PFS_stage_stat), PFS_stage_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_stages_array == NULL)
+ return 1;
+
+ for (index=0; index < stages_sizing; index++)
+ array->m_instr_class_stages_array[index].reset();
+ }
+
+ if (statements_sizing > 0)
+ {
+ array->m_instr_class_statements_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_user_statements,
+ statements_sizing, sizeof(PFS_statement_stat), PFS_statement_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_statements_array == NULL)
+ return 1;
+
+ for (index=0; index < statements_sizing; index++)
+ array->m_instr_class_statements_array[index].reset();
+ }
+
+ if (transactions_sizing > 0)
+ {
+ array->m_instr_class_transactions_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_user_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat), PFS_transaction_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_transactions_array == NULL)
+ return 1;
+
+ for (index=0; index < transactions_sizing; index++)
+ array->m_instr_class_transactions_array[index].reset();
+ }
+
+ if (memory_sizing > 0)
+ {
+ array->m_instr_class_memory_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_user_memory,
+ memory_sizing, sizeof(PFS_memory_stat), PFS_memory_stat, MYF(MY_ZEROFILL));
+ if (array->m_instr_class_memory_array == NULL)
+ return 1;
+
+ for (index=0; index < memory_sizing; index++)
+ array->m_instr_class_memory_array[index].reset();
+ }
+
+ for (index= 0; index < size; index++)
+ {
+ pfs= & array->m_ptr[index];
+
+ pfs->set_instr_class_waits_stats(
+ & array->m_instr_class_waits_array[index * wait_class_max]);
+ pfs->set_instr_class_stages_stats(
+ & array->m_instr_class_stages_array[index * stage_class_max]);
+ pfs->set_instr_class_statements_stats(
+ & array->m_instr_class_statements_array[index * statement_class_max]);
+ pfs->set_instr_class_transactions_stats(
+ & array->m_instr_class_transactions_array[index * transaction_class_max]);
+ pfs->set_instr_class_memory_stats(
+ & array->m_instr_class_memory_array[index * memory_class_max]);
+ }
+
+ array->m_full= false;
+ return 0;
+}
+
+void PFS_user_allocator::free_array(PFS_user_array *array)
+{
+ size_t size= array->m_max;
+ size_t waits_sizing= size * wait_class_max;
+ size_t stages_sizing= size * stage_class_max;
+ size_t statements_sizing= size * statement_class_max;
+ size_t transactions_sizing= size * transaction_class_max;
+ size_t memory_sizing= size * memory_class_max;
+
+ PFS_FREE_ARRAY(& builtin_memory_user,
+ size, sizeof(PFS_user), array->m_ptr);
+ array->m_ptr= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_user_waits,
+ waits_sizing, sizeof(PFS_single_stat),
+ array->m_instr_class_waits_array);
+ array->m_instr_class_waits_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_user_stages,
+ stages_sizing, sizeof(PFS_stage_stat),
+ array->m_instr_class_stages_array);
+ array->m_instr_class_stages_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_user_statements,
+ statements_sizing, sizeof(PFS_statement_stat),
+ array->m_instr_class_statements_array);
+ array->m_instr_class_statements_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_user_transactions,
+ transactions_sizing, sizeof(PFS_transaction_stat),
+ array->m_instr_class_transactions_array);
+ array->m_instr_class_transactions_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_user_memory,
+ memory_sizing, sizeof(PFS_memory_stat),
+ array->m_instr_class_memory_array);
+ array->m_instr_class_memory_array= NULL;
+}
+
+PFS_user_allocator user_allocator;
+PFS_user_container global_user_container(& user_allocator);
+
diff --git a/storage/perfschema/pfs_buffer_container.h b/storage/perfschema/pfs_buffer_container.h
new file mode 100644
index 00000000000..141cbdf2999
--- /dev/null
+++ b/storage/perfschema/pfs_buffer_container.h
@@ -0,0 +1,1626 @@
+/* Copyright (c) 2014, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef PFS_BUFFER_CONTAINER_H
+#define PFS_BUFFER_CONTAINER_H
+
+#include "my_global.h"
+#include "pfs.h" // PSI_COUNT_VOLATILITY
+#include "pfs_lock.h"
+#include "pfs_instr.h"
+#include "pfs_setup_actor.h"
+#include "pfs_setup_object.h"
+#include "pfs_program.h"
+#include "pfs_prepared_stmt.h"
+#include "pfs_builtin_memory.h"
+
+#define USE_SCALABLE
+
+class PFS_opaque_container_page;
+class PFS_opaque_container;
+
+struct PFS_builtin_memory_class;
+
+template <class T>
+class PFS_buffer_const_iterator;
+
+template <class T>
+class PFS_buffer_processor;
+
+template <class T, class U, class V>
+class PFS_buffer_iterator;
+
+template <class T, int PFS_PAGE_SIZE, int PFS_PAGE_COUNT, class U, class V>
+class PFS_buffer_scalable_iterator;
+
+template <class T>
+class PFS_buffer_default_array;
+
+template <class T>
+class PFS_buffer_default_allocator;
+
+template <class T, class U, class V>
+class PFS_buffer_container;
+
+template <class T, int PFS_PAGE_SIZE, int PFS_PAGE_COUNT, class U, class V>
+class PFS_buffer_scalable_container;
+
+template <class B, int COUNT>
+class PFS_partitioned_buffer_scalable_iterator;
+
+template <class B, int COUNT>
+class PFS_partitioned_buffer_scalable_container;
+
+
+template <class T>
+class PFS_buffer_default_array
+{
+public:
+ typedef T value_type;
+
+ value_type *allocate(pfs_dirty_state *dirty_state)
+ {
+ uint index;
+ uint monotonic;
+ uint monotonic_max;
+ value_type *pfs;
+
+ if (m_full)
+ return NULL;
+
+ monotonic= PFS_atomic::add_u32(& m_monotonic.m_u32, 1);
+ monotonic_max= monotonic + static_cast<uint>(m_max);
+
+ while (monotonic < monotonic_max)
+ {
+ index= monotonic % m_max;
+ pfs= m_ptr + index;
+
+ if (pfs->m_lock.free_to_dirty(dirty_state))
+ {
+ return pfs;
+ }
+ monotonic= PFS_atomic::add_u32(& m_monotonic.m_u32, 1);
+ }
+
+ m_full= true;
+ return NULL;
+ }
+
+ void deallocate(value_type *pfs)
+ {
+ pfs->m_lock.allocated_to_free();
+ m_full= false;
+ }
+
+ T* get_first()
+ {
+ return m_ptr;
+ }
+
+ T* get_last()
+ {
+ return m_ptr + m_max;
+ }
+
+ bool m_full;
+ PFS_cacheline_uint32 m_monotonic;
+ T * m_ptr;
+ size_t m_max;
+ /** Container. */
+ PFS_opaque_container *m_container;
+};
+
+template <class T>
+class PFS_buffer_default_allocator
+{
+public:
+ typedef PFS_buffer_default_array<T> array_type;
+
+ PFS_buffer_default_allocator(PFS_builtin_memory_class *klass)
+ : m_builtin_class(klass)
+ {}
+
+ int alloc_array(array_type *array)
+ {
+ array->m_ptr= NULL;
+ array->m_full= true;
+ array->m_monotonic.m_u32= 0;
+
+ if (array->m_max > 0)
+ {
+ array->m_ptr= PFS_MALLOC_ARRAY(m_builtin_class,
+ array->m_max, sizeof(T), T, MYF(MY_ZEROFILL));
+ if (array->m_ptr == NULL)
+ return 1;
+ array->m_full= false;
+ }
+ return 0;
+ }
+
+ void free_array(array_type *array)
+ {
+ DBUG_ASSERT(array->m_max > 0);
+
+ PFS_FREE_ARRAY(m_builtin_class,
+ array->m_max, sizeof(T), array->m_ptr);
+ array->m_ptr= NULL;
+ }
+
+private:
+ PFS_builtin_memory_class *m_builtin_class;
+};
+
+template <class T,
+ class U = PFS_buffer_default_array<T>,
+ class V = PFS_buffer_default_allocator<T> >
+class PFS_buffer_container
+{
+public:
+ friend class PFS_buffer_iterator<T, U, V>;
+
+ typedef T value_type;
+ typedef U array_type;
+ typedef V allocator_type;
+ typedef PFS_buffer_const_iterator<T> const_iterator_type;
+ typedef PFS_buffer_iterator<T, U, V> iterator_type;
+ typedef PFS_buffer_processor<T> processor_type;
+ typedef void (*function_type)(value_type *);
+
+ PFS_buffer_container(allocator_type *allocator)
+ {
+ m_array.m_full= true;
+ m_array.m_ptr= NULL;
+ m_array.m_max= 0;
+ m_array.m_monotonic.m_u32= 0;
+ m_lost= 0;
+ m_max= 0;
+ m_allocator= allocator;
+ }
+
+ int init(ulong max_size)
+ {
+ if (max_size > 0)
+ {
+ m_array.m_max= max_size;
+ int rc= m_allocator->alloc_array(& m_array);
+ if (rc != 0)
+ {
+ m_allocator->free_array(& m_array);
+ return 1;
+ }
+ m_max= max_size;
+ m_array.m_full= false;
+ }
+ return 0;
+ }
+
+ void cleanup()
+ {
+ m_allocator->free_array(& m_array);
+ }
+
+ ulong get_row_count() const
+ {
+ return m_max;
+ }
+
+ ulong get_row_size() const
+ {
+ return sizeof(value_type);
+ }
+
+ ulong get_memory() const
+ {
+ return get_row_count() * get_row_size();
+ }
+
+ value_type *allocate(pfs_dirty_state *dirty_state)
+ {
+ value_type *pfs;
+
+ pfs= m_array.allocate(dirty_state, m_max);
+ if (pfs == NULL)
+ {
+ m_lost++;
+ }
+
+ return pfs;
+ }
+
+ void deallocate(value_type *pfs)
+ {
+ m_array.deallocate(pfs);
+ }
+
+ iterator_type iterate()
+ {
+ return PFS_buffer_iterator<T, U, V>(this, 0);
+ }
+
+ iterator_type iterate(uint index)
+ {
+ DBUG_ASSERT(index <= m_max);
+ return PFS_buffer_iterator<T, U, V>(this, index);
+ }
+
+ void apply(function_type fct)
+ {
+ value_type *pfs= m_array.get_first();
+ value_type *pfs_last= m_array.get_last();
+
+ while (pfs < pfs_last)
+ {
+ if (pfs->m_lock.is_populated())
+ {
+ fct(pfs);
+ }
+ pfs++;
+ }
+ }
+
+ void apply_all(function_type fct)
+ {
+ value_type *pfs= m_array.get_first();
+ value_type *pfs_last= m_array.get_last();
+
+ while (pfs < pfs_last)
+ {
+ fct(pfs);
+ pfs++;
+ }
+ }
+
+ void apply(processor_type & proc)
+ {
+ value_type *pfs= m_array.get_first();
+ value_type *pfs_last= m_array.get_last();
+
+ while (pfs < pfs_last)
+ {
+ if (pfs->m_lock.is_populated())
+ {
+ proc(pfs);
+ }
+ pfs++;
+ }
+ }
+
+ void apply_all(processor_type & proc)
+ {
+ value_type *pfs= m_array.get_first();
+ value_type *pfs_last= m_array.get_last();
+
+ while (pfs < pfs_last)
+ {
+ proc(pfs);
+ pfs++;
+ }
+ }
+
+ inline value_type* get(uint index)
+ {
+ DBUG_ASSERT(index < m_max);
+
+ value_type *pfs= m_array.m_ptr + index;
+ if (pfs->m_lock.is_populated())
+ {
+ return pfs;
+ }
+
+ return NULL;
+ }
+
+ value_type* get(uint index, bool *has_more)
+ {
+ if (index >= m_max)
+ {
+ *has_more= false;
+ return NULL;
+ }
+
+ *has_more= true;
+ return get(index);
+ }
+
+ value_type *sanitize(value_type *unsafe)
+ {
+ intptr offset;
+ value_type *pfs= m_array.get_first();
+ value_type *pfs_last= m_array.get_last();
+
+ if ((pfs <= unsafe) &&
+ (unsafe < pfs_last))
+ {
+ offset= ((intptr) unsafe - (intptr) pfs) % sizeof(value_type);
+ if (offset == 0)
+ return unsafe;
+ }
+
+ return NULL;
+ }
+
+ ulong m_lost;
+
+private:
+ value_type* scan_next(uint & index, uint * found_index)
+ {
+ DBUG_ASSERT(index <= m_max);
+
+ value_type *pfs_first= m_array.get_first();
+ value_type *pfs= pfs_first + index;
+ value_type *pfs_last= m_array.get_last();
+
+ while (pfs < pfs_last)
+ {
+ if (pfs->m_lock.is_populated())
+ {
+ uint found= pfs - pfs_first;
+ *found_index= found;
+ index= found + 1;
+ return pfs;
+ }
+ pfs++;
+ }
+
+ index= m_max;
+ return NULL;
+ }
+
+ ulong m_max;
+ array_type m_array;
+ allocator_type *m_allocator;
+};
+
+template <class T,
+ int PFS_PAGE_SIZE,
+ int PFS_PAGE_COUNT,
+ class U = PFS_buffer_default_array<T>,
+ class V = PFS_buffer_default_allocator<T> >
+class PFS_buffer_scalable_container
+{
+public:
+ friend class PFS_buffer_scalable_iterator<T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V>;
+
+ /**
+ Type of elements in the buffer.
+ The following attributes are required:
+ - pfs_lock m_lock
+ - PFS_opaque_container_page *m_page
+ */
+ typedef T value_type;
+ /**
+ Type of pages in the buffer.
+ The following attributes are required:
+ - PFS_opaque_container *m_container
+ */
+ typedef U array_type;
+ typedef V allocator_type;
+ /** This container type */
+ typedef PFS_buffer_scalable_container<T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V> container_type;
+ typedef PFS_buffer_const_iterator<T> const_iterator_type;
+ typedef PFS_buffer_scalable_iterator<T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V> iterator_type;
+ typedef PFS_buffer_processor<T> processor_type;
+ typedef void (*function_type)(value_type *);
+
+ static const size_t MAX_SIZE= PFS_PAGE_SIZE*PFS_PAGE_COUNT;
+
+ PFS_buffer_scalable_container(allocator_type *allocator)
+ {
+ m_allocator= allocator;
+ m_initialized= false;
+ m_lost= 0;
+ }
+
+ int init(long max_size)
+ {
+ int i;
+
+ m_initialized= true;
+ m_full= true;
+ m_max= PFS_PAGE_COUNT * PFS_PAGE_SIZE;
+ m_max_page_count= PFS_PAGE_COUNT;
+ m_last_page_size= PFS_PAGE_SIZE;
+ m_lost= 0;
+ m_monotonic.m_u32= 0;
+ m_max_page_index.m_u32= 0;
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ m_pages[i]= NULL;
+ }
+
+ if (max_size == 0)
+ {
+ /* No allocation. */
+ m_max_page_count= 0;
+ }
+ else if (max_size > 0)
+ {
+ if (max_size % PFS_PAGE_SIZE == 0)
+ {
+ m_max_page_count= max_size / PFS_PAGE_SIZE;
+ }
+ else
+ {
+ m_max_page_count= max_size / PFS_PAGE_SIZE + 1;
+ m_last_page_size= max_size % PFS_PAGE_SIZE;
+ }
+ /* Bounded allocation. */
+ m_full= false;
+
+ if (m_max_page_count > PFS_PAGE_COUNT)
+ {
+ m_max_page_count= PFS_PAGE_COUNT;
+ m_last_page_size= PFS_PAGE_SIZE;
+ }
+ }
+ else
+ {
+ /* max_size = -1 means unbounded allocation */
+ m_full= false;
+ }
+
+ DBUG_ASSERT(m_max_page_count <= PFS_PAGE_COUNT);
+ DBUG_ASSERT(0 < m_last_page_size);
+ DBUG_ASSERT(m_last_page_size <= PFS_PAGE_SIZE);
+
+ pthread_mutex_init(& m_critical_section, NULL);
+ return 0;
+ }
+
+ void cleanup()
+ {
+ int i;
+ array_type *page;
+
+ if (! m_initialized)
+ return;
+
+ pthread_mutex_lock(& m_critical_section);
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ page= m_pages[i];
+ if (page != NULL)
+ {
+ m_allocator->free_array(page);
+ delete page;
+ m_pages[i]= NULL;
+ }
+ }
+ pthread_mutex_unlock(& m_critical_section);
+
+ pthread_mutex_destroy(& m_critical_section);
+
+ m_initialized= false;
+ }
+
+ ulong get_row_count()
+ {
+ ulong page_count= PFS_atomic::load_u32(& m_max_page_index.m_u32);
+
+ return page_count * PFS_PAGE_SIZE;
+ }
+
+ ulong get_row_size() const
+ {
+ return sizeof(value_type);
+ }
+
+ ulong get_memory()
+ {
+ return get_row_count() * get_row_size();
+ }
+
+ value_type *allocate(pfs_dirty_state *dirty_state)
+ {
+ if (m_full)
+ {
+ m_lost++;
+ return NULL;
+ }
+
+ uint index;
+ uint monotonic;
+ uint monotonic_max;
+ uint current_page_count;
+ value_type *pfs;
+ array_type *array;
+
+ void *addr;
+ void * volatile * typed_addr;
+ void *ptr;
+
+ /*
+ 1: Try to find an available record within the existing pages
+ */
+ current_page_count= PFS_atomic::load_u32(& m_max_page_index.m_u32);
+
+ if (current_page_count != 0)
+ {
+ monotonic= PFS_atomic::load_u32(& m_monotonic.m_u32);
+ monotonic_max= monotonic + current_page_count;
+
+ while (monotonic < monotonic_max)
+ {
+ /*
+ Scan in the [0 .. current_page_count - 1] range,
+ in parallel with m_monotonic (see below)
+ */
+ index= monotonic % current_page_count;
+
+ /* Atomic Load, array= m_pages[index] */
+ addr= & m_pages[index];
+ typed_addr= static_cast<void * volatile *>(addr);
+ ptr= my_atomic_loadptr(typed_addr);
+ array= static_cast<array_type *>(ptr);
+
+ if (array != NULL)
+ {
+ pfs= array->allocate(dirty_state);
+ if (pfs != NULL)
+ {
+ /* Keep a pointer to the parent page, for deallocate(). */
+ pfs->m_page= reinterpret_cast<PFS_opaque_container_page *> (array);
+ return pfs;
+ }
+ }
+
+ /*
+ Parallel scans collaborate to increase
+ the common monotonic scan counter.
+
+ Note that when all the existing page are full,
+ one thread will eventually add a new page,
+ and cause m_max_page_index to increase,
+ which fools all the modulo logic for scans already in progress,
+ because the monotonic counter is not folded to the same place
+ (sometime modulo N, sometime modulo N+1).
+
+ This is actually ok: since all the pages are full anyway,
+ there is nothing to miss, so better increase the monotonic
+ counter faster and then move on to the detection of new pages,
+ in part 2: below.
+ */
+ monotonic= PFS_atomic::add_u32(& m_monotonic.m_u32, 1);
+ };
+ }
+
+ /*
+ 2: Try to add a new page, beyond the m_max_page_index limit
+ */
+ while (current_page_count < m_max_page_count)
+ {
+ /* Peek for pages added by collaborating threads */
+
+ /* (2-a) Atomic Load, array= m_pages[current_page_count] */
+ addr= & m_pages[current_page_count];
+ typed_addr= static_cast<void * volatile *>(addr);
+ ptr= my_atomic_loadptr(typed_addr);
+ array= static_cast<array_type *>(ptr);
+
+ if (array == NULL)
+ {
+ // ==================================================================
+ // BEGIN CRITICAL SECTION -- buffer expand
+ // ==================================================================
+
+ /*
+ On a fresh started server, buffers are typically empty.
+ When a sudden load spike is seen by the server,
+ multiple threads may want to expand the buffer at the same time.
+
+ Using a compare and swap to allow multiple pages to be added,
+ possibly freeing duplicate pages on collisions,
+ does not work well because the amount of code involved
+ when creating a new page can be significant (PFS_thread),
+ causing MANY collisions between (2-b) and (2-d).
+
+ A huge number of collisions (which can happen when thousands
+ of new connections hits the server after a restart)
+ leads to a huge memory consumption, and to OOM.
+
+ To mitigate this, we use here a mutex,
+ to enforce that only ONE page is added at a time,
+ so that scaling the buffer happens in a predictable
+ and controlled manner.
+ */
+ pthread_mutex_lock(& m_critical_section);
+
+ /*
+ Peek again for pages added by collaborating threads,
+ this time as the only thread allowed to expand the buffer
+ */
+
+ /* (2-b) Atomic Load, array= m_pages[current_page_count] */
+
+ ptr= my_atomic_loadptr(typed_addr);
+ array= static_cast<array_type *>(ptr);
+
+ if (array == NULL)
+ {
+ /* (2-c) Found no page, allocate a new one */
+ array= new array_type();
+ builtin_memory_scalable_buffer.count_alloc(sizeof (array_type));
+
+ array->m_max= get_page_logical_size(current_page_count);
+ int rc= m_allocator->alloc_array(array);
+ if (rc != 0)
+ {
+ m_allocator->free_array(array);
+ delete array;
+ builtin_memory_scalable_buffer.count_free(sizeof (array_type));
+ m_lost++;
+ pthread_mutex_unlock(& m_critical_section);
+ return NULL;
+ }
+
+ /* Keep a pointer to this container, for static_deallocate(). */
+ array->m_container= reinterpret_cast<PFS_opaque_container *> (this);
+
+ /* (2-d) Atomic STORE, m_pages[current_page_count] = array */
+ ptr= array;
+ my_atomic_storeptr(typed_addr, ptr);
+
+ /* Advertise the new page */
+ PFS_atomic::add_u32(& m_max_page_index.m_u32, 1);
+ }
+
+ pthread_mutex_unlock(& m_critical_section);
+
+ // ==================================================================
+ // END CRITICAL SECTION -- buffer expand
+ // ==================================================================
+ }
+
+ DBUG_ASSERT(array != NULL);
+ pfs= array->allocate(dirty_state);
+ if (pfs != NULL)
+ {
+ /* Keep a pointer to the parent page, for deallocate(). */
+ pfs->m_page= reinterpret_cast<PFS_opaque_container_page *> (array);
+ return pfs;
+ }
+
+ current_page_count++;
+ }
+
+ m_lost++;
+ m_full= true;
+ return NULL;
+ }
+
+ void deallocate(value_type *safe_pfs)
+ {
+ /* Find the containing page */
+ PFS_opaque_container_page *opaque_page= safe_pfs->m_page;
+ array_type *page= reinterpret_cast<array_type *> (opaque_page);
+
+ /* Mark the object free */
+ safe_pfs->m_lock.allocated_to_free();
+
+ /* Flag the containing page as not full. */
+ page->m_full= false;
+
+ /* Flag the overall container as not full. */
+ m_full= false;
+ }
+
+ static void static_deallocate(value_type *safe_pfs)
+ {
+ /* Find the containing page */
+ PFS_opaque_container_page *opaque_page= safe_pfs->m_page;
+ array_type *page= reinterpret_cast<array_type *> (opaque_page);
+
+ /* Mark the object free */
+ safe_pfs->m_lock.allocated_to_free();
+
+ /* Flag the containing page as not full. */
+ page->m_full= false;
+
+ /* Find the containing buffer */
+ PFS_opaque_container *opaque_container= page->m_container;
+ PFS_buffer_scalable_container *container;
+ container= reinterpret_cast<container_type *> (opaque_container);
+
+ /* Flag the overall container as not full. */
+ container->m_full= false;
+ }
+
+ iterator_type iterate()
+ {
+ return PFS_buffer_scalable_iterator<T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V>(this, 0);
+ }
+
+ iterator_type iterate(uint index)
+ {
+ DBUG_ASSERT(index <= m_max);
+ return PFS_buffer_scalable_iterator<T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V>(this, index);
+ }
+
+ void apply(function_type fct)
+ {
+ uint i;
+ array_type *page;
+ value_type *pfs;
+ value_type *pfs_last;
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ page= m_pages[i];
+ if (page != NULL)
+ {
+ pfs= page->get_first();
+ pfs_last= page->get_last();
+
+ while (pfs < pfs_last)
+ {
+ if (pfs->m_lock.is_populated())
+ {
+ fct(pfs);
+ }
+ pfs++;
+ }
+ }
+ }
+ }
+
+ void apply_all(function_type fct)
+ {
+ uint i;
+ array_type *page;
+ value_type *pfs;
+ value_type *pfs_last;
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ page= m_pages[i];
+ if (page != NULL)
+ {
+ pfs= page->get_first();
+ pfs_last= page->get_last();
+
+ while (pfs < pfs_last)
+ {
+ fct(pfs);
+ pfs++;
+ }
+ }
+ }
+ }
+
+ void apply(processor_type & proc)
+ {
+ uint i;
+ array_type *page;
+ value_type *pfs;
+ value_type *pfs_last;
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ page= m_pages[i];
+ if (page != NULL)
+ {
+ pfs= page->get_first();
+ pfs_last= page->get_last();
+
+ while (pfs < pfs_last)
+ {
+ if (pfs->m_lock.is_populated())
+ {
+ proc(pfs);
+ }
+ pfs++;
+ }
+ }
+ }
+ }
+
+ void apply_all(processor_type & proc)
+ {
+ uint i;
+ array_type *page;
+ value_type *pfs;
+ value_type *pfs_last;
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ page= m_pages[i];
+ if (page != NULL)
+ {
+ pfs= page->get_first();
+ pfs_last= page->get_last();
+
+ while (pfs < pfs_last)
+ {
+ proc(pfs);
+ pfs++;
+ }
+ }
+ }
+ }
+
+ value_type* get(uint index)
+ {
+ DBUG_ASSERT(index < m_max);
+
+ uint index_1= index / PFS_PAGE_SIZE;
+ array_type *page= m_pages[index_1];
+ if (page != NULL)
+ {
+ uint index_2= index % PFS_PAGE_SIZE;
+
+ if (index_2 >= page->m_max)
+ {
+ return NULL;
+ }
+
+ value_type *pfs= page->m_ptr + index_2;
+
+ if (pfs->m_lock.is_populated())
+ {
+ return pfs;
+ }
+ }
+
+ return NULL;
+ }
+
+ value_type* get(uint index, bool *has_more)
+ {
+ if (index >= m_max)
+ {
+ *has_more= false;
+ return NULL;
+ }
+
+ uint index_1= index / PFS_PAGE_SIZE;
+ array_type *page= m_pages[index_1];
+
+ if (page == NULL)
+ {
+ *has_more= false;
+ return NULL;
+ }
+
+ uint index_2= index % PFS_PAGE_SIZE;
+
+ if (index_2 >= page->m_max)
+ {
+ *has_more= false;
+ return NULL;
+ }
+
+ *has_more= true;
+ value_type *pfs= page->m_ptr + index_2;
+
+ if (pfs->m_lock.is_populated())
+ {
+ return pfs;
+ }
+
+ return NULL;
+ }
+
+ value_type *sanitize(value_type *unsafe)
+ {
+ intptr offset;
+ uint i;
+ array_type *page;
+ value_type *pfs;
+ value_type *pfs_last;
+
+ for (i=0 ; i < PFS_PAGE_COUNT; i++)
+ {
+ page= m_pages[i];
+ if (page != NULL)
+ {
+ pfs= page->get_first();
+ pfs_last= page->get_last();
+
+ if ((pfs <= unsafe) &&
+ (unsafe < pfs_last))
+ {
+ offset= ((intptr) unsafe - (intptr) pfs) % sizeof(value_type);
+ if (offset == 0)
+ return unsafe;
+ }
+ }
+ }
+
+ return NULL;
+ }
+
+ ulong m_lost;
+
+private:
+
+ uint get_page_logical_size(uint page_index)
+ {
+ if (page_index + 1 < m_max_page_count)
+ return PFS_PAGE_SIZE;
+ DBUG_ASSERT(page_index + 1 == m_max_page_count);
+ return m_last_page_size;
+ }
+
+ value_type* scan_next(uint & index, uint * found_index)
+ {
+ DBUG_ASSERT(index <= m_max);
+
+ uint index_1= index / PFS_PAGE_SIZE;
+ uint index_2= index % PFS_PAGE_SIZE;
+ array_type *page;
+ value_type *pfs_first;
+ value_type *pfs;
+ value_type *pfs_last;
+
+ while (index_1 < PFS_PAGE_COUNT)
+ {
+ page= m_pages[index_1];
+
+ if (page == NULL)
+ {
+ index= static_cast<uint>(m_max);
+ return NULL;
+ }
+
+ pfs_first= page->get_first();
+ pfs= pfs_first + index_2;
+ pfs_last= page->get_last();
+
+ while (pfs < pfs_last)
+ {
+ if (pfs->m_lock.is_populated())
+ {
+ uint found= index_1 * PFS_PAGE_SIZE + static_cast<uint>(pfs - pfs_first);
+ *found_index= found;
+ index= found + 1;
+ return pfs;
+ }
+ pfs++;
+ }
+
+ index_1++;
+ index_2= 0;
+ }
+
+ index= static_cast<uint>(m_max);
+ return NULL;
+ }
+
+ bool m_initialized;
+ bool m_full;
+ size_t m_max;
+ PFS_cacheline_uint32 m_monotonic;
+ PFS_cacheline_uint32 m_max_page_index;
+ ulong m_max_page_count;
+ ulong m_last_page_size;
+ array_type * m_pages[PFS_PAGE_COUNT];
+ allocator_type *m_allocator;
+ pthread_mutex_t m_critical_section;
+};
+
+template <class T, class U, class V>
+class PFS_buffer_iterator
+{
+ friend class PFS_buffer_container<T, U, V>;
+
+ typedef T value_type;
+ typedef PFS_buffer_container<T, U, V> container_type;
+
+public:
+ value_type* scan_next()
+ {
+ uint unused;
+ return m_container->scan_next(m_index, & unused);
+ }
+
+ value_type* scan_next(uint * found_index)
+ {
+ return m_container->scan_next(m_index, found_index);
+ }
+
+private:
+ PFS_buffer_iterator(container_type *container, uint index)
+ : m_container(container),
+ m_index(index)
+ {}
+
+ container_type *m_container;
+ uint m_index;
+};
+
+template <class T, int page_size, int page_count, class U, class V>
+class PFS_buffer_scalable_iterator
+{
+ friend class PFS_buffer_scalable_container<T, page_size, page_count, U, V>;
+
+ typedef T value_type;
+ typedef PFS_buffer_scalable_container<T, page_size, page_count, U, V> container_type;
+
+public:
+ value_type* scan_next()
+ {
+ uint unused;
+ return m_container->scan_next(m_index, & unused);
+ }
+
+ value_type* scan_next(uint * found_index)
+ {
+ return m_container->scan_next(m_index, found_index);
+ }
+
+private:
+ PFS_buffer_scalable_iterator(container_type *container, uint index)
+ : m_container(container),
+ m_index(index)
+ {}
+
+ container_type *m_container;
+ uint m_index;
+};
+
+template <class T>
+class PFS_buffer_processor
+{
+public:
+ virtual ~PFS_buffer_processor<T> ()
+ {}
+ virtual void operator()(T *element) = 0;
+};
+
+template <class B, int PFS_PARTITION_COUNT>
+class PFS_partitioned_buffer_scalable_container
+{
+public:
+ friend class PFS_partitioned_buffer_scalable_iterator<B, PFS_PARTITION_COUNT>;
+
+ typedef typename B::value_type value_type;
+ typedef typename B::allocator_type allocator_type;
+ typedef PFS_partitioned_buffer_scalable_iterator<B, PFS_PARTITION_COUNT> iterator_type;
+ typedef typename B::iterator_type sub_iterator_type;
+ typedef typename B::processor_type processor_type;
+ typedef typename B::function_type function_type;
+
+ PFS_partitioned_buffer_scalable_container(allocator_type *allocator)
+ {
+ for (int i=0 ; i < PFS_PARTITION_COUNT; i++)
+ {
+ m_partitions[i]= new B(allocator);
+ }
+ }
+
+ ~PFS_partitioned_buffer_scalable_container()
+ {
+ for (int i=0 ; i < PFS_PARTITION_COUNT; i++)
+ {
+ delete m_partitions[i];
+ }
+ }
+
+ int init(long max_size)
+ {
+ int rc= 0;
+ // FIXME: we have max_size * PFS_PARTITION_COUNT here
+ for (int i=0 ; i < PFS_PARTITION_COUNT; i++)
+ {
+ rc|= m_partitions[i]->init(max_size);
+ }
+ return rc;
+ }
+
+ void cleanup()
+ {
+ for (int i=0 ; i < PFS_PARTITION_COUNT; i++)
+ {
+ m_partitions[i]->cleanup();
+ }
+ }
+
+ ulong get_row_count() const
+ {
+ ulong sum= 0;
+
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ sum += m_partitions[i]->get_row_count();
+ }
+
+ return sum;
+ }
+
+ ulong get_row_size() const
+ {
+ return sizeof(value_type);
+ }
+
+ ulong get_memory() const
+ {
+ ulong sum= 0;
+
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ sum += m_partitions[i]->get_memory();
+ }
+
+ return sum;
+ }
+
+ long get_lost_counter()
+ {
+ long sum= 0;
+
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ sum += m_partitions[i]->m_lost;
+ }
+
+ return sum;
+ }
+
+ value_type *allocate(pfs_dirty_state *dirty_state, uint partition)
+ {
+ DBUG_ASSERT(partition < PFS_PARTITION_COUNT);
+
+ return m_partitions[partition]->allocate(dirty_state);
+ }
+
+ void deallocate(value_type *safe_pfs)
+ {
+ /*
+ One issue here is that we do not know which partition
+ the record belongs to.
+ Each record points to the parent page,
+ and each page points to the parent buffer,
+ so using static_deallocate here,
+ which will find the correct partition by itself.
+ */
+ B::static_deallocate(safe_pfs);
+ }
+
+ iterator_type iterate()
+ {
+ return iterator_type(this, 0, 0);
+ }
+
+ iterator_type iterate(uint user_index)
+ {
+ uint partition_index;
+ uint sub_index;
+ unpack_index(user_index, &partition_index, &sub_index);
+ return iterator_type(this, partition_index, sub_index);
+ }
+
+ void apply(function_type fct)
+ {
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ m_partitions[i]->apply(fct);
+ }
+ }
+
+ void apply_all(function_type fct)
+ {
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ m_partitions[i]->apply_all(fct);
+ }
+ }
+
+ void apply(processor_type & proc)
+ {
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ m_partitions[i]->apply(proc);
+ }
+ }
+
+ void apply_all(processor_type & proc)
+ {
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ m_partitions[i]->apply_all(proc);
+ }
+ }
+
+ value_type* get(uint user_index)
+ {
+ uint partition_index;
+ uint sub_index;
+ unpack_index(user_index, &partition_index, &sub_index);
+
+ if (partition_index >= PFS_PARTITION_COUNT)
+ {
+ return NULL;
+ }
+
+ return m_partitions[partition_index]->get(sub_index);
+ }
+
+ value_type* get(uint user_index, bool *has_more)
+ {
+ uint partition_index;
+ uint sub_index;
+ unpack_index(user_index, &partition_index, &sub_index);
+
+ if (partition_index >= PFS_PARTITION_COUNT)
+ {
+ *has_more= false;
+ return NULL;
+ }
+
+ *has_more= true;
+ return m_partitions[partition_index]->get(sub_index);
+ }
+
+ value_type *sanitize(value_type *unsafe)
+ {
+ value_type *safe= NULL;
+
+ for (int i=0; i < PFS_PARTITION_COUNT; i++)
+ {
+ safe= m_partitions[i]->sanitize(unsafe);
+ if (safe != NULL)
+ {
+ return safe;
+ }
+ }
+
+ return safe;
+ }
+
+private:
+ static void pack_index(uint partition_index, uint sub_index, uint *user_index)
+ {
+ /* 2^8 = 256 partitions max */
+ compile_time_assert(PFS_PARTITION_COUNT <= (1 << 8));
+ /* 2^24 = 16777216 max per partitioned buffer. */
+ compile_time_assert((B::MAX_SIZE) <= (1 << 24));
+
+ *user_index= (partition_index << 24) + sub_index;
+ }
+
+ static void unpack_index(uint user_index, uint *partition_index, uint *sub_index)
+ {
+ *partition_index= user_index >> 24;
+ *sub_index= user_index & 0x00FFFFFF;
+ }
+
+ value_type* scan_next(uint & partition_index, uint & sub_index, uint * found_partition, uint * found_sub_index)
+ {
+ value_type *record= NULL;
+ DBUG_ASSERT(partition_index < PFS_PARTITION_COUNT);
+
+ while (partition_index < PFS_PARTITION_COUNT)
+ {
+ sub_iterator_type sub_iterator= m_partitions[partition_index]->iterate(sub_index);
+ record= sub_iterator.scan_next(found_sub_index);
+ if (record != NULL)
+ {
+ *found_partition= partition_index;
+ sub_index= *found_sub_index + 1;
+ return record;
+ }
+
+ partition_index++;
+ sub_index= 0;
+ }
+
+ *found_partition= PFS_PARTITION_COUNT;
+ *found_sub_index= 0;
+ sub_index= 0;
+ return NULL;
+ }
+
+ B *m_partitions[PFS_PARTITION_COUNT];
+};
+
+template <class B, int PFS_PARTITION_COUNT>
+class PFS_partitioned_buffer_scalable_iterator
+{
+public:
+ friend class PFS_partitioned_buffer_scalable_container<B, PFS_PARTITION_COUNT>;
+
+ typedef typename B::value_type value_type;
+ typedef PFS_partitioned_buffer_scalable_container<B, PFS_PARTITION_COUNT> container_type;
+
+ value_type* scan_next()
+ {
+ uint unused_partition;
+ uint unused_sub_index;
+ return m_container->scan_next(m_partition, m_sub_index, & unused_partition, & unused_sub_index);
+ }
+
+ value_type* scan_next(uint *found_user_index)
+ {
+ uint found_partition;
+ uint found_sub_index;
+ value_type *record;
+ record= m_container->scan_next(m_partition, m_sub_index, &found_partition, &found_sub_index);
+ container_type::pack_index(found_partition, found_sub_index, found_user_index);
+ return record;
+ }
+
+private:
+ PFS_partitioned_buffer_scalable_iterator(container_type *container, uint partition, uint sub_index)
+ : m_container(container),
+ m_partition(partition),
+ m_sub_index(sub_index)
+ {}
+
+ container_type *m_container;
+ uint m_partition;
+ uint m_sub_index;
+};
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_mutex, 1024, 1024> PFS_mutex_basic_container;
+typedef PFS_partitioned_buffer_scalable_container<PFS_mutex_basic_container, PSI_COUNT_VOLATILITY> PFS_mutex_container;
+#else
+typedef PFS_buffer_container<PFS_mutex> PFS_mutex_container;
+#endif
+typedef PFS_mutex_container::iterator_type PFS_mutex_iterator;
+extern PFS_mutex_container global_mutex_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_rwlock, 1024, 1024> PFS_rwlock_container;
+#else
+typedef PFS_buffer_container<PFS_rwlock> PFS_rwlock_container;
+#endif
+typedef PFS_rwlock_container::iterator_type PFS_rwlock_iterator;
+extern PFS_rwlock_container global_rwlock_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_cond, 256, 256> PFS_cond_container;
+#else
+typedef PFS_buffer_container<PFS_cond> PFS_cond_container;
+#endif
+typedef PFS_cond_container::iterator_type PFS_cond_iterator;
+extern PFS_cond_container global_cond_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_file, 4 * 1024, 4 * 1024> PFS_file_container;
+#else
+typedef PFS_buffer_container<PFS_file> PFS_file_container;
+#endif
+typedef PFS_file_container::iterator_type PFS_file_iterator;
+extern PFS_file_container global_file_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_socket, 256, 256> PFS_socket_container;
+#else
+typedef PFS_buffer_container<PFS_socket> PFS_socket_container;
+#endif
+typedef PFS_socket_container::iterator_type PFS_socket_iterator;
+extern PFS_socket_container global_socket_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_metadata_lock, 1024, 1024> PFS_mdl_container;
+#else
+typedef PFS_buffer_container<PFS_metadata_lock> PFS_mdl_container;
+#endif
+typedef PFS_mdl_container::iterator_type PFS_mdl_iterator;
+extern PFS_mdl_container global_mdl_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_setup_actor, 128, 1024> PFS_setup_actor_container;
+#else
+typedef PFS_buffer_container<PFS_setup_actor> PFS_setup_actor_container;
+#endif
+typedef PFS_setup_actor_container::iterator_type PFS_setup_actor_iterator;
+extern PFS_setup_actor_container global_setup_actor_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_setup_object, 128, 1024> PFS_setup_object_container;
+#else
+typedef PFS_buffer_container<PFS_setup_object> PFS_setup_object_container;
+#endif
+typedef PFS_setup_object_container::iterator_type PFS_setup_object_iterator;
+extern PFS_setup_object_container global_setup_object_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_table, 1024, 1024> PFS_table_container;
+#else
+typedef PFS_buffer_container<PFS_table> PFS_table_container;
+#endif
+typedef PFS_table_container::iterator_type PFS_table_iterator;
+extern PFS_table_container global_table_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_table_share, 4 * 1024, 4 * 1024> PFS_table_share_container;
+#else
+typedef PFS_buffer_container<PFS_table_share> PFS_table_share_container;
+#endif
+typedef PFS_table_share_container::iterator_type PFS_table_share_iterator;
+extern PFS_table_share_container global_table_share_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_table_share_index, 8 * 1024, 8 * 1024> PFS_table_share_index_container;
+#else
+typedef PFS_buffer_container<PFS_table_share_index> PFS_table_share_index_container;
+#endif
+typedef PFS_table_share_index_container::iterator_type PFS_table_share_index_iterator;
+extern PFS_table_share_index_container global_table_share_index_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_table_share_lock, 4 * 1024, 4 * 1024> PFS_table_share_lock_container;
+#else
+typedef PFS_buffer_container<PFS_table_share_lock> PFS_table_share_lock_container;
+#endif
+typedef PFS_table_share_lock_container::iterator_type PFS_table_share_lock_iterator;
+extern PFS_table_share_lock_container global_table_share_lock_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_program, 1024, 1024> PFS_program_container;
+#else
+typedef PFS_buffer_container<PFS_program> PFS_program_container;
+#endif
+typedef PFS_program_container::iterator_type PFS_program_iterator;
+extern PFS_program_container global_program_container;
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_prepared_stmt, 1024, 1024> PFS_prepared_stmt_container;
+#else
+typedef PFS_buffer_container<PFS_prepared_stmt> PFS_prepared_stmt_container;
+#endif
+typedef PFS_prepared_stmt_container::iterator_type PFS_prepared_stmt_iterator;
+extern PFS_prepared_stmt_container global_prepared_stmt_container;
+
+class PFS_account_array : public PFS_buffer_default_array<PFS_account>
+{
+public:
+ PFS_single_stat *m_instr_class_waits_array;
+ PFS_stage_stat *m_instr_class_stages_array;
+ PFS_statement_stat *m_instr_class_statements_array;
+ PFS_transaction_stat *m_instr_class_transactions_array;
+ PFS_memory_stat *m_instr_class_memory_array;
+};
+
+class PFS_account_allocator
+{
+public:
+ int alloc_array(PFS_account_array *array);
+ void free_array(PFS_account_array *array);
+};
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_account,
+ 128,
+ 128,
+ PFS_account_array,
+ PFS_account_allocator> PFS_account_container;
+#else
+typedef PFS_buffer_container<PFS_account,
+ PFS_account_array,
+ PFS_account_allocator> PFS_account_container;
+#endif
+typedef PFS_account_container::iterator_type PFS_account_iterator;
+extern PFS_account_container global_account_container;
+
+class PFS_host_array : public PFS_buffer_default_array<PFS_host>
+{
+public:
+ PFS_single_stat *m_instr_class_waits_array;
+ PFS_stage_stat *m_instr_class_stages_array;
+ PFS_statement_stat *m_instr_class_statements_array;
+ PFS_transaction_stat *m_instr_class_transactions_array;
+ PFS_memory_stat *m_instr_class_memory_array;
+};
+
+class PFS_host_allocator
+{
+public:
+ int alloc_array(PFS_host_array *array);
+ void free_array(PFS_host_array *array);
+};
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_host,
+ 128,
+ 128,
+ PFS_host_array,
+ PFS_host_allocator> PFS_host_container;
+#else
+typedef PFS_buffer_container<PFS_host,
+ PFS_host_array,
+ PFS_host_allocator> PFS_host_container;
+#endif
+typedef PFS_host_container::iterator_type PFS_host_iterator;
+extern PFS_host_container global_host_container;
+
+class PFS_thread_array : public PFS_buffer_default_array<PFS_thread>
+{
+public:
+ PFS_single_stat *m_instr_class_waits_array;
+ PFS_stage_stat *m_instr_class_stages_array;
+ PFS_statement_stat *m_instr_class_statements_array;
+ PFS_transaction_stat *m_instr_class_transactions_array;
+ PFS_memory_stat *m_instr_class_memory_array;
+
+ PFS_events_waits *m_waits_history_array;
+ PFS_events_stages *m_stages_history_array;
+ PFS_events_statements *m_statements_history_array;
+ PFS_events_statements *m_statements_stack_array;
+ PFS_events_transactions *m_transactions_history_array;
+ char *m_session_connect_attrs_array;
+
+ char *m_current_stmts_text_array;
+ char *m_history_stmts_text_array;
+ unsigned char *m_current_stmts_digest_token_array;
+ unsigned char *m_history_stmts_digest_token_array;
+};
+
+class PFS_thread_allocator
+{
+public:
+ int alloc_array(PFS_thread_array *array);
+ void free_array(PFS_thread_array *array);
+};
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_thread,
+ 256,
+ 256,
+ PFS_thread_array,
+ PFS_thread_allocator> PFS_thread_container;
+#else
+typedef PFS_buffer_container<PFS_thread,
+ PFS_thread_array,
+ PFS_thread_allocator> PFS_thread_container;
+#endif
+typedef PFS_thread_container::iterator_type PFS_thread_iterator;
+extern PFS_thread_container global_thread_container;
+
+class PFS_user_array : public PFS_buffer_default_array<PFS_user>
+{
+public:
+ PFS_single_stat *m_instr_class_waits_array;
+ PFS_stage_stat *m_instr_class_stages_array;
+ PFS_statement_stat *m_instr_class_statements_array;
+ PFS_transaction_stat *m_instr_class_transactions_array;
+ PFS_memory_stat *m_instr_class_memory_array;
+};
+
+class PFS_user_allocator
+{
+public:
+ int alloc_array(PFS_user_array *array);
+ void free_array(PFS_user_array *array);
+};
+
+#ifdef USE_SCALABLE
+typedef PFS_buffer_scalable_container<PFS_user,
+ 128,
+ 128,
+ PFS_user_array,
+ PFS_user_allocator> PFS_user_container;
+#else
+typedef PFS_buffer_container<PFS_user,
+ PFS_user_array,
+ PFS_user_allocator> PFS_user_container;
+#endif
+typedef PFS_user_container::iterator_type PFS_user_iterator;
+extern PFS_user_container global_user_container;
+
+#endif
+
diff --git a/storage/perfschema/pfs_builtin_memory.cc b/storage/perfschema/pfs_builtin_memory.cc
new file mode 100644
index 00000000000..676a9094976
--- /dev/null
+++ b/storage/perfschema/pfs_builtin_memory.cc
@@ -0,0 +1,382 @@
+/* Copyright (c) 2014, 2019, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include "my_global.h"
+#include "m_string.h"
+#include "pfs_global.h"
+#include "pfs_builtin_memory.h"
+
+PFS_builtin_memory_class builtin_memory_mutex;
+PFS_builtin_memory_class builtin_memory_rwlock;
+PFS_builtin_memory_class builtin_memory_cond;
+PFS_builtin_memory_class builtin_memory_file;
+PFS_builtin_memory_class builtin_memory_socket;
+PFS_builtin_memory_class builtin_memory_mdl;
+PFS_builtin_memory_class builtin_memory_file_handle;
+
+PFS_builtin_memory_class builtin_memory_account;
+PFS_builtin_memory_class builtin_memory_account_waits;
+PFS_builtin_memory_class builtin_memory_account_stages;
+PFS_builtin_memory_class builtin_memory_account_statements;
+PFS_builtin_memory_class builtin_memory_account_transactions;
+PFS_builtin_memory_class builtin_memory_account_memory;
+
+PFS_builtin_memory_class builtin_memory_global_stages;
+PFS_builtin_memory_class builtin_memory_global_statements;
+PFS_builtin_memory_class builtin_memory_global_memory;
+
+PFS_builtin_memory_class builtin_memory_host;
+PFS_builtin_memory_class builtin_memory_host_waits;
+PFS_builtin_memory_class builtin_memory_host_stages;
+PFS_builtin_memory_class builtin_memory_host_statements;
+PFS_builtin_memory_class builtin_memory_host_transactions;
+PFS_builtin_memory_class builtin_memory_host_memory;
+
+PFS_builtin_memory_class builtin_memory_thread;
+PFS_builtin_memory_class builtin_memory_thread_waits;
+PFS_builtin_memory_class builtin_memory_thread_stages;
+PFS_builtin_memory_class builtin_memory_thread_statements;
+PFS_builtin_memory_class builtin_memory_thread_transactions;
+PFS_builtin_memory_class builtin_memory_thread_memory;
+
+PFS_builtin_memory_class builtin_memory_thread_waits_history;
+PFS_builtin_memory_class builtin_memory_thread_stages_history;
+PFS_builtin_memory_class builtin_memory_thread_statements_history;
+PFS_builtin_memory_class builtin_memory_thread_statements_history_tokens;
+PFS_builtin_memory_class builtin_memory_thread_statements_history_sqltext;
+PFS_builtin_memory_class builtin_memory_thread_statements_stack;
+PFS_builtin_memory_class builtin_memory_thread_statements_stack_tokens;
+PFS_builtin_memory_class builtin_memory_thread_statements_stack_sqltext;
+PFS_builtin_memory_class builtin_memory_thread_transaction_history;
+PFS_builtin_memory_class builtin_memory_thread_session_connect_attrs;
+
+PFS_builtin_memory_class builtin_memory_user;
+PFS_builtin_memory_class builtin_memory_user_waits;
+PFS_builtin_memory_class builtin_memory_user_stages;
+PFS_builtin_memory_class builtin_memory_user_statements;
+PFS_builtin_memory_class builtin_memory_user_transactions;
+PFS_builtin_memory_class builtin_memory_user_memory;
+
+PFS_builtin_memory_class builtin_memory_mutex_class;
+PFS_builtin_memory_class builtin_memory_rwlock_class;
+PFS_builtin_memory_class builtin_memory_cond_class;
+PFS_builtin_memory_class builtin_memory_thread_class;
+PFS_builtin_memory_class builtin_memory_file_class;
+PFS_builtin_memory_class builtin_memory_socket_class;
+PFS_builtin_memory_class builtin_memory_stage_class;
+PFS_builtin_memory_class builtin_memory_statement_class;
+PFS_builtin_memory_class builtin_memory_memory_class;
+
+PFS_builtin_memory_class builtin_memory_setup_actor;
+PFS_builtin_memory_class builtin_memory_setup_object;
+
+PFS_builtin_memory_class builtin_memory_digest;
+PFS_builtin_memory_class builtin_memory_digest_tokens;
+
+PFS_builtin_memory_class builtin_memory_stages_history_long;
+PFS_builtin_memory_class builtin_memory_statements_history_long;
+PFS_builtin_memory_class builtin_memory_statements_history_long_tokens;
+PFS_builtin_memory_class builtin_memory_statements_history_long_sqltext;
+PFS_builtin_memory_class builtin_memory_transactions_history_long;
+PFS_builtin_memory_class builtin_memory_waits_history_long;
+
+PFS_builtin_memory_class builtin_memory_table;
+PFS_builtin_memory_class builtin_memory_table_share;
+PFS_builtin_memory_class builtin_memory_table_share_index;
+PFS_builtin_memory_class builtin_memory_table_share_lock;
+
+PFS_builtin_memory_class builtin_memory_program;
+PFS_builtin_memory_class builtin_memory_prepared_stmt;
+
+PFS_builtin_memory_class builtin_memory_scalable_buffer;
+
+static void init_builtin_memory_class(PFS_builtin_memory_class *klass, const char* name)
+{
+ klass->m_class.m_type= PFS_CLASS_MEMORY;
+ klass->m_class.m_enabled= true; /* Immutable */
+ klass->m_class.m_timed= false; /* Immutable */
+ klass->m_class.m_flags= PSI_FLAG_GLOBAL;
+ klass->m_class.m_event_name_index= 0;
+ my_snprintf(klass->m_class.m_name, sizeof(klass->m_class.m_name), "%.*s",
+ PFS_MAX_INFO_NAME_LENGTH - 1, name);
+ klass->m_class.m_name_length= static_cast<uint>(strlen(name));
+ DBUG_ASSERT(klass->m_class.m_name_length < sizeof(klass->m_class.m_name));
+ klass->m_class.m_timer= NULL;
+
+ klass->m_stat.reset();
+}
+
+void init_all_builtin_memory_class()
+{
+ init_builtin_memory_class( & builtin_memory_mutex,
+ "memory/performance_schema/mutex_instances");
+ init_builtin_memory_class( & builtin_memory_rwlock,
+ "memory/performance_schema/rwlock_instances");
+ init_builtin_memory_class( & builtin_memory_cond,
+ "memory/performance_schema/cond_instances");
+ init_builtin_memory_class( & builtin_memory_file,
+ "memory/performance_schema/file_instances");
+ init_builtin_memory_class( & builtin_memory_socket,
+ "memory/performance_schema/socket_instances");
+ init_builtin_memory_class( & builtin_memory_mdl,
+ "memory/performance_schema/metadata_locks");
+ init_builtin_memory_class( & builtin_memory_file_handle,
+ "memory/performance_schema/file_handle");
+
+ init_builtin_memory_class( & builtin_memory_account,
+ "memory/performance_schema/accounts");
+ init_builtin_memory_class( & builtin_memory_account_waits,
+ "memory/performance_schema/events_waits_summary_by_account_by_event_name");
+ init_builtin_memory_class( & builtin_memory_account_stages,
+ "memory/performance_schema/events_stages_summary_by_account_by_event_name");
+ init_builtin_memory_class( & builtin_memory_account_statements,
+ "memory/performance_schema/events_statements_summary_by_account_by_event_name");
+ init_builtin_memory_class( & builtin_memory_account_transactions,
+ "memory/performance_schema/events_transactions_summary_by_account_by_event_name");
+ init_builtin_memory_class( & builtin_memory_account_memory,
+ "memory/performance_schema/memory_summary_by_account_by_event_name");
+
+ init_builtin_memory_class( & builtin_memory_global_stages,
+ "memory/performance_schema/events_stages_summary_global_by_event_name");
+ init_builtin_memory_class( & builtin_memory_global_statements,
+ "memory/performance_schema/events_statements_summary_global_by_event_name");
+ init_builtin_memory_class( & builtin_memory_global_memory,
+ "memory/performance_schema/memory_summary_global_by_event_name");
+
+ init_builtin_memory_class( & builtin_memory_host,
+ "memory/performance_schema/hosts");
+ init_builtin_memory_class( & builtin_memory_host_waits,
+ "memory/performance_schema/events_waits_summary_by_host_by_event_name");
+ init_builtin_memory_class( & builtin_memory_host_stages,
+ "memory/performance_schema/events_stages_summary_by_host_by_event_name");
+ init_builtin_memory_class( & builtin_memory_host_statements,
+ "memory/performance_schema/events_statements_summary_by_host_by_event_name");
+ init_builtin_memory_class( & builtin_memory_host_transactions,
+ "memory/performance_schema/events_transactions_summary_by_host_by_event_name");
+ init_builtin_memory_class( & builtin_memory_host_memory,
+ "memory/performance_schema/memory_summary_by_host_by_event_name");
+
+ init_builtin_memory_class( & builtin_memory_thread,
+ "memory/performance_schema/threads");
+ init_builtin_memory_class( & builtin_memory_thread_waits,
+ "memory/performance_schema/events_waits_summary_by_thread_by_event_name");
+ init_builtin_memory_class( & builtin_memory_thread_stages,
+ "memory/performance_schema/events_stages_summary_by_thread_by_event_name");
+ init_builtin_memory_class( & builtin_memory_thread_statements,
+ "memory/performance_schema/events_statements_summary_by_thread_by_event_name");
+ init_builtin_memory_class( & builtin_memory_thread_transactions,
+ "memory/performance_schema/events_transactions_summary_by_thread_by_event_name");
+ init_builtin_memory_class( & builtin_memory_thread_memory,
+ "memory/performance_schema/memory_summary_by_thread_by_event_name");
+
+ init_builtin_memory_class( & builtin_memory_thread_waits_history,
+ "memory/performance_schema/events_waits_history");
+ init_builtin_memory_class( & builtin_memory_thread_stages_history,
+ "memory/performance_schema/events_stages_history");
+ init_builtin_memory_class( & builtin_memory_thread_statements_history,
+ "memory/performance_schema/events_statements_history");
+ init_builtin_memory_class( & builtin_memory_thread_statements_history_tokens,
+ "memory/performance_schema/events_statements_history.tokens");
+ init_builtin_memory_class( & builtin_memory_thread_statements_history_sqltext,
+ "memory/performance_schema/events_statements_history.sqltext");
+ init_builtin_memory_class( & builtin_memory_thread_statements_stack,
+ "memory/performance_schema/events_statements_current");
+ init_builtin_memory_class( & builtin_memory_thread_statements_stack_tokens,
+ "memory/performance_schema/events_statements_current.tokens");
+ init_builtin_memory_class( & builtin_memory_thread_statements_stack_sqltext,
+ "memory/performance_schema/events_statements_current.sqltext");
+ init_builtin_memory_class( & builtin_memory_thread_transaction_history,
+ "memory/performance_schema/events_transactions_history");
+ init_builtin_memory_class( & builtin_memory_thread_session_connect_attrs,
+ "memory/performance_schema/session_connect_attrs");
+
+ init_builtin_memory_class( & builtin_memory_user,
+ "memory/performance_schema/users");
+ init_builtin_memory_class( & builtin_memory_user_waits,
+ "memory/performance_schema/events_waits_summary_by_user_by_event_name");
+ init_builtin_memory_class( & builtin_memory_user_stages,
+ "memory/performance_schema/events_stages_summary_by_user_by_event_name");
+ init_builtin_memory_class( & builtin_memory_user_statements,
+ "memory/performance_schema/events_statements_summary_by_user_by_event_name");
+ init_builtin_memory_class( & builtin_memory_user_transactions,
+ "memory/performance_schema/events_transactions_summary_by_user_by_event_name");
+ init_builtin_memory_class( & builtin_memory_user_memory,
+ "memory/performance_schema/memory_summary_by_user_by_event_name");
+
+ init_builtin_memory_class( & builtin_memory_mutex_class,
+ "memory/performance_schema/mutex_class");
+ init_builtin_memory_class( & builtin_memory_rwlock_class,
+ "memory/performance_schema/rwlock_class");
+ init_builtin_memory_class( & builtin_memory_cond_class,
+ "memory/performance_schema/cond_class");
+ init_builtin_memory_class( & builtin_memory_thread_class,
+ "memory/performance_schema/thread_class");
+ init_builtin_memory_class( & builtin_memory_file_class,
+ "memory/performance_schema/file_class");
+ init_builtin_memory_class( & builtin_memory_socket_class,
+ "memory/performance_schema/socket_class");
+ init_builtin_memory_class( & builtin_memory_stage_class,
+ "memory/performance_schema/stage_class");
+ init_builtin_memory_class( & builtin_memory_statement_class,
+ "memory/performance_schema/statement_class");
+ init_builtin_memory_class( & builtin_memory_memory_class,
+ "memory/performance_schema/memory_class");
+
+ init_builtin_memory_class( & builtin_memory_setup_actor,
+ "memory/performance_schema/setup_actors");
+ init_builtin_memory_class( & builtin_memory_setup_object,
+ "memory/performance_schema/setup_objects");
+
+ init_builtin_memory_class( & builtin_memory_digest,
+ "memory/performance_schema/events_statements_summary_by_digest");
+ init_builtin_memory_class( & builtin_memory_digest_tokens,
+ "memory/performance_schema/events_statements_summary_by_digest.tokens");
+
+ init_builtin_memory_class( & builtin_memory_stages_history_long,
+ "memory/performance_schema/events_stages_history_long");
+ init_builtin_memory_class( & builtin_memory_statements_history_long,
+ "memory/performance_schema/events_statements_history_long");
+ init_builtin_memory_class( & builtin_memory_statements_history_long_tokens,
+ "memory/performance_schema/events_statements_history_long.tokens");
+ init_builtin_memory_class( & builtin_memory_statements_history_long_sqltext,
+ "memory/performance_schema/events_statements_history_long.sqltext");
+ init_builtin_memory_class( & builtin_memory_transactions_history_long,
+ "memory/performance_schema/events_transactions_history_long");
+ init_builtin_memory_class( & builtin_memory_waits_history_long,
+ "memory/performance_schema/events_waits_history_long");
+
+ init_builtin_memory_class( & builtin_memory_table,
+ "memory/performance_schema/table_handles");
+ init_builtin_memory_class( & builtin_memory_table_share,
+ "memory/performance_schema/table_shares");
+ init_builtin_memory_class( & builtin_memory_table_share_index,
+ "memory/performance_schema/table_io_waits_summary_by_index_usage");
+ init_builtin_memory_class( & builtin_memory_table_share_lock,
+ "memory/performance_schema/table_lock_waits_summary_by_table");
+
+ init_builtin_memory_class( & builtin_memory_program,
+ "memory/performance_schema/events_statements_summary_by_program");
+ init_builtin_memory_class( & builtin_memory_prepared_stmt,
+ "memory/performance_schema/prepared_statements_instances");
+
+ init_builtin_memory_class( & builtin_memory_scalable_buffer,
+ "memory/performance_schema/scalable_buffer");
+}
+
+static PFS_builtin_memory_class* all_builtin_memory[]=
+{
+ & builtin_memory_mutex,
+ & builtin_memory_rwlock,
+ & builtin_memory_cond,
+ & builtin_memory_file,
+ & builtin_memory_socket,
+ & builtin_memory_mdl,
+ & builtin_memory_file_handle,
+
+ & builtin_memory_account,
+ & builtin_memory_account_waits,
+ & builtin_memory_account_stages,
+ & builtin_memory_account_statements,
+ & builtin_memory_account_transactions,
+ & builtin_memory_account_memory,
+
+ & builtin_memory_global_stages,
+ & builtin_memory_global_statements,
+ & builtin_memory_global_memory,
+
+ & builtin_memory_host,
+ & builtin_memory_host_waits,
+ & builtin_memory_host_stages,
+ & builtin_memory_host_statements,
+ & builtin_memory_host_transactions,
+ & builtin_memory_host_memory,
+
+ & builtin_memory_thread,
+ & builtin_memory_thread_waits,
+ & builtin_memory_thread_stages,
+ & builtin_memory_thread_statements,
+ & builtin_memory_thread_transactions,
+ & builtin_memory_thread_memory,
+
+ & builtin_memory_thread_waits_history,
+ & builtin_memory_thread_stages_history,
+ & builtin_memory_thread_statements_history,
+ & builtin_memory_thread_statements_history_tokens,
+ & builtin_memory_thread_statements_history_sqltext,
+ & builtin_memory_thread_statements_stack,
+ & builtin_memory_thread_statements_stack_tokens,
+ & builtin_memory_thread_statements_stack_sqltext,
+ & builtin_memory_thread_transaction_history,
+ & builtin_memory_thread_session_connect_attrs,
+
+ & builtin_memory_user,
+ & builtin_memory_user_waits,
+ & builtin_memory_user_stages,
+ & builtin_memory_user_statements,
+ & builtin_memory_user_transactions,
+ & builtin_memory_user_memory,
+
+ & builtin_memory_mutex_class,
+ & builtin_memory_rwlock_class,
+ & builtin_memory_cond_class,
+ & builtin_memory_thread_class,
+ & builtin_memory_file_class,
+ & builtin_memory_socket_class,
+ & builtin_memory_stage_class,
+ & builtin_memory_statement_class,
+ & builtin_memory_memory_class,
+
+ & builtin_memory_setup_actor,
+ & builtin_memory_setup_object,
+
+ & builtin_memory_digest,
+ & builtin_memory_digest_tokens,
+
+ & builtin_memory_stages_history_long,
+ & builtin_memory_statements_history_long,
+ & builtin_memory_statements_history_long_tokens,
+ & builtin_memory_statements_history_long_sqltext,
+ & builtin_memory_transactions_history_long,
+ & builtin_memory_waits_history_long,
+
+ & builtin_memory_table,
+ & builtin_memory_table_share,
+ & builtin_memory_table_share_index,
+ & builtin_memory_table_share_lock,
+
+ & builtin_memory_program,
+ & builtin_memory_prepared_stmt,
+
+ & builtin_memory_scalable_buffer,
+
+ NULL
+};
+
+
+PFS_builtin_memory_class *find_builtin_memory_class(PFS_builtin_memory_key key)
+{
+ if (key == 0)
+ return NULL;
+
+ return all_builtin_memory[key - 1];
+}
+
diff --git a/storage/perfschema/pfs_builtin_memory.h b/storage/perfschema/pfs_builtin_memory.h
new file mode 100644
index 00000000000..1c00275d5b9
--- /dev/null
+++ b/storage/perfschema/pfs_builtin_memory.h
@@ -0,0 +1,143 @@
+/* Copyright (c) 2014, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef PFS_BUILTIN_MEMORY_H
+#define PFS_BUILTIN_MEMORY_H
+
+#include "my_global.h"
+#include "pfs_global.h"
+#include "pfs_instr_class.h"
+
+/**
+ @file storage/perfschema/pfs_builtin_memory.h
+ Performance schema instruments meta data (declarations).
+*/
+
+typedef uint PFS_builtin_memory_key;
+
+struct PFS_builtin_memory_class
+{
+ PFS_memory_class m_class;
+ PFS_memory_stat m_stat;
+
+ inline void count_alloc(size_t size)
+ {
+ m_stat.count_builtin_alloc(size);
+ }
+
+ inline void count_free(size_t size)
+ {
+ m_stat.count_builtin_free(size);
+ }
+};
+
+void init_all_builtin_memory_class();
+
+PFS_builtin_memory_class *find_builtin_memory_class(PFS_builtin_memory_key);
+
+extern PFS_builtin_memory_class builtin_memory_mutex;
+extern PFS_builtin_memory_class builtin_memory_rwlock;
+extern PFS_builtin_memory_class builtin_memory_cond;
+extern PFS_builtin_memory_class builtin_memory_file;
+extern PFS_builtin_memory_class builtin_memory_socket;
+extern PFS_builtin_memory_class builtin_memory_mdl;
+extern PFS_builtin_memory_class builtin_memory_file_handle;
+
+extern PFS_builtin_memory_class builtin_memory_account;
+extern PFS_builtin_memory_class builtin_memory_account_waits;
+extern PFS_builtin_memory_class builtin_memory_account_stages;
+extern PFS_builtin_memory_class builtin_memory_account_statements;
+extern PFS_builtin_memory_class builtin_memory_account_transactions;
+extern PFS_builtin_memory_class builtin_memory_account_memory;
+
+extern PFS_builtin_memory_class builtin_memory_global_stages;
+extern PFS_builtin_memory_class builtin_memory_global_statements;
+extern PFS_builtin_memory_class builtin_memory_global_memory;
+
+extern PFS_builtin_memory_class builtin_memory_host;
+extern PFS_builtin_memory_class builtin_memory_host_waits;
+extern PFS_builtin_memory_class builtin_memory_host_stages;
+extern PFS_builtin_memory_class builtin_memory_host_statements;
+extern PFS_builtin_memory_class builtin_memory_host_transactions;
+extern PFS_builtin_memory_class builtin_memory_host_memory;
+
+extern PFS_builtin_memory_class builtin_memory_thread;
+extern PFS_builtin_memory_class builtin_memory_thread_waits;
+extern PFS_builtin_memory_class builtin_memory_thread_stages;
+extern PFS_builtin_memory_class builtin_memory_thread_statements;
+extern PFS_builtin_memory_class builtin_memory_thread_transactions;
+extern PFS_builtin_memory_class builtin_memory_thread_memory;
+
+extern PFS_builtin_memory_class builtin_memory_thread_waits_history;
+extern PFS_builtin_memory_class builtin_memory_thread_stages_history;
+extern PFS_builtin_memory_class builtin_memory_thread_statements_history;
+extern PFS_builtin_memory_class builtin_memory_thread_statements_history_tokens;
+extern PFS_builtin_memory_class builtin_memory_thread_statements_history_sqltext;
+extern PFS_builtin_memory_class builtin_memory_thread_statements_stack;
+extern PFS_builtin_memory_class builtin_memory_thread_statements_stack_tokens;
+extern PFS_builtin_memory_class builtin_memory_thread_statements_stack_sqltext;
+extern PFS_builtin_memory_class builtin_memory_thread_transaction_history;
+extern PFS_builtin_memory_class builtin_memory_thread_session_connect_attrs;
+
+extern PFS_builtin_memory_class builtin_memory_user;
+extern PFS_builtin_memory_class builtin_memory_user_waits;
+extern PFS_builtin_memory_class builtin_memory_user_stages;
+extern PFS_builtin_memory_class builtin_memory_user_statements;
+extern PFS_builtin_memory_class builtin_memory_user_transactions;
+extern PFS_builtin_memory_class builtin_memory_user_memory;
+
+extern PFS_builtin_memory_class builtin_memory_mutex_class;
+extern PFS_builtin_memory_class builtin_memory_rwlock_class;
+extern PFS_builtin_memory_class builtin_memory_cond_class;
+extern PFS_builtin_memory_class builtin_memory_thread_class;
+extern PFS_builtin_memory_class builtin_memory_file_class;
+extern PFS_builtin_memory_class builtin_memory_socket_class;
+extern PFS_builtin_memory_class builtin_memory_stage_class;
+extern PFS_builtin_memory_class builtin_memory_statement_class;
+extern PFS_builtin_memory_class builtin_memory_memory_class;
+
+extern PFS_builtin_memory_class builtin_memory_setup_actor;
+extern PFS_builtin_memory_class builtin_memory_setup_object;
+
+extern PFS_builtin_memory_class builtin_memory_digest;
+extern PFS_builtin_memory_class builtin_memory_digest_tokens;
+
+extern PFS_builtin_memory_class builtin_memory_stages_history_long;
+extern PFS_builtin_memory_class builtin_memory_statements_history_long;
+extern PFS_builtin_memory_class builtin_memory_statements_history_long_tokens;
+extern PFS_builtin_memory_class builtin_memory_statements_history_long_sqltext;
+extern PFS_builtin_memory_class builtin_memory_transactions_history_long;
+extern PFS_builtin_memory_class builtin_memory_waits_history_long;
+
+extern PFS_builtin_memory_class builtin_memory_table;
+extern PFS_builtin_memory_class builtin_memory_table_share;
+extern PFS_builtin_memory_class builtin_memory_table_share_index;
+extern PFS_builtin_memory_class builtin_memory_table_share_lock;
+
+extern PFS_builtin_memory_class builtin_memory_program;
+extern PFS_builtin_memory_class builtin_memory_prepared_stmt;
+
+extern PFS_builtin_memory_class builtin_memory_scalable_buffer;
+
+/** @} */
+#endif
+
diff --git a/storage/perfschema/pfs_column_types.h b/storage/perfschema/pfs_column_types.h
index 09fce551402..e4577fdb22e 100644
--- a/storage/perfschema/pfs_column_types.h
+++ b/storage/perfschema/pfs_column_types.h
@@ -63,9 +63,6 @@
/** Size of the DIGEST columns. */
#define COL_DIGEST_SIZE 64
-/** Size of the DIGEST_TEXT columns. */
-#define COL_DIGEST_TEXT_SIZE 1024
-
/**
Enum values for the TIMER_NAME columns.
This enum is found in the following tables:
@@ -114,78 +111,89 @@ enum enum_operation_type
OPERATION_TYPE_LOCK= 1,
OPERATION_TYPE_TRYLOCK= 2,
- /* Rwlock operations */
+ /* Rwlock operations (RW-lock) */
OPERATION_TYPE_READLOCK= 3,
OPERATION_TYPE_WRITELOCK= 4,
OPERATION_TYPE_TRYREADLOCK= 5,
OPERATION_TYPE_TRYWRITELOCK= 6,
+ /* Rwlock operations (SX-lock) */
+ OPERATION_TYPE_SHAREDLOCK= 7,
+ OPERATION_TYPE_SHAREDEXCLUSIVELOCK= 8,
+ OPERATION_TYPE_EXCLUSIVELOCK= 9,
+ OPERATION_TYPE_TRYSHAREDLOCK= 10,
+ OPERATION_TYPE_TRYSHAREDEXCLUSIVELOCK= 11,
+ OPERATION_TYPE_TRYEXCLUSIVELOCK= 12,
+
/* Cond operations */
- OPERATION_TYPE_WAIT= 7,
- OPERATION_TYPE_TIMEDWAIT= 8,
+ OPERATION_TYPE_WAIT= 13,
+ OPERATION_TYPE_TIMEDWAIT= 14,
/* File operations */
- OPERATION_TYPE_FILECREATE= 9,
- OPERATION_TYPE_FILECREATETMP= 10,
- OPERATION_TYPE_FILEOPEN= 11,
- OPERATION_TYPE_FILESTREAMOPEN= 12,
- OPERATION_TYPE_FILECLOSE= 13,
- OPERATION_TYPE_FILESTREAMCLOSE= 14,
- OPERATION_TYPE_FILEREAD= 15,
- OPERATION_TYPE_FILEWRITE= 16,
- OPERATION_TYPE_FILESEEK= 17,
- OPERATION_TYPE_FILETELL= 18,
- OPERATION_TYPE_FILEFLUSH= 19,
- OPERATION_TYPE_FILESTAT= 20,
- OPERATION_TYPE_FILEFSTAT= 21,
- OPERATION_TYPE_FILECHSIZE= 22,
- OPERATION_TYPE_FILEDELETE= 23,
- OPERATION_TYPE_FILERENAME= 24,
- OPERATION_TYPE_FILESYNC= 25,
+ OPERATION_TYPE_FILECREATE= 15,
+ OPERATION_TYPE_FILECREATETMP= 16,
+ OPERATION_TYPE_FILEOPEN= 17,
+ OPERATION_TYPE_FILESTREAMOPEN= 18,
+ OPERATION_TYPE_FILECLOSE= 19,
+ OPERATION_TYPE_FILESTREAMCLOSE= 20,
+ OPERATION_TYPE_FILEREAD= 21,
+ OPERATION_TYPE_FILEWRITE= 22,
+ OPERATION_TYPE_FILESEEK= 23,
+ OPERATION_TYPE_FILETELL= 24,
+ OPERATION_TYPE_FILEFLUSH= 25,
+ OPERATION_TYPE_FILESTAT= 26,
+ OPERATION_TYPE_FILEFSTAT= 27,
+ OPERATION_TYPE_FILECHSIZE= 28,
+ OPERATION_TYPE_FILEDELETE= 29,
+ OPERATION_TYPE_FILERENAME= 30,
+ OPERATION_TYPE_FILESYNC= 31,
/* Table io operations */
- OPERATION_TYPE_TABLE_FETCH= 26,
- OPERATION_TYPE_TABLE_WRITE_ROW= 27,
- OPERATION_TYPE_TABLE_UPDATE_ROW= 28,
- OPERATION_TYPE_TABLE_DELETE_ROW= 29,
+ OPERATION_TYPE_TABLE_FETCH= 32,
+ OPERATION_TYPE_TABLE_WRITE_ROW= 33,
+ OPERATION_TYPE_TABLE_UPDATE_ROW= 34,
+ OPERATION_TYPE_TABLE_DELETE_ROW= 35,
/* Table lock operations */
- OPERATION_TYPE_TL_READ_NORMAL= 30,
- OPERATION_TYPE_TL_READ_WITH_SHARED_LOCKS= 31,
- OPERATION_TYPE_TL_READ_HIGH_PRIORITY= 32,
- OPERATION_TYPE_TL_READ_NO_INSERTS= 33,
- OPERATION_TYPE_TL_WRITE_ALLOW_WRITE= 34,
- OPERATION_TYPE_TL_WRITE_CONCURRENT_INSERT= 35,
- OPERATION_TYPE_TL_WRITE_DELAYED= 36,
- OPERATION_TYPE_TL_WRITE_LOW_PRIORITY= 37,
- OPERATION_TYPE_TL_WRITE_NORMAL= 38,
- OPERATION_TYPE_TL_READ_EXTERNAL= 39,
- OPERATION_TYPE_TL_WRITE_EXTERNAL= 40,
+ OPERATION_TYPE_TL_READ_NORMAL= 36,
+ OPERATION_TYPE_TL_READ_WITH_SHARED_LOCKS= 37,
+ OPERATION_TYPE_TL_READ_HIGH_PRIORITY= 38,
+ OPERATION_TYPE_TL_READ_NO_INSERTS= 39,
+ OPERATION_TYPE_TL_WRITE_ALLOW_WRITE= 40,
+ OPERATION_TYPE_TL_WRITE_CONCURRENT_INSERT= 41,
+ OPERATION_TYPE_TL_WRITE_DELAYED= 42,
+ OPERATION_TYPE_TL_WRITE_LOW_PRIORITY= 43,
+ OPERATION_TYPE_TL_WRITE_NORMAL= 44,
+ OPERATION_TYPE_TL_READ_EXTERNAL= 45,
+ OPERATION_TYPE_TL_WRITE_EXTERNAL= 46,
/* Socket operations */
- OPERATION_TYPE_SOCKETCREATE = 41,
- OPERATION_TYPE_SOCKETCONNECT = 42,
- OPERATION_TYPE_SOCKETBIND = 43,
- OPERATION_TYPE_SOCKETCLOSE = 44,
- OPERATION_TYPE_SOCKETSEND = 45,
- OPERATION_TYPE_SOCKETRECV = 46,
- OPERATION_TYPE_SOCKETSENDTO = 47,
- OPERATION_TYPE_SOCKETRECVFROM = 48,
- OPERATION_TYPE_SOCKETSENDMSG = 49,
- OPERATION_TYPE_SOCKETRECVMSG = 50,
- OPERATION_TYPE_SOCKETSEEK = 51,
- OPERATION_TYPE_SOCKETOPT = 52,
- OPERATION_TYPE_SOCKETSTAT = 53,
- OPERATION_TYPE_SOCKETSHUTDOWN = 54,
- OPERATION_TYPE_SOCKETSELECT = 55,
+ OPERATION_TYPE_SOCKETCREATE = 47,
+ OPERATION_TYPE_SOCKETCONNECT = 48,
+ OPERATION_TYPE_SOCKETBIND = 49,
+ OPERATION_TYPE_SOCKETCLOSE = 50,
+ OPERATION_TYPE_SOCKETSEND = 51,
+ OPERATION_TYPE_SOCKETRECV = 52,
+ OPERATION_TYPE_SOCKETSENDTO = 53,
+ OPERATION_TYPE_SOCKETRECVFROM = 54,
+ OPERATION_TYPE_SOCKETSENDMSG = 55,
+ OPERATION_TYPE_SOCKETRECVMSG = 56,
+ OPERATION_TYPE_SOCKETSEEK = 57,
+ OPERATION_TYPE_SOCKETOPT = 58,
+ OPERATION_TYPE_SOCKETSTAT = 59,
+ OPERATION_TYPE_SOCKETSHUTDOWN = 60,
+ OPERATION_TYPE_SOCKETSELECT = 61,
/* Idle operation */
- OPERATION_TYPE_IDLE= 56
+ OPERATION_TYPE_IDLE= 62,
+
+ /* Metadata lock operation */
+ OPERATION_TYPE_METADATA= 63
};
/** Integer, first value of @sa enum_operation_type. */
#define FIRST_OPERATION_TYPE (static_cast<int> (OPERATION_TYPE_LOCK))
/** Integer, last value of @sa enum_operation_type. */
-#define LAST_OPERATION_TYPE (static_cast<int> (OPERATION_TYPE_IDLE))
+#define LAST_OPERATION_TYPE (static_cast<int> (OPERATION_TYPE_METADATA))
/** Integer, number of values of @sa enum_operation_type. */
#define COUNT_OPERATION_TYPE (LAST_OPERATION_TYPE - FIRST_OPERATION_TYPE + 1)
@@ -194,13 +202,29 @@ enum enum_operation_type
*/
enum enum_object_type
{
- OBJECT_TYPE_TABLE= 1,
- OBJECT_TYPE_TEMPORARY_TABLE= 2
+ NO_OBJECT_TYPE= 0,
+
+ /* Advertised in SQL ENUM (see table_setup_object.cc) */
+
+ OBJECT_TYPE_EVENT= 1,
+ OBJECT_TYPE_FUNCTION= 2,
+ OBJECT_TYPE_PROCEDURE= 3,
+ OBJECT_TYPE_TABLE= 4,
+ OBJECT_TYPE_TRIGGER= 5,
+
+ /* Not advertised in SQL ENUM, only displayed as VARCHAR */
+
+ OBJECT_TYPE_TEMPORARY_TABLE= 6,
+ OBJECT_TYPE_BACKUP= 7,
+ OBJECT_TYPE_SCHEMA= 8,
+ OBJECT_TYPE_PACKAGE= 9,
+ OBJECT_TYPE_PACKAGE_BODY= 10,
+ OBJECT_TYPE_USER_LEVEL_LOCK= 11,
};
/** Integer, first value of @sa enum_object_type. */
-#define FIRST_OBJECT_TYPE (static_cast<int> (OBJECT_TYPE_TABLE))
+#define FIRST_OBJECT_TYPE (static_cast<int> (OBJECT_TYPE_EVENT))
/** Integer, last value of @sa enum_object_type. */
-#define LAST_OBJECT_TYPE (static_cast<int> (OBJECT_TYPE_TEMPORARY_TABLE))
+#define LAST_OBJECT_TYPE (static_cast<int> (OBJECT_TYPE_USER_LEVEL_LOCK))
/** Integer, number of values of @sa enum_object_type. */
#define COUNT_OBJECT_TYPE (LAST_OBJECT_TYPE - FIRST_OBJECT_TYPE + 1)
@@ -213,17 +237,92 @@ enum enum_object_type
*/
enum enum_event_type
{
- EVENT_TYPE_STATEMENT= 1,
- EVENT_TYPE_STAGE= 2,
- EVENT_TYPE_WAIT= 3
+ EVENT_TYPE_TRANSACTION= 1,
+ EVENT_TYPE_STATEMENT= 2,
+ EVENT_TYPE_STAGE= 3,
+ EVENT_TYPE_WAIT= 4
};
/** Integer, first value of @sa enum_event_type. */
-#define FIRST_EVENT_TYPE (static_cast<int> (EVENT_TYPE_STATEMENT))
+#define FIRST_EVENT_TYPE (static_cast<int> (EVENT_TYPE_TRANSACTION))
/** Integer, last value of @sa enum_event_type. */
#define LAST_EVENT_TYPE (static_cast<int> (EVENT_TYPE_WAIT))
/** Integer, number of values of @sa enum_event_type. */
#define COUNT_EVENT_TYPE (LAST_EVENT_TYPE - FIRST_EVENT_TYPE + 1)
+/**
+ Enum values for transaction state columns.
+*/
+enum enum_transaction_state
+{
+ TRANS_STATE_ACTIVE= 1,
+ TRANS_STATE_COMMITTED= 2,
+ TRANS_STATE_ROLLED_BACK= 3
+};
+
+/** Integer, first value of @sa enum_transaction_state. */
+#define FIRST_TRANS_STATE (static_cast<int> (TRANS_STATE_ACTIVE))
+/** Integer, last value of @sa enum_transaction_state. */
+#define LAST_TRANS_STATE (static_cast<int> (TRANS_STATE_ROLLED_BACK))
+/** Integer, number of values of @sa enum_transaction_state. */
+#define COUNT_TRANS_STATE (LAST_TRANS_STATE - FIRST_TRANS_STATE + 1)
+
+/**
+ Enum values for XA transaction state columns. Enums 0-3 match those used by
+ the server. See XID_STATE::enum xa_states in xa.h.
+*/
+enum enum_xa_transaction_state
+{
+ TRANS_STATE_XA_NOTR=-1,
+ TRANS_STATE_XA_ACTIVE=0,
+ TRANS_STATE_XA_IDLE,
+ TRANS_STATE_XA_PREPARED,
+ TRANS_STATE_XA_ROLLBACK_ONLY,
+ TRANS_STATE_XA_COMMITTED
+};
+
+/** Integer, first value of @sa enum_xa_transaction_state. */
+#define FIRST_TRANS_STATE_XA (static_cast<int> (TRANS_STATE_XA_NOTR))
+/** Integer, last value of @sa enum_xa_transaction_state. */
+#define LAST_TRANS_STATE_XA (static_cast<int> (TRANS_STATE_XA_COMMITTED))
+/** Integer, number of values of @sa enum_xa_transaction_state. */
+#define COUNT_TRANS_STATE_XA (LAST_TRANS_STATE_XA - FIRST_TRANS_STATE_XA + 1)
+
+/**
+ Enum values for transaction isolation level columns.
+ See enum_tx_isolation in handler.h.
+*/
+enum enum_isolation_level
+{
+ TRANS_LEVEL_READ_UNCOMMITTED,
+ TRANS_LEVEL_READ_COMMITTED,
+ TRANS_LEVEL_REPEATABLE_READ,
+ TRANS_LEVEL_SERIALIZABLE
+};
+
+/** Integer, first value of @sa enum_isolation_level. */
+#define FIRST_TRANS_LEVEL (static_cast<int> (TRANS_LEVEL_READ_UNCOMMITTED))
+/** Integer, last value of @sa enum_isolation_level. */
+#define LAST_TRANS_LEVEL (static_cast<int> (TRANS_LEVEL_SERIALIZABLE))
+/** Integer, number of values of @sa enum_isolation_level. */
+#define COUNT_TRANS_LEVEL (LAST_TRANS_LEVEL - FIRST_TRANS_LEVEL + 1)
+
+/**
+ Enum values for transaction acces mode columns.
+*/
+enum enum_transaction_mode
+{
+ TRANS_MODE_READ_ONLY= 1,
+ TRANS_MODE_READ_WRITE= 2
+};
+
+/** Integer, first value of @sa enum_transaction_mode. */
+#define FIRST_TRANS_MODE (static_cast<int> (TRANS_MODE_READ_WRITE))
+/** Integer, last value of @sa enum_transaction_mode. */
+#define LAST_TRANS_MODE (static_cast<int> (TRANS_MODE_READ_ONLY))
+/** Integer, number of values of @sa enum_transaction_mode. */
+#define COUNT_TRANS_MODE (LAST_TRANS_MODE - FIRST_TRANS_MODE + 1)
+
+
#endif
diff --git a/storage/perfschema/pfs_column_values.cc b/storage/perfschema/pfs_column_values.cc
index 043c8fd2f38..9ce9b3b416d 100644
--- a/storage/perfschema/pfs_column_values.cc
+++ b/storage/perfschema/pfs_column_values.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -38,8 +38,11 @@ LEX_CSTRING mutex_instrument_prefix=
LEX_CSTRING rwlock_instrument_prefix=
{ STRING_WITH_LEN("wait/synch/rwlock/") };
+LEX_CSTRING sxlock_instrument_prefix=
+{ C_STRING_WITH_LEN("wait/synch/sxlock/") };
+
LEX_CSTRING cond_instrument_prefix=
-{ STRING_WITH_LEN("wait/synch/cond/") };
+{ C_STRING_WITH_LEN("wait/synch/cond/") };
LEX_CSTRING thread_instrument_prefix=
{ STRING_WITH_LEN("thread/") };
@@ -53,5 +56,12 @@ LEX_CSTRING stage_instrument_prefix=
LEX_CSTRING statement_instrument_prefix=
{ STRING_WITH_LEN("statement/") };
+LEX_CSTRING transaction_instrument_prefix=
+{ C_STRING_WITH_LEN("transaction") };
+
LEX_CSTRING socket_instrument_prefix=
-{ STRING_WITH_LEN("wait/io/socket/") };
+{ C_STRING_WITH_LEN("wait/io/socket/") };
+
+LEX_CSTRING memory_instrument_prefix=
+{ C_STRING_WITH_LEN("memory/") };
+
diff --git a/storage/perfschema/pfs_column_values.h b/storage/perfschema/pfs_column_values.h
index 44f23527881..ea3d9eb97c3 100644
--- a/storage/perfschema/pfs_column_values.h
+++ b/storage/perfschema/pfs_column_values.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -23,7 +23,7 @@
#ifndef PFS_COLUMN_VALUES_H
#define PFS_COLUMN_VALUES_H
-#include "m_string.h" /* LEX_STRING */
+#include "m_string.h" /* LEX_CSTRING */
/**
@file storage/perfschema/pfs_column_values.h
@@ -38,6 +38,8 @@ extern LEX_CSTRING PERFORMANCE_SCHEMA_str;
extern LEX_CSTRING mutex_instrument_prefix;
/** String prefix for all rwlock instruments. */
extern LEX_CSTRING rwlock_instrument_prefix;
+/** String prefix for all sxlock instruments. */
+extern LEX_CSTRING sxlock_instrument_prefix;
/** String prefix for all cond instruments. */
extern LEX_CSTRING cond_instrument_prefix;
/** String prefix for all thread instruments. */
@@ -48,7 +50,12 @@ extern LEX_CSTRING file_instrument_prefix;
extern LEX_CSTRING stage_instrument_prefix;
/** String prefix for all statement instruments. */
extern LEX_CSTRING statement_instrument_prefix;
+/** String prefix for all transaction instruments. */
+extern LEX_CSTRING transaction_instrument_prefix;
+/** String prefix for all socket instruments. */
extern LEX_CSTRING socket_instrument_prefix;
+/** String prefix for all memory instruments. */
+extern LEX_CSTRING memory_instrument_prefix;
#endif
diff --git a/storage/perfschema/pfs_con_slice.cc b/storage/perfschema/pfs_con_slice.cc
index 9f9deb0919c..3733ad9e3d0 100644
--- a/storage/perfschema/pfs_con_slice.cc
+++ b/storage/perfschema/pfs_con_slice.cc
@@ -22,7 +22,7 @@
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_con_slice.h"
#include "pfs_stat.h"
#include "pfs_global.h"
@@ -38,66 +38,6 @@
@{
*/
-PFS_single_stat *
-PFS_connection_slice::alloc_waits_slice(uint sizing)
-{
- PFS_single_stat *slice= NULL;
- uint index;
-
- if (sizing > 0)
- {
- slice= PFS_MALLOC_ARRAY(sizing, sizeof(PFS_single_stat), PFS_single_stat,
- MYF(MY_ZEROFILL));
- if (unlikely(slice == NULL))
- return NULL;
-
- for (index= 0; index < sizing; index++)
- slice[index].reset();
- }
-
- return slice;
-}
-
-PFS_stage_stat *
-PFS_connection_slice::alloc_stages_slice(uint sizing)
-{
- PFS_stage_stat *slice= NULL;
- uint index;
-
- if (sizing > 0)
- {
- slice= PFS_MALLOC_ARRAY(sizing, sizeof(PFS_stage_stat), PFS_stage_stat,
- MYF(MY_ZEROFILL));
- if (unlikely(slice == NULL))
- return NULL;
-
- for (index= 0; index < sizing; index++)
- slice[index].reset();
- }
-
- return slice;
-}
-
-PFS_statement_stat *
-PFS_connection_slice::alloc_statements_slice(uint sizing)
-{
- PFS_statement_stat *slice= NULL;
- uint index;
-
- if (sizing > 0)
- {
- slice= PFS_MALLOC_ARRAY(sizing, sizeof(PFS_statement_stat), PFS_statement_stat,
- MYF(MY_ZEROFILL));
- if (unlikely(slice == NULL))
- return NULL;
-
- for (index= 0; index < sizing; index++)
- slice[index].reset();
- }
-
- return slice;
-}
-
void PFS_connection_slice::reset_waits_stats()
{
PFS_single_stat *stat= m_instr_class_waits_stats;
@@ -122,5 +62,21 @@ void PFS_connection_slice::reset_statements_stats()
stat->reset();
}
+void PFS_connection_slice::reset_transactions_stats()
+{
+ PFS_transaction_stat *stat=
+ &m_instr_class_transactions_stats[GLOBAL_TRANSACTION_INDEX];
+ if (stat)
+ stat->reset();
+}
+
+void PFS_connection_slice::rebase_memory_stats()
+{
+ PFS_memory_stat *stat= m_instr_class_memory_stats;
+ PFS_memory_stat *stat_last= stat + memory_class_max;
+ for ( ; stat < stat_last; stat++)
+ stat->reset();
+}
+
/** @} */
diff --git a/storage/perfschema/pfs_con_slice.h b/storage/perfschema/pfs_con_slice.h
index ed17de5f2b0..56497ffe771 100644
--- a/storage/perfschema/pfs_con_slice.h
+++ b/storage/perfschema/pfs_con_slice.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2016, 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, version 2.0,
@@ -28,12 +28,17 @@
Performance schema connection slice (declarations).
*/
+#include "sql_class.h"
#include "pfs_lock.h"
#include "lf.h"
+#include "pfs_status.h"
struct PFS_single_stat;
struct PFS_stage_stat;
struct PFS_statement_stat;
+struct PFS_transaction_stat;
+struct PFS_memory_stat;
+class PFS_opaque_container_page;
/**
@addtogroup Performance_schema_buffers
@@ -46,31 +51,15 @@ struct PFS_statement_stat;
*/
struct PFS_connection_slice
{
- /**
- Allocate memory for waits statistics.
- @param sizing the number of wait classes.
- @return wait statistics for this slice.
- */
- static PFS_single_stat *alloc_waits_slice(uint sizing);
- /**
- Allocate memory for stages statistics.
- @param sizing the number of stage classes.
- @return stage statistics for this slice.
- */
- static PFS_stage_stat *alloc_stages_slice(uint sizing);
- /**
- Allocate memory for statement statistics.
- @param sizing the number of statement classes.
- @return statement statistics for this slice.
- */
- static PFS_statement_stat *alloc_statements_slice(uint sizing);
-
/** Reset all statistics. */
inline void reset_stats()
{
- reset_waits_stats();
- reset_stages_stats();
- reset_statements_stats();
+ m_has_waits_stats= false;
+ m_has_stages_stats= false;
+ m_has_statements_stats= false;
+ m_has_transactions_stats= false;
+ m_has_memory_stats= false;
+ reset_status_stats();
}
/** Reset all wait statistics. */
@@ -79,6 +68,137 @@ struct PFS_connection_slice
void reset_stages_stats();
/** Reset all statements statistics. */
void reset_statements_stats();
+ /** Reset all transactions statistics. */
+ void reset_transactions_stats();
+ /** Reset all memory statistics. */
+ void rebase_memory_stats();
+ /** Reset all status variable statistics. */
+ void reset_status_stats()
+ {
+ m_status_stats.reset();
+ }
+
+ void set_instr_class_waits_stats(PFS_single_stat *array)
+ {
+ m_has_waits_stats= false;
+ m_instr_class_waits_stats= array;
+ }
+
+ const PFS_single_stat* read_instr_class_waits_stats() const
+ {
+ if (! m_has_waits_stats)
+ return NULL;
+ return m_instr_class_waits_stats;
+ }
+
+ PFS_single_stat* write_instr_class_waits_stats()
+ {
+ if (! m_has_waits_stats)
+ {
+ reset_waits_stats();
+ m_has_waits_stats= true;
+ }
+ return m_instr_class_waits_stats;
+ }
+
+ void set_instr_class_stages_stats(PFS_stage_stat *array)
+ {
+ m_has_stages_stats= false;
+ m_instr_class_stages_stats= array;
+ }
+
+ const PFS_stage_stat* read_instr_class_stages_stats() const
+ {
+ if (! m_has_stages_stats)
+ return NULL;
+ return m_instr_class_stages_stats;
+ }
+
+ PFS_stage_stat* write_instr_class_stages_stats()
+ {
+ if (! m_has_stages_stats)
+ {
+ reset_stages_stats();
+ m_has_stages_stats= true;
+ }
+ return m_instr_class_stages_stats;
+ }
+
+ void set_instr_class_statements_stats(PFS_statement_stat *array)
+ {
+ m_has_statements_stats= false;
+ m_instr_class_statements_stats= array;
+ }
+
+ const PFS_statement_stat* read_instr_class_statements_stats() const
+ {
+ if (! m_has_statements_stats)
+ return NULL;
+ return m_instr_class_statements_stats;
+ }
+
+ PFS_statement_stat* write_instr_class_statements_stats()
+ {
+ if (! m_has_statements_stats)
+ {
+ reset_statements_stats();
+ m_has_statements_stats= true;
+ }
+ return m_instr_class_statements_stats;
+ }
+
+ void set_instr_class_transactions_stats(PFS_transaction_stat *array)
+ {
+ m_has_transactions_stats= false;
+ m_instr_class_transactions_stats= array;
+ }
+
+ const PFS_transaction_stat* read_instr_class_transactions_stats() const
+ {
+ if (! m_has_transactions_stats)
+ return NULL;
+ return m_instr_class_transactions_stats;
+ }
+
+ PFS_transaction_stat* write_instr_class_transactions_stats()
+ {
+ if (! m_has_transactions_stats)
+ {
+ reset_transactions_stats();
+ m_has_transactions_stats= true;
+ }
+ return m_instr_class_transactions_stats;
+ }
+
+ void set_instr_class_memory_stats(PFS_memory_stat *array)
+ {
+ m_has_memory_stats= false;
+ m_instr_class_memory_stats= array;
+ }
+
+ const PFS_memory_stat* read_instr_class_memory_stats() const
+ {
+ if (! m_has_memory_stats)
+ return NULL;
+ return m_instr_class_memory_stats;
+ }
+
+ PFS_memory_stat* write_instr_class_memory_stats()
+ {
+ if (! m_has_memory_stats)
+ {
+ rebase_memory_stats();
+ m_has_memory_stats= true;
+ }
+ return m_instr_class_memory_stats;
+ }
+
+private:
+ bool m_has_waits_stats;
+ bool m_has_stages_stats;
+ bool m_has_statements_stats;
+ bool m_has_transactions_stats;
+ bool m_has_memory_stats;
/**
Per connection slice waits aggregated statistics.
@@ -103,6 +223,37 @@ struct PFS_connection_slice
Immutable, safe to use without internal lock.
*/
PFS_statement_stat *m_instr_class_statements_stats;
+
+ /**
+ Per connection slice transactions aggregated statistics.
+ This member holds the data for the table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_*_BY_EVENT_NAME.
+ Immutable, safe to use without internal lock.
+ */
+ PFS_transaction_stat *m_instr_class_transactions_stats;
+
+ /**
+ Per connection slice memory aggregated statistics.
+ This member holds the data for the table
+ PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_*_BY_EVENT_NAME.
+ Immutable, safe to use without internal lock.
+ */
+ PFS_memory_stat *m_instr_class_memory_stats;
+
+public:
+
+ void aggregate_status_stats(const STATUS_VAR *status_vars)
+ {
+ m_status_stats.aggregate_from(status_vars);
+ }
+
+ /**
+ Aggregated status variables.
+ */
+ PFS_status_stats m_status_stats;
+
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
};
/** @} */
diff --git a/storage/perfschema/pfs_config.h.cmake b/storage/perfschema/pfs_config.h.cmake
new file mode 100644
index 00000000000..0dc29da72d9
--- /dev/null
+++ b/storage/perfschema/pfs_config.h.cmake
@@ -0,0 +1,4 @@
+#cmakedefine HAVE_PTHREAD_THREADID_NP 1
+#cmakedefine HAVE_SYS_GETTID 1
+#cmakedefine HAVE_PTHREAD_GETTHREADID_NP 1
+#cmakedefine HAVE_INTEGER_PTHREAD_SELF 1
diff --git a/storage/perfschema/pfs_defaults.cc b/storage/perfschema/pfs_defaults.cc
index f6183349884..0b615773089 100644
--- a/storage/perfschema/pfs_defaults.cc
+++ b/storage/perfschema/pfs_defaults.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -28,12 +28,15 @@
#include <my_global.h>
#include "pfs.h"
#include "pfs_defaults.h"
+#include "pfs_instr_class.h"
#include "pfs_instr.h"
#include "pfs_setup_actor.h"
#include "pfs_setup_object.h"
-static PSI_thread_key key;
-static PSI_thread_info info= { &key, "setup", PSI_FLAG_GLOBAL };
+static PSI_thread_key thread_key;
+static PSI_thread_info thread_info= { &thread_key, "setup", PSI_FLAG_GLOBAL };
+
+const char* pfs_category= "performance_schema";
void install_default_setup(PSI_bootstrap *boot)
{
@@ -41,30 +44,62 @@ void install_default_setup(PSI_bootstrap *boot)
if (psi == NULL)
return;
- psi->register_thread("performance_schema", &info, 1);
- PSI_thread *psi_thread= psi->new_thread(key, NULL, 0);
- if (psi_thread == NULL)
- return;
-
- /* LF_HASH needs a thread, for PINS */
- psi->set_thread(psi_thread);
-
- String percent("%", 1, &my_charset_utf8mb3_bin);
- /* Enable all users on all hosts by default */
- insert_setup_actor(&percent, &percent, &percent);
-
- /* Disable system tables by default */
- String mysql_db("mysql", 5, &my_charset_utf8mb3_bin);
- insert_setup_object(OBJECT_TYPE_TABLE, &mysql_db, &percent, false, false);
-
- /* Disable performance/information schema tables. */
- String PS_db("performance_schema", 18, &my_charset_utf8mb3_bin);
- String IS_db("information_schema", 18, &my_charset_utf8mb3_bin);
- insert_setup_object(OBJECT_TYPE_TABLE, &PS_db, &percent, false, false);
- insert_setup_object(OBJECT_TYPE_TABLE, &IS_db, &percent, false, false);
-
- /* Enable every other tables */
- insert_setup_object(OBJECT_TYPE_TABLE, &percent, &percent, true, true);
+ psi->register_thread(pfs_category, &thread_info, 1);
+ PSI_thread *psi_thread= psi->new_thread(thread_key, NULL, 0);
+
+ if (psi_thread != NULL)
+ {
+ /* LF_HASH needs a thread, for PINS */
+ psi->set_thread(psi_thread);
+
+ String percent("%", 1, &my_charset_utf8mb3_bin);
+ /* Enable all users on all hosts by default */
+ insert_setup_actor(&percent, &percent, &percent, true, true);
+
+ String mysql_db("mysql", 5, &my_charset_utf8mb3_bin);
+ String PS_db("performance_schema", 18, &my_charset_utf8mb3_bin);
+ String IS_db("information_schema", 18, &my_charset_utf8mb3_bin);
+
+ /* Disable sp by default in mysql. */
+ insert_setup_object(OBJECT_TYPE_EVENT, &mysql_db, &percent, false, false);
+ /* Disable sp in performance/information schema. */
+ insert_setup_object(OBJECT_TYPE_EVENT, &PS_db, &percent, false, false);
+ insert_setup_object(OBJECT_TYPE_EVENT, &IS_db, &percent, false, false);
+ /* Enable every other sp. */
+ insert_setup_object(OBJECT_TYPE_EVENT, &percent, &percent, true, true);
+
+ /* Disable sp by default in mysql. */
+ insert_setup_object(OBJECT_TYPE_FUNCTION, &mysql_db, &percent, false, false);
+ /* Disable sp in performance/information schema. */
+ insert_setup_object(OBJECT_TYPE_FUNCTION, &PS_db, &percent, false, false);
+ insert_setup_object(OBJECT_TYPE_FUNCTION, &IS_db, &percent, false, false);
+ /* Enable every other sp. */
+ insert_setup_object(OBJECT_TYPE_FUNCTION, &percent, &percent, true, true);
+
+ /* Disable sp by default in mysql. */
+ insert_setup_object(OBJECT_TYPE_PROCEDURE, &mysql_db, &percent, false, false);
+ /* Disable sp in performance/information schema. */
+ insert_setup_object(OBJECT_TYPE_PROCEDURE, &PS_db, &percent, false, false);
+ insert_setup_object(OBJECT_TYPE_PROCEDURE, &IS_db, &percent, false, false);
+ /* Enable every other sp. */
+ insert_setup_object(OBJECT_TYPE_PROCEDURE, &percent, &percent, true, true);
+
+ /* Disable system tables by default */
+ insert_setup_object(OBJECT_TYPE_TABLE, &mysql_db, &percent, false, false);
+ /* Disable performance/information schema tables. */
+ insert_setup_object(OBJECT_TYPE_TABLE, &PS_db, &percent, false, false);
+ insert_setup_object(OBJECT_TYPE_TABLE, &IS_db, &percent, false, false);
+ /* Enable every other tables */
+ insert_setup_object(OBJECT_TYPE_TABLE, &percent, &percent, true, true);
+
+ /* Disable sp by default in mysql. */
+ insert_setup_object(OBJECT_TYPE_TRIGGER, &mysql_db, &percent, false, false);
+ /* Disable sp in performance/information schema. */
+ insert_setup_object(OBJECT_TYPE_TRIGGER, &PS_db, &percent, false, false);
+ insert_setup_object(OBJECT_TYPE_TRIGGER, &IS_db, &percent, false, false);
+ /* Enable every other sp. */
+ insert_setup_object(OBJECT_TYPE_TRIGGER, &percent, &percent, true, true);
+ }
psi->delete_current_thread();
}
diff --git a/storage/perfschema/pfs_digest.cc b/storage/perfschema/pfs_digest.cc
index 0ddb4c90eb3..6f0b93f9393 100644
--- a/storage/perfschema/pfs_digest.cc
+++ b/storage/perfschema/pfs_digest.cc
@@ -36,8 +36,10 @@
#include "pfs_instr.h"
#include "pfs_digest.h"
#include "pfs_global.h"
+#include "pfs_builtin_memory.h"
#include "table_helper.h"
#include "sql_lex.h"
+#include "sql_signal.h"
#include "sql_get_diagnostics.h"
#include "sql_string.h"
#include <string.h>
@@ -54,7 +56,8 @@ bool flag_statements_digest= true;
Current index in Stat array where new record is to be inserted.
index 0 is reserved for "all else" case when entire array is full.
*/
-volatile uint32 PFS_ALIGNED digest_monotonic_index;
+static PFS_ALIGNED PFS_cacheline_uint32 digest_monotonic_index;
+
bool digest_full= false;
LF_HASH digest_hash;
@@ -72,16 +75,16 @@ int init_digest(const PFS_global_param *param)
*/
digest_max= param->m_digest_sizing;
digest_lost= 0;
- PFS_atomic::store_u32(& digest_monotonic_index, 1);
+ PFS_atomic::store_u32(& digest_monotonic_index.m_u32, 1);
digest_full= false;
if (digest_max == 0)
return 0;
statements_digest_stat_array=
- PFS_MALLOC_ARRAY(digest_max,
- sizeof(PFS_statements_digest_stat),
- PFS_statements_digest_stat,
+ PFS_MALLOC_ARRAY(& builtin_memory_digest,
+ digest_max,
+ sizeof(PFS_statements_digest_stat), PFS_statements_digest_stat,
MYF(MY_ZEROFILL));
if (unlikely(statements_digest_stat_array == NULL))
@@ -96,7 +99,8 @@ int init_digest(const PFS_global_param *param)
size_t digest_memory_size= pfs_max_digest_length * sizeof(unsigned char);
statements_digest_token_array=
- PFS_MALLOC_ARRAY(digest_max,
+ PFS_MALLOC_ARRAY(& builtin_memory_digest_tokens,
+ digest_max,
digest_memory_size,
unsigned char,
MYF(MY_ZEROFILL));
@@ -117,15 +121,25 @@ int init_digest(const PFS_global_param *param)
/* Set record[0] as allocated. */
statements_digest_stat_array[0].m_lock.set_allocated();
+ /* Set record[0] as allocated. */
+ statements_digest_stat_array[0].m_lock.set_allocated();
+
return 0;
}
/** Cleanup table EVENTS_STATEMENTS_SUMMARY_BY_DIGEST. */
void cleanup_digest(void)
{
- /* Free memory allocated to statements_digest_stat_array. */
- pfs_free(statements_digest_stat_array);
- pfs_free(statements_digest_token_array);
+ PFS_FREE_ARRAY(& builtin_memory_digest,
+ digest_max,
+ sizeof(PFS_statements_digest_stat),
+ statements_digest_stat_array);
+
+ PFS_FREE_ARRAY(& builtin_memory_digest_tokens,
+ digest_max,
+ (pfs_max_digest_length * sizeof(unsigned char)),
+ statements_digest_token_array);
+
statements_digest_stat_array= NULL;
statements_digest_token_array= NULL;
}
@@ -152,14 +166,13 @@ C_MODE_END
Initialize the digest hash.
@return 0 on success
*/
-int init_digest_hash(void)
+int init_digest_hash(const PFS_global_param *param)
{
- if ((! digest_hash_inited) && (digest_max > 0))
+ if ((! digest_hash_inited) && (param->m_digest_sizing != 0))
{
lf_hash_init(&digest_hash, sizeof(PFS_statements_digest_stat*),
LF_HASH_UNIQUE, 0, 0, digest_hash_get_key,
&my_charset_bin);
- /* digest_hash.size= digest_max; */
digest_hash_inited= true;
}
return 0;
@@ -225,6 +238,7 @@ find_or_create_digest(PFS_thread *thread,
size_t attempts= 0;
PFS_statements_digest_stat **entry;
PFS_statements_digest_stat *pfs= NULL;
+ pfs_dirty_state dirty_state;
ulonglong now= my_hrtime().val;
@@ -248,7 +262,7 @@ search:
if (digest_full)
{
- /* digest_stat array is full. Add stat at index 0 and return. */
+ /* digest_stat array is full. Add stat at index 0 and return. */
pfs= &statements_digest_stat_array[0];
digest_lost++;
@@ -260,7 +274,7 @@ search:
while (++attempts <= digest_max)
{
- safe_index= PFS_atomic::add_u32(& digest_monotonic_index, 1) % digest_max;
+ safe_index= PFS_atomic::add_u32(& digest_monotonic_index.m_u32, 1) % digest_max;
if (safe_index == 0)
{
/* Record [0] is reserved. */
@@ -273,7 +287,7 @@ search:
if (pfs->m_lock.is_free())
{
- if (pfs->m_lock.free_to_dirty())
+ if (pfs->m_lock.free_to_dirty(& dirty_state))
{
/* Copy digest hash/LF Hash search key. */
memcpy(& pfs->m_digest_key, &hash_key, sizeof(PFS_digest_key));
@@ -290,11 +304,11 @@ search:
res= lf_hash_insert(&digest_hash, pins, &pfs);
if (likely(res == 0))
{
- pfs->m_lock.dirty_to_allocated();
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
return & pfs->m_stat;
}
- pfs->m_lock.dirty_to_free();
+ pfs->m_lock.dirty_to_free(& dirty_state);
if (res > 0)
{
@@ -349,12 +363,13 @@ void purge_digest(PFS_thread* thread, PFS_digest_key *hash_key)
void PFS_statements_digest_stat::reset_data(unsigned char *token_array, size_t length)
{
- m_lock.set_dirty();
+ pfs_dirty_state dirty_state;
+ m_lock.set_dirty(& dirty_state);
m_digest_storage.reset(token_array, length);
m_stat.reset();
m_first_seen= 0;
m_last_seen= 0;
- m_lock.dirty_to_free();
+ m_lock.dirty_to_free(& dirty_state);
}
void PFS_statements_digest_stat::reset_index(PFS_thread *thread)
@@ -368,6 +383,8 @@ void PFS_statements_digest_stat::reset_index(PFS_thread *thread)
void reset_esms_by_digest()
{
+ uint index;
+
if (statements_digest_stat_array == NULL)
return;
@@ -376,7 +393,7 @@ void reset_esms_by_digest()
return;
/* Reset statements_digest_stat_array. */
- for (size_t index= 0; index < digest_max; index++)
+ for (index= 0; index < digest_max; index++)
{
statements_digest_stat_array[index].reset_index(thread);
statements_digest_stat_array[index].reset_data(statements_digest_token_array + index * pfs_max_digest_length, pfs_max_digest_length);
@@ -389,7 +406,7 @@ void reset_esms_by_digest()
Reset index which indicates where the next calculated digest information
to be inserted in statements_digest_stat_array.
*/
- PFS_atomic::store_u32(& digest_monotonic_index, 1);
+ PFS_atomic::store_u32(& digest_monotonic_index.m_u32, 1);
digest_full= false;
}
diff --git a/storage/perfschema/pfs_digest.h b/storage/perfschema/pfs_digest.h
index c11852a1510..39fe6109c20 100644
--- a/storage/perfschema/pfs_digest.h
+++ b/storage/perfschema/pfs_digest.h
@@ -76,7 +76,7 @@ struct PFS_ALIGNED PFS_statements_digest_stat
int init_digest(const PFS_global_param *param);
void cleanup_digest();
-int init_digest_hash(void);
+int init_digest_hash(const PFS_global_param *param);
void cleanup_digest_hash(void);
PFS_statement_stat* find_or_create_digest(PFS_thread *thread,
const sql_digest_storage *digest_storage,
@@ -91,3 +91,4 @@ extern PFS_statements_digest_stat *statements_digest_stat_array;
extern LF_HASH digest_hash;
#endif
+
diff --git a/storage/perfschema/pfs_engine_table.cc b/storage/perfschema/pfs_engine_table.cc
index 9a18879bc62..b9f79fa61d6 100644
--- a/storage/perfschema/pfs_engine_table.cc
+++ b/storage/perfschema/pfs_engine_table.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2019, 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, version 2.0,
@@ -26,9 +26,10 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "hostname.h" /* For Host_entry */
#include "pfs_engine_table.h"
+#include "pfs_buffer_container.h"
#include "table_events_waits.h"
#include "table_setup_actors.h"
@@ -69,6 +70,14 @@
#include "table_esms_by_account_by_event_name.h"
#include "table_esms_global_by_event_name.h"
#include "table_esms_by_digest.h"
+#include "table_esms_by_program.h"
+
+#include "table_events_transactions.h"
+#include "table_ets_by_thread_by_event_name.h"
+#include "table_ets_by_host_by_event_name.h"
+#include "table_ets_by_user_by_event_name.h"
+#include "table_ets_by_account_by_event_name.h"
+#include "table_ets_global_by_event_name.h"
#include "table_users.h"
#include "table_accounts.h"
@@ -79,6 +88,39 @@
#include "table_socket_summary_by_event_name.h"
#include "table_session_connect_attrs.h"
#include "table_session_account_connect_attrs.h"
+#include "table_mems_global_by_event_name.h"
+#include "table_mems_by_account_by_event_name.h"
+#include "table_mems_by_host_by_event_name.h"
+#include "table_mems_by_thread_by_event_name.h"
+#include "table_mems_by_user_by_event_name.h"
+
+/* For replication related perfschema tables. */
+#include "table_replication_connection_configuration.h"
+#include "table_replication_group_members.h"
+#include "table_replication_connection_status.h"
+#include "table_replication_applier_configuration.h"
+#include "table_replication_applier_status.h"
+#include "table_replication_applier_status_by_coordinator.h"
+#include "table_replication_applier_status_by_worker.h"
+#include "table_replication_group_member_stats.h"
+
+#include "table_prepared_stmt_instances.h"
+
+#include "table_md_locks.h"
+#include "table_table_handles.h"
+
+#include "table_uvar_by_thread.h"
+
+#include "table_status_by_account.h"
+#include "table_status_by_host.h"
+#include "table_status_by_thread.h"
+#include "table_status_by_user.h"
+#include "table_global_status.h"
+#include "table_session_status.h"
+
+#include "table_variables_by_thread.h"
+#include "table_global_variables.h"
+#include "table_session_variables.h"
/* For show status */
#include "pfs_column_values.h"
@@ -91,12 +133,105 @@
#include "sql_base.h" // close_thread_tables
#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT
+#include "log.h"
/**
@addtogroup Performance_schema_engine
@{
*/
+bool PFS_table_context::initialize(void)
+{
+ if (m_restore)
+ {
+ /* Restore context from TLS. */
+ PFS_table_context *context= static_cast<PFS_table_context *>(my_get_thread_local(m_thr_key));
+ DBUG_ASSERT(context != NULL);
+
+ if(context)
+ {
+ m_last_version= context->m_current_version;
+ m_map= context->m_map;
+ DBUG_ASSERT(m_map_size == context->m_map_size);
+ m_map_size= context->m_map_size;
+ m_word_size= context->m_word_size;
+ }
+ }
+ else
+ {
+ /* Check that TLS is not in use. */
+ PFS_table_context *context= static_cast<PFS_table_context *>(my_get_thread_local(m_thr_key));
+ //DBUG_ASSERT(context == NULL);
+
+ context= this;
+
+ /* Initialize a new context, store in TLS. */
+ m_last_version= m_current_version;
+ m_map= NULL;
+ m_word_size= sizeof(ulong) * 8;
+
+ /* Allocate a bitmap to record which threads are materialized. */
+ if (m_map_size > 0)
+ {
+ THD *thd= current_thd;
+ ulong words= m_map_size / m_word_size + (m_map_size % m_word_size > 0);
+ m_map= (ulong *)thd->calloc(words * m_word_size);
+ }
+
+ /* Write to TLS. */
+ my_set_thread_local(m_thr_key, static_cast<void *>(context));
+ }
+
+ m_initialized= (m_map_size > 0) ? (m_map != NULL) : true;
+
+ return m_initialized;
+}
+
+/* Constructor for global or single thread tables, map size = 0. */
+PFS_table_context::PFS_table_context(ulonglong current_version, bool restore, thread_local_key_t key) :
+ m_thr_key(key), m_current_version(current_version), m_last_version(0),
+ m_map(NULL), m_map_size(0), m_word_size(sizeof(ulong)),
+ m_restore(restore), m_initialized(false), m_last_item(0)
+{
+ initialize();
+}
+
+/* Constructor for by-thread or aggregate tables, map size = max thread/user/host/account. */
+PFS_table_context::PFS_table_context(ulonglong current_version, ulong map_size, bool restore, thread_local_key_t key) :
+ m_thr_key(key), m_current_version(current_version), m_last_version(0),
+ m_map(NULL), m_map_size(map_size), m_word_size(sizeof(ulong)),
+ m_restore(restore), m_initialized(false), m_last_item(0)
+{
+ initialize();
+}
+
+PFS_table_context::~PFS_table_context(void)
+{
+ /* Clear TLS after final use. */ // TODO: How is that determined?
+// if (m_restore)
+// {
+// my_set_thread_local(m_thr_key, NULL);
+// }
+}
+
+void PFS_table_context::set_item(ulong n)
+{
+ if (n == m_last_item)
+ return;
+ ulong word= n / m_word_size;
+ ulong bit= n % m_word_size;
+ m_map[word] |= (1 << bit);
+ m_last_item= n;
+}
+
+bool PFS_table_context::is_item_set(ulong n)
+{
+ ulong word= n / m_word_size;
+ ulong bit= n % m_word_size;
+ return (m_map[word] & (1 << bit));
+}
+
+
static PFS_engine_table_share *all_shares[]=
{
&table_cond_instances::m_share,
@@ -145,6 +280,16 @@ static PFS_engine_table_share *all_shares[]=
&table_esms_by_host_by_event_name::m_share,
&table_esms_global_by_event_name::m_share,
&table_esms_by_digest::m_share,
+ &table_esms_by_program::m_share,
+
+ &table_events_transactions_current::m_share,
+ &table_events_transactions_history::m_share,
+ &table_events_transactions_history_long::m_share,
+ &table_ets_by_thread_by_event_name::m_share,
+ &table_ets_by_account_by_event_name::m_share,
+ &table_ets_by_user_by_event_name::m_share,
+ &table_ets_by_host_by_event_name::m_share,
+ &table_ets_global_by_event_name::m_share,
&table_users::m_share,
&table_accounts::m_share,
@@ -153,8 +298,43 @@ static PFS_engine_table_share *all_shares[]=
&table_socket_instances::m_share,
&table_socket_summary_by_instance::m_share,
&table_socket_summary_by_event_name::m_share,
+
&table_session_connect_attrs::m_share,
&table_session_account_connect_attrs::m_share,
+
+ &table_mems_global_by_event_name::m_share,
+ &table_mems_by_account_by_event_name::m_share,
+ &table_mems_by_host_by_event_name::m_share,
+ &table_mems_by_thread_by_event_name::m_share,
+ &table_mems_by_user_by_event_name::m_share,
+ &table_table_handles::m_share,
+ &table_metadata_locks::m_share,
+
+#ifdef HAVE_REPLICATION
+ &table_replication_connection_configuration::m_share,
+ //&table_replication_group_members::m_share,
+ //&table_replication_connection_status::m_share,
+ &table_replication_applier_configuration::m_share,
+ &table_replication_applier_status::m_share,
+ &table_replication_applier_status_by_coordinator::m_share,
+ //&table_replication_applier_status_by_worker::m_share,
+ //&table_replication_group_member_stats::m_share,
+#endif
+
+ &table_prepared_stmt_instances::m_share,
+
+ &table_uvar_by_thread::m_share,
+ &table_status_by_account::m_share,
+ &table_status_by_host::m_share,
+ &table_status_by_thread::m_share,
+ &table_status_by_user::m_share,
+ &table_global_status::m_share,
+ &table_session_status::m_share,
+
+ //&table_variables_by_thread::m_share,
+ //&table_global_variables::m_share,
+ //&table_session_variables::m_share,
+
NULL
};
@@ -178,11 +358,7 @@ void PFS_engine_table_share::delete_all_locks(void)
ha_rows PFS_engine_table_share::get_row_count(void) const
{
- /* If available, count the exact number or records */
- if (m_get_row_count)
- return m_get_row_count();
- /* Otherwise, return an estimate */
- return m_records;
+ return m_get_row_count();
}
int PFS_engine_table_share::write_row(TABLE *table, const unsigned char *buf,
@@ -356,6 +532,13 @@ void PFS_engine_table::get_normalizer(PFS_instr_class *instr_class)
}
}
+void PFS_engine_table::set_field_long(Field *f, long value)
+{
+ DBUG_ASSERT(f->real_type() == MYSQL_TYPE_LONG);
+ Field_long *f2= (Field_long*) f;
+ f2->store(value, false);
+}
+
void PFS_engine_table::set_field_ulong(Field *f, ulong value)
{
DBUG_ASSERT(f->real_type() == MYSQL_TYPE_LONG);
@@ -363,6 +546,13 @@ void PFS_engine_table::set_field_ulong(Field *f, ulong value)
f2->store(value, true);
}
+void PFS_engine_table::set_field_longlong(Field *f, longlong value)
+{
+ DBUG_ASSERT(f->real_type() == MYSQL_TYPE_LONGLONG);
+ Field_longlong *f2= (Field_longlong*) f;
+ f2->store(value, false);
+}
+
void PFS_engine_table::set_field_ulonglong(Field *f, ulonglong value)
{
DBUG_ASSERT(f->real_type() == MYSQL_TYPE_LONGLONG);
@@ -378,6 +568,16 @@ void PFS_engine_table::set_field_char_utf8(Field *f, const char* str,
f2->store(str, len, &my_charset_utf8mb3_bin);
}
+void PFS_engine_table::set_field_varchar(Field *f,
+ const CHARSET_INFO *cs,
+ const char* str,
+ uint len)
+{
+ DBUG_ASSERT(f->real_type() == MYSQL_TYPE_VARCHAR);
+ Field_varstring *f2= (Field_varstring*) f;
+ f2->store(str, len, cs);
+}
+
void PFS_engine_table::set_field_varchar_utf8(Field *f, const char* str,
uint len)
{
@@ -394,6 +594,14 @@ void PFS_engine_table::set_field_longtext_utf8(Field *f, const char* str,
f2->store(str, len, &my_charset_utf8mb3_bin);
}
+void PFS_engine_table::set_field_blob(Field *f, const char* val,
+ uint len)
+{
+ DBUG_ASSERT(f->real_type() == MYSQL_TYPE_BLOB);
+ Field_blob *f2= (Field_blob*) f;
+ f2->store(val, len, &my_charset_utf8mb3_bin);
+}
+
void PFS_engine_table::set_field_enum(Field *f, ulonglong value)
{
DBUG_ASSERT(f->real_type() == MYSQL_TYPE_ENUM);
@@ -408,6 +616,13 @@ void PFS_engine_table::set_field_timestamp(Field *f, ulonglong value)
f2->store_TIME((long)(value / 1000000), (value % 1000000));
}
+void PFS_engine_table::set_field_double(Field *f, double value)
+{
+ DBUG_ASSERT(f->real_type() == MYSQL_TYPE_DOUBLE);
+ Field_double *f2= (Field_double*) f;
+ f2->store(value);
+}
+
ulonglong PFS_engine_table::get_field_enum(Field *f)
{
DBUG_ASSERT(f->real_type() == MYSQL_TYPE_ENUM);
@@ -508,6 +723,31 @@ void initialize_performance_schema_acl(bool bootstrap)
}
}
+static bool allow_drop_table_privilege() {
+ /*
+ The same DROP_ACL privilege is used for different statements,
+ in particular:
+ - TRUNCATE TABLE
+ - DROP TABLE
+ - ALTER TABLE
+ Here, we want to prevent DROP / ALTER while allowing TRUNCATE.
+ Note that we must also allow GRANT to transfer the truncate privilege.
+ */
+ THD *thd= current_thd;
+ if (thd == NULL) {
+ return false;
+ }
+
+ DBUG_ASSERT(thd->lex != NULL);
+ if ((thd->lex->sql_command != SQLCOM_TRUNCATE) &&
+ (thd->lex->sql_command != SQLCOM_GRANT)) {
+ return false;
+ }
+
+ return true;
+}
+
+
PFS_readonly_acl pfs_readonly_acl;
ACL_internal_access_result
@@ -523,6 +763,22 @@ PFS_readonly_acl::check(privilege_t want_access, privilege_t *save_priv) const
return ACL_INTERNAL_ACCESS_CHECK_GRANT;
}
+
+PFS_readonly_world_acl pfs_readonly_world_acl;
+
+ACL_internal_access_result
+PFS_readonly_world_acl::check(privilege_t want_access, privilege_t *save_priv) const
+{
+ ACL_internal_access_result res= PFS_readonly_acl::check(want_access, save_priv);
+ if (res == ACL_INTERNAL_ACCESS_CHECK_GRANT)
+ {
+ if (want_access == SELECT_ACL)
+ res= ACL_INTERNAL_ACCESS_GRANTED;
+ }
+ return res;
+}
+
+
PFS_truncatable_acl pfs_truncatable_acl;
ACL_internal_access_result
@@ -538,6 +794,27 @@ PFS_truncatable_acl::check(privilege_t want_access, privilege_t *save_priv) cons
return ACL_INTERNAL_ACCESS_CHECK_GRANT;
}
+
+PFS_truncatable_world_acl pfs_truncatable_world_acl;
+
+ACL_internal_access_result
+PFS_truncatable_world_acl::check(privilege_t want_access, privilege_t *save_priv) const
+{
+ ACL_internal_access_result res= PFS_truncatable_acl::check(want_access, save_priv);
+ if (res == ACL_INTERNAL_ACCESS_CHECK_GRANT)
+ {
+ if (want_access == DROP_ACL)
+ {
+ if (allow_drop_table_privilege())
+ res= ACL_INTERNAL_ACCESS_GRANTED;
+ }
+ else if (want_access == SELECT_ACL)
+ res= ACL_INTERNAL_ACCESS_GRANTED;
+ }
+ return res;
+}
+
+
PFS_updatable_acl pfs_updatable_acl;
ACL_internal_access_result
@@ -626,33 +903,33 @@ bool pfs_show_status(handlerton *hton, THD *thd,
{
switch (i){
case 0:
- name= "events_waits_current.row_size";
+ name= "events_waits_current.size";
size= sizeof(PFS_events_waits);
break;
case 1:
- name= "events_waits_current.row_count";
- size= WAIT_STACK_SIZE * thread_max;
+ name= "events_waits_current.count";
+ size= WAIT_STACK_SIZE * global_thread_container.get_row_count();
break;
case 2:
- name= "events_waits_history.row_size";
+ name= "events_waits_history.size";
size= sizeof(PFS_events_waits);
break;
case 3:
- name= "events_waits_history.row_count";
- size= events_waits_history_per_thread * thread_max;
+ name= "events_waits_history.count";
+ size= events_waits_history_per_thread * global_thread_container.get_row_count();
break;
case 4:
name= "events_waits_history.memory";
- size= events_waits_history_per_thread * thread_max
+ size= events_waits_history_per_thread * global_thread_container.get_row_count()
* sizeof(PFS_events_waits);
total_memory+= size;
break;
case 5:
- name= "events_waits_history_long.row_size";
+ name= "events_waits_history_long.size";
size= sizeof(PFS_events_waits);
break;
case 6:
- name= "events_waits_history_long.row_count";
+ name= "events_waits_history_long.count";
size= events_waits_history_long_size;
break;
case 7:
@@ -661,11 +938,11 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 8:
- name= "(pfs_mutex_class).row_size";
+ name= "(pfs_mutex_class).size";
size= sizeof(PFS_mutex_class);
break;
case 9:
- name= "(pfs_mutex_class).row_count";
+ name= "(pfs_mutex_class).count";
size= mutex_class_max;
break;
case 10:
@@ -674,11 +951,11 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 11:
- name= "(pfs_rwlock_class).row_size";
+ name= "(pfs_rwlock_class).size";
size= sizeof(PFS_rwlock_class);
break;
case 12:
- name= "(pfs_rwlock_class).row_count";
+ name= "(pfs_rwlock_class).count";
size= rwlock_class_max;
break;
case 13:
@@ -687,11 +964,11 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 14:
- name= "(pfs_cond_class).row_size";
+ name= "(pfs_cond_class).size";
size= sizeof(PFS_cond_class);
break;
case 15:
- name= "(pfs_cond_class).row_count";
+ name= "(pfs_cond_class).count";
size= cond_class_max;
break;
case 16:
@@ -700,11 +977,11 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 17:
- name= "(pfs_thread_class).row_size";
+ name= "(pfs_thread_class).size";
size= sizeof(PFS_thread_class);
break;
case 18:
- name= "(pfs_thread_class).row_count";
+ name= "(pfs_thread_class).count";
size= thread_class_max;
break;
case 19:
@@ -713,11 +990,11 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 20:
- name= "(pfs_file_class).row_size";
+ name= "(pfs_file_class).size";
size= sizeof(PFS_file_class);
break;
case 21:
- name= "(pfs_file_class).row_count";
+ name= "(pfs_file_class).count";
size= file_class_max;
break;
case 22:
@@ -726,76 +1003,76 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 23:
- name= "mutex_instances.row_size";
- size= sizeof(PFS_mutex);
+ name= "mutex_instances.size";
+ size= global_mutex_container.get_row_size();
break;
case 24:
- name= "mutex_instances.row_count";
- size= mutex_max;
+ name= "mutex_instances.count";
+ size= global_mutex_container.get_row_count();
break;
case 25:
name= "mutex_instances.memory";
- size= mutex_max * sizeof(PFS_mutex);
+ size= global_mutex_container.get_memory();
total_memory+= size;
break;
case 26:
- name= "rwlock_instances.row_size";
- size= sizeof(PFS_rwlock);
+ name= "rwlock_instances.size";
+ size= global_rwlock_container.get_row_size();
break;
case 27:
- name= "rwlock_instances.row_count";
- size= rwlock_max;
+ name= "rwlock_instances.count";
+ size= global_rwlock_container.get_row_count();
break;
case 28:
name= "rwlock_instances.memory";
- size= rwlock_max * sizeof(PFS_rwlock);
+ size= global_rwlock_container.get_memory();
total_memory+= size;
break;
case 29:
- name= "cond_instances.row_size";
- size= sizeof(PFS_cond);
+ name= "cond_instances.size";
+ size= global_cond_container.get_row_size();
break;
case 30:
- name= "cond_instances.row_count";
- size= cond_max;
+ name= "cond_instances.count";
+ size= global_cond_container.get_row_count();
break;
case 31:
name= "cond_instances.memory";
- size= cond_max * sizeof(PFS_cond);
+ size= global_cond_container.get_memory();
total_memory+= size;
break;
case 32:
- name= "threads.row_size";
- size= sizeof(PFS_thread);
+ name= "threads.size";
+ size= global_thread_container.get_row_size();
break;
case 33:
- name= "threads.row_count";
- size= thread_max;
+ name= "threads.count";
+ size= global_thread_container.get_row_count();
break;
case 34:
name= "threads.memory";
- size= thread_max * sizeof(PFS_thread);
+ size= global_thread_container.get_memory();
total_memory+= size;
break;
case 35:
- name= "file_instances.row_size";
- size= sizeof(PFS_file);
+ name= "file_instances.size";
+ size= global_file_container.get_row_size();
break;
case 36:
- name= "file_instances.row_count";
- size= file_max;
+ name= "file_instances.count";
+ size= global_file_container.get_row_count();
break;
case 37:
name= "file_instances.memory";
- size= file_max * sizeof(PFS_file);
+ size= global_file_container.get_memory();
total_memory+= size;
break;
case 38:
- name= "(pfs_file_handle).row_size";
+ name= "(pfs_file_handle).size";
size= sizeof(PFS_file*);
break;
case 39:
- name= "(pfs_file_handle).row_count";
+ name= "(pfs_file_handle).count";
size= file_handle_max;
break;
case 40:
@@ -804,154 +1081,154 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 41:
- name= "events_waits_summary_by_thread_by_event_name.row_size";
+ name= "events_waits_summary_by_thread_by_event_name.size";
size= sizeof(PFS_single_stat);
break;
case 42:
- name= "events_waits_summary_by_thread_by_event_name.row_count";
- size= thread_max * wait_class_max;
+ name= "events_waits_summary_by_thread_by_event_name.count";
+ size= global_thread_container.get_row_count() * wait_class_max;
break;
case 43:
name= "events_waits_summary_by_thread_by_event_name.memory";
- size= thread_max * wait_class_max * sizeof(PFS_single_stat);
+ size= global_thread_container.get_row_count() * wait_class_max * sizeof(PFS_single_stat);
total_memory+= size;
break;
case 44:
- name= "(pfs_table_share).row_size";
- size= sizeof(PFS_table_share);
+ name= "(pfs_table_share).size";
+ size= global_table_share_container.get_row_size();
break;
case 45:
- name= "(pfs_table_share).row_count";
- size= table_share_max;
+ name= "(pfs_table_share).count";
+ size= global_table_share_container.get_row_count();
break;
case 46:
name= "(pfs_table_share).memory";
- size= table_share_max * sizeof(PFS_table_share);
+ size= global_table_share_container.get_memory();
total_memory+= size;
break;
case 47:
- name= "(pfs_table).row_size";
- size= sizeof(PFS_table);
+ name= "(pfs_table).size";
+ size= global_table_container.get_row_size();
break;
case 48:
- name= "(pfs_table).row_count";
- size= table_max;
+ name= "(pfs_table).count";
+ size= global_table_container.get_row_count();
break;
case 49:
name= "(pfs_table).memory";
- size= table_max * sizeof(PFS_table);
+ size= global_table_container.get_memory();
total_memory+= size;
break;
case 50:
- name= "setup_actors.row_size";
- size= sizeof(PFS_setup_actor);
+ name= "setup_actors.size";
+ size= global_setup_actor_container.get_row_size();
break;
case 51:
- name= "setup_actors.row_count";
- size= setup_actor_max;
+ name= "setup_actors.count";
+ size= global_setup_actor_container.get_row_count();
break;
case 52:
name= "setup_actors.memory";
- size= setup_actor_max * sizeof(PFS_setup_actor);
+ size= global_setup_actor_container.get_memory();
total_memory+= size;
break;
case 53:
- name= "setup_objects.row_size";
- size= sizeof(PFS_setup_object);
+ name= "setup_objects.size";
+ size= global_setup_object_container.get_row_size();
break;
case 54:
- name= "setup_objects.row_count";
- size= setup_object_max;
+ name= "setup_objects.count";
+ size= global_setup_object_container.get_row_count();
break;
case 55:
name= "setup_objects.memory";
- size= setup_object_max * sizeof(PFS_setup_object);
+ size= global_setup_object_container.get_memory();
total_memory+= size;
break;
case 56:
- name= "(pfs_account).row_size";
- size= sizeof(PFS_account);
+ name= "(pfs_account).size";
+ size= global_account_container.get_row_size();
break;
case 57:
- name= "(pfs_account).row_count";
- size= account_max;
+ name= "(pfs_account).count";
+ size= global_account_container.get_row_count();
break;
case 58:
name= "(pfs_account).memory";
- size= account_max * sizeof(PFS_account);
+ size= global_account_container.get_memory();
total_memory+= size;
break;
case 59:
- name= "events_waits_summary_by_account_by_event_name.row_size";
+ name= "events_waits_summary_by_account_by_event_name.size";
size= sizeof(PFS_single_stat);
break;
case 60:
- name= "events_waits_summary_by_account_by_event_name.row_count";
- size= account_max * wait_class_max;
+ name= "events_waits_summary_by_account_by_event_name.count";
+ size= global_account_container.get_row_count() * wait_class_max;
break;
case 61:
name= "events_waits_summary_by_account_by_event_name.memory";
- size= account_max * wait_class_max * sizeof(PFS_single_stat);
+ size= global_account_container.get_row_count() * wait_class_max * sizeof(PFS_single_stat);
total_memory+= size;
break;
case 62:
- name= "events_waits_summary_by_user_by_event_name.row_size";
+ name= "events_waits_summary_by_user_by_event_name.size";
size= sizeof(PFS_single_stat);
break;
case 63:
- name= "events_waits_summary_by_user_by_event_name.row_count";
- size= user_max * wait_class_max;
+ name= "events_waits_summary_by_user_by_event_name.count";
+ size= global_user_container.get_row_count() * wait_class_max;
break;
case 64:
name= "events_waits_summary_by_user_by_event_name.memory";
- size= user_max * wait_class_max * sizeof(PFS_single_stat);
+ size= global_user_container.get_row_count() * wait_class_max * sizeof(PFS_single_stat);
total_memory+= size;
break;
case 65:
- name= "events_waits_summary_by_host_by_event_name.row_size";
+ name= "events_waits_summary_by_host_by_event_name.size";
size= sizeof(PFS_single_stat);
break;
case 66:
- name= "events_waits_summary_by_host_by_event_name.row_count";
- size= host_max * wait_class_max;
+ name= "events_waits_summary_by_host_by_event_name.count";
+ size= global_host_container.get_row_count() * wait_class_max;
break;
case 67:
name= "events_waits_summary_by_host_by_event_name.memory";
- size= host_max * wait_class_max * sizeof(PFS_single_stat);
+ size= global_host_container.get_row_count() * wait_class_max * sizeof(PFS_single_stat);
total_memory+= size;
break;
case 68:
- name= "(pfs_user).row_size";
- size= sizeof(PFS_user);
+ name= "(pfs_user).size";
+ size= global_user_container.get_row_size();
break;
case 69:
- name= "(pfs_user).row_count";
- size= user_max;
+ name= "(pfs_user).count";
+ size= global_user_container.get_row_count();
break;
case 70:
name= "(pfs_user).memory";
- size= user_max * sizeof(PFS_user);
+ size= global_user_container.get_memory();
total_memory+= size;
break;
case 71:
- name= "(pfs_host).row_size";
- size= sizeof(PFS_host);
+ name= "(pfs_host).size";
+ size= global_host_container.get_row_size();
break;
case 72:
- name= "(pfs_host).row_count";
- size= host_max;
+ name= "(pfs_host).count";
+ size= global_host_container.get_row_count();
break;
case 73:
name= "(pfs_host).memory";
- size= host_max * sizeof(PFS_host);
+ size= global_host_container.get_memory();
total_memory+= size;
break;
case 74:
- name= "(pfs_stage_class).row_size";
+ name= "(pfs_stage_class).size";
size= sizeof(PFS_stage_class);
break;
case 75:
- name= "(pfs_stage_class).row_count";
+ name= "(pfs_stage_class).count";
size= stage_class_max;
break;
case 76:
@@ -960,25 +1237,25 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 77:
- name= "events_stages_history.row_size";
+ name= "events_stages_history.size";
size= sizeof(PFS_events_stages);
break;
case 78:
- name= "events_stages_history.row_count";
- size= events_stages_history_per_thread * thread_max;
+ name= "events_stages_history.count";
+ size= events_stages_history_per_thread * global_thread_container.get_row_count();
break;
case 79:
name= "events_stages_history.memory";
- size= events_stages_history_per_thread * thread_max
+ size= events_stages_history_per_thread * global_thread_container.get_row_count()
* sizeof(PFS_events_stages);
total_memory+= size;
break;
case 80:
- name= "events_stages_history_long.row_size";
+ name= "events_stages_history_long.size";
size= sizeof(PFS_events_stages);
break;
case 81:
- name= "events_stages_history_long.row_count";
+ name= "events_stages_history_long.count";
size= events_stages_history_long_size;
break;
case 82:
@@ -987,24 +1264,24 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 83:
- name= "events_stages_summary_by_thread_by_event_name.row_size";
+ name= "events_stages_summary_by_thread_by_event_name.size";
size= sizeof(PFS_stage_stat);
break;
case 84:
- name= "events_stages_summary_by_thread_by_event_name.row_count";
- size= thread_max * stage_class_max;
+ name= "events_stages_summary_by_thread_by_event_name.count";
+ size= global_thread_container.get_row_count() * stage_class_max;
break;
case 85:
name= "events_stages_summary_by_thread_by_event_name.memory";
- size= thread_max * stage_class_max * sizeof(PFS_stage_stat);
+ size= global_thread_container.get_row_count() * stage_class_max * sizeof(PFS_stage_stat);
total_memory+= size;
break;
case 86:
- name= "events_stages_summary_global_by_event_name.row_size";
+ name= "events_stages_summary_global_by_event_name.size";
size= sizeof(PFS_stage_stat);
break;
case 87:
- name= "events_stages_summary_global_by_event_name.row_count";
+ name= "events_stages_summary_global_by_event_name.count";
size= stage_class_max;
break;
case 88:
@@ -1013,50 +1290,50 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 89:
- name= "events_stages_summary_by_account_by_event_name.row_size";
+ name= "events_stages_summary_by_account_by_event_name.size";
size= sizeof(PFS_stage_stat);
break;
case 90:
- name= "events_stages_summary_by_account_by_event_name.row_count";
- size= account_max * stage_class_max;
+ name= "events_stages_summary_by_account_by_event_name.count";
+ size= global_account_container.get_row_count() * stage_class_max;
break;
case 91:
name= "events_stages_summary_by_account_by_event_name.memory";
- size= account_max * stage_class_max * sizeof(PFS_stage_stat);
+ size= global_account_container.get_row_count() * stage_class_max * sizeof(PFS_stage_stat);
total_memory+= size;
break;
case 92:
- name= "events_stages_summary_by_user_by_event_name.row_size";
+ name= "events_stages_summary_by_user_by_event_name.size";
size= sizeof(PFS_stage_stat);
break;
case 93:
- name= "events_stages_summary_by_user_by_event_name.row_count";
- size= user_max * stage_class_max;
+ name= "events_stages_summary_by_user_by_event_name.count";
+ size= global_user_container.get_row_count() * stage_class_max;
break;
case 94:
name= "events_stages_summary_by_user_by_event_name.memory";
- size= user_max * stage_class_max * sizeof(PFS_stage_stat);
+ size= global_user_container.get_row_count() * stage_class_max * sizeof(PFS_stage_stat);
total_memory+= size;
break;
case 95:
- name= "events_stages_summary_by_host_by_event_name.row_size";
+ name= "events_stages_summary_by_host_by_event_name.size";
size= sizeof(PFS_stage_stat);
break;
case 96:
- name= "events_stages_summary_by_host_by_event_name.row_count";
- size= host_max * stage_class_max;
+ name= "events_stages_summary_by_host_by_event_name.count";
+ size= global_host_container.get_row_count() * stage_class_max;
break;
case 97:
name= "events_stages_summary_by_host_by_event_name.memory";
- size= host_max * stage_class_max * sizeof(PFS_stage_stat);
+ size= global_host_container.get_row_count() * stage_class_max * sizeof(PFS_stage_stat);
total_memory+= size;
break;
case 98:
- name= "(pfs_statement_class).row_size";
+ name= "(pfs_statement_class).size";
size= sizeof(PFS_statement_class);
break;
case 99:
- name= "(pfs_statement_class).row_count";
+ name= "(pfs_statement_class).count";
size= statement_class_max;
break;
case 100:
@@ -1065,51 +1342,51 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 101:
- name= "events_statements_history.row_size";
+ name= "events_statements_history.size";
size= sizeof(PFS_events_statements);
break;
case 102:
- name= "events_statements_history.row_count";
- size= events_statements_history_per_thread * thread_max;
+ name= "events_statements_history.count";
+ size= events_statements_history_per_thread * global_thread_container.get_row_count();
break;
case 103:
name= "events_statements_history.memory";
- size= events_statements_history_per_thread * thread_max
+ size= events_statements_history_per_thread * global_thread_container.get_row_count()
* sizeof(PFS_events_statements);
total_memory+= size;
break;
case 104:
- name= "events_statements_history_long.row_size";
+ name= "events_statements_history_long.size";
size= sizeof(PFS_events_statements);
break;
case 105:
- name= "events_statements_history_long.row_count";
+ name= "events_statements_history_long.count";
size= events_statements_history_long_size;
break;
case 106:
name= "events_statements_history_long.memory";
- size= events_statements_history_long_size * sizeof(PFS_events_statements);
+ size= events_statements_history_long_size * (sizeof(PFS_events_statements));
total_memory+= size;
break;
case 107:
- name= "events_statements_summary_by_thread_by_event_name.row_size";
+ name= "events_statements_summary_by_thread_by_event_name.size";
size= sizeof(PFS_statement_stat);
break;
case 108:
- name= "events_statements_summary_by_thread_by_event_name.row_count";
- size= thread_max * statement_class_max;
+ name= "events_statements_summary_by_thread_by_event_name.count";
+ size= global_thread_container.get_row_count() * statement_class_max;
break;
case 109:
name= "events_statements_summary_by_thread_by_event_name.memory";
- size= thread_max * statement_class_max * sizeof(PFS_statement_stat);
+ size= global_thread_container.get_row_count() * statement_class_max * sizeof(PFS_statement_stat);
total_memory+= size;
break;
case 110:
- name= "events_statements_summary_global_by_event_name.row_size";
+ name= "events_statements_summary_global_by_event_name.size";
size= sizeof(PFS_statement_stat);
break;
case 111:
- name= "events_statements_summary_global_by_event_name.row_count";
+ name= "events_statements_summary_global_by_event_name.count";
size= statement_class_max;
break;
case 112:
@@ -1118,63 +1395,63 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 113:
- name= "events_statements_summary_by_account_by_event_name.row_size";
+ name= "events_statements_summary_by_account_by_event_name.size";
size= sizeof(PFS_statement_stat);
break;
case 114:
- name= "events_statements_summary_by_account_by_event_name.row_count";
- size= account_max * statement_class_max;
+ name= "events_statements_summary_by_account_by_event_name.count";
+ size= global_account_container.get_row_count() * statement_class_max;
break;
case 115:
name= "events_statements_summary_by_account_by_event_name.memory";
- size= account_max * statement_class_max * sizeof(PFS_statement_stat);
+ size= global_account_container.get_row_count() * statement_class_max * sizeof(PFS_statement_stat);
total_memory+= size;
break;
case 116:
- name= "events_statements_summary_by_user_by_event_name.row_size";
+ name= "events_statements_summary_by_user_by_event_name.size";
size= sizeof(PFS_statement_stat);
break;
case 117:
- name= "events_statements_summary_by_user_by_event_name.row_count";
- size= user_max * statement_class_max;
+ name= "events_statements_summary_by_user_by_event_name.count";
+ size= global_user_container.get_row_count() * statement_class_max;
break;
case 118:
name= "events_statements_summary_by_user_by_event_name.memory";
- size= user_max * statement_class_max * sizeof(PFS_statement_stat);
+ size= global_user_container.get_row_count() * statement_class_max * sizeof(PFS_statement_stat);
total_memory+= size;
break;
case 119:
- name= "events_statements_summary_by_host_by_event_name.row_size";
+ name= "events_statements_summary_by_host_by_event_name.size";
size= sizeof(PFS_statement_stat);
break;
case 120:
- name= "events_statements_summary_by_host_by_event_name.row_count";
- size= host_max * statement_class_max;
+ name= "events_statements_summary_by_host_by_event_name.count";
+ size= global_host_container.get_row_count() * statement_class_max;
break;
case 121:
name= "events_statements_summary_by_host_by_event_name.memory";
- size= host_max * statement_class_max * sizeof(PFS_statement_stat);
+ size= global_host_container.get_row_count() * statement_class_max * sizeof(PFS_statement_stat);
total_memory+= size;
break;
case 122:
- name= "events_statements_current.row_size";
+ name= "events_statements_current.size";
size= sizeof(PFS_events_statements);
break;
case 123:
- name= "events_statements_current.row_count";
- size= thread_max * statement_stack_max;
+ name= "events_statements_current.count";
+ size= global_thread_container.get_row_count() * statement_stack_max;
break;
case 124:
name= "events_statements_current.memory";
- size= thread_max * statement_stack_max * sizeof(PFS_events_statements);
+ size= global_thread_container.get_row_count() * statement_stack_max * sizeof(PFS_events_statements);
total_memory+= size;
break;
case 125:
- name= "(pfs_socket_class).row_size";
+ name= "(pfs_socket_class).size";
size= sizeof(PFS_socket_class);
break;
case 126:
- name= "(pfs_socket_class).row_count";
+ name= "(pfs_socket_class).count";
size= socket_class_max;
break;
case 127:
@@ -1183,110 +1460,144 @@ bool pfs_show_status(handlerton *hton, THD *thd,
total_memory+= size;
break;
case 128:
- name= "socket_instances.row_size";
- size= sizeof(PFS_socket);
+ name= "socket_instances.size";
+ size= global_socket_container.get_row_size();
break;
case 129:
- name= "socket_instances.row_count";
- size= socket_max;
+ name= "socket_instances.count";
+ size= global_socket_container.get_row_count();
break;
case 130:
name= "socket_instances.memory";
- size= socket_max * sizeof(PFS_socket);
+ size= global_socket_container.get_memory();
total_memory+= size;
break;
case 131:
- name= "events_statements_summary_by_digest.row_size";
+ name= "events_statements_summary_by_digest.size";
size= sizeof(PFS_statements_digest_stat);
break;
case 132:
- name= "events_statements_summary_by_digest.row_count";
+ name= "events_statements_summary_by_digest.count";
size= digest_max;
break;
case 133:
name= "events_statements_summary_by_digest.memory";
- size= digest_max * sizeof(PFS_statements_digest_stat);
+ size= digest_max * (sizeof(PFS_statements_digest_stat));
total_memory+= size;
break;
case 134:
- name= "session_connect_attrs.row_size";
- size= thread_max;
+ name= "events_statements_summary_by_program.size";
+ size= global_program_container.get_row_size();
break;
case 135:
- name= "session_connect_attrs.row_count";
- size= session_connect_attrs_size_per_thread;
+ name= "events_statements_summary_by_program.count";
+ size= global_program_container.get_row_count();
break;
case 136:
+ name= "events_statements_summary_by_program.memory";
+ size= global_program_container.get_memory();
+ total_memory+= size;
+ break;
+ case 137:
+ name= "session_connect_attrs.size";
+ size= global_thread_container.get_row_count();
+ break;
+ case 138:
+ name= "session_connect_attrs.count";
+ size= session_connect_attrs_size_per_thread;
+ break;
+ case 139:
name= "session_connect_attrs.memory";
- size= thread_max * session_connect_attrs_size_per_thread;
+ size= global_thread_container.get_row_count() * session_connect_attrs_size_per_thread;
+ total_memory+= size;
+ break;
+ case 140:
+ name= "prepared_statements_instances.size";
+ size= global_prepared_stmt_container.get_row_size();
+ break;
+ case 141:
+ name= "prepared_statements_instances.count";
+ size= global_prepared_stmt_container.get_row_count();
+ break;
+ case 142:
+ name= "prepared_statements_instances.memory";
+ size= global_prepared_stmt_container.get_memory();
total_memory+= size;
break;
- case 137:
+ case 143:
name= "(account_hash).count";
size= account_hash.count;
break;
- case 138:
+ case 144:
name= "(account_hash).size";
size= account_hash.size;
break;
- case 139:
+ case 145:
name= "(digest_hash).count";
size= digest_hash.count;
break;
- case 140:
+ case 146:
name= "(digest_hash).size";
size= digest_hash.size;
break;
- case 141:
+ case 147:
name= "(filename_hash).count";
size= filename_hash.count;
break;
- case 142:
+ case 148:
name= "(filename_hash).size";
size= filename_hash.size;
break;
- case 143:
+ case 149:
name= "(host_hash).count";
size= host_hash.count;
break;
- case 144:
+ case 150:
name= "(host_hash).size";
size= host_hash.size;
break;
- case 145:
+ case 151:
name= "(setup_actor_hash).count";
size= setup_actor_hash.count;
break;
- case 146:
+ case 152:
name= "(setup_actor_hash).size";
size= setup_actor_hash.size;
break;
- case 147:
+ case 153:
name= "(setup_object_hash).count";
size= setup_object_hash.count;
break;
- case 148:
+ case 154:
name= "(setup_object_hash).size";
size= setup_object_hash.size;
break;
- case 149:
+ case 155:
name= "(table_share_hash).count";
size= table_share_hash.count;
break;
- case 150:
+ case 156:
name= "(table_share_hash).size";
size= table_share_hash.size;
break;
- case 151:
+ case 157:
name= "(user_hash).count";
size= user_hash.count;
break;
- case 152:
+ case 158:
name= "(user_hash).size";
size= user_hash.size;
break;
- case 153:
+ case 159:
+ name= "(program_hash).count";
+ size= program_hash.count;
+ break;
+ case 160:
+ name= "(program_hash).size";
+ size= program_hash.size;
+ break;
+ case 161:
/*
This is not a performance_schema buffer,
the data is maintained in the server,
@@ -1298,68 +1609,302 @@ bool pfs_show_status(handlerton *hton, THD *thd,
name= "host_cache.size";
size= sizeof(Host_entry);
break;
- case 154:
- name= "(history_long_statements_digest_token_array).row_count";
+
+ case 162:
+ name= "(pfs_memory_class).row_size";
+ size= sizeof(PFS_memory_class);
+ break;
+ case 163:
+ name= "(pfs_memory_class).row_count";
+ size= memory_class_max;
+ break;
+ case 164:
+ name= "(pfs_memory_class).memory";
+ size= memory_class_max * sizeof(PFS_memory_class);
+ total_memory+= size;
+ break;
+
+ case 165:
+ name= "memory_summary_by_thread_by_event_name.row_size";
+ size= sizeof(PFS_memory_stat);
+ break;
+ case 166:
+ name= "memory_summary_by_thread_by_event_name.row_count";
+ size= global_thread_container.get_row_count() * memory_class_max;
+ break;
+ case 167:
+ name= "memory_summary_by_thread_by_event_name.memory";
+ size= global_thread_container.get_row_count() * memory_class_max * sizeof(PFS_memory_stat);
+ total_memory+= size;
+ break;
+ case 168:
+ name= "memory_summary_global_by_event_name.row_size";
+ size= sizeof(PFS_memory_stat);
+ break;
+ case 169:
+ name= "memory_summary_global_by_event_name.row_count";
+ size= memory_class_max;
+ break;
+ case 170:
+ name= "memory_summary_global_by_event_name.memory";
+ size= memory_class_max * sizeof(PFS_memory_stat);
+ total_memory+= size;
+ break;
+ case 171:
+ name= "memory_summary_by_account_by_event_name.row_size";
+ size= sizeof(PFS_memory_stat);
+ break;
+ case 172:
+ name= "memory_summary_by_account_by_event_name.row_count";
+ size= global_account_container.get_row_count() * memory_class_max;
+ break;
+ case 173:
+ name= "memory_summary_by_account_by_event_name.memory";
+ size= global_account_container.get_row_count() * memory_class_max * sizeof(PFS_memory_stat);
+ total_memory+= size;
+ break;
+ case 174:
+ name= "memory_summary_by_user_by_event_name.row_size";
+ size= sizeof(PFS_memory_stat);
+ break;
+ case 175:
+ name= "memory_summary_by_user_by_event_name.row_count";
+ size= global_user_container.get_row_count() * memory_class_max;
+ break;
+ case 176:
+ name= "memory_summary_by_user_by_event_name.memory";
+ size= global_user_container.get_row_count() * memory_class_max * sizeof(PFS_memory_stat);
+ total_memory+= size;
+ break;
+ case 177:
+ name= "memory_summary_by_host_by_event_name.row_size";
+ size= sizeof(PFS_memory_stat);
+ break;
+ case 178:
+ name= "memory_summary_by_host_by_event_name.row_count";
+ size= global_host_container.get_row_count() * memory_class_max;
+ break;
+ case 179:
+ name= "memory_summary_by_host_by_event_name.memory";
+ size= global_host_container.get_row_count() * memory_class_max * sizeof(PFS_memory_stat);
+ total_memory+= size;
+ break;
+ case 180:
+ name= "metadata_locks.row_size";
+ size= global_mdl_container.get_row_size();
+ break;
+ case 181:
+ name= "metadata_locks.row_count";
+ size= global_mdl_container.get_row_count();
+ break;
+ case 182:
+ name= "metadata_locks.memory";
+ size= global_mdl_container.get_memory();
+ total_memory+= size;
+ break;
+ case 183:
+ name= "events_transactions_history.size";
+ size= sizeof(PFS_events_transactions);
+ break;
+ case 184:
+ name= "events_transactions_history.count";
+ size= events_transactions_history_per_thread * global_thread_container.get_row_count();
+ break;
+ case 185:
+ name= "events_transactions_history.memory";
+ size= events_transactions_history_per_thread * global_thread_container.get_row_count()
+ * sizeof(PFS_events_transactions);
+ total_memory+= size;
+ break;
+ case 186:
+ name= "events_transactions_history_long.size";
+ size= sizeof(PFS_events_transactions);
+ break;
+ case 187:
+ name= "events_transactions_history_long.count";
+ size= events_transactions_history_long_size;
+ break;
+ case 188:
+ name= "events_transactions_history_long.memory";
+ size= events_transactions_history_long_size * sizeof(PFS_events_transactions);
+ total_memory+= size;
+ break;
+ case 189:
+ name= "events_transactions_summary_by_thread_by_event_name.size";
+ size= sizeof(PFS_transaction_stat);
+ break;
+ case 190:
+ name= "events_transactions_summary_by_thread_by_event_name.count";
+ size= global_thread_container.get_row_count() * transaction_class_max;
+ break;
+ case 191:
+ name= "events_transactions_summary_by_thread_by_event_name.memory";
+ size= global_thread_container.get_row_count() * transaction_class_max * sizeof(PFS_transaction_stat);
+ total_memory+= size;
+ break;
+ case 192:
+ name= "events_transactions_summary_by_account_by_event_name.size";
+ size= sizeof(PFS_transaction_stat);
+ break;
+ case 193:
+ name= "events_transactions_summary_by_account_by_event_name.count";
+ size= global_account_container.get_row_count() * transaction_class_max;
+ break;
+ case 194:
+ name= "events_transactions_summary_by_account_by_event_name.memory";
+ size= global_account_container.get_row_count() * transaction_class_max * sizeof(PFS_transaction_stat);
+ total_memory+= size;
+ break;
+ case 195:
+ name= "events_transactions_summary_by_user_by_event_name.size";
+ size= sizeof(PFS_transaction_stat);
+ break;
+ case 196:
+ name= "events_transactions_summary_by_user_by_event_name.count";
+ size= global_user_container.get_row_count() * transaction_class_max;
+ break;
+ case 197:
+ name= "events_transactions_summary_by_user_by_event_name.memory";
+ size= global_user_container.get_row_count() * transaction_class_max * sizeof(PFS_transaction_stat);
+ total_memory+= size;
+ break;
+ case 198:
+ name= "events_transactions_summary_by_host_by_event_name.size";
+ size= sizeof(PFS_transaction_stat);
+ break;
+ case 199:
+ name= "events_transactions_summary_by_host_by_event_name.count";
+ size= global_host_container.get_row_count() * transaction_class_max;
+ break;
+ case 200:
+ name= "events_transactions_summary_by_host_by_event_name.memory";
+ size= global_host_container.get_row_count() * transaction_class_max * sizeof(PFS_transaction_stat);
+ total_memory+= size;
+ break;
+ case 201:
+ name= "table_lock_waits_summary_by_table.size";
+ size= global_table_share_lock_container.get_row_size();
+ break;
+ case 202:
+ name= "table_lock_waits_summary_by_table.count";
+ size= global_table_share_lock_container.get_row_count();
+ break;
+ case 203:
+ name= "table_lock_waits_summary_by_table.memory";
+ size= global_table_share_lock_container.get_memory();
+ total_memory+= size;
+ break;
+ case 204:
+ name= "table_io_waits_summary_by_index_usage.size";
+ size= global_table_share_index_container.get_row_size();
+ break;
+ case 205:
+ name= "table_io_waits_summary_by_index_usage.count";
+ size= global_table_share_index_container.get_row_count();
+ break;
+ case 206:
+ name= "table_io_waits_summary_by_index_usage.memory";
+ size= global_table_share_index_container.get_memory();
+ total_memory+= size;
+ break;
+ case 207:
+ name= "(history_long_statements_digest_token_array).count";
size= events_statements_history_long_size;
break;
- case 155:
- name= "(history_long_statements_digest_token_array).row_size";
+ case 208:
+ name= "(history_long_statements_digest_token_array).size";
size= pfs_max_digest_length;
break;
- case 156:
+ case 209:
name= "(history_long_statements_digest_token_array).memory";
size= events_statements_history_long_size * pfs_max_digest_length;
total_memory+= size;
break;
- case 157:
- name= "(history_statements_digest_token_array).row_count";
- size= thread_max * events_statements_history_per_thread;
+ case 210:
+ name= "(history_statements_digest_token_array).count";
+ size= global_thread_container.get_row_count() * events_statements_history_per_thread;
break;
- case 158:
- name= "(history_statements_digest_token_array).row_size";
+ case 211:
+ name= "(history_statements_digest_token_array).size";
size= pfs_max_digest_length;
break;
- case 159:
+ case 212:
name= "(history_statements_digest_token_array).memory";
- size= thread_max * events_statements_history_per_thread * pfs_max_digest_length;
+ size= global_thread_container.get_row_count() * events_statements_history_per_thread * pfs_max_digest_length;
total_memory+= size;
break;
- case 160:
- name= "(current_statements_digest_token_array).row_count";
- size= thread_max * statement_stack_max;
+ case 213:
+ name= "(current_statements_digest_token_array).count";
+ size= global_thread_container.get_row_count() * statement_stack_max;
break;
- case 161:
- name= "(current_statements_digest_token_array).row_size";
+ case 214:
+ name= "(current_statements_digest_token_array).size";
size= pfs_max_digest_length;
break;
- case 162:
+ case 215:
name= "(current_statements_digest_token_array).memory";
- size= thread_max * statement_stack_max * pfs_max_digest_length;
+ size= global_thread_container.get_row_count() * statement_stack_max * pfs_max_digest_length;
total_memory+= size;
break;
- case 163:
- name= "(statements_digest_token_array).row_count";
+ case 216:
+ name= "(history_long_statements_text_array).count";
+ size= events_statements_history_long_size;
+ break;
+ case 217:
+ name= "(history_long_statements_text_array).size";
+ size= pfs_max_sqltext;
+ break;
+ case 218:
+ name= "(history_long_statements_text_array).memory";
+ size= events_statements_history_long_size * pfs_max_sqltext;
+ total_memory+= size;
+ break;
+ case 219:
+ name= "(history_statements_text_array).count";
+ size= global_thread_container.get_row_count() * events_statements_history_per_thread;
+ break;
+ case 220:
+ name= "(history_statements_text_array).size";
+ size= pfs_max_sqltext;
+ break;
+ case 221:
+ name= "(history_statements_text_array).memory";
+ size= global_thread_container.get_row_count() * events_statements_history_per_thread * pfs_max_sqltext;
+ total_memory+= size;
+ break;
+ case 222:
+ name= "(current_statements_text_array).count";
+ size= global_thread_container.get_row_count() * statement_stack_max;
+ break;
+ case 223:
+ name= "(current_statements_text_array).size";
+ size= pfs_max_sqltext;
+ break;
+ case 224:
+ name= "(current_statements_text_array).memory";
+ size= global_thread_container.get_row_count() * statement_stack_max * pfs_max_sqltext;
+ total_memory+= size;
+ break;
+ case 225:
+ name= "(statements_digest_token_array).count";
size= digest_max;
break;
- case 164:
- name= "(statements_digest_token_array).row_size";
+ case 226:
+ name= "(statements_digest_token_array).size";
size= pfs_max_digest_length;
break;
- case 165:
+ case 227:
name= "(statements_digest_token_array).memory";
size= digest_max * pfs_max_digest_length;
total_memory+= size;
break;
-
/*
This case must be last,
for aggregation in total_memory.
*/
- case 166:
+ case 228:
name= "performance_schema.memory";
size= total_memory;
- /* This will fail if something is not advertised here */
- DBUG_ASSERT(size == pfs_allocated_memory);
break;
default:
goto end;
diff --git a/storage/perfschema/pfs_engine_table.h b/storage/perfschema/pfs_engine_table.h
index a1a01df6e15..89b723b08d7 100644
--- a/storage/perfschema/pfs_engine_table.h
+++ b/storage/perfschema/pfs_engine_table.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2016, 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, version 2.0,
@@ -23,13 +23,24 @@
#ifndef PFS_ENGINE_TABLE_H
#define PFS_ENGINE_TABLE_H
-#include "sql_acl.h" /* struct ACL_* */
+#include "table.h"
+#include "sql_acl.h"
/**
@file storage/perfschema/pfs_engine_table.h
Performance schema tables (declarations).
*/
#include "pfs_instr_class.h"
+extern pthread_key_t THR_PFS_VG; // global_variables
+extern pthread_key_t THR_PFS_SV; // session_variables
+extern pthread_key_t THR_PFS_VBT; // variables_by_thread
+extern pthread_key_t THR_PFS_SG; // global_status
+extern pthread_key_t THR_PFS_SS; // session_status
+extern pthread_key_t THR_PFS_SBT; // status_by_thread
+extern pthread_key_t THR_PFS_SBU; // status_by_user
+extern pthread_key_t THR_PFS_SBH; // status_by_host
+extern pthread_key_t THR_PFS_SBA; // status_by_account
+
class Field;
struct PFS_engine_table_share;
struct time_normalizer;
@@ -40,6 +51,36 @@ struct time_normalizer;
*/
/**
+ Store and retrieve table state information during a query.
+*/
+class PFS_table_context
+{
+public:
+ PFS_table_context(ulonglong current_version, bool restore, pthread_key_t key);
+ PFS_table_context(ulonglong current_version, ulong map_size, bool restore, pthread_key_t key);
+~PFS_table_context(void);
+
+ bool initialize(void);
+ bool is_initialized(void) { return m_initialized; }
+ ulonglong current_version(void) { return m_current_version; }
+ ulonglong last_version(void) { return m_last_version; }
+ bool versions_match(void) { return m_last_version == m_current_version; }
+ void set_item(ulong n);
+ bool is_item_set(ulong n);
+ pthread_key_t m_thr_key;
+
+private:
+ ulonglong m_current_version;
+ ulonglong m_last_version;
+ ulong *m_map;
+ ulong m_map_size;
+ ulong m_word_size;
+ bool m_restore;
+ bool m_initialized;
+ ulong m_last_item;
+};
+
+/**
An abstract PERFORMANCE_SCHEMA table.
Every table implemented in the performance schema schema and storage engine
derives from this class.
@@ -88,12 +129,24 @@ public:
{}
/**
+ Helper, assign a value to a long field.
+ @param f the field to set
+ @param value the value to assign
+ */
+ static void set_field_long(Field *f, long value);
+ /**
Helper, assign a value to a ulong field.
@param f the field to set
@param value the value to assign
*/
static void set_field_ulong(Field *f, ulong value);
/**
+ Helper, assign a value to a longlong field.
+ @param f the field to set
+ @param value the value to assign
+ */
+ static void set_field_longlong(Field *f, longlong value);
+ /**
Helper, assign a value to a ulonglong field.
@param f the field to set
@param value the value to assign
@@ -109,6 +162,14 @@ public:
/**
Helper, assign a value to a varchar utf8 field.
@param f the field to set
+ @param cs the string character set
+ @param str the string to assign
+ @param len the length of the string to assign
+ */
+ static void set_field_varchar(Field *f, const CHARSET_INFO *cs, const char *str, uint len);
+ /**
+ Helper, assign a value to a varchar utf8 field.
+ @param f the field to set
@param str the string to assign
@param len the length of the string to assign
*/
@@ -121,6 +182,13 @@ public:
*/
static void set_field_longtext_utf8(Field *f, const char *str, uint len);
/**
+ Helper, assign a value to a blob field.
+ @param f the field to set
+ @param val the value to assign
+ @param len the length of the string to assign
+ */
+ static void set_field_blob(Field *f, const char *val, uint len);
+ /**
Helper, assign a value to an enum field.
@param f the field to set
@param value the value to assign
@@ -133,6 +201,12 @@ public:
*/
static void set_field_timestamp(Field *f, ulonglong value);
/**
+ Helper, assign a value to a double field.
+ @param f the field to set
+ @param value the value to assign
+ */
+ static void set_field_double(Field *f, double value);
+ /**
Helper, read a value from an enum field.
@param f the field to read
@return the field value
@@ -182,7 +256,6 @@ protected:
*/
virtual int delete_row_values(TABLE *table, const unsigned char *buf,
Field **fields);
-
/**
Constructor.
@param share table share
@@ -238,19 +311,14 @@ struct PFS_engine_table_share
pfs_delete_all_rows_t m_delete_all_rows;
/** Get rows count function. */
pfs_get_row_count_t m_get_row_count;
- /**
- Number or records.
- This number does not need to be precise,
- it is used by the optimizer to decide if the table
- has 0, 1, or many records.
- */
- ha_rows m_records;
/** Length of the m_pos position structure. */
uint m_ref_length;
/** The lock, stored on behalf of the SQL layer. */
THR_LOCK *m_thr_lock_ptr;
/** Table definition. */
LEX_STRING sql;
+ /** Table is available even if the Performance Schema is disabled. */
+ bool m_perpetual;
};
/**
@@ -352,6 +420,45 @@ public:
/** Singleton instance of PFS_unknown_acl. */
extern PFS_unknown_acl pfs_unknown_acl;
+
+/**
+ Privileges for world readable tables.
+*/
+class PFS_readonly_world_acl : public PFS_readonly_acl
+{
+public:
+ PFS_readonly_world_acl()
+ {}
+
+ ~PFS_readonly_world_acl()
+ {}
+ virtual ACL_internal_access_result check(privilege_t want_access, privilege_t *save_priv) const;
+};
+
+
+/** Singleton instance of PFS_readonly_world_acl */
+extern PFS_readonly_world_acl pfs_readonly_world_acl;
+
+
+/**
+Privileges for world readable truncatable tables.
+*/
+class PFS_truncatable_world_acl : public PFS_truncatable_acl
+{
+public:
+ PFS_truncatable_world_acl()
+ {}
+
+ ~PFS_truncatable_world_acl()
+ {}
+ virtual ACL_internal_access_result check(privilege_t want_access, privilege_t *save_priv) const;
+};
+
+
+/** Singleton instance of PFS_readonly_world_acl */
+extern PFS_truncatable_world_acl pfs_truncatable_world_acl;
+
+
/** Position of a cursor, for simple iterations. */
struct PFS_simple_index
{
@@ -368,6 +475,13 @@ struct PFS_simple_index
/**
Set this index at a given position.
+ @param index an index
+ */
+ void set_at(uint index)
+ { m_index= index; }
+
+ /**
+ Set this index at a given position.
@param other a position
*/
void set_at(const struct PFS_simple_index *other)
@@ -404,6 +518,15 @@ struct PFS_double_index
/**
Set this index at a given position.
+ */
+ void set_at(uint index_1, uint index_2)
+ {
+ m_index_1= index_1;
+ m_index_2= index_2;
+ }
+
+ /**
+ Set this index at a given position.
@param other a position
*/
void set_at(const struct PFS_double_index *other)
@@ -445,6 +568,16 @@ struct PFS_triple_index
/**
Set this index at a given position.
+ */
+ void set_at(uint index_1, uint index_2, uint index_3)
+ {
+ m_index_1= index_1;
+ m_index_2= index_2;
+ m_index_3= index_3;
+ }
+
+ /**
+ Set this index at a given position.
@param other a position
*/
void set_at(const struct PFS_triple_index *other)
diff --git a/storage/perfschema/pfs_events.h b/storage/perfschema/pfs_events.h
index ca2fd8582ad..6d4a28936ff 100644
--- a/storage/perfschema/pfs_events.h
+++ b/storage/perfschema/pfs_events.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -41,8 +41,16 @@ struct PFS_events
ulonglong m_event_id;
/** END_EVENT_ID. */
ulonglong m_end_event_id;
+ /** (EVENT_TYPE) */
+ enum_event_type m_event_type;
/** NESTING_EVENT_ID. */
ulonglong m_nesting_event_id;
+ /** NESTING_EVENT_TYPE */
+ enum_event_type m_nesting_event_type;
+ /** NESTING_EVENT_LEVEL */
+ uint m_nesting_event_level;
+ /** Instrument metadata. */
+ PFS_instr_class *m_class;
/**
Timer start.
This member is populated only if m_class->m_timed is true.
@@ -53,14 +61,8 @@ struct PFS_events
This member is populated only if m_class->m_timed is true.
*/
ulonglong m_timer_end;
- /** Instrument metadata. */
- PFS_instr_class *m_class;
/** Location of the instrumentation in the source code (file name). */
const char *m_source_file;
- /** (EVENT_TYPE) */
- enum_event_type m_event_type;
- /** NESTING_EVENT_TYPE */
- enum_event_type m_nesting_event_type;
/** Location of the instrumentation in the source code (line number). */
uint m_source_line;
};
diff --git a/storage/perfschema/pfs_events_stages.cc b/storage/perfschema/pfs_events_stages.cc
index a68b0729e96..e5a6b9a2007 100644
--- a/storage/perfschema/pfs_events_stages.cc
+++ b/storage/perfschema/pfs_events_stages.cc
@@ -35,22 +35,24 @@
#include "pfs_user.h"
#include "pfs_events_stages.h"
#include "pfs_atomic.h"
+#include "pfs_buffer_container.h"
+#include "pfs_builtin_memory.h"
#include "m_string.h"
-ulong events_stages_history_long_size= 0;
+PFS_ALIGNED ulong events_stages_history_long_size= 0;
/** Consumer flag for table EVENTS_STAGES_CURRENT. */
-bool flag_events_stages_current= false;
+PFS_ALIGNED bool flag_events_stages_current= false;
/** Consumer flag for table EVENTS_STAGES_HISTORY. */
-bool flag_events_stages_history= false;
+PFS_ALIGNED bool flag_events_stages_history= false;
/** Consumer flag for table EVENTS_STAGES_HISTORY_LONG. */
-bool flag_events_stages_history_long= false;
+PFS_ALIGNED bool flag_events_stages_history_long= false;
/** True if EVENTS_STAGES_HISTORY_LONG circular buffer is full. */
-bool events_stages_history_long_full= false;
+PFS_ALIGNED bool events_stages_history_long_full= false;
/** Index in EVENTS_STAGES_HISTORY_LONG circular buffer. */
-volatile uint32 events_stages_history_long_index= 0;
+PFS_ALIGNED PFS_cacheline_uint32 events_stages_history_long_index;
/** EVENTS_STAGES_HISTORY_LONG circular buffer. */
-PFS_events_stages *events_stages_history_long_array= NULL;
+PFS_ALIGNED PFS_events_stages *events_stages_history_long_array= NULL;
/**
Initialize table EVENTS_STAGES_HISTORY_LONG.
@@ -60,14 +62,16 @@ int init_events_stages_history_long(uint events_stages_history_long_sizing)
{
events_stages_history_long_size= events_stages_history_long_sizing;
events_stages_history_long_full= false;
- PFS_atomic::store_u32(&events_stages_history_long_index, 0);
+ PFS_atomic::store_u32(&events_stages_history_long_index.m_u32, 0);
if (events_stages_history_long_size == 0)
return 0;
events_stages_history_long_array=
- PFS_MALLOC_ARRAY(events_stages_history_long_size, sizeof(PFS_events_stages),
- PFS_events_stages, MYF(MY_ZEROFILL));
+ PFS_MALLOC_ARRAY(& builtin_memory_stages_history_long,
+ events_stages_history_long_size,
+ sizeof(PFS_events_stages), PFS_events_stages,
+ MYF(MY_ZEROFILL));
return (events_stages_history_long_array ? 0 : 1);
}
@@ -75,7 +79,9 @@ int init_events_stages_history_long(uint events_stages_history_long_sizing)
/** Cleanup table EVENTS_STAGES_HISTORY_LONG. */
void cleanup_events_stages_history_long(void)
{
- pfs_free(events_stages_history_long_array);
+ PFS_FREE_ARRAY(& builtin_memory_stages_history_long,
+ events_stages_history_long_size, sizeof(PFS_events_stages),
+ events_stages_history_long_array);
events_stages_history_long_array= NULL;
}
@@ -129,7 +135,7 @@ void insert_events_stages_history_long(PFS_events_stages *stage)
DBUG_ASSERT(events_stages_history_long_array != NULL);
- uint index= PFS_atomic::add_u32(&events_stages_history_long_index, 1);
+ uint index= PFS_atomic::add_u32(&events_stages_history_long_index.m_u32, 1);
index= index % events_stages_history_long_size;
if (index == 0)
@@ -139,40 +145,38 @@ void insert_events_stages_history_long(PFS_events_stages *stage)
copy_events_stages(&events_stages_history_long_array[index], stage);
}
+static void fct_reset_events_stages_current(PFS_thread *pfs)
+{
+ pfs->m_stage_current.m_class= NULL;
+}
+
/** Reset table EVENTS_STAGES_CURRENT data. */
void reset_events_stages_current(void)
{
- PFS_thread *pfs_thread= thread_array;
- PFS_thread *pfs_thread_last= thread_array + thread_max;
+ global_thread_container.apply_all(fct_reset_events_stages_current);
+}
- for ( ; pfs_thread < pfs_thread_last; pfs_thread++)
- {
- pfs_thread->m_stage_current.m_class= NULL;
- }
+static void fct_reset_events_stages_history(PFS_thread *pfs_thread)
+{
+ PFS_events_stages *pfs= pfs_thread->m_stages_history;
+ PFS_events_stages *pfs_last= pfs + events_stages_history_per_thread;
+
+ pfs_thread->m_stages_history_index= 0;
+ pfs_thread->m_stages_history_full= false;
+ for ( ; pfs < pfs_last; pfs++)
+ pfs->m_class= NULL;
}
/** Reset table EVENTS_STAGES_HISTORY data. */
void reset_events_stages_history(void)
{
- PFS_thread *pfs_thread= thread_array;
- PFS_thread *pfs_thread_last= thread_array + thread_max;
-
- for ( ; pfs_thread < pfs_thread_last; pfs_thread++)
- {
- PFS_events_stages *pfs= pfs_thread->m_stages_history;
- PFS_events_stages *pfs_last= pfs + events_stages_history_per_thread;
-
- pfs_thread->m_stages_history_index= 0;
- pfs_thread->m_stages_history_full= false;
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_class= NULL;
- }
+ global_thread_container.apply_all(fct_reset_events_stages_history);
}
/** Reset table EVENTS_STAGES_HISTORY_LONG data. */
void reset_events_stages_history_long(void)
{
- PFS_atomic::store_u32(&events_stages_history_long_index, 0);
+ PFS_atomic::store_u32(&events_stages_history_long_index.m_u32, 0);
events_stages_history_long_full= false;
PFS_events_stages *pfs= events_stages_history_long_array;
@@ -181,70 +185,53 @@ void reset_events_stages_history_long(void)
pfs->m_class= NULL;
}
+static void fct_reset_events_stages_by_thread(PFS_thread *thread)
+{
+ PFS_account *account= sanitize_account(thread->m_account);
+ PFS_user *user= sanitize_user(thread->m_user);
+ PFS_host *host= sanitize_host(thread->m_host);
+ aggregate_thread_stages(thread, account, user, host);
+}
+
/** Reset table EVENTS_STAGES_SUMMARY_BY_THREAD_BY_EVENT_NAME data. */
void reset_events_stages_by_thread()
{
- PFS_thread *thread= thread_array;
- PFS_thread *thread_last= thread_array + thread_max;
- PFS_account *account;
- PFS_user *user;
- PFS_host *host;
+ global_thread_container.apply(fct_reset_events_stages_by_thread);
+}
- for ( ; thread < thread_last; thread++)
- {
- if (thread->m_lock.is_populated())
- {
- account= sanitize_account(thread->m_account);
- user= sanitize_user(thread->m_user);
- host= sanitize_host(thread->m_host);
- aggregate_thread_stages(thread, account, user, host);
- }
- }
+static void fct_reset_events_stages_by_account(PFS_account *pfs)
+{
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ pfs->aggregate_stages(user, host);
}
/** Reset table EVENTS_STAGES_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME data. */
void reset_events_stages_by_account()
{
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= account_array + account_max;
- PFS_user *user;
- PFS_host *host;
+ global_account_container.apply(fct_reset_events_stages_by_account);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- user= sanitize_user(pfs->m_user);
- host= sanitize_host(pfs->m_host);
- pfs->aggregate_stages(user, host);
- }
- }
+static void fct_reset_events_stages_by_user(PFS_user *pfs)
+{
+ pfs->aggregate_stages();
}
/** Reset table EVENTS_STAGES_SUMMARY_BY_USER_BY_EVENT_NAME data. */
void reset_events_stages_by_user()
{
- PFS_user *pfs= user_array;
- PFS_user *pfs_last= user_array + user_max;
+ global_user_container.apply(fct_reset_events_stages_by_user);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_stages();
- }
+static void fct_reset_events_stages_by_host(PFS_host *pfs)
+{
+ pfs->aggregate_stages();
}
/** Reset table EVENTS_STAGES_SUMMARY_BY_HOST_BY_EVENT_NAME data. */
void reset_events_stages_by_host()
{
- PFS_host *pfs= host_array;
- PFS_host *pfs_last= host_array + host_max;
-
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_stages();
- }
+ global_host_container.apply(fct_reset_events_stages_by_host);
}
/** Reset table EVENTS_STAGES_GLOBAL_BY_EVENT_NAME data. */
diff --git a/storage/perfschema/pfs_events_stages.h b/storage/perfschema/pfs_events_stages.h
index f61a7c3c077..0b7d27ded82 100644
--- a/storage/perfschema/pfs_events_stages.h
+++ b/storage/perfschema/pfs_events_stages.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -38,7 +38,7 @@ struct PFS_host;
/** A stage record. */
struct PFS_events_stages : public PFS_events
{
- /* No specific attributes */
+ PSI_stage_progress m_progress;
};
void insert_events_stages_history(PFS_thread *thread, PFS_events_stages *stage);
@@ -49,7 +49,7 @@ extern bool flag_events_stages_history;
extern bool flag_events_stages_history_long;
extern bool events_stages_history_long_full;
-extern volatile uint32 events_stages_history_long_index;
+extern PFS_ALIGNED PFS_cacheline_uint32 events_stages_history_long_index;
extern PFS_events_stages *events_stages_history_long_array;
extern ulong events_stages_history_long_size;
diff --git a/storage/perfschema/pfs_events_statements.cc b/storage/perfschema/pfs_events_statements.cc
index 1942787665a..e0f1b2bfb77 100644
--- a/storage/perfschema/pfs_events_statements.cc
+++ b/storage/perfschema/pfs_events_statements.cc
@@ -35,23 +35,26 @@
#include "pfs_user.h"
#include "pfs_events_statements.h"
#include "pfs_atomic.h"
+#include "pfs_buffer_container.h"
+#include "pfs_builtin_memory.h"
#include "m_string.h"
-size_t events_statements_history_long_size= 0;
+PFS_ALIGNED size_t events_statements_history_long_size= 0;
/** Consumer flag for table EVENTS_STATEMENTS_CURRENT. */
-bool flag_events_statements_current= false;
+PFS_ALIGNED bool flag_events_statements_current= false;
/** Consumer flag for table EVENTS_STATEMENTS_HISTORY. */
-bool flag_events_statements_history= false;
+PFS_ALIGNED bool flag_events_statements_history= false;
/** Consumer flag for table EVENTS_STATEMENTS_HISTORY_LONG. */
-bool flag_events_statements_history_long= false;
+PFS_ALIGNED bool flag_events_statements_history_long= false;
/** True if EVENTS_STATEMENTS_HISTORY_LONG circular buffer is full. */
-bool events_statements_history_long_full= false;
+PFS_ALIGNED bool events_statements_history_long_full= false;
/** Index in EVENTS_STATEMENTS_HISTORY_LONG circular buffer. */
-volatile uint32 events_statements_history_long_index= 0;
+PFS_ALIGNED PFS_cacheline_uint32 events_statements_history_long_index;
/** EVENTS_STATEMENTS_HISTORY_LONG circular buffer. */
-PFS_events_statements *events_statements_history_long_array= NULL;
+PFS_ALIGNED PFS_events_statements *events_statements_history_long_array= NULL;
static unsigned char *h_long_stmts_digest_token_array= NULL;
+static char *h_long_stmts_text_array= NULL;
/**
Initialize table EVENTS_STATEMENTS_HISTORY_LONG.
@@ -61,29 +64,32 @@ int init_events_statements_history_long(size_t events_statements_history_long_si
{
events_statements_history_long_size= events_statements_history_long_sizing;
events_statements_history_long_full= false;
- PFS_atomic::store_u32(&events_statements_history_long_index, 0);
+ PFS_atomic::store_u32(&events_statements_history_long_index.m_u32, 0);
if (events_statements_history_long_size == 0)
return 0;
events_statements_history_long_array=
- PFS_MALLOC_ARRAY(events_statements_history_long_size, sizeof(PFS_events_statements),
+ PFS_MALLOC_ARRAY(& builtin_memory_statements_history_long,
+ events_statements_history_long_size, sizeof(PFS_events_statements),
PFS_events_statements, MYF(MY_ZEROFILL));
if (events_statements_history_long_array == NULL)
- {
- cleanup_events_statements_history_long();
- return 1;
- }
+ {
+ cleanup_events_statements_history_long();
+ return 1;
+ }
if (pfs_max_digest_length > 0)
{
- /* Size of each digest token array. */
+ /* Size of each digest text array. */
size_t digest_text_size= pfs_max_digest_length * sizeof(unsigned char);
h_long_stmts_digest_token_array=
- PFS_MALLOC_ARRAY(events_statements_history_long_size, digest_text_size,
+ PFS_MALLOC_ARRAY(& builtin_memory_statements_history_long_tokens,
+ events_statements_history_long_size, digest_text_size,
unsigned char, MYF(MY_ZEROFILL));
+
if (h_long_stmts_digest_token_array == NULL)
{
cleanup_events_statements_history_long();
@@ -91,10 +97,28 @@ int init_events_statements_history_long(size_t events_statements_history_long_si
}
}
+ if (pfs_max_sqltext > 0)
+ {
+ /* Size of each sql text array. */
+ size_t sqltext_size= pfs_max_sqltext * sizeof(char);
+
+ h_long_stmts_text_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_statements_history_long_sqltext,
+ events_statements_history_long_size, sqltext_size,
+ char, MYF(MY_ZEROFILL));
+
+ if (h_long_stmts_text_array == NULL)
+ {
+ cleanup_events_statements_history_long();
+ return 1;
+ }
+ }
+
for (size_t index= 0; index < events_statements_history_long_size; index++)
{
events_statements_history_long_array[index].m_digest_storage.reset(h_long_stmts_digest_token_array
+ index * pfs_max_digest_length, pfs_max_digest_length);
+ events_statements_history_long_array[index].m_sqltext= h_long_stmts_text_array + index * pfs_max_sqltext;
}
return 0;
@@ -103,17 +127,44 @@ int init_events_statements_history_long(size_t events_statements_history_long_si
/** Cleanup table EVENTS_STATEMENTS_HISTORY_LONG. */
void cleanup_events_statements_history_long(void)
{
- pfs_free(events_statements_history_long_array);
- pfs_free(h_long_stmts_digest_token_array);
+ PFS_FREE_ARRAY(& builtin_memory_statements_history_long,
+ events_statements_history_long_size,
+ sizeof(PFS_events_statements),
+ events_statements_history_long_array);
+
+ PFS_FREE_ARRAY(& builtin_memory_statements_history_long_tokens,
+ events_statements_history_long_size,
+ (pfs_max_digest_length * sizeof(unsigned char)),
+ h_long_stmts_digest_token_array);
+
+ PFS_FREE_ARRAY(& builtin_memory_statements_history_long_sqltext,
+ events_statements_history_long_size,
+ (pfs_max_sqltext * sizeof(char)),
+ h_long_stmts_text_array);
+
events_statements_history_long_array= NULL;
h_long_stmts_digest_token_array= NULL;
+ h_long_stmts_text_array= NULL;
}
static inline void copy_events_statements(PFS_events_statements *dest,
- const PFS_events_statements *source)
+ const PFS_events_statements *source)
{
- /* Copy all attributes except DIGEST */
- memcpy(dest, source, my_offsetof(PFS_events_statements, m_digest_storage));
+ /* Copy all attributes except SQL TEXT and DIGEST */
+ memcpy(dest, source, my_offsetof(PFS_events_statements, m_sqltext));
+
+ /* Copy SQL TEXT */
+ int sqltext_length= source->m_sqltext_length;
+
+ if (sqltext_length > 0)
+ {
+ memcpy(dest->m_sqltext, source->m_sqltext, sqltext_length);
+ dest->m_sqltext_length= sqltext_length;
+ }
+ else
+ {
+ dest->m_sqltext_length= 0;
+ }
/* Copy DIGEST */
dest->m_digest_storage.copy(& source->m_digest_storage);
@@ -163,7 +214,7 @@ void insert_events_statements_history_long(PFS_events_statements *statement)
DBUG_ASSERT(events_statements_history_long_array != NULL);
- uint index= PFS_atomic::add_u32(&events_statements_history_long_index, 1);
+ uint index= PFS_atomic::add_u32(&events_statements_history_long_index.m_u32, 1);
index= index % events_statements_history_long_size;
if (index == 0)
@@ -173,44 +224,42 @@ void insert_events_statements_history_long(PFS_events_statements *statement)
copy_events_statements(&events_statements_history_long_array[index], statement);
}
+static void fct_reset_events_statements_current(PFS_thread *pfs_thread)
+{
+ PFS_events_statements *pfs_stmt= & pfs_thread->m_statement_stack[0];
+ PFS_events_statements *pfs_stmt_last= pfs_stmt + statement_stack_max;
+
+ for ( ; pfs_stmt < pfs_stmt_last; pfs_stmt++)
+ pfs_stmt->m_class= NULL;
+}
+
/** Reset table EVENTS_STATEMENTS_CURRENT data. */
void reset_events_statements_current(void)
{
- PFS_thread *pfs_thread= thread_array;
- PFS_thread *pfs_thread_last= thread_array + thread_max;
+ global_thread_container.apply_all(fct_reset_events_statements_current);
+}
- for ( ; pfs_thread < pfs_thread_last; pfs_thread++)
- {
- PFS_events_statements *pfs_stmt= & pfs_thread->m_statement_stack[0];
- PFS_events_statements *pfs_stmt_last= pfs_stmt + statement_stack_max;
+static void fct_reset_events_statements_history(PFS_thread *pfs_thread)
+{
+ PFS_events_statements *pfs= pfs_thread->m_statements_history;
+ PFS_events_statements *pfs_last= pfs + events_statements_history_per_thread;
- for ( ; pfs_stmt < pfs_stmt_last; pfs_stmt++)
- pfs_stmt->m_class= NULL;
- }
+ pfs_thread->m_statements_history_index= 0;
+ pfs_thread->m_statements_history_full= false;
+ for ( ; pfs < pfs_last; pfs++)
+ pfs->m_class= NULL;
}
/** Reset table EVENTS_STATEMENTS_HISTORY data. */
void reset_events_statements_history(void)
{
- PFS_thread *pfs_thread= thread_array;
- PFS_thread *pfs_thread_last= thread_array + thread_max;
-
- for ( ; pfs_thread < pfs_thread_last; pfs_thread++)
- {
- PFS_events_statements *pfs= pfs_thread->m_statements_history;
- PFS_events_statements *pfs_last= pfs + events_statements_history_per_thread;
-
- pfs_thread->m_statements_history_index= 0;
- pfs_thread->m_statements_history_full= false;
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_class= NULL;
- }
+ global_thread_container.apply_all(fct_reset_events_statements_history);
}
/** Reset table EVENTS_STATEMENTS_HISTORY_LONG data. */
void reset_events_statements_history_long(void)
{
- PFS_atomic::store_u32(&events_statements_history_long_index, 0);
+ PFS_atomic::store_u32(&events_statements_history_long_index.m_u32, 0);
events_statements_history_long_full= false;
PFS_events_statements *pfs= events_statements_history_long_array;
@@ -219,70 +268,53 @@ void reset_events_statements_history_long(void)
pfs->m_class= NULL;
}
+static void fct_reset_events_statements_by_thread(PFS_thread *thread)
+{
+ PFS_account *account= sanitize_account(thread->m_account);
+ PFS_user *user= sanitize_user(thread->m_user);
+ PFS_host *host= sanitize_host(thread->m_host);
+ aggregate_thread_statements(thread, account, user, host);
+}
+
/** Reset table EVENTS_STATEMENTS_SUMMARY_BY_THREAD_BY_EVENT_NAME data. */
void reset_events_statements_by_thread()
{
- PFS_thread *thread= thread_array;
- PFS_thread *thread_last= thread_array + thread_max;
- PFS_account *account;
- PFS_user *user;
- PFS_host *host;
+ global_thread_container.apply(fct_reset_events_statements_by_thread);
+}
- for ( ; thread < thread_last; thread++)
- {
- if (thread->m_lock.is_populated())
- {
- account= sanitize_account(thread->m_account);
- user= sanitize_user(thread->m_user);
- host= sanitize_host(thread->m_host);
- aggregate_thread_statements(thread, account, user, host);
- }
- }
+static void fct_reset_events_statements_by_account(PFS_account *pfs)
+{
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ pfs->aggregate_statements(user, host);
}
/** Reset table EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME data. */
void reset_events_statements_by_account()
{
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= account_array + account_max;
- PFS_user *user;
- PFS_host *host;
+ global_account_container.apply(fct_reset_events_statements_by_account);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- user= sanitize_user(pfs->m_user);
- host= sanitize_host(pfs->m_host);
- pfs->aggregate_statements(user, host);
- }
- }
+static void fct_reset_events_statements_by_user(PFS_user *pfs)
+{
+ pfs->aggregate_statements();
}
/** Reset table EVENTS_STATEMENTS_SUMMARY_BY_USER_BY_EVENT_NAME data. */
void reset_events_statements_by_user()
{
- PFS_user *pfs= user_array;
- PFS_user *pfs_last= user_array + user_max;
+ global_user_container.apply(fct_reset_events_statements_by_user);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_statements();
- }
+static void fct_reset_events_statements_by_host(PFS_host *pfs)
+{
+ pfs->aggregate_statements();
}
/** Reset table EVENTS_STATEMENTS_SUMMARY_BY_HOST_BY_EVENT_NAME data. */
void reset_events_statements_by_host()
{
- PFS_host *pfs= host_array;
- PFS_host *pfs_last= host_array + host_max;
-
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_statements();
- }
+ global_host_container.apply(fct_reset_events_statements_by_host);
}
/** Reset table EVENTS_STATEMENTS_GLOBAL_BY_EVENT_NAME data. */
diff --git a/storage/perfschema/pfs_events_statements.h b/storage/perfschema/pfs_events_statements.h
index e47e2e79280..8b24a9e75c8 100644
--- a/storage/perfschema/pfs_events_statements.h
+++ b/storage/perfschema/pfs_events_statements.h
@@ -40,18 +40,20 @@ struct PFS_host;
/** A statement record. */
struct PFS_events_statements : public PFS_events
{
+ enum_object_type m_sp_type;
+ char m_schema_name[NAME_LEN];
+ uint m_schema_name_length;
+ char m_object_name[NAME_LEN];
+ uint m_object_name_length;
+
/** Database name. */
char m_current_schema_name[NAME_LEN];
/** Length of @c m_current_schema_name. */
uint m_current_schema_name_length;
- /** SQL_TEXT */
- char m_sqltext[COL_INFO_SIZE];
- /** Length of @ m_info. */
- uint m_sqltext_length;
/** Locked time. */
ulonglong m_lock_time;
-
+
/** Diagnostics area, message text. */
char m_message_text[MYSQL_ERRMSG_SIZE+1];
/** Diagnostics area, error number. */
@@ -102,6 +104,14 @@ struct PFS_events_statements : public PFS_events
uint m_sqltext_cs_number;
/**
+ SQL_TEXT.
+ This pointer is immutable,
+ and always point to pre allocated memory.
+ */
+ char *m_sqltext;
+ /** Length of @ m_info. */
+ uint m_sqltext_length;
+ /**
Statement digest.
This underlying token array storage pointer is immutable,
and always point to pre allocated memory.
@@ -112,12 +122,14 @@ struct PFS_events_statements : public PFS_events
void insert_events_statements_history(PFS_thread *thread, PFS_events_statements *statement);
void insert_events_statements_history_long(PFS_events_statements *statement);
+extern ulong nested_statement_lost;
+
extern bool flag_events_statements_current;
extern bool flag_events_statements_history;
extern bool flag_events_statements_history_long;
extern bool events_statements_history_long_full;
-extern volatile uint32 events_statements_history_long_index;
+extern PFS_ALIGNED PFS_cacheline_uint32 events_statements_history_long_index;
extern PFS_events_statements *events_statements_history_long_array;
extern size_t events_statements_history_long_size;
diff --git a/storage/perfschema/pfs_events_transactions.cc b/storage/perfschema/pfs_events_transactions.cc
new file mode 100644
index 00000000000..884234913e8
--- /dev/null
+++ b/storage/perfschema/pfs_events_transactions.cc
@@ -0,0 +1,267 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/pfs_events_transactions.cc
+ Events transactions data structures (implementation).
+*/
+
+#include "my_global.h"
+#include "my_sys.h"
+#include "pfs_global.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_account.h"
+#include "pfs_host.h"
+#include "pfs_user.h"
+#include "pfs_events_transactions.h"
+#include "pfs_atomic.h"
+#include "pfs_buffer_container.h"
+#include "pfs_builtin_memory.h"
+#include "m_string.h"
+
+PFS_ALIGNED ulong events_transactions_history_long_size= 0;
+/** Consumer flag for table EVENTS_TRANSACTIONS_CURRENT. */
+PFS_ALIGNED bool flag_events_transactions_current= false;
+/** Consumer flag for table EVENTS_TRANSACTIONS_HISTORY. */
+PFS_ALIGNED bool flag_events_transactions_history= false;
+/** Consumer flag for table EVENTS_TRANSACTIONS_HISTORY_LONG. */
+PFS_ALIGNED bool flag_events_transactions_history_long= false;
+
+/** True if EVENTS_TRANSACTIONS_HISTORY_LONG circular buffer is full. */
+PFS_ALIGNED bool events_transactions_history_long_full= false;
+/** Index in EVENTS_TRANSACTIONS_HISTORY_LONG circular buffer. */
+PFS_ALIGNED PFS_cacheline_uint32 events_transactions_history_long_index;
+/** EVENTS_TRANSACTIONS_HISTORY_LONG circular buffer. */
+PFS_ALIGNED PFS_events_transactions *events_transactions_history_long_array= NULL;
+
+/**
+ Initialize table EVENTS_TRANSACTIONS_HISTORY_LONG.
+ @param events_transactions_history_long_sizing table sizing
+*/
+int init_events_transactions_history_long(uint events_transactions_history_long_sizing)
+{
+ events_transactions_history_long_size= events_transactions_history_long_sizing;
+ events_transactions_history_long_full= false;
+ PFS_atomic::store_u32(&events_transactions_history_long_index.m_u32, 0);
+
+ if (events_transactions_history_long_size == 0)
+ return 0;
+
+ events_transactions_history_long_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_transactions_history_long,
+ events_transactions_history_long_size,
+ sizeof(PFS_events_transactions), PFS_events_transactions,
+ MYF(MY_ZEROFILL));
+
+ return (events_transactions_history_long_array ? 0 : 1);
+}
+
+/** Cleanup table EVENTS_TRANSACTIONS_HISTORY_LONG. */
+void cleanup_events_transactions_history_long(void)
+{
+ PFS_FREE_ARRAY(& builtin_memory_transactions_history_long,
+ events_transactions_history_long_size, sizeof(PFS_events_transactions),
+ events_transactions_history_long_array);
+ events_transactions_history_long_array= NULL;
+}
+
+static inline void copy_events_transactions(PFS_events_transactions *dest,
+ const PFS_events_transactions *source)
+{
+ memcpy(dest, source, sizeof(PFS_events_transactions));
+}
+
+/**
+ Insert a transaction record in table EVENTS_TRANSACTIONS_HISTORY.
+ @param thread thread that executed the wait
+ @param transaction record to insert
+*/
+void insert_events_transactions_history(PFS_thread *thread, PFS_events_transactions *transaction)
+{
+ if (unlikely(events_transactions_history_per_thread == 0))
+ return;
+
+ DBUG_ASSERT(thread->m_transactions_history != NULL);
+
+ uint index= thread->m_transactions_history_index;
+
+ /*
+ A concurrent thread executing TRUNCATE TABLE EVENTS_TRANSACTIONS_CURRENT
+ could alter the data that this thread is inserting,
+ causing a potential race condition.
+ We are not testing for this and insert a possibly empty record,
+ to make this thread (the writer) faster.
+ This is ok, the readers of m_transactions_history will filter this out.
+ */
+ copy_events_transactions(&thread->m_transactions_history[index], transaction);
+
+ index++;
+ if (index >= events_transactions_history_per_thread)
+ {
+ index= 0;
+ thread->m_transactions_history_full= true;
+ }
+ thread->m_transactions_history_index= index;
+}
+
+/**
+ Insert a transaction record in table EVENTS_TRANSACTIONS_HISTORY_LONG.
+ @param transaction record to insert
+*/
+void insert_events_transactions_history_long(PFS_events_transactions *transaction)
+{
+ if (unlikely(events_transactions_history_long_size == 0))
+ return ;
+
+ DBUG_ASSERT(events_transactions_history_long_array != NULL);
+
+ uint index= PFS_atomic::add_u32(&events_transactions_history_long_index.m_u32, 1);
+
+ index= index % events_transactions_history_long_size;
+ if (index == 0)
+ events_transactions_history_long_full= true;
+
+ /* See related comment in insert_events_transactions_history. */
+ copy_events_transactions(&events_transactions_history_long_array[index], transaction);
+}
+
+static void fct_reset_events_transactions_current(PFS_thread *pfs)
+{
+ pfs->m_transaction_current.m_class= NULL;
+}
+
+/** Reset table EVENTS_TRANSACTIONS_CURRENT data. */
+void reset_events_transactions_current(void)
+{
+ global_thread_container.apply_all(fct_reset_events_transactions_current);
+}
+
+static void fct_reset_events_transactions_history(PFS_thread *pfs_thread)
+{
+ PFS_events_transactions *pfs= pfs_thread->m_transactions_history;
+ PFS_events_transactions *pfs_last= pfs + events_transactions_history_per_thread;
+
+ pfs_thread->m_transactions_history_index= 0;
+ pfs_thread->m_transactions_history_full= false;
+ for ( ; pfs < pfs_last; pfs++)
+ pfs->m_class= NULL;
+}
+
+/** Reset table EVENTS_TRANSACTIONS_HISTORY data. */
+void reset_events_transactions_history(void)
+{
+ global_thread_container.apply_all(fct_reset_events_transactions_history);
+}
+
+/** Reset table EVENTS_TRANSACTIONS_HISTORY_LONG data. */
+void reset_events_transactions_history_long(void)
+{
+ PFS_atomic::store_u32(&events_transactions_history_long_index.m_u32, 0);
+ events_transactions_history_long_full= false;
+
+ PFS_events_transactions *pfs= events_transactions_history_long_array;
+ PFS_events_transactions *pfs_last= pfs + events_transactions_history_long_size;
+ for ( ; pfs < pfs_last; pfs++)
+ pfs->m_class= NULL;
+}
+
+static void fct_reset_events_transactions_by_thread(PFS_thread *thread)
+{
+ PFS_account *account= sanitize_account(thread->m_account);
+ PFS_user *user= sanitize_user(thread->m_user);
+ PFS_host *host= sanitize_host(thread->m_host);
+ aggregate_thread_transactions(thread, account, user, host);
+}
+
+/** Reset table EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME data. */
+void reset_events_transactions_by_thread()
+{
+ global_thread_container.apply(fct_reset_events_transactions_by_thread);
+}
+
+static void fct_reset_events_transactions_by_account(PFS_account *pfs)
+{
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ pfs->aggregate_transactions(user, host);
+}
+
+/** Reset table EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME data. */
+void reset_events_transactions_by_account()
+{
+ global_account_container.apply(fct_reset_events_transactions_by_account);
+}
+
+static void fct_reset_events_transactions_by_user(PFS_user *pfs)
+{
+ pfs->aggregate_transactions();
+}
+
+/** Reset table EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME data. */
+void reset_events_transactions_by_user()
+{
+ global_user_container.apply(fct_reset_events_transactions_by_user);
+}
+
+static void fct_reset_events_transactions_by_host(PFS_host *pfs)
+{
+ pfs->aggregate_transactions();
+}
+
+/** Reset table EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME data. */
+void reset_events_transactions_by_host()
+{
+ global_host_container.apply(fct_reset_events_transactions_by_host);
+}
+
+/** Reset table EVENTS_TRANSACTIONS_GLOBAL_BY_EVENT_NAME data. */
+void reset_events_transactions_global()
+{
+ global_transaction_stat.reset();
+}
+
+/**
+ Check if the XID consists of printable characters, ASCII 32 - 127.
+ @param xid XID structure
+ @param offset offset into XID.data[]
+ @param length number of bytes to process
+ @return true if all bytes are in printable range
+*/
+bool xid_printable(PSI_xid *xid, size_t offset, size_t length)
+{
+ if (xid->is_null())
+ return false;
+
+ DBUG_ASSERT(offset + length <= MYSQL_XIDDATASIZE);
+
+ unsigned char *c= (unsigned char*)&xid->data + offset;
+
+ for (size_t i= 0; i < length; i++, c++)
+ {
+ if(*c < 32 || *c > 127)
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/storage/perfschema/pfs_events_transactions.h b/storage/perfschema/pfs_events_transactions.h
new file mode 100644
index 00000000000..dc4fd8b0b60
--- /dev/null
+++ b/storage/perfschema/pfs_events_transactions.h
@@ -0,0 +1,132 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef PFS_EVENTS_TRANSACTIONS_H
+#define PFS_EVENTS_TRANSACTIONS_H
+
+/**
+ @file storage/perfschema/pfs_events_transactions.h
+ Events transactions data structures (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_events.h"
+#include "rpl_gtid.h"
+#include "mysql/plugin.h" /* MYSQL_XIDDATASIZE */
+#include "my_thread.h"
+
+struct PFS_thread;
+struct PFS_account;
+struct PFS_user;
+struct PFS_host;
+
+/**
+ struct PSI_xid is binary compatible with the XID structure as
+ in the X/Open CAE Specification, Distributed Transaction Processing:
+ The XA Specification, X/Open Company Ltd., 1991.
+ http://www.opengroup.org/bookstore/catalog/c193.htm
+
+ A value of -1 in formatID means that the XID is null.
+ Max length for bqual and gtrid is 64 bytes each.
+
+ @see XID in sql/handler.h
+ @see MYSQL_XID in mysql/plugin.h
+*/
+struct PSI_xid
+{
+ /** Format identifier. */
+ long formatID;
+ /** GTRID length, value 1-64. */
+ long gtrid_length;
+ /** BQUAL length, value 1-64. */
+ long bqual_length;
+ /** XID raw data, not \0-terminated */
+ char data[MYSQL_XIDDATASIZE];
+
+ PSI_xid() {null();}
+ bool is_null() { return formatID == -1; }
+ void null() { formatID= -1; gtrid_length= 0; bqual_length= 0;}
+};
+typedef struct PSI_xid PSI_xid;
+
+/** A transaction record. */
+struct PFS_events_transactions : public PFS_events
+{
+ /** Source identifier, mapped from internal format. */
+ //rpl_sid m_sid;
+ /** InnoDB transaction ID. */
+ ulonglong m_trxid;
+ /** Status */
+ enum_transaction_state m_state;
+ /** Global Transaction ID specifier. */
+ Gtid_specification m_gtid_spec;
+ /** True if XA transaction. */
+ my_bool m_xa;
+ /** XA transaction ID. */
+ PSI_xid m_xid;
+ /** XA status */
+ enum_xa_transaction_state m_xa_state;
+ /** Transaction isolation level. */
+ enum_isolation_level m_isolation_level;
+ /** True if read-only transaction, otherwise read-write. */
+ my_bool m_read_only;
+ /** True if autocommit transaction. */
+ my_bool m_autocommit;
+ /** Total number of savepoints. */
+ ulonglong m_savepoint_count;
+ /** Number of rollback_to_savepoint. */
+ ulonglong m_rollback_to_savepoint_count;
+ /** Number of release_savepoint. */
+ ulonglong m_release_savepoint_count;
+};
+
+bool xid_printable(PSI_xid *xid, size_t offset, size_t length);
+
+void insert_events_transactions_history(PFS_thread *thread, PFS_events_transactions *transaction);
+void insert_events_transactions_history_long(PFS_events_transactions *transaction);
+
+extern bool flag_events_transactions_current;
+extern bool flag_events_transactions_history;
+extern bool flag_events_transactions_history_long;
+
+extern bool events_transactions_history_long_full;
+extern PFS_cacheline_uint32 events_transactions_history_long_index;
+extern PFS_events_transactions *events_transactions_history_long_array;
+extern ulong events_transactions_history_long_size;
+
+int init_events_transactions_history_long(uint events_transactions_history_long_sizing);
+void cleanup_events_transactions_history_long();
+
+void reset_events_transactions_current();
+void reset_events_transactions_history();
+void reset_events_transactions_history_long();
+void reset_events_transactions_by_thread();
+void reset_events_transactions_by_account();
+void reset_events_transactions_by_user();
+void reset_events_transactions_by_host();
+void reset_events_transactions_global();
+void aggregate_account_transactions(PFS_account *account);
+void aggregate_user_transactions(PFS_user *user);
+void aggregate_host_transactions(PFS_host *host);
+
+#endif
+
diff --git a/storage/perfschema/pfs_events_waits.cc b/storage/perfschema/pfs_events_waits.cc
index c3961461f34..b51ee5fd2c8 100644
--- a/storage/perfschema/pfs_events_waits.cc
+++ b/storage/perfschema/pfs_events_waits.cc
@@ -35,26 +35,28 @@
#include "pfs_account.h"
#include "pfs_events_waits.h"
#include "pfs_atomic.h"
+#include "pfs_buffer_container.h"
+#include "pfs_builtin_memory.h"
#include "m_string.h"
-ulong events_waits_history_long_size= 0;
+PFS_ALIGNED ulong events_waits_history_long_size= 0;
/** Consumer flag for table EVENTS_WAITS_CURRENT. */
-bool flag_events_waits_current= false;
+PFS_ALIGNED bool flag_events_waits_current= false;
/** Consumer flag for table EVENTS_WAITS_HISTORY. */
-bool flag_events_waits_history= false;
+PFS_ALIGNED bool flag_events_waits_history= false;
/** Consumer flag for table EVENTS_WAITS_HISTORY_LONG. */
-bool flag_events_waits_history_long= false;
+PFS_ALIGNED bool flag_events_waits_history_long= false;
/** Consumer flag for the global instrumentation. */
-bool flag_global_instrumentation= false;
+PFS_ALIGNED bool flag_global_instrumentation= false;
/** Consumer flag for the per thread instrumentation. */
-bool flag_thread_instrumentation= false;
+PFS_ALIGNED bool flag_thread_instrumentation= false;
/** True if EVENTS_WAITS_HISTORY_LONG circular buffer is full. */
-bool events_waits_history_long_full= false;
+PFS_ALIGNED bool events_waits_history_long_full= false;
/** Index in EVENTS_WAITS_HISTORY_LONG circular buffer. */
-volatile uint32 events_waits_history_long_index= 0;
+PFS_ALIGNED PFS_cacheline_uint32 events_waits_history_long_index;
/** EVENTS_WAITS_HISTORY_LONG circular buffer. */
-PFS_events_waits *events_waits_history_long_array= NULL;
+PFS_ALIGNED PFS_events_waits *events_waits_history_long_array= NULL;
/**
Initialize table EVENTS_WAITS_HISTORY_LONG.
@@ -64,14 +66,16 @@ int init_events_waits_history_long(uint events_waits_history_long_sizing)
{
events_waits_history_long_size= events_waits_history_long_sizing;
events_waits_history_long_full= false;
- PFS_atomic::store_u32(&events_waits_history_long_index, 0);
+ PFS_atomic::store_u32(&events_waits_history_long_index.m_u32, 0);
if (events_waits_history_long_size == 0)
return 0;
events_waits_history_long_array=
- PFS_MALLOC_ARRAY(events_waits_history_long_size, sizeof(PFS_events_waits),
- PFS_events_waits, MYF(MY_ZEROFILL));
+ PFS_MALLOC_ARRAY(& builtin_memory_waits_history_long,
+ events_waits_history_long_size,
+ sizeof(PFS_events_waits), PFS_events_waits,
+ MYF(MY_ZEROFILL));
return (events_waits_history_long_array ? 0 : 1);
}
@@ -79,7 +83,9 @@ int init_events_waits_history_long(uint events_waits_history_long_sizing)
/** Cleanup table EVENTS_WAITS_HISTORY_LONG. */
void cleanup_events_waits_history_long(void)
{
- pfs_free(events_waits_history_long_array);
+ PFS_FREE_ARRAY(& builtin_memory_waits_history_long,
+ events_waits_history_long_size, sizeof(PFS_events_waits),
+ events_waits_history_long_array);
events_waits_history_long_array= NULL;
}
@@ -129,7 +135,7 @@ void insert_events_waits_history_long(PFS_events_waits *wait)
if (unlikely(events_waits_history_long_size == 0))
return;
- uint index= PFS_atomic::add_u32(&events_waits_history_long_index, 1);
+ uint index= PFS_atomic::add_u32(&events_waits_history_long_index.m_u32, 1);
index= index % events_waits_history_long_size;
if (index == 0)
@@ -139,44 +145,43 @@ void insert_events_waits_history_long(PFS_events_waits *wait)
copy_events_waits(&events_waits_history_long_array[index], wait);
}
+static void fct_reset_events_waits_current(PFS_thread *pfs_thread)
+{
+ PFS_events_waits *pfs_wait= pfs_thread->m_events_waits_stack;
+ PFS_events_waits *pfs_wait_last= pfs_wait + WAIT_STACK_SIZE;
+
+ for ( ; pfs_wait < pfs_wait_last; pfs_wait++)
+ pfs_wait->m_wait_class= NO_WAIT_CLASS;
+}
+
+
/** Reset table EVENTS_WAITS_CURRENT data. */
void reset_events_waits_current(void)
{
- PFS_thread *pfs_thread= thread_array;
- PFS_thread *pfs_thread_last= thread_array + thread_max;
+ global_thread_container.apply_all(fct_reset_events_waits_current);
+}
- for ( ; pfs_thread < pfs_thread_last; pfs_thread++)
- {
- PFS_events_waits *pfs_wait= pfs_thread->m_events_waits_stack;
- PFS_events_waits *pfs_wait_last= pfs_wait + WAIT_STACK_SIZE;
+static void fct_reset_events_waits_history(PFS_thread *pfs_thread)
+{
+ PFS_events_waits *wait= pfs_thread->m_waits_history;
+ PFS_events_waits *wait_last= wait + events_waits_history_per_thread;
- for ( ; pfs_wait < pfs_wait_last; pfs_wait++)
- pfs_wait->m_wait_class= NO_WAIT_CLASS;
- }
+ pfs_thread->m_waits_history_index= 0;
+ pfs_thread->m_waits_history_full= false;
+ for ( ; wait < wait_last; wait++)
+ wait->m_wait_class= NO_WAIT_CLASS;
}
/** Reset table EVENTS_WAITS_HISTORY data. */
void reset_events_waits_history(void)
{
- PFS_thread *pfs_thread= thread_array;
- PFS_thread *pfs_thread_last= thread_array + thread_max;
-
- for ( ; pfs_thread < pfs_thread_last; pfs_thread++)
- {
- PFS_events_waits *wait= pfs_thread->m_waits_history;
- PFS_events_waits *wait_last= wait + events_waits_history_per_thread;
-
- pfs_thread->m_waits_history_index= 0;
- pfs_thread->m_waits_history_full= false;
- for ( ; wait < wait_last; wait++)
- wait->m_wait_class= NO_WAIT_CLASS;
- }
+ global_thread_container.apply_all(fct_reset_events_waits_history);
}
/** Reset table EVENTS_WAITS_HISTORY_LONG data. */
void reset_events_waits_history_long(void)
{
- PFS_atomic::store_u32(&events_waits_history_long_index, 0);
+ PFS_atomic::store_u32(&events_waits_history_long_index.m_u32, 0);
events_waits_history_long_full= false;
PFS_events_waits *wait= events_waits_history_long_array;
@@ -185,141 +190,112 @@ void reset_events_waits_history_long(void)
wait->m_wait_class= NO_WAIT_CLASS;
}
+static void fct_reset_events_waits_by_thread(PFS_thread *thread)
+{
+ PFS_account *account= sanitize_account(thread->m_account);
+ PFS_user *user= sanitize_user(thread->m_user);
+ PFS_host *host= sanitize_host(thread->m_host);
+ aggregate_thread_waits(thread, account, user, host);
+}
+
/** Reset table EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME data. */
void reset_events_waits_by_thread()
{
- PFS_thread *thread= thread_array;
- PFS_thread *thread_last= thread_array + thread_max;
- PFS_account *account;
- PFS_user *user;
- PFS_host *host;
+ global_thread_container.apply(fct_reset_events_waits_by_thread);
+}
- for ( ; thread < thread_last; thread++)
- {
- if (thread->m_lock.is_populated())
- {
- account= sanitize_account(thread->m_account);
- user= sanitize_user(thread->m_user);
- host= sanitize_host(thread->m_host);
- aggregate_thread_waits(thread, account, user, host);
- }
- }
+static void fct_reset_events_waits_by_account(PFS_account *pfs)
+{
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ pfs->aggregate_waits(user, host);
}
/** Reset table EVENTS_WAITS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME data. */
void reset_events_waits_by_account()
{
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= account_array + account_max;
- PFS_user *user;
- PFS_host *host;
+ global_account_container.apply(fct_reset_events_waits_by_account);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- user= sanitize_user(pfs->m_user);
- host= sanitize_host(pfs->m_host);
- pfs->aggregate_waits(user, host);
- }
- }
+static void fct_reset_events_waits_by_user(PFS_user *pfs)
+{
+ pfs->aggregate_waits();
}
/** Reset table EVENTS_WAITS_SUMMARY_BY_USER_BY_EVENT_NAME data. */
void reset_events_waits_by_user()
{
- PFS_user *pfs= user_array;
- PFS_user *pfs_last= user_array + user_max;
+ global_user_container.apply(fct_reset_events_waits_by_user);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_waits();
- }
+static void fct_reset_events_waits_by_host(PFS_host *pfs)
+{
+ pfs->aggregate_waits();
}
/** Reset table EVENTS_WAITS_SUMMARY_BY_HOST_BY_EVENT_NAME data. */
void reset_events_waits_by_host()
{
- PFS_host *pfs= host_array;
- PFS_host *pfs_last= host_array + host_max;
+ global_host_container.apply(fct_reset_events_waits_by_host);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_waits();
- }
+static void fct_reset_table_waits_by_table(PFS_table_share *pfs)
+{
+ pfs->aggregate();
}
void reset_table_waits_by_table()
{
- PFS_table_share *pfs= table_share_array;
- PFS_table_share *pfs_last= pfs + table_share_max;
+ global_table_share_container.apply(fct_reset_table_waits_by_table);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate();
- }
+static void fct_reset_table_io_waits_by_table(PFS_table_share *pfs)
+{
+ pfs->aggregate_io();
}
void reset_table_io_waits_by_table()
{
- PFS_table_share *pfs= table_share_array;
- PFS_table_share *pfs_last= pfs + table_share_max;
+ global_table_share_container.apply(fct_reset_table_io_waits_by_table);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_io();
- }
+static void fct_reset_table_lock_waits_by_table(PFS_table_share *pfs)
+{
+ pfs->aggregate_lock();
}
void reset_table_lock_waits_by_table()
{
- PFS_table_share *pfs= table_share_array;
- PFS_table_share *pfs_last= pfs + table_share_max;
+ global_table_share_container.apply(fct_reset_table_lock_waits_by_table);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->aggregate_lock();
- }
+void fct_reset_table_waits_by_table_handle(PFS_table *pfs)
+{
+ pfs->sanitized_aggregate();
}
void reset_table_waits_by_table_handle()
{
- PFS_table *pfs= table_array;
- PFS_table *pfs_last= pfs + table_max;
+ global_table_container.apply(fct_reset_table_waits_by_table_handle);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->sanitized_aggregate();
- }
+void fct_reset_table_io_waits_by_table_handle(PFS_table *pfs)
+{
+ pfs->sanitized_aggregate_io();
}
void reset_table_io_waits_by_table_handle()
{
- PFS_table *pfs= table_array;
- PFS_table *pfs_last= pfs + table_max;
+ global_table_container.apply(fct_reset_table_io_waits_by_table_handle);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->sanitized_aggregate_io();
- }
+void fct_reset_table_lock_waits_by_table_handle(PFS_table *pfs)
+{
+ pfs->sanitized_aggregate_lock();
}
void reset_table_lock_waits_by_table_handle()
{
- PFS_table *pfs= table_array;
- PFS_table *pfs_last= pfs + table_max;
-
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- pfs->sanitized_aggregate_lock();
- }
+ global_table_container.apply(fct_reset_table_lock_waits_by_table_handle);
}
diff --git a/storage/perfschema/pfs_events_waits.h b/storage/perfschema/pfs_events_waits.h
index 702f7e3ce07..87e43459d00 100644
--- a/storage/perfschema/pfs_events_waits.h
+++ b/storage/perfschema/pfs_events_waits.h
@@ -1,5 +1,5 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
- Copyright (c) 2017, MariaDB Corporation.
+/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
@@ -45,6 +45,7 @@ struct PFS_table_share;
struct PFS_account;
struct PFS_user;
struct PFS_host;
+struct PFS_metadata_lock;
/** Class of a wait event. */
enum events_waits_class
@@ -56,29 +57,13 @@ enum events_waits_class
WAIT_CLASS_TABLE,
WAIT_CLASS_FILE,
WAIT_CLASS_SOCKET,
- WAIT_CLASS_IDLE
+ WAIT_CLASS_IDLE,
+ WAIT_CLASS_METADATA
};
/** A wait event record. */
struct PFS_events_waits : public PFS_events
{
- /** Executing thread. */
- PFS_thread *m_thread;
- /** Table share, for table operations only. */
- PFS_table_share *m_weak_table_share;
- /** File, for file operations only. */
- PFS_file *m_weak_file;
- /** Address in memory of the object instance waited on. */
- const void *m_object_instance_addr;
- /** Socket, for socket operations only. */
- PFS_socket *m_weak_socket;
- /**
- Number of bytes read/written.
- This member is populated for file READ/WRITE operations only.
- */
- size_t m_number_of_bytes;
- /** Flags */
- ulong m_flags;
/**
The type of wait.
Readers:
@@ -93,15 +78,33 @@ struct PFS_events_waits : public PFS_events
events_waits_class m_wait_class;
/** Object type */
enum_object_type m_object_type;
+ /** Table share, for table operations only. */
+ PFS_table_share *m_weak_table_share;
+ /** File, for file operations only. */
+ PFS_file *m_weak_file;
+ /** Socket, for socket operations only. */
+ PFS_socket *m_weak_socket;
+ /** Metadata lock, for mdl operations only. */
+ PFS_metadata_lock *m_weak_metadata_lock;
/** For weak pointers, target object version. */
uint32 m_weak_version;
+ /** Address in memory of the object instance waited on. */
+ const void *m_object_instance_addr;
/** Operation performed. */
enum_operation_type m_operation;
/**
+ Number of bytes/rows read/written.
+ This member is populated for FILE READ/WRITE operations, with a number of bytes.
+ This member is populated for TABLE IO operations, with a number of rows.
+ */
+ size_t m_number_of_bytes;
+ /**
Index used.
This member is populated for TABLE IO operations only.
*/
uint m_index;
+ /** Flags */
+ ulong m_flags;
};
/** TIMED bit in the state flags bitfield. */
@@ -124,7 +127,7 @@ extern bool flag_global_instrumentation;
extern bool flag_thread_instrumentation;
extern bool events_waits_history_long_full;
-extern volatile uint32 events_waits_history_long_index;
+extern PFS_ALIGNED PFS_cacheline_uint32 events_waits_history_long_index;
extern PFS_events_waits *events_waits_history_long_array;
extern ulong events_waits_history_long_size;
diff --git a/storage/perfschema/pfs_global.cc b/storage/perfschema/pfs_global.cc
index e1b5e3400ca..26cb693d441 100644
--- a/storage/perfschema/pfs_global.cc
+++ b/storage/perfschema/pfs_global.cc
@@ -1,4 +1,5 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2017, 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, version 2.0,
@@ -27,37 +28,38 @@
#include <my_global.h>
#include "pfs_global.h"
-#include <my_sys.h>
-#include <my_net.h>
-#ifdef HAVE_MALLOC_H
-#include <malloc.h> /* memalign() may be here */
-#endif
+#include "pfs_builtin_memory.h"
+#include "log.h"
+
+#include <stdlib.h>
+#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
+#ifdef _WIN32
+#include <winsock2.h>
#endif
-
-#ifdef __WIN__
- #include <winsock2.h>
-#else
- #include <arpa/inet.h>
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
#endif
bool pfs_initialized= false;
-size_t pfs_allocated_memory= 0;
/**
Memory allocation for the performance schema.
- The memory used internally in the performance schema implementation
- is allocated once during startup, and considered static thereafter.
+ The memory used internally in the performance schema implementation.
+ It is allocated at startup, or during runtime with scalable buffers.
*/
-void *pfs_malloc(size_t size, myf flags)
+void *pfs_malloc(PFS_builtin_memory_class *klass, size_t size, myf flags)
{
- DBUG_ASSERT(! pfs_initialized);
+ DBUG_ASSERT(klass != NULL);
DBUG_ASSERT(size > 0);
void *ptr= NULL;
@@ -91,13 +93,14 @@ void *pfs_malloc(size_t size, myf flags)
return NULL;
#endif
- pfs_allocated_memory+= size;
+ klass->count_alloc(size);
+
if (flags & MY_ZEROFILL)
memset(ptr, 0, size);
return ptr;
}
-void pfs_free(void *ptr)
+void pfs_free(PFS_builtin_memory_class *klass, size_t size, void *ptr)
{
if (ptr == NULL)
return;
@@ -119,40 +122,58 @@ void pfs_free(void *ptr)
#endif /* HAVE_ALIGNED_MALLOC */
#endif /* HAVE_MEMALIGN */
#endif /* HAVE_POSIX_MEMALIGN */
-}
-void pfs_print_error(const char *format, ...)
-{
- va_list args;
- va_start(args, format);
- /*
- Printing to anything else, like the error log, would generate even more
- recursive calls to the performance schema implementation
- (file io is instrumented), so that could lead to catastrophic results.
- Printing to something safe, and low level: stderr only.
- */
- vfprintf(stderr, format, args);
- va_end(args);
- fflush(stderr);
+ klass->count_free(size);
}
/**
Array allocation for the performance schema.
Checks for overflow of n * size before allocating.
- @param n number of array elements
+ @param klass performance schema memory class
+ @param n number of array elements
@param size element size
@param flags malloc flags
@return pointer to memory on success, else NULL
*/
-void *pfs_malloc_array(size_t n, size_t size, myf flags)
+void *pfs_malloc_array(PFS_builtin_memory_class *klass, size_t n, size_t size, myf flags)
{
+ DBUG_ASSERT(klass != NULL);
DBUG_ASSERT(n > 0);
DBUG_ASSERT(size > 0);
+ void *ptr= NULL;
size_t array_size= n * size;
/* Check for overflow before allocating. */
if (is_overflow(array_size, n, size))
+ {
+ sql_print_warning("Failed to allocate memory for %zu chunks each of size "
+ "%zu for buffer '%s' due to overflow", n, size,
+ klass->m_class.m_name);
return NULL;
- return pfs_malloc(array_size, flags);
+ }
+
+ if(NULL == (ptr= pfs_malloc(klass, array_size, flags)))
+ {
+ sql_print_warning("Failed to allocate %zu bytes for buffer '%s' due to "
+ "out-of-memory", array_size, klass->m_class.m_name);
+ }
+ return ptr;
+}
+
+/**
+ Free array allocated by @sa pfs_malloc_array.
+ @param klass performance schema memory class
+ @param n number of array elements
+ @param size element size
+ @param ptr pointer to memory
+*/
+void pfs_free_array(PFS_builtin_memory_class *klass, size_t n, size_t size, void *ptr)
+{
+ if (ptr == NULL)
+ return;
+ size_t array_size= n * size;
+ /* Overflow should have been detected by pfs_malloc_array. */
+ DBUG_ASSERT(!is_overflow(array_size, n, size));
+ return pfs_free(klass, array_size, ptr);
}
/**
@@ -170,6 +191,22 @@ bool is_overflow(size_t product, size_t n1, size_t n2)
return false;
}
+void pfs_print_error(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ /*
+ Printing to anything else, like the error log, would generate even more
+ recursive calls to the performance schema implementation
+ (file io is instrumented), so that could lead to catastrophic results.
+ Printing to something safe, and low level: stderr only.
+ */
+ vfprintf(stderr, format, args);
+ va_end(args);
+ fflush(stderr);
+}
+
+
/** Convert raw ip address into readable format. Do not do a reverse DNS lookup. */
uint pfs_get_socket_address(char *host,
@@ -192,7 +229,7 @@ uint pfs_get_socket_address(char *host,
if (host_len < INET_ADDRSTRLEN+1)
return 0;
struct sockaddr_in *sa4= (struct sockaddr_in *)(src_addr);
- #ifdef __WIN__
+ #ifdef _WIN32
/* Older versions of Windows do not support inet_ntop() */
getnameinfo((struct sockaddr *)sa4, sizeof(struct sockaddr_in),
host, host_len, NULL, 0, NI_NUMERICHOST);
@@ -209,7 +246,7 @@ uint pfs_get_socket_address(char *host,
if (host_len < INET6_ADDRSTRLEN+1)
return 0;
struct sockaddr_in6 *sa6= (struct sockaddr_in6 *)(src_addr);
- #ifdef __WIN__
+ #ifdef _WIN32
/* Older versions of Windows do not support inet_ntop() */
getnameinfo((struct sockaddr *)sa6, sizeof(struct sockaddr_in6),
host, host_len, NULL, 0, NI_NUMERICHOST);
@@ -228,4 +265,3 @@ uint pfs_get_socket_address(char *host,
/* Return actual IP address string length */
return ((uint)strlen((const char*)host));
}
-
diff --git a/storage/perfschema/pfs_global.h b/storage/perfschema/pfs_global.h
index 58db39e607d..d26e81adae7 100644
--- a/storage/perfschema/pfs_global.h
+++ b/storage/perfschema/pfs_global.h
@@ -32,7 +32,6 @@
/** True when the performance schema is initialized. */
extern bool pfs_initialized;
-
/** Total memory allocated by the performance schema, in bytes. */
extern size_t pfs_allocated_memory;
@@ -48,23 +47,74 @@ extern size_t pfs_allocated_memory;
#define PFS_ALIGNED
#endif /* HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_ALIGNED_MALLOC */
-void *pfs_malloc(size_t size, myf flags);
+#ifdef CPU_LEVEL1_DCACHE_LINESIZE
+#define PFS_CACHE_LINE_SIZE CPU_LEVEL1_DCACHE_LINESIZE
+#else
+#define PFS_CACHE_LINE_SIZE 128
+#endif
+
+/**
+ A uint32 variable, guaranteed to be alone in a CPU cache line.
+ This is for performance, for variables accessed very frequently.
+*/
+struct PFS_cacheline_uint32
+{
+ uint32 m_u32;
+ char m_full_cache_line[PFS_CACHE_LINE_SIZE - sizeof(uint32)];
+
+ PFS_cacheline_uint32()
+ : m_u32(0)
+ {}
+};
+
+/**
+ A uint64 variable, guaranteed to be alone in a CPU cache line.
+ This is for performance, for variables accessed very frequently.
+*/
+struct PFS_cacheline_uint64
+{
+ uint64 m_u64;
+ char m_full_cache_line[PFS_CACHE_LINE_SIZE - sizeof(uint64)];
+
+ PFS_cacheline_uint64()
+ : m_u64(0)
+ {}
+};
+
+struct PFS_builtin_memory_class;
+
+/** Memory allocation for the performance schema. */
+void *pfs_malloc(PFS_builtin_memory_class *klass, size_t size, myf flags);
/** Allocate an array of structures with overflow check. */
-void *pfs_malloc_array(size_t n, size_t size, myf flags);
+void *pfs_malloc_array(PFS_builtin_memory_class *klass, size_t n, size_t size, myf flags);
/**
Helper, to allocate an array of structures.
+ @param k memory class
@param n number of elements in the array
@param s size of array element
@param T type of an element
@param f flags to use when allocating memory
*/
-#define PFS_MALLOC_ARRAY(n, s, T, f) \
- reinterpret_cast<T*>(pfs_malloc_array((n), (s), (f)))
+#define PFS_MALLOC_ARRAY(k, n, s, T, f) \
+ reinterpret_cast<T*>(pfs_malloc_array((k), (n), (s), (f)))
/** Free memory allocated with @sa pfs_malloc. */
-void pfs_free(void *ptr);
+void pfs_free(PFS_builtin_memory_class *klass, size_t size, void *ptr);
+
+/** Free memory allocated with @sa pfs_malloc_array. */
+void pfs_free_array(PFS_builtin_memory_class *klass, size_t n, size_t size, void *ptr);
+
+/**
+ Helper, to free an array of structures.
+ @param k memory class
+ @param n number of elements in the array
+ @param s size of array element
+ @param p the array to free
+*/
+#define PFS_FREE_ARRAY(k, n, s, p) \
+ pfs_free_array((k), (n), (s), (p))
/** Detect multiplication overflow. */
bool is_overflow(size_t product, size_t n1, size_t n2);
diff --git a/storage/perfschema/pfs_host.cc b/storage/perfschema/pfs_host.cc
index d6461ef3851..b896215efda 100644
--- a/storage/perfschema/pfs_host.cc
+++ b/storage/perfschema/pfs_host.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2018, 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, version 2.0,
@@ -34,21 +34,13 @@
#include "pfs_host.h"
#include "pfs_global.h"
#include "pfs_instr_class.h"
+#include "pfs_buffer_container.h"
/**
@addtogroup Performance_schema_buffers
@{
*/
-ulong host_max;
-ulong host_lost;
-
-PFS_host *host_array= NULL;
-
-static PFS_single_stat *host_instr_class_waits_array= NULL;
-static PFS_stage_stat *host_instr_class_stages_array= NULL;
-static PFS_statement_stat *host_instr_class_statements_array= NULL;
-
LF_HASH host_hash;
static bool host_hash_inited= false;
@@ -59,59 +51,8 @@ static bool host_hash_inited= false;
*/
int init_host(const PFS_global_param *param)
{
- uint index;
-
- host_max= param->m_host_sizing;
-
- host_array= NULL;
- host_instr_class_waits_array= NULL;
- host_instr_class_stages_array= NULL;
- host_instr_class_statements_array= NULL;
- uint waits_sizing= host_max * wait_class_max;
- uint stages_sizing= host_max * stage_class_max;
- uint statements_sizing= host_max * statement_class_max;
-
- if (host_max > 0)
- {
- host_array= PFS_MALLOC_ARRAY(host_max, sizeof(PFS_host), PFS_host,
- MYF(MY_ZEROFILL));
- if (unlikely(host_array == NULL))
- return 1;
- }
-
- if (waits_sizing > 0)
- {
- host_instr_class_waits_array=
- PFS_connection_slice::alloc_waits_slice(waits_sizing);
- if (unlikely(host_instr_class_waits_array == NULL))
- return 1;
- }
-
- if (stages_sizing > 0)
- {
- host_instr_class_stages_array=
- PFS_connection_slice::alloc_stages_slice(stages_sizing);
- if (unlikely(host_instr_class_stages_array == NULL))
- return 1;
- }
-
- if (statements_sizing > 0)
- {
- host_instr_class_statements_array=
- PFS_connection_slice::alloc_statements_slice(statements_sizing);
- if (unlikely(host_instr_class_statements_array == NULL))
- return 1;
- }
-
- for (index= 0; index < host_max; index++)
- {
- host_array[index].m_instr_class_waits_stats=
- &host_instr_class_waits_array[index * wait_class_max];
- host_array[index].m_instr_class_stages_stats=
- &host_instr_class_stages_array[index * stage_class_max];
- host_array[index].m_instr_class_statements_stats=
- &host_instr_class_statements_array[index * statement_class_max];
- }
+ if (global_host_container.init(param->m_host_sizing))
+ return 1;
return 0;
}
@@ -119,15 +60,7 @@ int init_host(const PFS_global_param *param)
/** Cleanup all the host buffers. */
void cleanup_host(void)
{
- pfs_free(host_array);
- host_array= NULL;
- pfs_free(host_instr_class_waits_array);
- host_instr_class_waits_array= NULL;
- pfs_free(host_instr_class_stages_array);
- host_instr_class_stages_array= NULL;
- pfs_free(host_instr_class_statements_array);
- host_instr_class_statements_array= NULL;
- host_max= 0;
+ global_host_container.cleanup();
}
C_MODE_START
@@ -151,13 +84,12 @@ C_MODE_END
Initialize the host hash.
@return 0 on success
*/
-int init_host_hash(void)
+int init_host_hash(const PFS_global_param *param)
{
- if ((! host_hash_inited) && (host_max > 0))
+ if ((! host_hash_inited) && (param->m_host_sizing != 0))
{
lf_hash_init(&host_hash, sizeof(PFS_host*), LF_HASH_UNIQUE,
0, 0, host_hash_get_key, &my_charset_bin);
- /* host_hash.size= host_max; */
host_hash_inited= true;
}
return 0;
@@ -203,16 +135,12 @@ static void set_host_key(PFS_host_key *key,
PFS_host *find_or_create_host(PFS_thread *thread,
const char *hostname, uint hostname_length)
{
- if (host_max == 0)
- {
- host_lost++;
- return NULL;
- }
+ static PFS_ALIGNED PFS_cacheline_uint32 monotonic;
LF_PINS *pins= get_host_hash_pins(thread);
if (unlikely(pins == NULL))
{
- host_lost++;
+ global_host_container.m_lost++;
return NULL;
}
@@ -220,8 +148,10 @@ PFS_host *find_or_create_host(PFS_thread *thread,
set_host_key(&key, hostname, hostname_length);
PFS_host **entry;
+ PFS_host *pfs;
uint retry_count= 0;
const uint retry_max= 3;
+ pfs_dirty_state dirty_state;
search:
entry= reinterpret_cast<PFS_host**>
@@ -238,68 +168,55 @@ search:
lf_hash_search_unpin(pins);
- PFS_scan scan;
- uint random= randomized_index(hostname, host_max);
-
- for (scan.init(random, host_max);
- scan.has_pass();
- scan.next_pass())
+ pfs= global_host_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- PFS_host *pfs= host_array + scan.first();
- PFS_host *pfs_last= host_array + scan.last();
- for ( ; pfs < pfs_last; pfs++)
+ pfs->m_key= key;
+ if (hostname_length > 0)
+ pfs->m_hostname= &pfs->m_key.m_hash_key[0];
+ else
+ pfs->m_hostname= NULL;
+ pfs->m_hostname_length= hostname_length;
+
+ pfs->init_refcount();
+ pfs->reset_stats();
+ pfs->m_disconnected_count= 0;
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&host_hash, pins, &pfs);
+ if (likely(res == 0))
{
- if (pfs->m_lock.is_free())
+ return pfs;
+ }
+
+ global_host_container.deallocate(pfs);
+
+ if (res > 0)
+ {
+ if (++retry_count > retry_max)
{
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_key= key;
- if (hostname_length > 0)
- pfs->m_hostname= &pfs->m_key.m_hash_key[0];
- else
- pfs->m_hostname= NULL;
- pfs->m_hostname_length= hostname_length;
-
- pfs->init_refcount();
- pfs->reset_stats();
- pfs->m_disconnected_count= 0;
-
- int res;
- res= lf_hash_insert(&host_hash, pins, &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- return pfs;
- }
-
- pfs->m_lock.dirty_to_free();
-
- if (res > 0)
- {
- if (++retry_count > retry_max)
- {
- host_lost++;
- return NULL;
- }
- goto search;
- }
-
- host_lost++;
- return NULL;
- }
+ global_host_container.m_lost++;
+ return NULL;
}
+ goto search;
}
+
+ global_host_container.m_lost++;
+ return NULL;
}
- host_lost++;
return NULL;
}
-void PFS_host::aggregate()
+void PFS_host::aggregate(bool alive)
{
aggregate_waits();
aggregate_stages();
aggregate_statements();
+ aggregate_transactions();
+ aggregate_memory(alive);
+ aggregate_status();
aggregate_stats();
}
@@ -311,24 +228,63 @@ void PFS_host::aggregate_waits()
void PFS_host::aggregate_stages()
{
+ if (read_instr_class_stages_stats() == NULL)
+ return;
+
/*
Aggregate EVENTS_STAGES_SUMMARY_BY_HOST_BY_EVENT_NAME to:
- EVENTS_STAGES_SUMMARY_GLOBAL_BY_EVENT_NAME
*/
- aggregate_all_stages(m_instr_class_stages_stats,
+ aggregate_all_stages(write_instr_class_stages_stats(),
global_instr_class_stages_array);
}
void PFS_host::aggregate_statements()
{
+ if (read_instr_class_statements_stats() == NULL)
+ return;
+
/*
Aggregate EVENTS_STATEMENTS_SUMMARY_BY_HOST_BY_EVENT_NAME to:
- EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_EVENT_NAME
*/
- aggregate_all_statements(m_instr_class_statements_stats,
+ aggregate_all_statements(write_instr_class_statements_stats(),
global_instr_class_statements_array);
}
+void PFS_host::aggregate_transactions()
+{
+ if (read_instr_class_transactions_stats() == NULL)
+ return;
+
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME
+ */
+ aggregate_all_transactions(write_instr_class_transactions_stats(),
+ &global_transaction_stat);
+}
+
+void PFS_host::aggregate_memory(bool alive)
+{
+ if (read_instr_class_memory_stats() == NULL)
+ return;
+
+ /*
+ Aggregate MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME
+ */
+ aggregate_all_memory(alive,
+ write_instr_class_memory_stats(),
+ global_instr_class_memory_array);
+}
+
+void PFS_host::aggregate_status()
+{
+ /* No parent to aggregate to, clean the stats */
+ m_status_stats.reset();
+}
+
void PFS_host::aggregate_stats()
{
/* No parent to aggregate to, clean the stats */
@@ -340,12 +296,24 @@ void PFS_host::release()
dec_refcount();
}
+void PFS_host::carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index)
+{
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ PFS_memory_stat_delta delta_buffer;
+ PFS_memory_stat_delta *remaining_delta;
+
+ event_name_array= write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ remaining_delta= stat->apply_delta(delta, &delta_buffer);
+
+ if (remaining_delta != NULL)
+ carry_global_memory_stat_delta(remaining_delta, index);
+}
+
PFS_host *sanitize_host(PFS_host *unsafe)
{
- if ((&host_array[0] <= unsafe) &&
- (unsafe < &host_array[host_max]))
- return unsafe;
- return NULL;
+ return global_host_container.sanitize(unsafe);
}
void purge_host(PFS_thread *thread, PFS_host *host)
@@ -365,13 +333,33 @@ void purge_host(PFS_thread *thread, PFS_host *host)
{
lf_hash_delete(&host_hash, pins,
host->m_key.m_hash_key, host->m_key.m_key_length);
- host->m_lock.allocated_to_free();
+ host->aggregate(false);
+ global_host_container.deallocate(host);
}
}
lf_hash_search_unpin(pins);
}
+class Proc_purge_host
+ : public PFS_buffer_processor<PFS_host>
+{
+public:
+ Proc_purge_host(PFS_thread *thread)
+ : m_thread(thread)
+ {}
+
+ virtual void operator()(PFS_host *pfs)
+ {
+ pfs->aggregate(true);
+ if (pfs->get_refcount() == 0)
+ purge_host(m_thread, pfs);
+ }
+
+private:
+ PFS_thread *m_thread;
+};
+
/** Purge non connected hosts, reset stats of connected hosts. */
void purge_all_host(void)
{
@@ -379,18 +367,8 @@ void purge_all_host(void)
if (unlikely(thread == NULL))
return;
- PFS_host *pfs= host_array;
- PFS_host *pfs_last= host_array + host_max;
-
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- pfs->aggregate();
- if (pfs->get_refcount() == 0)
- purge_host(thread, pfs);
- }
- }
+ Proc_purge_host proc(thread);
+ global_host_container.apply(proc);
}
/** @} */
diff --git a/storage/perfschema/pfs_host.h b/storage/perfschema/pfs_host.h
index d52207d3571..3781988237b 100644
--- a/storage/perfschema/pfs_host.h
+++ b/storage/perfschema/pfs_host.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -40,6 +40,7 @@ struct PFS_thread;
@{
*/
+/** Hash key for a host. */
struct PFS_host_key
{
/**
@@ -51,6 +52,7 @@ struct PFS_host_key
uint m_key_length;
};
+/** Per host statistics. */
struct PFS_ALIGNED PFS_host : PFS_connection_slice
{
public:
@@ -74,13 +76,18 @@ public:
PFS_atomic::add_32(& m_refcount, -1);
}
- void aggregate(void);
+ void aggregate(bool alive);
void aggregate_waits(void);
void aggregate_stages(void);
void aggregate_statements(void);
+ void aggregate_transactions(void);
+ void aggregate_memory(bool alive);
+ void aggregate_status(void);
void aggregate_stats(void);
void release(void);
+ void carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index);
+
/* Internal lock. */
pfs_lock m_lock;
PFS_host_key m_key;
@@ -95,7 +102,7 @@ private:
int init_host(const PFS_global_param *param);
void cleanup_host(void);
-int init_host_hash(void);
+int init_host_hash(const PFS_global_param *param);
void cleanup_host_hash(void);
PFS_host *find_or_create_host(PFS_thread *thread,
@@ -104,14 +111,7 @@ PFS_host *find_or_create_host(PFS_thread *thread,
PFS_host *sanitize_host(PFS_host *unsafe);
void purge_all_host(void);
-/* For iterators and show status. */
-
-extern ulong host_max;
-extern ulong host_lost;
-
-/* Exposing the data directly, for iterators. */
-
-extern PFS_host *host_array;
+/* For show status. */
extern LF_HASH host_hash;
diff --git a/storage/perfschema/pfs_instr.cc b/storage/perfschema/pfs_instr.cc
index ca9e0385021..f1064e2731c 100644
--- a/storage/perfschema/pfs_instr.cc
+++ b/storage/perfschema/pfs_instr.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2018, 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, version 2.0,
@@ -37,115 +37,45 @@
#include "pfs_account.h"
#include "pfs_global.h"
#include "pfs_instr_class.h"
+#include "pfs_buffer_container.h"
+#include "pfs_builtin_memory.h"
+
+ulong nested_statement_lost= 0;
/**
@addtogroup Performance_schema_buffers
@{
*/
-/** Size of the mutex instances array. @sa mutex_array */
-ulong mutex_max;
-/** True when @c mutex_array is full. */
-bool mutex_full;
-/** Number of mutexes instance lost. @sa mutex_array */
-ulong mutex_lost;
-/** Size of the rwlock instances array. @sa rwlock_array */
-ulong rwlock_max;
-/** True when @c rwlock_array is full. */
-bool rwlock_full;
-/** Number or rwlock instances lost. @sa rwlock_array */
-ulong rwlock_lost;
-/** Size of the conditions instances array. @sa cond_array */
-ulong cond_max;
-/** True when @c cond_array is full. */
-bool cond_full;
-/** Number of conditions instances lost. @sa cond_array */
-ulong cond_lost;
-/** Size of the thread instances array. @sa thread_array */
-ulong thread_max;
-/** True when @c thread_array is full. */
-bool thread_full;
-/** Number or thread instances lost. @sa thread_array */
-ulong thread_lost;
-/** Size of the file instances array. @sa file_array */
-ulong file_max;
-/** True when @c file_array is full. */
-bool file_full;
-/** Number of file instances lost. @sa file_array */
-ulong file_lost;
/**
Size of the file handle array. @sa file_handle_array.
Signed value, for easier comparisons with a file descriptor number.
*/
-long file_handle_max;
+long file_handle_max= 0;
/** True when @c file_handle_array is full. */
bool file_handle_full;
/** Number of file handle lost. @sa file_handle_array */
-ulong file_handle_lost;
-/** Size of the table instances array. @sa table_array */
-ulong table_max;
-/** True when @c table_array is full. */
-bool table_full;
-/** Number of table instances lost. @sa table_array */
-ulong table_lost;
-/** Size of the socket instances array. @sa socket_array */
-ulong socket_max;
-/** True when @c socket_array is full. */
-bool socket_full;
-/** Number of socket instances lost. @sa socket_array */
-ulong socket_lost;
+ulong file_handle_lost= 0;
/** Number of EVENTS_WAITS_HISTORY records per thread. */
-ulong events_waits_history_per_thread;
+ulong events_waits_history_per_thread= 0;
/** Number of EVENTS_STAGES_HISTORY records per thread. */
-ulong events_stages_history_per_thread;
+ulong events_stages_history_per_thread= 0;
/** Number of EVENTS_STATEMENTS_HISTORY records per thread. */
-ulong events_statements_history_per_thread;
-uint statement_stack_max;
+ulong events_statements_history_per_thread= 0;
+uint statement_stack_max= 0;
size_t pfs_max_digest_length= 0;
+size_t pfs_max_sqltext= 0;
/** Number of locker lost. @sa LOCKER_STACK_SIZE. */
ulong locker_lost= 0;
-/** Number of statement lost. @sa STATEMENT_STACK_SIZE. */
+/** Number of statements lost. @sa STATEMENT_STACK_SIZE. */
ulong statement_lost= 0;
/** Size of connection attribute storage per thread */
ulong session_connect_attrs_size_per_thread;
/** Number of connection attributes lost */
ulong session_connect_attrs_lost= 0;
-/**
- Mutex instrumentation instances array.
- @sa mutex_max
- @sa mutex_lost
-*/
-PFS_mutex *mutex_array= NULL;
-
-/**
- RWLock instrumentation instances array.
- @sa rwlock_max
- @sa rwlock_lost
-*/
-PFS_rwlock *rwlock_array= NULL;
-
-/**
- Condition instrumentation instances array.
- @sa cond_max
- @sa cond_lost
-*/
-PFS_cond *cond_array= NULL;
-
-/**
- Thread instrumentation instances array.
- @sa thread_max
- @sa thread_lost
-*/
-PFS_thread *thread_array= NULL;
-
-/**
- File instrumentation instances array.
- @sa file_max
- @sa file_lost
- @sa filename_hash
-*/
-PFS_file *file_array= NULL;
+/** Number of EVENTS_TRANSACTIONS_HISTORY records per thread. */
+ulong events_transactions_history_per_thread= 0;
/**
File instrumentation handle array.
@@ -154,45 +84,19 @@ PFS_file *file_array= NULL;
*/
PFS_file **file_handle_array= NULL;
-/**
- Table instrumentation instances array.
- @sa table_max
- @sa table_lost
-*/
-PFS_table *table_array= NULL;
-
-/**
- Socket instrumentation instances array.
- @sa socket_max
- @sa socket_lost
-*/
-PFS_socket *socket_array= NULL;
-
PFS_stage_stat *global_instr_class_stages_array= NULL;
PFS_statement_stat *global_instr_class_statements_array= NULL;
+PFS_memory_stat *global_instr_class_memory_array= NULL;
-static volatile uint64 thread_internal_id_counter= 0;
-
-static uint thread_instr_class_waits_sizing;
-static uint thread_instr_class_stages_sizing;
-static uint thread_instr_class_statements_sizing;
-static PFS_single_stat *thread_instr_class_waits_array= NULL;
-static PFS_stage_stat *thread_instr_class_stages_array= NULL;
-static PFS_statement_stat *thread_instr_class_statements_array= NULL;
-
-static PFS_events_waits *thread_waits_history_array= NULL;
-static PFS_events_stages *thread_stages_history_array= NULL;
-static PFS_events_statements *thread_statements_history_array= NULL;
-static PFS_events_statements *thread_statements_stack_array= NULL;
-static unsigned char *current_stmts_digest_token_array= NULL;
-static unsigned char *history_stmts_digest_token_array= NULL;
-static char *thread_session_connect_attrs_array= NULL;
+static PFS_ALIGNED PFS_cacheline_uint64 thread_internal_id_counter;
/** Hash table for instrumented files. */
LF_HASH filename_hash;
/** True if filename_hash is initialized. */
static bool filename_hash_inited= false;
+my_bool show_compatibility_56= 0;
+
/**
Initialize all the instruments instance buffers.
@param param sizing parameters
@@ -200,291 +104,76 @@ static bool filename_hash_inited= false;
*/
int init_instruments(const PFS_global_param *param)
{
- PFS_events_statements *pfs_stmt;
- unsigned char *pfs_tokens;
-
- uint thread_waits_history_sizing;
- uint thread_stages_history_sizing;
- uint thread_statements_history_sizing;
- uint thread_statements_stack_sizing;
- uint thread_session_connect_attrs_sizing;
uint index;
/* Make sure init_event_name_sizing is called */
DBUG_ASSERT(wait_class_max != 0);
- mutex_max= param->m_mutex_sizing;
- mutex_full= false;
- mutex_lost= 0;
- rwlock_max= param->m_rwlock_sizing;
- rwlock_full= false;
- rwlock_lost= 0;
- cond_max= param->m_cond_sizing;
- cond_full= false;
- cond_lost= 0;
- file_max= param->m_file_sizing;
- file_full= false;
- file_lost= 0;
file_handle_max= param->m_file_handle_sizing;
file_handle_full= false;
file_handle_lost= 0;
pfs_max_digest_length= param->m_max_digest_length;
-
- table_max= param->m_table_sizing;
- table_full= false;
- table_lost= 0;
- thread_max= param->m_thread_sizing;
- thread_full= false;
- thread_lost= 0;
- socket_max= param->m_socket_sizing;
- socket_full= false;
- socket_lost= 0;
+ pfs_max_sqltext= param->m_max_sql_text_length;
events_waits_history_per_thread= param->m_events_waits_history_sizing;
- thread_waits_history_sizing= param->m_thread_sizing
- * events_waits_history_per_thread;
-
- thread_instr_class_waits_sizing= param->m_thread_sizing
- * wait_class_max;
events_stages_history_per_thread= param->m_events_stages_history_sizing;
- thread_stages_history_sizing= param->m_thread_sizing
- * events_stages_history_per_thread;
events_statements_history_per_thread= param->m_events_statements_history_sizing;
- thread_statements_history_sizing= param->m_thread_sizing
- * events_statements_history_per_thread;
-
- statement_stack_max= 1;
- thread_statements_stack_sizing= param->m_thread_sizing * statement_stack_max;
- thread_instr_class_stages_sizing= param->m_thread_sizing
- * param->m_stage_class_sizing;
+ statement_stack_max= param->m_statement_stack_sizing;
- thread_instr_class_statements_sizing= param->m_thread_sizing
- * param->m_statement_class_sizing;
+ events_transactions_history_per_thread= param->m_events_transactions_history_sizing;
session_connect_attrs_size_per_thread= param->m_session_connect_attrs_sizing;
- thread_session_connect_attrs_sizing= param->m_thread_sizing
- * session_connect_attrs_size_per_thread;
session_connect_attrs_lost= 0;
- size_t current_digest_tokens_sizing= param->m_thread_sizing * pfs_max_digest_length * statement_stack_max;
- size_t history_digest_tokens_sizing= param->m_thread_sizing * pfs_max_digest_length * events_statements_history_per_thread;
-
- mutex_array= NULL;
- rwlock_array= NULL;
- cond_array= NULL;
- file_array= NULL;
file_handle_array= NULL;
- table_array= NULL;
- socket_array= NULL;
- thread_array= NULL;
- thread_waits_history_array= NULL;
- thread_stages_history_array= NULL;
- thread_statements_history_array= NULL;
- thread_statements_stack_array= NULL;
- current_stmts_digest_token_array= NULL;
- history_stmts_digest_token_array= NULL;
- thread_instr_class_waits_array= NULL;
- thread_instr_class_stages_array= NULL;
- thread_instr_class_statements_array= NULL;
- thread_internal_id_counter= 0;
-
- if (mutex_max > 0)
- {
- mutex_array= PFS_MALLOC_ARRAY(mutex_max, sizeof(PFS_mutex), PFS_mutex, MYF(MY_ZEROFILL));
- if (unlikely(mutex_array == NULL))
- return 1;
- }
- if (rwlock_max > 0)
- {
- rwlock_array= PFS_MALLOC_ARRAY(rwlock_max, sizeof(PFS_rwlock), PFS_rwlock, MYF(MY_ZEROFILL));
- if (unlikely(rwlock_array == NULL))
- return 1;
- }
+ thread_internal_id_counter.m_u64= 0;
- if (cond_max > 0)
- {
- cond_array= PFS_MALLOC_ARRAY(cond_max, sizeof(PFS_cond), PFS_cond, MYF(MY_ZEROFILL));
- if (unlikely(cond_array == NULL))
- return 1;
- }
-
- if (file_max > 0)
- {
- file_array= PFS_MALLOC_ARRAY(file_max, sizeof(PFS_file), PFS_file, MYF(MY_ZEROFILL));
- if (unlikely(file_array == NULL))
- return 1;
- }
+ if (global_mutex_container.init(param->m_mutex_sizing))
+ return 1;
- if (file_handle_max > 0)
- {
- file_handle_array= PFS_MALLOC_ARRAY(file_handle_max, sizeof(PFS_file*), PFS_file*, MYF(MY_ZEROFILL));
- if (unlikely(file_handle_array == NULL))
- return 1;
- }
-
- if (table_max > 0)
- {
- table_array= PFS_MALLOC_ARRAY(table_max, sizeof(PFS_table), PFS_table, MYF(MY_ZEROFILL));
- if (unlikely(table_array == NULL))
- return 1;
- }
-
- if (socket_max > 0)
- {
- socket_array= PFS_MALLOC_ARRAY(socket_max, sizeof(PFS_socket), PFS_socket, MYF(MY_ZEROFILL));
- if (unlikely(socket_array == NULL))
- return 1;
- }
-
- if (thread_max > 0)
- {
- thread_array= PFS_MALLOC_ARRAY(thread_max, sizeof(PFS_thread), PFS_thread, MYF(MY_ZEROFILL));
- if (unlikely(thread_array == NULL))
- return 1;
- }
-
- if (thread_waits_history_sizing > 0)
- {
- thread_waits_history_array=
- PFS_MALLOC_ARRAY(thread_waits_history_sizing, sizeof(PFS_events_waits), PFS_events_waits,
- MYF(MY_ZEROFILL));
- if (unlikely(thread_waits_history_array == NULL))
- return 1;
- }
-
- if (thread_instr_class_waits_sizing > 0)
- {
- thread_instr_class_waits_array=
- PFS_MALLOC_ARRAY(thread_instr_class_waits_sizing,
- sizeof(PFS_single_stat), PFS_single_stat, MYF(MY_ZEROFILL));
- if (unlikely(thread_instr_class_waits_array == NULL))
- return 1;
-
- for (index= 0; index < thread_instr_class_waits_sizing; index++)
- thread_instr_class_waits_array[index].reset();
- }
-
- if (thread_stages_history_sizing > 0)
- {
- thread_stages_history_array=
- PFS_MALLOC_ARRAY(thread_stages_history_sizing, sizeof(PFS_events_stages), PFS_events_stages,
- MYF(MY_ZEROFILL));
- if (unlikely(thread_stages_history_array == NULL))
- return 1;
- }
-
- if (thread_instr_class_stages_sizing > 0)
- {
- thread_instr_class_stages_array=
- PFS_MALLOC_ARRAY(thread_instr_class_stages_sizing,
- sizeof(PFS_stage_stat), PFS_stage_stat, MYF(MY_ZEROFILL));
- if (unlikely(thread_instr_class_stages_array == NULL))
- return 1;
-
- for (index= 0; index < thread_instr_class_stages_sizing; index++)
- thread_instr_class_stages_array[index].reset();
- }
-
- if (thread_statements_history_sizing > 0)
- {
- thread_statements_history_array=
- PFS_MALLOC_ARRAY(thread_statements_history_sizing, sizeof(PFS_events_statements),
- PFS_events_statements, MYF(MY_ZEROFILL));
- if (unlikely(thread_statements_history_array == NULL))
- return 1;
- }
-
- if (thread_statements_stack_sizing > 0)
- {
- thread_statements_stack_array=
- PFS_MALLOC_ARRAY(thread_statements_stack_sizing, sizeof(PFS_events_statements),
- PFS_events_statements, MYF(MY_ZEROFILL));
- if (unlikely(thread_statements_stack_array == NULL))
- return 1;
- }
-
- if (thread_instr_class_statements_sizing > 0)
- {
- thread_instr_class_statements_array=
- PFS_MALLOC_ARRAY(thread_instr_class_statements_sizing,
- sizeof(PFS_statement_stat), PFS_statement_stat, MYF(MY_ZEROFILL));
- if (unlikely(thread_instr_class_statements_array == NULL))
- return 1;
-
- for (index= 0; index < thread_instr_class_statements_sizing; index++)
- thread_instr_class_statements_array[index].reset();
- }
+ if (global_rwlock_container.init(param->m_rwlock_sizing))
+ return 1;
- if (thread_session_connect_attrs_sizing > 0)
- {
- thread_session_connect_attrs_array=
- (char *)pfs_malloc(thread_session_connect_attrs_sizing, MYF(MY_ZEROFILL));
- if (unlikely(thread_session_connect_attrs_array == NULL))
- return 1;
- }
+ if (global_cond_container.init(param->m_cond_sizing))
+ return 1;
- if (current_digest_tokens_sizing > 0)
- {
- current_stmts_digest_token_array=
- (unsigned char *)pfs_malloc(current_digest_tokens_sizing, MYF(MY_ZEROFILL));
- if (unlikely(current_stmts_digest_token_array == NULL))
- return 1;
- }
+ if (global_file_container.init(param->m_file_sizing))
+ return 1;
- if (history_digest_tokens_sizing > 0)
+ if (file_handle_max > 0)
{
- history_stmts_digest_token_array=
- (unsigned char *)pfs_malloc(history_digest_tokens_sizing, MYF(MY_ZEROFILL));
- if (unlikely(history_stmts_digest_token_array == NULL))
+ file_handle_array= PFS_MALLOC_ARRAY(& builtin_memory_file_handle,
+ file_handle_max,
+ sizeof(PFS_file*), PFS_file*,
+ MYF(MY_ZEROFILL));
+ if (unlikely(file_handle_array == NULL))
return 1;
}
- for (index= 0; index < thread_max; index++)
- {
- thread_array[index].m_waits_history=
- &thread_waits_history_array[index * events_waits_history_per_thread];
- thread_array[index].m_instr_class_waits_stats=
- &thread_instr_class_waits_array[index * wait_class_max];
- thread_array[index].m_stages_history=
- &thread_stages_history_array[index * events_stages_history_per_thread];
- thread_array[index].m_instr_class_stages_stats=
- &thread_instr_class_stages_array[index * stage_class_max];
- thread_array[index].m_statements_history=
- &thread_statements_history_array[index * events_statements_history_per_thread];
- thread_array[index].m_statement_stack=
- &thread_statements_stack_array[index * statement_stack_max];
- thread_array[index].m_instr_class_statements_stats=
- &thread_instr_class_statements_array[index * statement_class_max];
- thread_array[index].m_session_connect_attrs=
- &thread_session_connect_attrs_array[index * session_connect_attrs_size_per_thread];
- }
+ if (global_table_container.init(param->m_table_sizing))
+ return 1;
- for (index= 0; index < thread_statements_stack_sizing; index++)
- {
- pfs_stmt= & thread_statements_stack_array[index];
+ if (global_socket_container.init(param->m_socket_sizing))
+ return 1;
- pfs_tokens= & current_stmts_digest_token_array[index * pfs_max_digest_length];
- pfs_stmt->m_digest_storage.reset(pfs_tokens, pfs_max_digest_length);
- }
+ if (global_mdl_container.init(param->m_metadata_lock_sizing))
+ return 1;
- for (index= 0; index < thread_statements_history_sizing; index++)
- {
- pfs_stmt= & thread_statements_history_array[index];
-
- pfs_tokens= & history_stmts_digest_token_array[index * pfs_max_digest_length];
- pfs_stmt->m_digest_storage.reset(pfs_tokens, pfs_max_digest_length);
- }
+ if (global_thread_container.init(param->m_thread_sizing))
+ return 1;
if (stage_class_max > 0)
{
global_instr_class_stages_array=
- PFS_MALLOC_ARRAY(stage_class_max,
- sizeof(PFS_stage_stat), PFS_stage_stat, MYF(MY_ZEROFILL));
+ PFS_MALLOC_ARRAY(& builtin_memory_global_stages,
+ stage_class_max,
+ sizeof(PFS_stage_stat), PFS_stage_stat,
+ MYF(MY_ZEROFILL));
if (unlikely(global_instr_class_stages_array == NULL))
return 1;
@@ -495,8 +184,10 @@ int init_instruments(const PFS_global_param *param)
if (statement_class_max > 0)
{
global_instr_class_statements_array=
- PFS_MALLOC_ARRAY(statement_class_max,
- sizeof(PFS_statement_stat), PFS_statement_stat, MYF(MY_ZEROFILL));
+ PFS_MALLOC_ARRAY(& builtin_memory_global_statements,
+ statement_class_max,
+ sizeof(PFS_statement_stat), PFS_statement_stat,
+ MYF(MY_ZEROFILL));
if (unlikely(global_instr_class_statements_array == NULL))
return 1;
@@ -504,60 +195,59 @@ int init_instruments(const PFS_global_param *param)
global_instr_class_statements_array[index].reset();
}
+ if (memory_class_max > 0)
+ {
+ global_instr_class_memory_array=
+ PFS_MALLOC_ARRAY(& builtin_memory_global_memory,
+ memory_class_max,
+ sizeof(PFS_memory_stat), PFS_memory_stat,
+ MYF(MY_ZEROFILL));
+ if (unlikely(global_instr_class_memory_array == NULL))
+ return 1;
+
+ for (index= 0; index < memory_class_max; index++)
+ global_instr_class_memory_array[index].reset();
+ }
+
return 0;
}
/** Cleanup all the instruments buffers. */
void cleanup_instruments(void)
{
- pfs_free(mutex_array);
- mutex_array= NULL;
- mutex_max= 0;
- pfs_free(rwlock_array);
- rwlock_array= NULL;
- rwlock_max= 0;
- pfs_free(cond_array);
- cond_array= NULL;
- cond_max= 0;
- pfs_free(file_array);
- file_array= NULL;
- file_max= 0;
- pfs_free(file_handle_array);
+ global_mutex_container.cleanup();
+ global_rwlock_container.cleanup();
+ global_cond_container.cleanup();
+ global_file_container.cleanup();
+
+ PFS_FREE_ARRAY(& builtin_memory_file_handle,
+ file_handle_max, sizeof(PFS_file*),
+ file_handle_array);
file_handle_array= NULL;
file_handle_max= 0;
- pfs_free(table_array);
- table_array= NULL;
- table_max= 0;
- pfs_free(socket_array);
- socket_array= NULL;
- socket_max= 0;
- pfs_free(thread_array);
- thread_array= NULL;
- thread_max= 0;
- pfs_free(thread_waits_history_array);
- thread_waits_history_array= NULL;
- pfs_free(thread_stages_history_array);
- thread_stages_history_array= NULL;
- pfs_free(thread_statements_history_array);
- thread_statements_history_array= NULL;
- pfs_free(thread_statements_stack_array);
- thread_statements_stack_array= NULL;
- pfs_free(thread_instr_class_waits_array);
- thread_instr_class_waits_array= NULL;
- pfs_free(global_instr_class_stages_array);
+
+ global_table_container.cleanup();
+ global_socket_container.cleanup();
+ global_mdl_container.cleanup();
+ global_thread_container.cleanup();
+
+ PFS_FREE_ARRAY(& builtin_memory_global_stages,
+ stage_class_max,
+ sizeof(PFS_stage_stat),
+ global_instr_class_stages_array);
global_instr_class_stages_array= NULL;
- pfs_free(global_instr_class_statements_array);
+
+ PFS_FREE_ARRAY(& builtin_memory_global_statements,
+ statement_class_max,
+ sizeof(PFS_statement_stat),
+ global_instr_class_statements_array);
global_instr_class_statements_array= NULL;
- pfs_free(thread_instr_class_statements_array);
- thread_instr_class_statements_array= NULL;
- pfs_free(thread_instr_class_stages_array);
- thread_instr_class_stages_array= NULL;
- pfs_free(thread_session_connect_attrs_array);
- thread_session_connect_attrs_array=NULL;
- pfs_free(current_stmts_digest_token_array);
- current_stmts_digest_token_array= NULL;
- pfs_free(history_stmts_digest_token_array);
- history_stmts_digest_token_array= NULL;
+
+ PFS_FREE_ARRAY(& builtin_memory_global_memory,
+ memory_class_max,
+ sizeof(PFS_memory_stat),
+ global_instr_class_memory_array);
+ global_instr_class_memory_array= NULL;
}
C_MODE_START
@@ -582,13 +272,12 @@ C_MODE_END
Initialize the file name hash.
@return 0 on success
*/
-int init_file_hash(void)
+int init_file_hash(const PFS_global_param *param)
{
- if ((! filename_hash_inited) && (file_max > 0))
+ if ((! filename_hash_inited) && (param->m_file_sizing != 0))
{
lf_hash_init(&filename_hash, sizeof(PFS_file*), LF_HASH_UNIQUE,
0, 0, filename_hash_get_key, &my_charset_bin);
- /* filename_hash.size= file_max; */
filename_hash_inited= true;
}
return 0;
@@ -604,75 +293,6 @@ void cleanup_file_hash(void)
}
}
-void PFS_scan::init(uint random, uint max_size)
-{
- m_pass= 0;
-
- if (max_size == 0)
- {
- /* Degenerated case, no buffer */
- m_pass_max= 0;
- return;
- }
-
- DBUG_ASSERT(random < max_size);
-
- if (PFS_MAX_ALLOC_RETRY < max_size)
- {
- /*
- The buffer is big compared to PFS_MAX_ALLOC_RETRY,
- scan it only partially.
- */
- if (random + PFS_MAX_ALLOC_RETRY < max_size)
- {
- /*
- Pass 1: [random, random + PFS_MAX_ALLOC_RETRY - 1]
- Pass 2: not used.
- */
- m_pass_max= 1;
- m_first[0]= random;
- m_last[0]= random + PFS_MAX_ALLOC_RETRY;
- m_first[1]= 0;
- m_last[1]= 0;
- }
- else
- {
- /*
- Pass 1: [random, max_size - 1]
- Pass 2: [0, ...]
- The combined length of pass 1 and 2 is PFS_MAX_ALLOC_RETRY.
- */
- m_pass_max= 2;
- m_first[0]= random;
- m_last[0]= max_size;
- m_first[1]= 0;
- m_last[1]= PFS_MAX_ALLOC_RETRY - (max_size - random);
- }
- }
- else
- {
- /*
- The buffer is small compared to PFS_MAX_ALLOC_RETRY,
- scan it in full in two passes.
- Pass 1: [random, max_size - 1]
- Pass 2: [0, random - 1]
- */
- m_pass_max= 2;
- m_first[0]= random;
- m_last[0]= max_size;
- m_first[1]= 0;
- m_last[1]= random;
- }
-
- DBUG_ASSERT(m_first[0] < max_size);
- DBUG_ASSERT(m_first[1] < max_size);
- DBUG_ASSERT(m_last[1] <= max_size);
- DBUG_ASSERT(m_last[1] <= max_size);
- /* The combined length of all passes should not exceed PFS_MAX_ALLOC_RETRY. */
- DBUG_ASSERT((m_last[0] - m_first[0]) +
- (m_last[1] - m_first[1]) <= PFS_MAX_ALLOC_RETRY);
-}
-
/**
Create instrumentation for a mutex instance.
@param klass the mutex class
@@ -681,76 +301,25 @@ void PFS_scan::init(uint random, uint max_size)
*/
PFS_mutex* create_mutex(PFS_mutex_class *klass, const void *identity)
{
- static uint PFS_ALIGNED mutex_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_mutex *pfs;
+ pfs_dirty_state dirty_state;
- if (mutex_full)
+ pfs= global_mutex_container.allocate(& dirty_state, klass->m_volatility);
+ if (pfs != NULL)
{
- /*
- This is a safety plug.
- When mutex_array is severely undersized,
- do not spin to death for each call.
- */
- mutex_lost++;
- return NULL;
- }
-
- while (++attempts <= mutex_max)
- {
- /*
- Problem:
- Multiple threads running concurrently may need to create a new
- instrumented mutex, and find an empty slot in mutex_array[].
- With N1 threads running on a N2 core hardware:
- - up to N2 hardware threads can run concurrently,
- causing contention if looking at the same array[i] slot.
- - up to N1 threads can run almost concurrently (with thread scheduling),
- scanning maybe overlapping regions in the [0-mutex_max] array.
-
- Solution:
- Instead of letting different threads compete on the same array[i] entry,
- this code forces all threads to cooperate with the monotonic_index.
- Only one thread will be allowed to test a given array[i] slot.
- All threads do scan from the same region, starting at monotonic_index.
- Serializing on monotonic_index ensures that when a slot is found occupied
- in a given loop by a given thread, other threads will not attempt this
- slot.
- */
- index= PFS_atomic::add_u32(& mutex_monotonic_index, 1) % mutex_max;
- pfs= mutex_array + index;
-
- if (pfs->m_lock.is_free())
- {
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_identity= identity;
- pfs->m_class= klass;
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- pfs->m_mutex_stat.reset();
- 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;
- }
- }
+ pfs->m_identity= identity;
+ pfs->m_class= klass;
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ pfs->m_mutex_stat.reset();
+ pfs->m_owner= NULL;
+ pfs->m_last_locked= 0;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ if (klass->is_singleton())
+ klass->m_singleton= pfs;
}
- mutex_lost++;
- /*
- Race condition.
- The mutex_array might not be full if a concurrent thread
- called destroy_mutex() during the scan, leaving one
- empty slot we did not find.
- However, 99.999 percent full tables or 100 percent full tables
- are treated the same here, we declare the array overloaded.
- */
- mutex_full= true;
- return NULL;
+ return pfs;
}
/**
@@ -766,8 +335,8 @@ void destroy_mutex(PFS_mutex *pfs)
pfs->m_mutex_stat.reset();
if (klass->is_singleton())
klass->m_singleton= NULL;
- pfs->m_lock.allocated_to_free();
- mutex_full= false;
+
+ global_mutex_container.deallocate(pfs);
}
/**
@@ -778,47 +347,27 @@ void destroy_mutex(PFS_mutex *pfs)
*/
PFS_rwlock* create_rwlock(PFS_rwlock_class *klass, const void *identity)
{
- static uint PFS_ALIGNED rwlock_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_rwlock *pfs;
+ pfs_dirty_state dirty_state;
- if (rwlock_full)
+ pfs= global_rwlock_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- rwlock_lost++;
- return NULL;
- }
-
- while (++attempts <= rwlock_max)
- {
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& rwlock_monotonic_index, 1) % rwlock_max;
- pfs= rwlock_array + index;
-
- if (pfs->m_lock.is_free())
- {
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_identity= identity;
- pfs->m_class= klass;
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- pfs->m_rwlock_stat.reset();
- pfs->m_lock.dirty_to_allocated();
- pfs->m_writer= NULL;
- pfs->m_readers= 0;
- pfs->m_last_written= 0;
- pfs->m_last_read= 0;
- if (klass->is_singleton())
- klass->m_singleton= pfs;
- return pfs;
- }
- }
+ pfs->m_identity= identity;
+ pfs->m_class= klass;
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ pfs->m_rwlock_stat.reset();
+ pfs->m_writer= NULL;
+ pfs->m_readers= 0;
+ pfs->m_last_written= 0;
+ pfs->m_last_read= 0;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ if (klass->is_singleton())
+ klass->m_singleton= pfs;
}
- rwlock_lost++;
- rwlock_full= true;
- return NULL;
+ return pfs;
}
/**
@@ -834,8 +383,8 @@ void destroy_rwlock(PFS_rwlock *pfs)
pfs->m_rwlock_stat.reset();
if (klass->is_singleton())
klass->m_singleton= NULL;
- pfs->m_lock.allocated_to_free();
- rwlock_full= false;
+
+ global_rwlock_container.deallocate(pfs);
}
/**
@@ -846,45 +395,23 @@ void destroy_rwlock(PFS_rwlock *pfs)
*/
PFS_cond* create_cond(PFS_cond_class *klass, const void *identity)
{
- static uint PFS_ALIGNED cond_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_cond *pfs;
+ pfs_dirty_state dirty_state;
- if (cond_full)
- {
- cond_lost++;
- return NULL;
- }
-
- while (++attempts <= cond_max)
+ pfs= global_cond_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& cond_monotonic_index, 1) % cond_max;
- pfs= cond_array + index;
-
- if (pfs->m_lock.is_free())
- {
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_identity= identity;
- pfs->m_class= klass;
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- pfs->m_cond_stat.m_signal_count= 0;
- 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;
- }
- }
+ pfs->m_identity= identity;
+ pfs->m_class= klass;
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ pfs->m_cond_stat.reset();
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ if (klass->is_singleton())
+ klass->m_singleton= pfs;
}
- cond_lost++;
- cond_full= true;
- return NULL;
+ return pfs;
}
/**
@@ -897,17 +424,16 @@ void destroy_cond(PFS_cond *pfs)
PFS_cond_class *klass= pfs->m_class;
/* Aggregate to EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME */
klass->m_cond_stat.aggregate(& pfs->m_cond_stat);
- pfs->m_wait_stat.reset();
+ pfs->m_cond_stat.reset();
if (klass->is_singleton())
klass->m_singleton= NULL;
- pfs->m_lock.allocated_to_free();
- cond_full= false;
+
+ global_cond_container.deallocate(pfs);
}
PFS_thread* PFS_thread::get_current_thread()
{
- PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS);
- return pfs;
+ return static_cast<PFS_thread*>(my_get_thread_local(THR_PFS));
}
void PFS_thread::reset_session_connect_attrs()
@@ -923,6 +449,64 @@ void PFS_thread::reset_session_connect_attrs()
}
}
+void PFS_thread::set_history_derived_flags()
+{
+ if (m_history)
+ {
+ m_flag_events_waits_history= flag_events_waits_history;
+ m_flag_events_waits_history_long= flag_events_waits_history_long;
+ m_flag_events_stages_history= flag_events_stages_history;
+ m_flag_events_stages_history_long= flag_events_stages_history_long;
+ m_flag_events_statements_history= flag_events_statements_history;
+ m_flag_events_statements_history_long= flag_events_statements_history_long;
+ m_flag_events_transactions_history= flag_events_transactions_history;
+ m_flag_events_transactions_history_long= flag_events_transactions_history_long;
+ }
+ else
+ {
+ m_flag_events_waits_history= false;
+ m_flag_events_waits_history_long= false;
+ m_flag_events_stages_history= false;
+ m_flag_events_stages_history_long= false;
+ m_flag_events_statements_history= false;
+ m_flag_events_statements_history_long= false;
+ m_flag_events_transactions_history= false;
+ m_flag_events_transactions_history_long= false;
+ }
+}
+
+void PFS_thread::carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index)
+{
+ if (m_account != NULL)
+ {
+ m_account->carry_memory_stat_delta(delta, index);
+ return;
+ }
+
+ if (m_user != NULL)
+ {
+ m_user->carry_memory_stat_delta(delta, index);
+ /* do not return, need to process m_host below */
+ }
+
+ if (m_host != NULL)
+ {
+ m_host->carry_memory_stat_delta(delta, index);
+ return;
+ }
+
+ carry_global_memory_stat_delta(delta, index);
+}
+
+void carry_global_memory_stat_delta(PFS_memory_stat_delta *delta, uint index)
+{
+ PFS_memory_stat *stat;
+ PFS_memory_stat_delta delta_buffer;
+
+ stat= & global_instr_class_memory_array[index];
+ (void) stat->apply_delta(delta, &delta_buffer);
+}
+
/**
Create instrumentation for a thread instance.
@param klass the thread class
@@ -935,158 +519,101 @@ void PFS_thread::reset_session_connect_attrs()
PFS_thread* create_thread(PFS_thread_class *klass, const void *identity,
ulonglong processlist_id)
{
- static uint PFS_ALIGNED thread_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_thread *pfs;
+ pfs_dirty_state dirty_state;
+
+ pfs= global_thread_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ pfs->m_thread_internal_id=
+ PFS_atomic::add_u64(&thread_internal_id_counter.m_u64, 1);
+ pfs->m_parent_thread_internal_id= 0;
+ pfs->m_processlist_id= static_cast<ulong>(processlist_id);
+ pfs->m_thread_os_id= my_thread_os_id();
+ pfs->m_event_id= 1;
+ pfs->m_stmt_lock.set_allocated();
+ pfs->m_session_lock.set_allocated();
+ pfs->set_enabled(true);
+ pfs->set_history(true);
+ pfs->m_class= klass;
+ pfs->m_events_waits_current= & pfs->m_events_waits_stack[WAIT_STACK_BOTTOM];
+ pfs->m_waits_history_full= false;
+ pfs->m_waits_history_index= 0;
+ pfs->m_stages_history_full= false;
+ pfs->m_stages_history_index= 0;
+ pfs->m_statements_history_full= false;
+ pfs->m_statements_history_index= 0;
+ pfs->m_transactions_history_full= false;
+ pfs->m_transactions_history_index= 0;
+
+ pfs->reset_stats();
+ pfs->reset_session_connect_attrs();
- if (thread_full)
- {
- thread_lost++;
- return NULL;
- }
+ pfs->m_filename_hash_pins= NULL;
+ pfs->m_table_share_hash_pins= NULL;
+ pfs->m_setup_actor_hash_pins= NULL;
+ pfs->m_setup_object_hash_pins= NULL;
+ pfs->m_user_hash_pins= NULL;
+ pfs->m_account_hash_pins= NULL;
+ pfs->m_host_hash_pins= NULL;
+ pfs->m_digest_hash_pins= NULL;
+ pfs->m_program_hash_pins= NULL;
+
+ pfs->m_username_length= 0;
+ pfs->m_hostname_length= 0;
+ pfs->m_dbname_length= 0;
+ pfs->m_command= 0;
+ pfs->m_start_time= 0;
+ pfs->m_stage= 0;
+ pfs->m_stage_progress= NULL;
+ pfs->m_processlist_info[0]= '\0';
+ pfs->m_processlist_info_length= 0;
+ pfs->m_connection_type= VIO_CLOSED;
+
+ pfs->m_thd= NULL;
+ pfs->m_host= NULL;
+ pfs->m_user= NULL;
+ pfs->m_account= NULL;
+ set_thread_account(pfs);
- while (++attempts <= thread_max)
- {
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& thread_monotonic_index, 1) % thread_max;
- pfs= thread_array + index;
+ /*
+ For child waits, by default,
+ - NESTING_EVENT_ID is NULL
+ - NESTING_EVENT_TYPE is NULL
+ */
+ PFS_events_waits *child_wait= & pfs->m_events_waits_stack[0];
+ child_wait->m_event_id= 0;
- if (pfs->m_lock.is_free())
- {
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_thread_internal_id=
- PFS_atomic::add_u64(&thread_internal_id_counter, 1);
- pfs->m_parent_thread_internal_id= 0;
- pfs->m_processlist_id= (ulong)processlist_id;
- pfs->m_event_id= 1;
- pfs->m_stmt_lock.set_allocated();
- pfs->m_session_lock.set_allocated();
- pfs->m_enabled= true;
- pfs->m_class= klass;
- pfs->m_events_waits_current= & pfs->m_events_waits_stack[WAIT_STACK_BOTTOM];
- pfs->m_waits_history_full= false;
- pfs->m_waits_history_index= 0;
- pfs->m_stages_history_full= false;
- pfs->m_stages_history_index= 0;
- pfs->m_statements_history_full= false;
- pfs->m_statements_history_index= 0;
-
- pfs->reset_stats();
- pfs->reset_session_connect_attrs();
-
- pfs->m_filename_hash_pins= NULL;
- pfs->m_table_share_hash_pins= NULL;
- pfs->m_setup_actor_hash_pins= NULL;
- pfs->m_setup_object_hash_pins= NULL;
- pfs->m_user_hash_pins= NULL;
- pfs->m_account_hash_pins= NULL;
- pfs->m_host_hash_pins= NULL;
- pfs->m_digest_hash_pins= NULL;
-
- pfs->m_username_length= 0;
- pfs->m_hostname_length= 0;
- pfs->m_dbname_length= 0;
- pfs->m_command= 0;
- pfs->m_start_time= 0;
- pfs->m_stage= 0;
- pfs->m_processlist_info[0]= '\0';
- pfs->m_processlist_info_length= 0;
-
- pfs->m_host= NULL;
- pfs->m_user= NULL;
- pfs->m_account= NULL;
- set_thread_account(pfs);
-
- PFS_events_waits *child_wait;
- for (index= 0; index < WAIT_STACK_SIZE; index++)
- {
- child_wait= & pfs->m_events_waits_stack[index];
- child_wait->m_thread_internal_id= pfs->m_thread_internal_id;
- child_wait->m_event_id= 0;
- child_wait->m_end_event_id= 0;
- child_wait->m_event_type= EVENT_TYPE_STATEMENT;
- child_wait->m_wait_class= NO_WAIT_CLASS;
- }
-
- PFS_events_stages *child_stage= & pfs->m_stage_current;
- child_stage->m_thread_internal_id= pfs->m_thread_internal_id;
- child_stage->m_event_id= 0;
- child_stage->m_end_event_id= 0;
- child_stage->m_event_type= EVENT_TYPE_STATEMENT;
- child_stage->m_class= NULL;
- child_stage->m_timer_start= 0;
- child_stage->m_timer_end= 0;
- child_stage->m_source_file= NULL;
- child_stage->m_source_line= 0;
-
- PFS_events_statements *child_statement;
- for (index= 0; index < statement_stack_max; index++)
- {
- child_statement= & pfs->m_statement_stack[index];
- child_statement->m_thread_internal_id= pfs->m_thread_internal_id;
- child_statement->m_event_id= 0;
- child_statement->m_end_event_id= 0;
- child_statement->m_event_type= EVENT_TYPE_STATEMENT;
- child_statement->m_class= NULL;
- child_statement->m_timer_start= 0;
- child_statement->m_timer_end= 0;
- child_statement->m_lock_time= 0;
- child_statement->m_source_file= NULL;
- child_statement->m_source_line= 0;
- child_statement->m_current_schema_name_length= 0;
- child_statement->m_sqltext_length= 0;
-
- child_statement->m_message_text[0]= '\0';
- child_statement->m_sql_errno= 0;
- child_statement->m_sqlstate[0]= '\0';
- child_statement->m_error_count= 0;
- child_statement->m_warning_count= 0;
- child_statement->m_rows_affected= 0;
-
- child_statement->m_rows_sent= 0;
- child_statement->m_rows_examined= 0;
- child_statement->m_created_tmp_disk_tables= 0;
- child_statement->m_created_tmp_tables= 0;
- child_statement->m_select_full_join= 0;
- child_statement->m_select_full_range_join= 0;
- child_statement->m_select_range= 0;
- child_statement->m_select_range_check= 0;
- child_statement->m_select_scan= 0;
- child_statement->m_sort_merge_passes= 0;
- child_statement->m_sort_range= 0;
- child_statement->m_sort_rows= 0;
- child_statement->m_sort_scan= 0;
- child_statement->m_no_index_used= 0;
- child_statement->m_no_good_index_used= 0;
- }
- pfs->m_events_statements_count= 0;
-
- pfs->m_lock.dirty_to_allocated();
- return pfs;
- }
- }
+ /*
+ For child stages, by default,
+ - NESTING_EVENT_ID is NULL
+ - NESTING_EVENT_TYPE is NULL
+ */
+ PFS_events_stages *child_stage= & pfs->m_stage_current;
+ child_stage->m_nesting_event_id= 0;
+
+ pfs->m_events_statements_count= 0;
+ pfs->m_transaction_current.m_event_id= 0;
+
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
}
- thread_lost++;
- thread_full= true;
- return NULL;
+ return pfs;
}
PFS_mutex *sanitize_mutex(PFS_mutex *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_mutex, mutex_array, mutex_max, unsafe);
+ return global_mutex_container.sanitize(unsafe);
}
PFS_rwlock *sanitize_rwlock(PFS_rwlock *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_rwlock, rwlock_array, rwlock_max, unsafe);
+ return global_rwlock_container.sanitize(unsafe);
}
PFS_cond *sanitize_cond(PFS_cond *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_cond, cond_array, cond_max, unsafe);
+ return global_cond_container.sanitize(unsafe);
}
/**
@@ -1100,17 +627,22 @@ PFS_cond *sanitize_cond(PFS_cond *unsafe)
*/
PFS_thread *sanitize_thread(PFS_thread *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_thread, thread_array, thread_max, unsafe);
+ return global_thread_container.sanitize(unsafe);
}
PFS_file *sanitize_file(PFS_file *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_file, file_array, file_max, unsafe);
+ return global_file_container.sanitize(unsafe);
}
PFS_socket *sanitize_socket(PFS_socket *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_socket, socket_array, socket_max, unsafe);
+ return global_socket_container.sanitize(unsafe);
+}
+
+PFS_metadata_lock *sanitize_metadata_lock(PFS_metadata_lock *unsafe)
+{
+ return global_mdl_container.sanitize(unsafe);
}
/**
@@ -1181,12 +713,16 @@ void destroy_thread(PFS_thread *pfs)
lf_hash_put_pins(pfs->m_digest_hash_pins);
pfs->m_digest_hash_pins= NULL;
}
- pfs->m_lock.allocated_to_free();
- thread_full= false;
+ if (pfs->m_program_hash_pins)
+ {
+ lf_hash_put_pins(pfs->m_program_hash_pins);
+ pfs->m_program_hash_pins= NULL;
+ }
+ global_thread_container.deallocate(pfs);
}
/**
- Get the hash pins for @filename_hash.
+ Get the hash pins for @c filename_hash.
@param thread The running thread.
@returns The LF_HASH pins for the thread.
*/
@@ -1221,7 +757,7 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
LF_PINS *pins= get_filename_hash_pins(thread);
if (unlikely(pins == NULL))
{
- file_lost++;
+ global_file_container.m_lost++;
return NULL;
}
@@ -1272,6 +808,7 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
char dirbuffer[FN_REFLEN];
size_t dirlen;
const char *normalized_filename;
+ uint normalized_length;
dirlen= dirname_length(safe_filename);
if (dirlen == 0)
@@ -1288,7 +825,7 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
if (my_realpath(buffer, dirbuffer, MYF(0)) != 0)
{
- file_lost++;
+ global_file_container.m_lost++;
return NULL;
}
@@ -1302,14 +839,12 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
*buf_end= '\0';
normalized_filename= buffer;
- uint normalized_length= static_cast<uint>(strlen(normalized_filename));
+ normalized_length= (uint)strlen(normalized_filename);
PFS_file **entry;
uint retry_count= 0;
const uint retry_max= 3;
- static uint PFS_ALIGNED file_monotonic_index= 0;
- uint index;
- uint attempts= 0;
+ pfs_dirty_state dirty_state;
search:
@@ -1332,70 +867,204 @@ search:
return NULL;
}
- if (file_full)
+ pfs= global_file_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- file_lost++;
- return NULL;
- }
+ pfs->m_class= klass;
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ memcpy(pfs->m_filename, normalized_filename, normalized_length);
+ pfs->m_filename[normalized_length]= '\0';
+ pfs->m_filename_length= normalized_length;
+ pfs->m_file_stat.m_open_count= 1;
+ pfs->m_file_stat.m_io_stat.reset();
+ pfs->m_identity= (const void *)pfs;
+ pfs->m_temporary= false;
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&filename_hash, pins,
+ &pfs);
+ if (likely(res == 0))
+ {
+ if (klass->is_singleton())
+ klass->m_singleton= pfs;
+ return pfs;
+ }
- while (++attempts <= file_max)
- {
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& file_monotonic_index, 1) % file_max;
- pfs= file_array + index;
+ global_file_container.deallocate(pfs);
- if (pfs->m_lock.is_free())
+ if (res > 0)
{
- if (pfs->m_lock.free_to_dirty())
+ /* Duplicate insert by another thread */
+ if (++retry_count > retry_max)
{
- pfs->m_class= klass;
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- strncpy(pfs->m_filename, normalized_filename, normalized_length + 1);
- pfs->m_filename[normalized_length]= '\0';
- pfs->m_filename_length= normalized_length;
- pfs->m_file_stat.m_open_count= 1;
- pfs->m_file_stat.m_io_stat.reset();
- pfs->m_identity= (const void *)pfs;
-
- int res;
- res= lf_hash_insert(&filename_hash, thread->m_filename_hash_pins,
- &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- if (klass->is_singleton())
- klass->m_singleton= pfs;
- return pfs;
- }
-
- pfs->m_lock.dirty_to_free();
-
- if (res > 0)
- {
- /* Duplicate insert by another thread */
- if (++retry_count > retry_max)
- {
- /* Avoid infinite loops */
- file_lost++;
- return NULL;
- }
- goto search;
- }
-
- /* OOM in lf_hash_insert */
- file_lost++;
+ /* Avoid infinite loops */
+ global_file_container.m_lost++;
return NULL;
}
+ goto search;
}
+
+ /* OOM in lf_hash_insert */
+ global_file_container.m_lost++;
+ return NULL;
}
- file_lost++;
- file_full= true;
return NULL;
}
/**
+ Find a file instrumentation instance by name, and rename it
+ @param thread the executing instrumented thread
+ @param old_filename the file to be renamed
+ @param old_len the length in bytes of the old filename
+ @param new_filename the new file name
+ @param new_len the length in bytes of the new filename
+*/
+void find_and_rename_file(PFS_thread *thread, const char *old_filename,
+ uint old_len, const char *new_filename, uint new_len)
+{
+ PFS_file *pfs;
+
+ DBUG_ASSERT(thread != NULL);
+
+ LF_PINS *pins= get_filename_hash_pins(thread);
+ if (unlikely(pins == NULL))
+ {
+ global_file_container.m_lost++;
+ return;
+ }
+
+ /*
+ Normalize the old file name.
+ */
+ char safe_buffer[FN_REFLEN];
+ const char *safe_filename;
+
+ if (old_len >= FN_REFLEN)
+ {
+ memcpy(safe_buffer, old_filename, FN_REFLEN - 1);
+ safe_buffer[FN_REFLEN - 1]= 0;
+ safe_filename= safe_buffer;
+ }
+ else
+ safe_filename= old_filename;
+
+ char buffer[FN_REFLEN];
+ char dirbuffer[FN_REFLEN];
+ size_t dirlen;
+ const char *normalized_filename;
+ uint normalized_length;
+
+ dirlen= dirname_length(safe_filename);
+ if (dirlen == 0)
+ {
+ dirbuffer[0]= FN_CURLIB;
+ dirbuffer[1]= FN_LIBCHAR;
+ dirbuffer[2]= '\0';
+ }
+ else
+ {
+ memcpy(dirbuffer, safe_filename, dirlen);
+ dirbuffer[dirlen]= '\0';
+ }
+
+ if (my_realpath(buffer, dirbuffer, MYF(0)) != 0)
+ {
+ global_file_container.m_lost++;
+ return;
+ }
+
+ /* Append the unresolved file name to the resolved path */
+ char *ptr= buffer + strlen(buffer);
+ char *buf_end= &buffer[sizeof(buffer)-1];
+ if ((buf_end > ptr) && (*(ptr-1) != FN_LIBCHAR))
+ *ptr++= FN_LIBCHAR;
+ if (buf_end > ptr)
+ strncpy(ptr, safe_filename + dirlen, buf_end - ptr);
+ *buf_end= '\0';
+
+ normalized_filename= buffer;
+ normalized_length= (uint)strlen(normalized_filename);
+
+ PFS_file **entry;
+ entry= reinterpret_cast<PFS_file**>
+ (lf_hash_search(&filename_hash, pins,
+ normalized_filename, normalized_length));
+
+ if (entry && (entry != MY_ERRPTR))
+ pfs= *entry;
+ else
+ {
+ lf_hash_search_unpin(pins);
+ return;
+ }
+
+ lf_hash_delete(&filename_hash, pins,
+ pfs->m_filename, pfs->m_filename_length);
+
+ /*
+ Normalize the new file name.
+ */
+ if (new_len >= FN_REFLEN)
+ {
+ memcpy(safe_buffer, new_filename, FN_REFLEN - 1);
+ safe_buffer[FN_REFLEN - 1]= 0;
+ safe_filename= safe_buffer;
+ }
+ else
+ safe_filename= new_filename;
+
+ dirlen= dirname_length(safe_filename);
+ if (dirlen == 0)
+ {
+ dirbuffer[0]= FN_CURLIB;
+ dirbuffer[1]= FN_LIBCHAR;
+ dirbuffer[2]= '\0';
+ }
+ else
+ {
+ memcpy(dirbuffer, safe_filename, dirlen);
+ dirbuffer[dirlen]= '\0';
+ }
+
+ if (my_realpath(buffer, dirbuffer, MYF(0)) != 0)
+ {
+ global_file_container.m_lost++;
+ return;
+ }
+
+ /* Append the unresolved file name to the resolved path */
+ ptr= buffer + strlen(buffer);
+ buf_end= &buffer[sizeof(buffer)-1];
+ if ((buf_end > ptr) && (*(ptr-1) != FN_LIBCHAR))
+ *ptr++= FN_LIBCHAR;
+ if (buf_end > ptr)
+ strncpy(ptr, safe_filename + dirlen, buf_end - ptr);
+ *buf_end= '\0';
+
+ normalized_filename= buffer;
+ normalized_length= (uint)strlen(normalized_filename);
+
+ memcpy(pfs->m_filename, normalized_filename, normalized_length);
+ pfs->m_filename[normalized_length]= '\0';
+ pfs->m_filename_length= normalized_length;
+
+ int res;
+ res= lf_hash_insert(&filename_hash, pins, &pfs);
+
+ if (likely(res == 0))
+ return;
+ else
+ {
+ global_file_container.deallocate(pfs);
+ global_file_container.m_lost++;
+ return;
+ }
+}
+
+/**
Release instrumentation for a file instance.
@param pfs the file to release
*/
@@ -1430,8 +1099,8 @@ void destroy_file(PFS_thread *thread, PFS_file *pfs)
pfs->m_filename, pfs->m_filename_length);
if (klass->is_singleton())
klass->m_singleton= NULL;
- pfs->m_lock.allocated_to_free();
- file_full= false;
+
+ global_file_container.deallocate(pfs);
}
/**
@@ -1444,49 +1113,32 @@ void destroy_file(PFS_thread *thread, PFS_file *pfs)
PFS_table* create_table(PFS_table_share *share, PFS_thread *opening_thread,
const void *identity)
{
- static uint PFS_ALIGNED table_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_table *pfs;
-
- if (table_full)
- {
- table_lost++;
- return NULL;
- }
-
- while (++attempts <= table_max)
- {
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& table_monotonic_index, 1) % table_max;
- pfs= table_array + index;
-
- if (pfs->m_lock.is_free())
- {
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_identity= identity;
- pfs->m_share= share;
- pfs->m_io_enabled= share->m_enabled &&
- flag_global_instrumentation && global_table_io_class.m_enabled;
- pfs->m_io_timed= share->m_timed && global_table_io_class.m_timed;
- pfs->m_lock_enabled= share->m_enabled &&
- flag_global_instrumentation && global_table_lock_class.m_enabled;
- pfs->m_lock_timed= share->m_timed && global_table_lock_class.m_timed;
- pfs->m_has_io_stats= false;
- pfs->m_has_lock_stats= false;
- share->inc_refcount();
- pfs->m_table_stat.fast_reset();
- pfs->m_thread_owner= opening_thread;
- pfs->m_lock.dirty_to_allocated();
- return pfs;
- }
- }
+ pfs_dirty_state dirty_state;
+
+ pfs= global_table_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ pfs->m_identity= identity;
+ pfs->m_share= share;
+ pfs->m_io_enabled= share->m_enabled &&
+ flag_global_instrumentation && global_table_io_class.m_enabled;
+ pfs->m_io_timed= share->m_timed && global_table_io_class.m_timed;
+ pfs->m_lock_enabled= share->m_enabled &&
+ flag_global_instrumentation && global_table_lock_class.m_enabled;
+ pfs->m_lock_timed= share->m_timed && global_table_lock_class.m_timed;
+ pfs->m_has_io_stats= false;
+ pfs->m_has_lock_stats= false;
+ pfs->m_internal_lock= PFS_TL_NONE;
+ pfs->m_external_lock= PFS_TL_NONE;
+ share->inc_refcount();
+ pfs->m_table_stat.fast_reset();
+ pfs->m_thread_owner= opening_thread;
+ pfs->m_owner_event_id= opening_thread->m_event_id;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
}
- table_lost++;
- table_full= true;
- return NULL;
+ return pfs;
}
void PFS_table::sanitized_aggregate(void)
@@ -1498,18 +1150,12 @@ void PFS_table::sanitized_aggregate(void)
PFS_table_share *safe_share= sanitize_table_share(m_share);
if (safe_share != NULL)
{
- if (m_has_io_stats && m_has_lock_stats)
+ if (m_has_io_stats)
{
- safe_aggregate(& m_table_stat, safe_share);
- m_has_io_stats= false;
- m_has_lock_stats= false;
- }
- else if (m_has_io_stats)
- {
- safe_aggregate_io(& m_table_stat, safe_share);
+ safe_aggregate_io(NULL, & m_table_stat, safe_share);
m_has_io_stats= false;
}
- else if (m_has_lock_stats)
+ if (m_has_lock_stats)
{
safe_aggregate_lock(& m_table_stat, safe_share);
m_has_lock_stats= false;
@@ -1522,7 +1168,7 @@ void PFS_table::sanitized_aggregate_io(void)
PFS_table_share *safe_share= sanitize_table_share(m_share);
if (safe_share != NULL && m_has_io_stats)
{
- safe_aggregate_io(& m_table_stat, safe_share);
+ safe_aggregate_io(NULL, & m_table_stat, safe_share);
m_has_io_stats= false;
}
}
@@ -1537,29 +1183,67 @@ void PFS_table::sanitized_aggregate_lock(void)
}
}
-void PFS_table::safe_aggregate(PFS_table_stat *table_stat,
- PFS_table_share *table_share)
+void PFS_table::safe_aggregate_io(const TABLE_SHARE *optional_server_share,
+ PFS_table_stat *table_stat,
+ PFS_table_share *table_share)
{
DBUG_ASSERT(table_stat != NULL);
DBUG_ASSERT(table_share != NULL);
uint key_count= sanitize_index_count(table_share->m_key_count);
- /* Aggregate to TABLE_IO_SUMMARY, TABLE_LOCK_SUMMARY */
- table_share->m_table_stat.aggregate(table_stat, key_count);
- table_stat->fast_reset();
-}
+ PFS_table_share_index *to_stat;
+ PFS_table_io_stat *from_stat;
+ uint index;
-void PFS_table::safe_aggregate_io(PFS_table_stat *table_stat,
- PFS_table_share *table_share)
-{
- DBUG_ASSERT(table_stat != NULL);
- DBUG_ASSERT(table_share != NULL);
+ DBUG_ASSERT(key_count <= MAX_INDEXES);
- uint key_count= sanitize_index_count(table_share->m_key_count);
+ /* Aggregate stats for each index, if any */
+ for (index= 0; index < key_count; index++)
+ {
+ from_stat= & table_stat->m_index_stat[index];
+ if (from_stat->m_has_data)
+ {
+ if (optional_server_share != NULL)
+ {
+ /*
+ An instrumented thread is closing a table,
+ and capable of providing index names when
+ creating index statistics on the fly.
+ */
+ to_stat= table_share->find_or_create_index_stat(optional_server_share, index);
+ }
+ else
+ {
+ /*
+ A monitoring thread, performing TRUNCATE TABLE,
+ is asking to flush existing stats from table handles,
+ but it does not know about index names used in handles.
+ If the index stat already exists, find it and aggregate to it.
+ It the index stat does not exist yet, drop the stat and do nothing.
+ */
+ to_stat= table_share->find_index_stat(index);
+ }
+ if (to_stat != NULL)
+ {
+ /* Aggregate to TABLE_IO_SUMMARY */
+ to_stat->m_stat.aggregate(from_stat);
+ }
+ }
+ }
+
+ /* Aggregate stats for the table */
+ from_stat= & table_stat->m_index_stat[MAX_INDEXES];
+ if (from_stat->m_has_data)
+ {
+ to_stat= table_share->find_or_create_index_stat(NULL, MAX_INDEXES);
+ if (to_stat != NULL)
+ {
+ /* Aggregate to TABLE_IO_SUMMARY */
+ to_stat->m_stat.aggregate(from_stat);
+ }
+ }
- /* Aggregate to TABLE_IO_SUMMARY */
- table_share->m_table_stat.aggregate_io(table_stat, key_count);
table_stat->fast_reset_io();
}
@@ -1569,8 +1253,17 @@ void PFS_table::safe_aggregate_lock(PFS_table_stat *table_stat,
DBUG_ASSERT(table_stat != NULL);
DBUG_ASSERT(table_share != NULL);
- /* Aggregate to TABLE_LOCK_SUMMARY */
- table_share->m_table_stat.aggregate_lock(table_stat);
+ PFS_table_lock_stat *from_stat= & table_stat->m_lock_stat;
+
+ PFS_table_share_lock *to_stat;
+
+ to_stat= table_share->find_or_create_lock_stat();
+ if (to_stat != NULL)
+ {
+ /* Aggregate to TABLE_LOCK_SUMMARY */
+ to_stat->m_stat.aggregate(from_stat);
+ }
+
table_stat->fast_reset_lock();
}
@@ -1582,29 +1275,22 @@ void destroy_table(PFS_table *pfs)
{
DBUG_ASSERT(pfs != NULL);
pfs->m_share->dec_refcount();
- pfs->m_lock.allocated_to_free();
- table_full= false;
+ global_table_container.deallocate(pfs);
}
/**
Create instrumentation for a socket instance.
@param klass the socket class
- @param identity the socket descriptor
+ @param fd the socket file descriptor
+ @param addr the socket address
+ @param addr_len the socket address length
@return a socket instance, or NULL
*/
PFS_socket* create_socket(PFS_socket_class *klass, const my_socket *fd,
const struct sockaddr *addr, socklen_t addr_len)
{
- static uint PFS_ALIGNED socket_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_socket *pfs;
-
- if (socket_full)
- {
- socket_lost++;
- return NULL;
- }
+ pfs_dirty_state dirty_state;
uint fd_used= 0;
uint addr_len_used= addr_len;
@@ -1615,48 +1301,38 @@ PFS_socket* create_socket(PFS_socket_class *klass, const my_socket *fd,
if (addr_len_used > sizeof(sockaddr_storage))
addr_len_used= sizeof(sockaddr_storage);
- while (++attempts <= socket_max)
+ pfs= global_socket_container.allocate(& dirty_state);
+
+ if (pfs != NULL)
{
- index= PFS_atomic::add_u32(& socket_monotonic_index, 1) % socket_max;
- pfs= socket_array + index;
+ pfs->m_fd= fd_used;
+ /* There is no socket object, so we use the instrumentation. */
+ pfs->m_identity= pfs;
+ pfs->m_class= klass;
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ pfs->m_idle= false;
+ pfs->m_socket_stat.reset();
+ pfs->m_thread_owner= NULL;
- if (pfs->m_lock.is_free())
+ pfs->m_addr_len= addr_len_used;
+ if ((addr != NULL) && (addr_len_used > 0))
{
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_fd= fd_used;
- /* There is no socket object, so we use the instrumentation. */
- pfs->m_identity= pfs;
- pfs->m_class= klass;
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- pfs->m_idle= false;
- pfs->m_socket_stat.reset();
- pfs->m_thread_owner= NULL;
-
- pfs->m_addr_len= addr_len_used;
- if ((addr != NULL) && (addr_len_used > 0))
- {
- pfs->m_addr_len= addr_len_used;
- memcpy(&pfs->m_sock_addr, addr, addr_len_used);
- }
- else
- {
- pfs->m_addr_len= 0;
- }
-
- pfs->m_lock.dirty_to_allocated();
-
- if (klass->is_singleton())
- klass->m_singleton= pfs;
- return pfs;
- }
+ pfs->m_addr_len= addr_len_used;
+ memcpy(&pfs->m_sock_addr, addr, addr_len_used);
+ }
+ else
+ {
+ pfs->m_addr_len= 0;
}
+
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+
+ if (klass->is_singleton())
+ klass->m_singleton= pfs;
}
- socket_lost++;
- socket_full= true;
- return NULL;
+ return pfs;
}
/**
@@ -1678,67 +1354,112 @@ void destroy_socket(PFS_socket *pfs)
PFS_thread *thread= pfs->m_thread_owner;
if (thread != NULL)
{
- PFS_single_stat *event_name_array;
- event_name_array= thread->m_instr_class_waits_stats;
- uint index= pfs->m_class->m_event_name_index;
-
/* Combine stats for all operations */
PFS_single_stat stat;
pfs->m_socket_stat.m_io_stat.sum_waits(&stat);
- event_name_array[index].aggregate(&stat);
+ if (stat.m_count != 0)
+ {
+ PFS_single_stat *event_name_array;
+ event_name_array= thread->write_instr_class_waits_stats();
+ uint index= pfs->m_class->m_event_name_index;
+
+ event_name_array[index].aggregate(&stat);
+ }
}
pfs->m_socket_stat.reset();
pfs->m_thread_owner= NULL;
pfs->m_fd= 0;
pfs->m_addr_len= 0;
- pfs->m_lock.allocated_to_free();
- socket_full= false;
+
+ global_socket_container.deallocate(pfs);
+}
+
+PFS_metadata_lock* create_metadata_lock(void *identity,
+ const MDL_key *mdl_key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line)
+{
+ PFS_metadata_lock *pfs;
+ pfs_dirty_state dirty_state;
+
+ pfs= global_mdl_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ pfs->m_identity= identity;
+ pfs->m_enabled= global_metadata_class.m_enabled && flag_global_instrumentation;
+ pfs->m_timed= global_metadata_class.m_timed;
+ pfs->m_mdl_key.mdl_key_init(mdl_key);
+ pfs->m_mdl_type= mdl_type;
+ pfs->m_mdl_duration= mdl_duration;
+ pfs->m_mdl_status= mdl_status;
+ pfs->m_src_file= src_file;
+ pfs->m_src_line= src_line;
+ pfs->m_owner_thread_id= 0;
+ pfs->m_owner_event_id= 0;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ }
+
+ return pfs;
+}
+
+void destroy_metadata_lock(PFS_metadata_lock *pfs)
+{
+ DBUG_ASSERT(pfs != NULL);
+ global_mdl_container.deallocate(pfs);
+}
+
+static void fct_reset_mutex_waits(PFS_mutex *pfs)
+{
+ pfs->m_mutex_stat.reset();
}
static void reset_mutex_waits_by_instance(void)
{
- PFS_mutex *pfs= mutex_array;
- PFS_mutex *pfs_last= mutex_array + mutex_max;
+ global_mutex_container.apply_all(fct_reset_mutex_waits);
+}
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_mutex_stat.reset();
+static void fct_reset_rwlock_waits(PFS_rwlock *pfs)
+{
+ pfs->m_rwlock_stat.reset();
}
static void reset_rwlock_waits_by_instance(void)
{
- PFS_rwlock *pfs= rwlock_array;
- PFS_rwlock *pfs_last= rwlock_array + rwlock_max;
+ global_rwlock_container.apply_all(fct_reset_rwlock_waits);
+}
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_rwlock_stat.reset();
+static void fct_reset_cond_waits(PFS_cond *pfs)
+{
+ pfs->m_cond_stat.reset();
}
static void reset_cond_waits_by_instance(void)
{
- PFS_cond *pfs= cond_array;
- PFS_cond *pfs_last= cond_array + cond_max;
+ global_cond_container.apply_all(fct_reset_cond_waits);
+}
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_cond_stat.reset();
+static void fct_reset_file_waits(PFS_file *pfs)
+{
+ pfs->m_file_stat.reset();
}
static void reset_file_waits_by_instance(void)
{
- PFS_file *pfs= file_array;
- PFS_file *pfs_last= file_array + file_max;
+ global_file_container.apply_all(fct_reset_file_waits);
+}
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_file_stat.reset();
+static void fct_reset_socket_waits(PFS_socket *pfs)
+{
+ pfs->m_socket_stat.reset();
}
static void reset_socket_waits_by_instance(void)
{
- PFS_socket *pfs= socket_array;
- PFS_socket *pfs_last= socket_array + socket_max;
-
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_socket_stat.reset();
+ global_socket_container.apply_all(fct_reset_socket_waits);
}
/** Reset the wait statistics per object instance. */
@@ -1751,24 +1472,26 @@ void reset_events_waits_by_instance(void)
reset_socket_waits_by_instance();
}
+static void fct_reset_file_io(PFS_file *pfs)
+{
+ pfs->m_file_stat.m_io_stat.reset();
+}
+
/** Reset the io statistics per file instance. */
void reset_file_instance_io(void)
{
- PFS_file *pfs= file_array;
- PFS_file *pfs_last= file_array + file_max;
+ global_file_container.apply_all(fct_reset_file_io);
+}
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_file_stat.m_io_stat.reset();
+static void fct_reset_socket_io(PFS_socket *pfs)
+{
+ pfs->m_socket_stat.m_io_stat.reset();
}
/** Reset the io statistics per socket instance. */
void reset_socket_instance_io(void)
{
- PFS_socket *pfs= socket_array;
- PFS_socket *pfs_last= socket_array + socket_max;
-
- for ( ; pfs < pfs_last; pfs++)
- pfs->m_socket_stat.m_io_stat.reset();
+ global_socket_container.apply_all(fct_reset_socket_io);
}
void aggregate_all_event_names(PFS_single_stat *from_array,
@@ -1909,6 +1632,124 @@ void aggregate_all_statements(PFS_statement_stat *from_array,
}
}
+void aggregate_all_transactions(PFS_transaction_stat *from_array,
+ PFS_transaction_stat *to_array)
+{
+ DBUG_ASSERT(from_array != NULL);
+ DBUG_ASSERT(to_array != NULL);
+
+ if (from_array->count() > 0)
+ {
+ to_array->aggregate(from_array);
+ from_array->reset();
+ }
+}
+
+void aggregate_all_transactions(PFS_transaction_stat *from_array,
+ PFS_transaction_stat *to_array_1,
+ PFS_transaction_stat *to_array_2)
+{
+ DBUG_ASSERT(from_array != NULL);
+ DBUG_ASSERT(to_array_1 != NULL);
+ DBUG_ASSERT(to_array_2 != NULL);
+
+ if (from_array->count() > 0)
+ {
+ to_array_1->aggregate(from_array);
+ to_array_2->aggregate(from_array);
+ from_array->reset();
+ }
+}
+
+void aggregate_all_memory(bool alive,
+ PFS_memory_stat *from_array,
+ PFS_memory_stat *to_array)
+{
+ PFS_memory_stat *from;
+ PFS_memory_stat *from_last;
+ PFS_memory_stat *to;
+
+ from= from_array;
+ from_last= from_array + memory_class_max;
+ to= to_array;
+
+ if (alive)
+ {
+ for ( ; from < from_last ; from++, to++)
+ {
+ from->partial_aggregate_to(to);
+ }
+ }
+ else
+ {
+ for ( ; from < from_last ; from++, to++)
+ {
+ from->full_aggregate_to(to);
+ from->reset();
+ }
+ }
+}
+
+void aggregate_all_memory(bool alive,
+ PFS_memory_stat *from_array,
+ PFS_memory_stat *to_array_1,
+ PFS_memory_stat *to_array_2)
+{
+ PFS_memory_stat *from;
+ PFS_memory_stat *from_last;
+ PFS_memory_stat *to_1;
+ PFS_memory_stat *to_2;
+
+ from= from_array;
+ from_last= from_array + memory_class_max;
+ to_1= to_array_1;
+ to_2= to_array_2;
+
+ if (alive)
+ {
+ for ( ; from < from_last ; from++, to_1++, to_2++)
+ {
+ from->partial_aggregate_to(to_1, to_2);
+ }
+ }
+ else
+ {
+ for ( ; from < from_last ; from++, to_1++, to_2++)
+ {
+ from->full_aggregate_to(to_1, to_2);
+ from->reset();
+ }
+ }
+}
+
+void aggregate_thread_status(PFS_thread *thread,
+ PFS_account *safe_account,
+ PFS_user *safe_user,
+ PFS_host *safe_host)
+{
+ THD *thd= thread->m_thd;
+
+ if (thd == NULL)
+ return;
+
+ if (likely(safe_account != NULL))
+ {
+ safe_account->aggregate_status_stats(&thd->status_var);
+ return;
+ }
+
+ if (safe_user != NULL)
+ {
+ safe_user->aggregate_status_stats(&thd->status_var);
+ }
+
+ if (safe_host != NULL)
+ {
+ safe_host->aggregate_status_stats(&thd->status_var);
+ }
+ return;
+}
+
void aggregate_thread_stats(PFS_thread *thread,
PFS_account *safe_account,
PFS_user *safe_user,
@@ -1917,14 +1758,17 @@ void aggregate_thread_stats(PFS_thread *thread,
if (likely(safe_account != NULL))
{
safe_account->m_disconnected_count++;
- return;
}
if (safe_user != NULL)
+ {
safe_user->m_disconnected_count++;
+ }
if (safe_host != NULL)
+ {
safe_host->m_disconnected_count++;
+ }
/* There is no global table for connections statistics. */
return;
@@ -1935,9 +1779,28 @@ void aggregate_thread(PFS_thread *thread,
PFS_user *safe_user,
PFS_host *safe_host)
{
+ /* No HAVE_PSI_???_INTERFACE flag, waits cover multiple instrumentations */
aggregate_thread_waits(thread, safe_account, safe_user, safe_host);
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
aggregate_thread_stages(thread, safe_account, safe_user, safe_host);
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
aggregate_thread_statements(thread, safe_account, safe_user, safe_host);
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ aggregate_thread_transactions(thread, safe_account, safe_user, safe_host);
+#endif
+
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+ aggregate_thread_memory(false, thread, safe_account, safe_user, safe_host);
+#endif
+
+ if (!show_compatibility_56)
+ aggregate_thread_status(thread, safe_account, safe_user, safe_host);
+
aggregate_thread_stats(thread, safe_account, safe_user, safe_host);
}
@@ -1946,14 +1809,17 @@ void aggregate_thread_waits(PFS_thread *thread,
PFS_user *safe_user,
PFS_host *safe_host)
{
+ if (thread->read_instr_class_waits_stats() == NULL)
+ return;
+
if (likely(safe_account != NULL))
{
/*
Aggregate EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_WAITS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
*/
- aggregate_all_event_names(thread->m_instr_class_waits_stats,
- safe_account->m_instr_class_waits_stats);
+ aggregate_all_event_names(thread->write_instr_class_waits_stats(),
+ safe_account->write_instr_class_waits_stats());
return;
}
@@ -1966,9 +1832,9 @@ void aggregate_thread_waits(PFS_thread *thread,
- EVENTS_WAITS_SUMMARY_BY_HOST_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_event_names(thread->m_instr_class_waits_stats,
- safe_user->m_instr_class_waits_stats,
- safe_host->m_instr_class_waits_stats);
+ aggregate_all_event_names(thread->write_instr_class_waits_stats(),
+ safe_user->write_instr_class_waits_stats(),
+ safe_host->write_instr_class_waits_stats());
return;
}
@@ -1978,8 +1844,8 @@ void aggregate_thread_waits(PFS_thread *thread,
Aggregate EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_WAITS_SUMMARY_BY_USER_BY_EVENT_NAME, directly.
*/
- aggregate_all_event_names(thread->m_instr_class_waits_stats,
- safe_user->m_instr_class_waits_stats);
+ aggregate_all_event_names(thread->write_instr_class_waits_stats(),
+ safe_user->write_instr_class_waits_stats());
return;
}
@@ -1989,8 +1855,8 @@ void aggregate_thread_waits(PFS_thread *thread,
Aggregate EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_WAITS_SUMMARY_BY_HOST_BY_EVENT_NAME, directly.
*/
- aggregate_all_event_names(thread->m_instr_class_waits_stats,
- safe_host->m_instr_class_waits_stats);
+ aggregate_all_event_names(thread->write_instr_class_waits_stats(),
+ safe_host->write_instr_class_waits_stats());
return;
}
@@ -2003,14 +1869,17 @@ void aggregate_thread_stages(PFS_thread *thread,
PFS_user *safe_user,
PFS_host *safe_host)
{
+ if (thread->read_instr_class_stages_stats() == NULL)
+ return;
+
if (likely(safe_account != NULL))
{
/*
Aggregate EVENTS_STAGES_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_STAGES_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
*/
- aggregate_all_stages(thread->m_instr_class_stages_stats,
- safe_account->m_instr_class_stages_stats);
+ aggregate_all_stages(thread->write_instr_class_stages_stats(),
+ safe_account->write_instr_class_stages_stats());
return;
}
@@ -2023,9 +1892,9 @@ void aggregate_thread_stages(PFS_thread *thread,
- EVENTS_STAGES_SUMMARY_BY_HOST_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_stages(thread->m_instr_class_stages_stats,
- safe_user->m_instr_class_stages_stats,
- safe_host->m_instr_class_stages_stats);
+ aggregate_all_stages(thread->write_instr_class_stages_stats(),
+ safe_user->write_instr_class_stages_stats(),
+ safe_host->write_instr_class_stages_stats());
return;
}
@@ -2037,8 +1906,8 @@ void aggregate_thread_stages(PFS_thread *thread,
- EVENTS_STAGES_SUMMARY_GLOBAL_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_stages(thread->m_instr_class_stages_stats,
- safe_user->m_instr_class_stages_stats,
+ aggregate_all_stages(thread->write_instr_class_stages_stats(),
+ safe_user->write_instr_class_stages_stats(),
global_instr_class_stages_array);
return;
}
@@ -2049,8 +1918,8 @@ void aggregate_thread_stages(PFS_thread *thread,
Aggregate EVENTS_STAGES_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_STAGES_SUMMARY_BY_HOST_BY_EVENT_NAME, directly.
*/
- aggregate_all_stages(thread->m_instr_class_stages_stats,
- safe_host->m_instr_class_stages_stats);
+ aggregate_all_stages(thread->write_instr_class_stages_stats(),
+ safe_host->write_instr_class_stages_stats());
return;
}
@@ -2058,7 +1927,7 @@ void aggregate_thread_stages(PFS_thread *thread,
Aggregate EVENTS_STAGES_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_STAGES_SUMMARY_GLOBAL_BY_EVENT_NAME.
*/
- aggregate_all_stages(thread->m_instr_class_stages_stats,
+ aggregate_all_stages(thread->write_instr_class_stages_stats(),
global_instr_class_stages_array);
}
@@ -2067,14 +1936,17 @@ void aggregate_thread_statements(PFS_thread *thread,
PFS_user *safe_user,
PFS_host *safe_host)
{
+ if (thread->read_instr_class_statements_stats() == NULL)
+ return;
+
if (likely(safe_account != NULL))
{
/*
Aggregate EVENTS_STATEMENTS_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
*/
- aggregate_all_statements(thread->m_instr_class_statements_stats,
- safe_account->m_instr_class_statements_stats);
+ aggregate_all_statements(thread->write_instr_class_statements_stats(),
+ safe_account->write_instr_class_statements_stats());
return;
}
@@ -2087,9 +1959,9 @@ void aggregate_thread_statements(PFS_thread *thread,
- EVENTS_STATEMENT_SUMMARY_BY_HOST_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_statements(thread->m_instr_class_statements_stats,
- safe_user->m_instr_class_statements_stats,
- safe_host->m_instr_class_statements_stats);
+ aggregate_all_statements(thread->write_instr_class_statements_stats(),
+ safe_user->write_instr_class_statements_stats(),
+ safe_host->write_instr_class_statements_stats());
return;
}
@@ -2101,8 +1973,8 @@ void aggregate_thread_statements(PFS_thread *thread,
- EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_EVENT_NAME
in parallel.
*/
- aggregate_all_statements(thread->m_instr_class_statements_stats,
- safe_user->m_instr_class_statements_stats,
+ aggregate_all_statements(thread->write_instr_class_statements_stats(),
+ safe_user->write_instr_class_statements_stats(),
global_instr_class_statements_array);
return;
}
@@ -2113,8 +1985,8 @@ void aggregate_thread_statements(PFS_thread *thread,
Aggregate EVENTS_STATEMENTS_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_STATEMENTS_SUMMARY_BY_HOST_BY_EVENT_NAME, directly.
*/
- aggregate_all_statements(thread->m_instr_class_statements_stats,
- safe_host->m_instr_class_statements_stats);
+ aggregate_all_statements(thread->write_instr_class_statements_stats(),
+ safe_host->write_instr_class_statements_stats());
return;
}
@@ -2122,10 +1994,149 @@ void aggregate_thread_statements(PFS_thread *thread,
Aggregate EVENTS_STATEMENTS_SUMMARY_BY_THREAD_BY_EVENT_NAME
to EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_EVENT_NAME.
*/
- aggregate_all_statements(thread->m_instr_class_statements_stats,
+ aggregate_all_statements(thread->write_instr_class_statements_stats(),
global_instr_class_statements_array);
}
+void aggregate_thread_transactions(PFS_thread *thread,
+ PFS_account *safe_account,
+ PFS_user *safe_user,
+ PFS_host *safe_host)
+{
+ if (thread->read_instr_class_transactions_stats() == NULL)
+ return;
+
+ if (likely(safe_account != NULL))
+ {
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ to EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
+ */
+ aggregate_all_transactions(thread->write_instr_class_transactions_stats(),
+ safe_account->write_instr_class_transactions_stats());
+
+ return;
+ }
+
+ if ((safe_user != NULL) && (safe_host != NULL))
+ {
+ /*
+ Aggregate EVENTS_TRANSACTION_SUMMARY_BY_THREAD_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTION_SUMMARY_BY_USER_BY_EVENT_NAME
+ - EVENTS_TRANSACTION_SUMMARY_BY_HOST_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_transactions(thread->write_instr_class_transactions_stats(),
+ safe_user->write_instr_class_transactions_stats(),
+ safe_host->write_instr_class_transactions_stats());
+ return;
+ }
+
+ if (safe_user != NULL)
+ {
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME to:
+ - EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME
+ - EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_transactions(thread->write_instr_class_transactions_stats(),
+ safe_user->write_instr_class_transactions_stats(),
+ &global_transaction_stat);
+ return;
+ }
+
+ if (safe_host != NULL)
+ {
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ to EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME, directly.
+ */
+ aggregate_all_transactions(thread->write_instr_class_transactions_stats(),
+ safe_host->write_instr_class_transactions_stats());
+ return;
+ }
+
+ /*
+ Aggregate EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ to EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME.
+ */
+ aggregate_all_transactions(thread->write_instr_class_transactions_stats(),
+ &global_transaction_stat);
+}
+
+void aggregate_thread_memory(bool alive, PFS_thread *thread,
+ PFS_account *safe_account,
+ PFS_user *safe_user,
+ PFS_host *safe_host)
+{
+ if (thread->read_instr_class_memory_stats() == NULL)
+ return;
+
+ if (likely(safe_account != NULL))
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ to MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
+ */
+ aggregate_all_memory(alive,
+ thread->write_instr_class_memory_stats(),
+ safe_account->write_instr_class_memory_stats());
+
+ return;
+ }
+
+ if ((safe_user != NULL) && (safe_host != NULL))
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME
+ - MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_memory(alive,
+ thread->write_instr_class_memory_stats(),
+ safe_user->write_instr_class_memory_stats(),
+ safe_host->write_instr_class_memory_stats());
+ return;
+ }
+
+ if (safe_user != NULL)
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME to:
+ - MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME
+ - MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME
+ in parallel.
+ */
+ aggregate_all_memory(alive,
+ thread->write_instr_class_memory_stats(),
+ safe_user->write_instr_class_memory_stats(),
+ global_instr_class_memory_array);
+ return;
+ }
+
+ if (safe_host != NULL)
+ {
+ /*
+ Aggregate MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ to MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME, directly.
+ */
+ aggregate_all_memory(alive,
+ thread->write_instr_class_memory_stats(),
+ safe_host->write_instr_class_memory_stats());
+ return;
+ }
+
+ /*
+ Aggregate MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ to MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME.
+ */
+ aggregate_all_memory(alive,
+ thread->write_instr_class_memory_stats(),
+ global_instr_class_memory_array);
+}
+
void clear_thread_account(PFS_thread *thread)
{
if (thread->m_account != NULL)
@@ -2170,142 +2181,151 @@ void set_thread_account(PFS_thread *thread)
thread->m_hostname_length);
}
+static void fct_update_mutex_derived_flags(PFS_mutex *pfs)
+{
+ PFS_mutex_class *klass= sanitize_mutex_class(pfs->m_class);
+ if (likely(klass != NULL))
+ {
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ }
+ else
+ {
+ pfs->m_enabled= false;
+ pfs->m_timed= false;
+ }
+}
+
void update_mutex_derived_flags()
{
- PFS_mutex *pfs= mutex_array;
- PFS_mutex *pfs_last= mutex_array + mutex_max;
- PFS_mutex_class *klass;
+ global_mutex_container.apply_all(fct_update_mutex_derived_flags);
+}
- for ( ; pfs < pfs_last; pfs++)
+static void fct_update_rwlock_derived_flags(PFS_rwlock *pfs)
+{
+ PFS_rwlock_class *klass= sanitize_rwlock_class(pfs->m_class);
+ if (likely(klass != NULL))
{
- klass= sanitize_mutex_class(pfs->m_class);
- if (likely(klass != NULL))
- {
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- }
- else
- {
- pfs->m_enabled= false;
- pfs->m_timed= false;
- }
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ }
+ else
+ {
+ pfs->m_enabled= false;
+ pfs->m_timed= false;
}
}
void update_rwlock_derived_flags()
{
- PFS_rwlock *pfs= rwlock_array;
- PFS_rwlock *pfs_last= rwlock_array + rwlock_max;
- PFS_rwlock_class *klass;
+ global_rwlock_container.apply_all(fct_update_rwlock_derived_flags);
+}
- for ( ; pfs < pfs_last; pfs++)
+static void fct_update_cond_derived_flags(PFS_cond *pfs)
+{
+ PFS_cond_class *klass= sanitize_cond_class(pfs->m_class);
+ if (likely(klass != NULL))
{
- klass= sanitize_rwlock_class(pfs->m_class);
- if (likely(klass != NULL))
- {
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- }
- else
- {
- pfs->m_enabled= false;
- pfs->m_timed= false;
- }
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ }
+ else
+ {
+ pfs->m_enabled= false;
+ pfs->m_timed= false;
}
}
void update_cond_derived_flags()
{
- PFS_cond *pfs= cond_array;
- PFS_cond *pfs_last= cond_array + cond_max;
- PFS_cond_class *klass;
+ global_cond_container.apply_all(fct_update_cond_derived_flags);
+}
- for ( ; pfs < pfs_last; pfs++)
+static void fct_update_file_derived_flags(PFS_file *pfs)
+{
+ PFS_file_class *klass= sanitize_file_class(pfs->m_class);
+ if (likely(klass != NULL))
{
- klass= sanitize_cond_class(pfs->m_class);
- if (likely(klass != NULL))
- {
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- }
- else
- {
- pfs->m_enabled= false;
- pfs->m_timed= false;
- }
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ }
+ else
+ {
+ pfs->m_enabled= false;
+ pfs->m_timed= false;
}
}
void update_file_derived_flags()
{
- PFS_file *pfs= file_array;
- PFS_file *pfs_last= file_array + file_max;
- PFS_file_class *klass;
+ global_file_container.apply_all(fct_update_file_derived_flags);
+}
- for ( ; pfs < pfs_last; pfs++)
+void fct_update_table_derived_flags(PFS_table *pfs)
+{
+ PFS_table_share *share= sanitize_table_share(pfs->m_share);
+ if (likely(share != NULL))
{
- klass= sanitize_file_class(pfs->m_class);
- if (likely(klass != NULL))
- {
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- }
- else
- {
- pfs->m_enabled= false;
- pfs->m_timed= false;
- }
+ pfs->m_io_enabled= share->m_enabled &&
+ flag_global_instrumentation && global_table_io_class.m_enabled;
+ pfs->m_io_timed= share->m_timed && global_table_io_class.m_timed;
+ pfs->m_lock_enabled= share->m_enabled &&
+ flag_global_instrumentation && global_table_lock_class.m_enabled;
+ pfs->m_lock_timed= share->m_timed && global_table_lock_class.m_timed;
+ }
+ else
+ {
+ pfs->m_io_enabled= false;
+ pfs->m_io_timed= false;
+ pfs->m_lock_enabled= false;
+ pfs->m_lock_timed= false;
}
}
void update_table_derived_flags()
{
- PFS_table *pfs= table_array;
- PFS_table *pfs_last= table_array + table_max;
- PFS_table_share *share;
+ global_table_container.apply_all(fct_update_table_derived_flags);
+}
- for ( ; pfs < pfs_last; pfs++)
+static void fct_update_socket_derived_flags(PFS_socket *pfs)
+{
+ PFS_socket_class *klass= sanitize_socket_class(pfs->m_class);
+ if (likely(klass != NULL))
{
- share= sanitize_table_share(pfs->m_share);
- if (likely(share != NULL))
- {
- pfs->m_io_enabled= share->m_enabled &&
- flag_global_instrumentation && global_table_io_class.m_enabled;
- pfs->m_io_timed= share->m_timed && global_table_io_class.m_timed;
- pfs->m_lock_enabled= share->m_enabled &&
- flag_global_instrumentation && global_table_lock_class.m_enabled;
- pfs->m_lock_timed= share->m_timed && global_table_lock_class.m_timed;
- }
- else
- {
- pfs->m_io_enabled= false;
- pfs->m_io_timed= false;
- pfs->m_lock_enabled= false;
- pfs->m_lock_timed= false;
- }
+ pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
+ pfs->m_timed= klass->m_timed;
+ }
+ else
+ {
+ pfs->m_enabled= false;
+ pfs->m_timed= false;
}
}
void update_socket_derived_flags()
{
- PFS_socket *pfs= socket_array;
- PFS_socket *pfs_last= socket_array + socket_max;
- PFS_socket_class *klass;
+ global_socket_container.apply_all(fct_update_socket_derived_flags);
+}
- for ( ; pfs < pfs_last; pfs++)
- {
- klass= sanitize_socket_class(pfs->m_class);
- if (likely(klass != NULL))
- {
- pfs->m_enabled= klass->m_enabled && flag_global_instrumentation;
- pfs->m_timed= klass->m_timed;
- }
- else
- {
- pfs->m_enabled= false;
- pfs->m_timed= false;
- }
- }
+static void fct_update_metadata_derived_flags(PFS_metadata_lock *pfs)
+{
+ pfs->m_enabled= global_metadata_class.m_enabled && flag_global_instrumentation;
+ pfs->m_timed= global_metadata_class.m_timed;
+}
+
+void update_metadata_derived_flags()
+{
+ global_mdl_container.apply_all(fct_update_metadata_derived_flags);
+}
+
+static void fct_update_thread_derived_flags(PFS_thread *pfs)
+{
+ pfs->set_history_derived_flags();
+}
+
+void update_thread_derived_flags()
+{
+ global_thread_container.apply(fct_update_thread_derived_flags);
}
void update_instruments_derived_flags()
@@ -2316,7 +2336,8 @@ void update_instruments_derived_flags()
update_file_derived_flags();
update_table_derived_flags();
update_socket_derived_flags();
- /* nothing for stages and statements (no instances) */
+ update_metadata_derived_flags();
+ /* nothing for stages, statements and transactions (no instances) */
}
/** @} */
diff --git a/storage/perfschema/pfs_instr.h b/storage/perfschema/pfs_instr.h
index 81bc52d1d75..c15d30b50e9 100644
--- a/storage/perfschema/pfs_instr.h
+++ b/storage/perfschema/pfs_instr.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2017, 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, version 2.0,
@@ -35,11 +35,15 @@ struct PFS_file_class;
struct PFS_table_share;
struct PFS_thread_class;
struct PFS_socket_class;
+class PFS_opaque_container_page;
+
+class THD;
#include "my_global.h"
-#ifdef __WIN__
+#ifdef _WIN32
#include <winsock2.h>
-#else
+#endif
+#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#include "my_compiler.h"
@@ -49,9 +53,17 @@ struct PFS_socket_class;
#include "pfs_events_waits.h"
#include "pfs_events_stages.h"
#include "pfs_events_statements.h"
+#include "pfs_events_transactions.h"
#include "pfs_server.h"
#include "lf.h"
#include "pfs_con_slice.h"
+#include "pfs_column_types.h"
+#include "mdl.h"
+#include "violite.h" /* enum_vio_type */
+
+extern PFS_single_stat *thread_instr_class_waits_array_start;
+extern PFS_single_stat *thread_instr_class_waits_array_end;
+extern my_bool show_compatibility_56;
/**
@addtogroup Performance_schema_buffers
@@ -72,6 +84,8 @@ struct PFS_instr
bool m_enabled;
/** Timed flag. */
bool m_timed;
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
};
/** Instrumented mutex implementation. @see PSI_mutex. */
@@ -124,8 +138,6 @@ struct PFS_ALIGNED PFS_cond : public PFS_instr
const void *m_identity;
/** Condition class. */
PFS_cond_class *m_class;
- /** Instrument wait statistics. */
- PFS_single_stat m_wait_stat;
/** Condition instance usage statistics. */
PFS_cond_stat m_cond_stat;
};
@@ -146,6 +158,8 @@ struct PFS_ALIGNED PFS_file : public PFS_instr
PFS_file_class *m_class;
/** File usage statistics. */
PFS_file_stat m_file_stat;
+ /** True if a temporary file. */
+ bool m_temporary;
};
/** Instrumented table implementation. @see PSI_table. */
@@ -184,20 +198,14 @@ public:
Only use this method for handles owned by the calling code.
@sa sanitized_aggregate.
*/
- void aggregate(void)
+ void aggregate(const TABLE_SHARE *server_share)
{
- if (m_has_io_stats && m_has_lock_stats)
- {
- safe_aggregate(& m_table_stat, m_share);
- m_has_io_stats= false;
- m_has_lock_stats= false;
- }
- else if (m_has_io_stats)
+ if (m_has_io_stats)
{
- safe_aggregate_io(& m_table_stat, m_share);
+ safe_aggregate_io(server_share, & m_table_stat, m_share);
m_has_io_stats= false;
}
- else if (m_has_lock_stats)
+ if (m_has_lock_stats)
{
safe_aggregate_lock(& m_table_stat, m_share);
m_has_lock_stats= false;
@@ -227,19 +235,26 @@ public:
/** Internal lock. */
pfs_lock m_lock;
- /** Owner. */
+ /** Thread Owner. */
PFS_thread *m_thread_owner;
+ /** Event Owner. */
+ ulonglong m_owner_event_id;
/** Table share. */
PFS_table_share *m_share;
/** Table identity, typically a handler. */
const void *m_identity;
/** Table statistics. */
PFS_table_stat m_table_stat;
+ /** Current internal lock. */
+ PFS_TL_LOCK_TYPE m_internal_lock;
+ /** Current external lock. */
+ PFS_TL_LOCK_TYPE m_external_lock;
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
private:
- static void safe_aggregate(PFS_table_stat *stat,
- PFS_table_share *safe_share);
- static void safe_aggregate_io(PFS_table_stat *stat,
+ static void safe_aggregate_io(const TABLE_SHARE *optional_server_share,
+ PFS_table_stat *stat,
PFS_table_share *safe_share);
static void safe_aggregate_lock(PFS_table_stat *stat,
PFS_table_share *safe_share);
@@ -269,6 +284,24 @@ struct PFS_ALIGNED PFS_socket : public PFS_instr
PFS_socket_stat m_socket_stat;
};
+/** Instrumented metadata lock implementation. @see PSI_metadata_lock. */
+struct PFS_ALIGNED PFS_metadata_lock : public PFS_instr
+{
+ uint32 get_version()
+ { return m_lock.get_version(); }
+
+ /** Lock identity. */
+ const void *m_identity;
+ MDL_key m_mdl_key;
+ opaque_mdl_type m_mdl_type;
+ opaque_mdl_duration m_mdl_duration;
+ opaque_mdl_status m_mdl_status;
+ const char *m_src_file;
+ uint m_src_line;
+ ulonglong m_owner_thread_id;
+ ulonglong m_owner_event_id;
+};
+
/**
@def WAIT_STACK_LOGICAL_SIZE
Maximum number of nested waits.
@@ -293,7 +326,7 @@ struct PFS_ALIGNED PFS_socket : public PFS_instr
/**
@def WAIT_STACK_BOTTOM
Maximum number dummy waits records.
- One dummy record is reserved for the parent stage / statement,
+ One dummy record is reserved for the parent stage / statement / transaction,
at the bottom of the wait stack.
*/
#define WAIT_STACK_BOTTOM 1
@@ -307,75 +340,84 @@ struct PFS_ALIGNED PFS_socket : public PFS_instr
extern uint statement_stack_max;
/** Max size of the digests token array. */
extern size_t pfs_max_digest_length;
+/** Max size of SQL TEXT. */
+extern size_t pfs_max_sqltext;
-/**
- @def PFS_MAX_ALLOC_RETRY
- Maximum number of times the code attempts to allocate an item
- from internal buffers, before giving up.
-*/
-#define PFS_MAX_ALLOC_RETRY 1000
+/** Instrumented thread implementation. @see PSI_thread. */
+struct PFS_ALIGNED PFS_thread : PFS_connection_slice
+{
+ static PFS_thread* get_current_thread(void);
-/** The maximun number of passes in @sa PFS_scan. */
-#define PFS_MAX_SCAN_PASS 2
+ /** Thread instrumentation flag. */
+ bool m_enabled;
+ /** Thread history instrumentation flag. */
+ bool m_history;
-/**
- Helper to scan circular buffers.
- Given a buffer of size [0, max_size - 1],
- and a random starting point in the buffer,
- this helper returns up to two [first, last -1] intervals that:
- - fit into the [0, max_size - 1] range,
- - have a maximum combined length of at most PFS_MAX_ALLOC_RETRY.
-*/
-struct PFS_scan
-{
-public:
/**
- Initialize a new scan.
- @param random a random index to start from
- @param max_size the max size of the interval to scan
+ Derived flag flag_events_waits_history, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_WAITS_HISTORY].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
*/
- void init(uint random, uint max_size);
-
+ bool m_flag_events_waits_history;
/**
- Predicate, has a next pass.
- @return true if there is a next pass to perform.
+ Derived flag flag_events_waits_history_long, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_WAITS_HISTORY_LONG].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
*/
- bool has_pass() const
- { return (m_pass < m_pass_max); }
-
+ bool m_flag_events_waits_history_long;
/**
- Iterator, proceed to the next pass.
+ Derived flag flag_events_stages_history, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_STAGES_HISTORY].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
*/
- void next_pass()
- { m_pass++; }
-
- /** First index for this pass. */
- uint first() const
- { return m_first[m_pass]; }
-
- /** Last index for this pass. */
- uint last() const
- { return m_last[m_pass]; }
-
-private:
- /** Current pass. */
- uint m_pass;
- /** Maximum number of passes. */
- uint m_pass_max;
- /** First element for each pass. */
- uint m_first[PFS_MAX_SCAN_PASS];
- /** Last element for each pass. */
- uint m_last[PFS_MAX_SCAN_PASS];
-};
-
-
-/** Instrumented thread implementation. @see PSI_thread. */
-struct PFS_ALIGNED PFS_thread : PFS_connection_slice
-{
- static PFS_thread* get_current_thread(void);
+ bool m_flag_events_stages_history;
+ /**
+ Derived flag flag_events_stages_history_long, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_STAGES_HISTORY_LONG].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
+ */
+ bool m_flag_events_stages_history_long;
+ /**
+ Derived flag flag_events_statements_history, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_STATEMENTS_HISTORY].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
+ */
+ bool m_flag_events_statements_history;
+ /**
+ Derived flag flag_events_statements_history_long, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_STATEMENTS_HISTORY_LONG].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
+ */
+ bool m_flag_events_statements_history_long;
+ /**
+ Derived flag flag_events_transactions_history, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_TRANSACTIONS_HISTORY].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
+ */
+ bool m_flag_events_transactions_history;
+ /**
+ Derived flag flag_events_transactions_history_long, per thread.
+ Cached computation of
+ TABLE SETUP_CONSUMERS[EVENTS_TRANSACTIONS_HISTORY_LONG].ENABLED == 'YES'
+ AND
+ TABLE THREADS[THREAD_ID].HISTORY == 'YES'
+ */
+ bool m_flag_events_transactions_history_long;
- /** Thread instrumentation flag. */
- bool m_enabled;
/** Current wait event in the event stack. */
PFS_events_waits *m_events_waits_current;
/** Event ID counter */
@@ -404,18 +446,22 @@ struct PFS_ALIGNED PFS_thread : PFS_connection_slice
LF_PINS *m_account_hash_pins;
/** Pins for digest_hash. */
LF_PINS *m_digest_hash_pins;
+ /** Pins for routine_hash. */
+ LF_PINS *m_program_hash_pins;
/** Internal thread identifier, unique. */
ulonglong m_thread_internal_id;
/** Parent internal thread identifier. */
ulonglong m_parent_thread_internal_id;
/** External (SHOW PROCESSLIST) thread identifier, not unique. */
ulong m_processlist_id;
+ /** External (Operating system) thread identifier, if any. */
+ uint32 m_thread_os_id;
/** Thread class. */
PFS_thread_class *m_class;
/**
Stack of events waits.
This member holds the data for the table PERFORMANCE_SCHEMA.EVENTS_WAITS_CURRENT.
- Note that stack[0] is a dummy record that represents the parent stage/statement.
+ Note that stack[0] is a dummy record that represents the parent stage/statement/transaction.
For example, assuming the following tree:
- STAGE ID 100
- WAIT ID 101, parent STAGE 100
@@ -475,12 +521,24 @@ struct PFS_ALIGNED PFS_thread : PFS_connection_slice
*/
PFS_events_statements *m_statements_history;
+ /** True if the circular buffer @c m_transactions_history is full. */
+ bool m_transactions_history_full;
+ /** Current index in the circular buffer @c m_transactions_history. */
+ uint m_transactions_history_index;
+ /**
+ Statements history circular buffer.
+ This member holds the data for the table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_HISTORY.
+ */
+ PFS_events_transactions *m_transactions_history;
+
/**
Internal lock, for session attributes.
Statement attributes are expected to be updated in frequently,
typically per session execution.
*/
pfs_lock m_session_lock;
+
/**
User name.
Protected by @c m_session_lock.
@@ -513,6 +571,8 @@ struct PFS_ALIGNED PFS_thread : PFS_connection_slice
uint m_dbname_length;
/** Current command. */
int m_command;
+ /** Connection type. */
+ enum_vio_type m_connection_type;
/** Start time. */
time_t m_start_time;
/**
@@ -523,6 +583,8 @@ struct PFS_ALIGNED PFS_thread : PFS_connection_slice
pfs_lock m_stmt_lock;
/** Processlist state (derived from stage). */
PFS_stage_key m_stage;
+ /** Current stage progress. */
+ PSI_stage_progress* m_stage_progress;
/**
Processlist info.
Protected by @c m_stmt_lock.
@@ -540,6 +602,9 @@ struct PFS_ALIGNED PFS_thread : PFS_connection_slice
uint m_events_statements_count;
PFS_events_statements *m_statement_stack;
+ PFS_events_transactions m_transaction_current;
+
+ THD *m_thd;
PFS_host *m_host;
PFS_user *m_user;
PFS_account *m_account;
@@ -562,10 +627,28 @@ struct PFS_ALIGNED PFS_thread : PFS_connection_slice
Protected by @c m_session_lock.
*/
uint m_session_connect_attrs_cs_number;
+
+ void carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index);
+
+ void set_enabled(bool enabled)
+ {
+ m_enabled= enabled;
+ }
+
+ void set_history(bool history)
+ {
+ m_history= history;
+ set_history_derived_flags();
+ }
+
+ void set_history_derived_flags();
};
+void carry_global_memory_stat_delta(PFS_memory_stat_delta *delta, uint index);
+
extern PFS_stage_stat *global_instr_class_stages_array;
extern PFS_statement_stat *global_instr_class_statements_array;
+extern PFS_memory_stat *global_instr_class_memory_array;
PFS_mutex *sanitize_mutex(PFS_mutex *unsafe);
PFS_rwlock *sanitize_rwlock(PFS_rwlock *unsafe);
@@ -573,10 +656,11 @@ PFS_cond *sanitize_cond(PFS_cond *unsafe);
PFS_thread *sanitize_thread(PFS_thread *unsafe);
PFS_file *sanitize_file(PFS_file *unsafe);
PFS_socket *sanitize_socket(PFS_socket *unsafe);
+PFS_metadata_lock *sanitize_metadata_lock(PFS_metadata_lock *unsafe);
int init_instruments(const PFS_global_param *param);
void cleanup_instruments();
-int init_file_hash();
+int init_file_hash(const PFS_global_param *param);
void cleanup_file_hash();
PFS_mutex* create_mutex(PFS_mutex_class *mutex_class, const void *identity);
void destroy_mutex(PFS_mutex *pfs);
@@ -592,6 +676,9 @@ void destroy_thread(PFS_thread *pfs);
PFS_file* find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
const char *filename, uint len, bool create);
+void find_and_rename_file(PFS_thread *thread, const char *old_filename,
+ uint old_len, const char *new_filename,
+ uint new_len);
void release_file(PFS_file *pfs);
void destroy_file(PFS_thread *thread, PFS_file *pfs);
@@ -605,27 +692,23 @@ PFS_socket* create_socket(PFS_socket_class *socket_class,
socklen_t addr_len);
void destroy_socket(PFS_socket *pfs);
+PFS_metadata_lock* create_metadata_lock(void *identity,
+ const MDL_key *mdl_key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line);
+void destroy_metadata_lock(PFS_metadata_lock *pfs);
+
/* For iterators and show status. */
-extern ulong mutex_max;
-extern ulong mutex_lost;
-extern ulong rwlock_max;
-extern ulong rwlock_lost;
-extern ulong cond_max;
-extern ulong cond_lost;
-extern ulong thread_max;
-extern ulong thread_lost;
-extern ulong file_max;
-extern ulong file_lost;
extern long file_handle_max;
extern ulong file_handle_lost;
-extern ulong table_max;
-extern ulong table_lost;
-extern ulong socket_max;
-extern ulong socket_lost;
extern ulong events_waits_history_per_thread;
extern ulong events_stages_history_per_thread;
extern ulong events_statements_history_per_thread;
+extern ulong events_transactions_history_per_thread;
extern ulong locker_lost;
extern ulong statement_lost;
extern ulong session_connect_attrs_lost;
@@ -633,14 +716,7 @@ extern ulong session_connect_attrs_size_per_thread;
/* Exposing the data directly, for iterators. */
-extern PFS_mutex *mutex_array;
-extern PFS_rwlock *rwlock_array;
-extern PFS_cond *cond_array;
-extern PFS_thread *thread_array;
-extern PFS_file *file_array;
extern PFS_file **file_handle_array;
-extern PFS_table *table_array;
-extern PFS_socket *socket_array;
void reset_events_waits_by_instance();
void reset_file_instance_io();
@@ -664,6 +740,20 @@ void aggregate_all_statements(PFS_statement_stat *from_array,
PFS_statement_stat *to_array_1,
PFS_statement_stat *to_array_2);
+void aggregate_all_transactions(PFS_transaction_stat *from_array,
+ PFS_transaction_stat *to_array);
+void aggregate_all_transactions(PFS_transaction_stat *from_array,
+ PFS_transaction_stat *to_array_1,
+ PFS_transaction_stat *to_array_2);
+
+void aggregate_all_memory(bool alive,
+ PFS_memory_stat *from_array,
+ PFS_memory_stat *to_array);
+void aggregate_all_memory(bool alive,
+ PFS_memory_stat *from_array,
+ PFS_memory_stat *to_array_1,
+ PFS_memory_stat *to_array_2);
+
void aggregate_thread(PFS_thread *thread,
PFS_account *safe_account,
PFS_user *safe_user,
@@ -680,6 +770,21 @@ void aggregate_thread_statements(PFS_thread *thread,
PFS_account *safe_account,
PFS_user *safe_user,
PFS_host *safe_host);
+void aggregate_thread_transactions(PFS_thread *thread,
+ PFS_account *safe_account,
+ PFS_user *safe_user,
+ PFS_host *safe_host);
+
+void aggregate_thread_memory(bool alive, PFS_thread *thread,
+ PFS_account *safe_account,
+ PFS_user *safe_user,
+ PFS_host *safe_host);
+
+void aggregate_thread_status(PFS_thread *thread,
+ PFS_account *safe_account,
+ PFS_user *safe_user,
+ PFS_host *safe_host);
+
void clear_thread_account(PFS_thread *thread);
void set_thread_account(PFS_thread *thread);
@@ -695,6 +800,10 @@ void update_file_derived_flags();
void update_table_derived_flags();
/** Update derived flags for all socket instances. */
void update_socket_derived_flags();
+/** Update derived flags for all metadata instances. */
+void update_metadata_derived_flags();
+/** Update derived flags for all thread instances. */
+void update_thread_derived_flags();
/** Update derived flags for all instruments. */
void update_instruments_derived_flags();
diff --git a/storage/perfschema/pfs_instr_class.cc b/storage/perfschema/pfs_instr_class.cc
index 2757369cad3..491dd5bacea 100644
--- a/storage/perfschema/pfs_instr_class.cc
+++ b/storage/perfschema/pfs_instr_class.cc
@@ -28,15 +28,17 @@
#include "my_global.h"
#include "my_sys.h"
-#include "structs.h"
#include "table.h"
#include "pfs_instr_class.h"
+#include "pfs_builtin_memory.h"
#include "pfs_instr.h"
#include "pfs_global.h"
#include "pfs_timer.h"
#include "pfs_events_waits.h"
#include "pfs_setup_object.h"
#include "pfs_atomic.h"
+#include "pfs_program.h"
+#include "pfs_buffer_container.h"
#include "mysql/psi/mysql_thread.h"
#include "lf.h"
@@ -49,11 +51,16 @@
*/
/**
- PFS_INSTRUMENT option settings array and associated state variable to
- serialize access during shutdown.
+ Global performance schema flag.
+ Indicate if the performance schema is enabled.
+ This flag is set at startup, and never changes.
+*/
+my_bool pfs_enabled= TRUE;
+
+/**
+ PFS_INSTRUMENT option settings array
*/
-DYNAMIC_ARRAY pfs_instr_config_array;
-int pfs_instr_config_state= PFS_INSTR_CONFIG_NOT_INITIALIZED;
+Pfs_instr_config_array *pfs_instr_config_array= NULL;
static void configure_instr_class(PFS_instr_class *entry);
@@ -69,12 +76,12 @@ static void init_instr_class(PFS_instr_class *klass,
- the performance schema initialization
- a plugin initialization
*/
-static volatile uint32 mutex_class_dirty_count= 0;
-static volatile uint32 mutex_class_allocated_count= 0;
-static volatile uint32 rwlock_class_dirty_count= 0;
-static volatile uint32 rwlock_class_allocated_count= 0;
-static volatile uint32 cond_class_dirty_count= 0;
-static volatile uint32 cond_class_allocated_count= 0;
+static uint32 mutex_class_dirty_count= 0;
+static uint32 mutex_class_allocated_count= 0;
+static uint32 rwlock_class_dirty_count= 0;
+static uint32 rwlock_class_allocated_count= 0;
+static uint32 cond_class_dirty_count= 0;
+static uint32 cond_class_allocated_count= 0;
/** Size of the mutex class array. @sa mutex_class_array */
ulong mutex_class_max= 0;
@@ -104,14 +111,21 @@ ulong stage_class_lost= 0;
ulong statement_class_max= 0;
/** Number of statement class lost. @sa statement_class_array */
ulong statement_class_lost= 0;
-/** Size of the table share array. @sa table_share_array */
-ulong table_share_max= 0;
-/** Number of table share lost. @sa table_share_array */
-ulong table_share_lost= 0;
/** Size of the socket class array. @sa socket_class_array */
ulong socket_class_max= 0;
/** Number of socket class lost. @sa socket_class_array */
ulong socket_class_lost= 0;
+/** Size of the memory class array. @sa memory_class_array */
+ulong memory_class_max= 0;
+/** Number of memory class lost. @sa memory_class_array */
+ulong memory_class_lost= 0;
+
+/**
+ Number of transaction classes. Although there is only one transaction class,
+ this is used for sizing by other event classes.
+ @sa global_transaction_class
+*/
+ulong transaction_class_max= 0;
PFS_mutex_class *mutex_class_array= NULL;
PFS_rwlock_class *rwlock_class_array= NULL;
@@ -123,47 +137,45 @@ PFS_cond_class *cond_class_array= NULL;
- the performance schema initialization
- a plugin initialization
*/
-static volatile uint32 thread_class_dirty_count= 0;
-static volatile uint32 thread_class_allocated_count= 0;
+static uint32 thread_class_dirty_count= 0;
+static uint32 thread_class_allocated_count= 0;
static PFS_thread_class *thread_class_array= NULL;
-/**
- Table instance array.
- @sa table_share_max
- @sa table_share_lost
- @sa table_share_hash
-*/
-PFS_table_share *table_share_array= NULL;
-
PFS_ALIGNED PFS_single_stat global_idle_stat;
PFS_ALIGNED PFS_table_io_stat global_table_io_stat;
PFS_ALIGNED PFS_table_lock_stat global_table_lock_stat;
+PFS_ALIGNED PFS_single_stat global_metadata_stat;
+PFS_ALIGNED PFS_transaction_stat global_transaction_stat;
PFS_ALIGNED PFS_instr_class global_table_io_class;
PFS_ALIGNED PFS_instr_class global_table_lock_class;
PFS_ALIGNED PFS_instr_class global_idle_class;
+PFS_ALIGNED PFS_instr_class global_metadata_class;
+PFS_ALIGNED PFS_transaction_class global_transaction_class;
/** Class-timer map */
enum_timer_name *class_timers[] =
-{&wait_timer, /* PFS_CLASS_NONE */
- &wait_timer, /* PFS_CLASS_MUTEX */
- &wait_timer, /* PFS_CLASS_RWLOCK */
- &wait_timer, /* PFS_CLASS_COND */
- &wait_timer, /* PFS_CLASS_FILE */
- &wait_timer, /* PFS_CLASS_TABLE */
- &stage_timer, /* PFS_CLASS_STAGE */
- &statement_timer, /* PFS_CLASS_STATEMENT */
- &wait_timer, /* PFS_CLASS_SOCKET */
- &wait_timer, /* PFS_CLASS_TABLE_IO */
- &wait_timer, /* PFS_CLASS_TABLE_LOCK */
- &idle_timer /* PFS_CLASS_IDLE */
+{&wait_timer, /* PFS_CLASS_NONE */
+ &wait_timer, /* PFS_CLASS_MUTEX */
+ &wait_timer, /* PFS_CLASS_RWLOCK */
+ &wait_timer, /* PFS_CLASS_COND */
+ &wait_timer, /* PFS_CLASS_FILE */
+ &wait_timer, /* PFS_CLASS_TABLE */
+ &stage_timer, /* PFS_CLASS_STAGE */
+ &statement_timer, /* PFS_CLASS_STATEMENT */
+ &transaction_timer, /* PFS_CLASS_TRANSACTION */
+ &wait_timer, /* PFS_CLASS_SOCKET */
+ &wait_timer, /* PFS_CLASS_TABLE_IO */
+ &wait_timer, /* PFS_CLASS_TABLE_LOCK */
+ &idle_timer, /* PFS_CLASS_IDLE */
+ &wait_timer, /* PFS_CLASS_METADATA */
+ &wait_timer /* PFS_CLASS_MEMORY */
};
/**
Hash index for instrumented table shares.
This index is searched by table fully qualified name (@c PFS_table_share_key),
and points to instrumented table shares (@c PFS_table_share).
- @sa table_share_array
@sa PFS_table_share_key
@sa PFS_table_share
@sa table_share_hash_get_key
@@ -173,26 +185,31 @@ LF_HASH table_share_hash;
/** True if table_share_hash is initialized. */
static bool table_share_hash_inited= false;
-static volatile uint32 file_class_dirty_count= 0;
-static volatile uint32 file_class_allocated_count= 0;
+static uint32 file_class_dirty_count= 0;
+static uint32 file_class_allocated_count= 0;
PFS_file_class *file_class_array= NULL;
-static volatile uint32 stage_class_dirty_count= 0;
-static volatile uint32 stage_class_allocated_count= 0;
+static uint32 stage_class_dirty_count= 0;
+static uint32 stage_class_allocated_count= 0;
static PFS_stage_class *stage_class_array= NULL;
-static volatile uint32 statement_class_dirty_count= 0;
-static volatile uint32 statement_class_allocated_count= 0;
+static uint32 statement_class_dirty_count= 0;
+static uint32 statement_class_allocated_count= 0;
static PFS_statement_class *statement_class_array= NULL;
-static volatile uint32 socket_class_dirty_count= 0;
-static volatile uint32 socket_class_allocated_count= 0;
+static uint32 socket_class_dirty_count= 0;
+static uint32 socket_class_allocated_count= 0;
static PFS_socket_class *socket_class_array= NULL;
+static uint32 memory_class_dirty_count= 0;
+static uint32 memory_class_allocated_count= 0;
+
+static PFS_memory_class *memory_class_array= NULL;
+
uint mutex_class_start= 0;
uint rwlock_class_start= 0;
uint cond_class_start= 0;
@@ -202,7 +219,8 @@ uint socket_class_start= 0;
void init_event_name_sizing(const PFS_global_param *param)
{
- mutex_class_start= 3; /* global table io, table lock, idle */
+ /* global table io, table lock, idle, metadata */
+ mutex_class_start= COUNT_GLOBAL_EVENT_INDEX;
rwlock_class_start= mutex_class_start + param->m_mutex_class_sizing;
cond_class_start= rwlock_class_start + param->m_rwlock_class_sizing;
file_class_start= cond_class_start + param->m_cond_class_sizing;
@@ -223,12 +241,29 @@ void register_global_classes()
0, PFS_CLASS_TABLE_LOCK);
global_table_lock_class.m_event_name_index= GLOBAL_TABLE_LOCK_EVENT_INDEX;
configure_instr_class(&global_table_lock_class);
-
+
/* Idle class */
init_instr_class(&global_idle_class, "idle", 4,
0, PFS_CLASS_IDLE);
global_idle_class.m_event_name_index= GLOBAL_IDLE_EVENT_INDEX;
configure_instr_class(&global_idle_class);
+
+ /* Metadata class */
+ init_instr_class(&global_metadata_class, "wait/lock/metadata/sql/mdl", 26,
+ 0, PFS_CLASS_METADATA);
+ global_metadata_class.m_event_name_index= GLOBAL_METADATA_EVENT_INDEX;
+ global_metadata_class.m_enabled= false; /* Disabled by default */
+ global_metadata_class.m_timed= false;
+ configure_instr_class(&global_metadata_class);
+
+ /* Transaction class */
+ init_instr_class(&global_transaction_class, "transaction", 11,
+ 0, PFS_CLASS_TRANSACTION);
+ global_transaction_class.m_event_name_index= GLOBAL_TRANSACTION_INDEX;
+ global_transaction_class.m_enabled= false; /* Disabled by default */
+ global_transaction_class.m_timed= false;
+ configure_instr_class(&global_transaction_class);
+ transaction_class_max= 1; /* used for sizing by other event classes */
}
/**
@@ -256,24 +291,30 @@ int init_sync_class(uint mutex_class_sizing,
if (mutex_class_max > 0)
{
- mutex_class_array= PFS_MALLOC_ARRAY(mutex_class_max, sizeof(PFS_mutex_class),
- PFS_mutex_class, MYF(MY_ZEROFILL));
+ mutex_class_array= PFS_MALLOC_ARRAY(& builtin_memory_mutex_class,
+ mutex_class_max,
+ sizeof(PFS_mutex_class), PFS_mutex_class,
+ MYF(MY_ZEROFILL));
if (unlikely(mutex_class_array == NULL))
return 1;
}
if (rwlock_class_max > 0)
{
- rwlock_class_array= PFS_MALLOC_ARRAY(rwlock_class_max, sizeof(PFS_rwlock_class),
- PFS_rwlock_class, MYF(MY_ZEROFILL));
+ rwlock_class_array= PFS_MALLOC_ARRAY(& builtin_memory_rwlock_class,
+ rwlock_class_max,
+ sizeof(PFS_rwlock_class), PFS_rwlock_class,
+ MYF(MY_ZEROFILL));
if (unlikely(rwlock_class_array == NULL))
return 1;
}
if (cond_class_max > 0)
{
- cond_class_array= PFS_MALLOC_ARRAY(cond_class_max, sizeof(PFS_cond_class),
- PFS_cond_class, MYF(MY_ZEROFILL));
+ cond_class_array= PFS_MALLOC_ARRAY(& builtin_memory_cond_class,
+ cond_class_max,
+ sizeof(PFS_cond_class), PFS_cond_class,
+ MYF(MY_ZEROFILL));
if (unlikely(cond_class_array == NULL))
return 1;
}
@@ -284,13 +325,21 @@ int init_sync_class(uint mutex_class_sizing,
/** Cleanup the instrument synch class buffers. */
void cleanup_sync_class(void)
{
- pfs_free(mutex_class_array);
+ PFS_FREE_ARRAY(& builtin_memory_mutex_class,
+ mutex_class_max, sizeof(PFS_mutex_class),
+ mutex_class_array);
mutex_class_array= NULL;
mutex_class_dirty_count= mutex_class_allocated_count= mutex_class_max= 0;
- pfs_free(rwlock_class_array);
+
+ PFS_FREE_ARRAY(& builtin_memory_rwlock_class,
+ rwlock_class_max, sizeof(PFS_rwlock_class),
+ rwlock_class_array);
rwlock_class_array= NULL;
rwlock_class_dirty_count= rwlock_class_allocated_count= rwlock_class_max= 0;
- pfs_free(cond_class_array);
+
+ PFS_FREE_ARRAY(& builtin_memory_cond_class,
+ cond_class_max, sizeof(PFS_cond_class),
+ cond_class_array);
cond_class_array= NULL;
cond_class_dirty_count= cond_class_allocated_count= cond_class_max= 0;
}
@@ -309,8 +358,10 @@ int init_thread_class(uint thread_class_sizing)
if (thread_class_max > 0)
{
- thread_class_array= PFS_MALLOC_ARRAY(thread_class_max, sizeof(PFS_thread_class),
- PFS_thread_class, MYF(MY_ZEROFILL));
+ thread_class_array= PFS_MALLOC_ARRAY(& builtin_memory_thread_class,
+ thread_class_max,
+ sizeof(PFS_thread_class), PFS_thread_class,
+ MYF(MY_ZEROFILL));
if (unlikely(thread_class_array == NULL))
result= 1;
}
@@ -323,7 +374,9 @@ int init_thread_class(uint thread_class_sizing)
/** Cleanup the thread class buffers. */
void cleanup_thread_class(void)
{
- pfs_free(thread_class_array);
+ PFS_FREE_ARRAY(& builtin_memory_thread_class,
+ thread_class_max, sizeof(PFS_thread_class),
+ thread_class_array);
thread_class_array= NULL;
thread_class_dirty_count= thread_class_allocated_count= 0;
thread_class_max= 0;
@@ -336,29 +389,16 @@ void cleanup_thread_class(void)
*/
int init_table_share(uint table_share_sizing)
{
- int result= 0;
- table_share_max= table_share_sizing;
- table_share_lost= 0;
-
- if (table_share_max > 0)
- {
- table_share_array= PFS_MALLOC_ARRAY(table_share_max, sizeof(PFS_table_share),
- PFS_table_share, MYF(MY_ZEROFILL));
- if (unlikely(table_share_array == NULL))
- result= 1;
- }
- else
- table_share_array= NULL;
+ if (global_table_share_container.init(table_share_sizing))
+ return 1;
- return result;
+ return 0;
}
/** Cleanup the table share buffers. */
void cleanup_table_share(void)
{
- pfs_free(table_share_array);
- table_share_array= NULL;
- table_share_max= 0;
+ global_table_share_container.cleanup();
}
C_MODE_START
@@ -380,13 +420,12 @@ static uchar *table_share_hash_get_key(const uchar *entry, size_t *length,
C_MODE_END
/** Initialize the table share hash table. */
-int init_table_share_hash(void)
+int init_table_share_hash(const PFS_global_param *param)
{
- if ((! table_share_hash_inited) && (table_share_max > 0))
+ if ((! table_share_hash_inited) && (param->m_table_share_sizing != 0))
{
lf_hash_init(&table_share_hash, sizeof(PFS_table_share*), LF_HASH_UNIQUE,
0, 0, table_share_hash_get_key, &my_charset_bin);
- /* table_share_hash.size= table_share_max; */
table_share_hash_inited= true;
}
return 0;
@@ -429,8 +468,8 @@ LF_PINS* get_table_share_hash_pins(PFS_thread *thread)
*/
static void set_table_share_key(PFS_table_share_key *key,
bool temporary,
- const char *schema_name, uint schema_name_length,
- const char *table_name, uint table_name_length)
+ const char *schema_name, size_t schema_name_length,
+ const char *table_name, size_t table_name_length)
{
DBUG_ASSERT(schema_name_length <= NAME_LEN);
DBUG_ASSERT(table_name_length <= NAME_LEN);
@@ -459,13 +498,315 @@ static void set_table_share_key(PFS_table_share_key *key,
}
}
+/**
+ Find an existing table share lock instrumentation.
+ @return a table share lock.
+*/
+PFS_table_share_lock*
+PFS_table_share::find_lock_stat() const
+{
+ PFS_table_share *that= const_cast<PFS_table_share*>(this);
+ void *addr= & that->m_race_lock_stat;
+ void * volatile * typed_addr= static_cast<void * volatile *>(addr);
+ void *ptr;
+
+ /* Atomic Load */
+ ptr= my_atomic_loadptr(typed_addr);
+
+ PFS_table_share_lock *pfs;
+ pfs= static_cast<PFS_table_share_lock *>(ptr);
+ return pfs;
+}
+
+/**
+ Find or create a table share lock instrumentation.
+ @return a table share lock, or NULL.
+*/
+PFS_table_share_lock*
+PFS_table_share::find_or_create_lock_stat()
+{
+ void *addr= & this->m_race_lock_stat;
+ void * volatile * typed_addr= static_cast<void * volatile *>(addr);
+ void *ptr;
+
+ /* (1) Atomic Load */
+ ptr= my_atomic_loadptr(typed_addr);
+
+ PFS_table_share_lock *pfs;
+ if (ptr != NULL)
+ {
+ pfs= static_cast<PFS_table_share_lock *>(ptr);
+ return pfs;
+ }
+
+ /* (2) Create a lock stat */
+ pfs= create_table_share_lock_stat();
+ if (pfs == NULL)
+ return NULL;
+ pfs->m_owner= this;
+
+ void *old_ptr= NULL;
+ ptr= pfs;
+
+ /* (3) Atomic CAS */
+ if (my_atomic_casptr(typed_addr, & old_ptr, ptr))
+ {
+ /* Ok. */
+ return pfs;
+ }
+
+ /* Collision with another thread that also executed (2) and (3). */
+ release_table_share_lock_stat(pfs);
+
+ pfs= static_cast<PFS_table_share_lock *>(old_ptr);
+ return pfs;
+}
+
+/** Destroy a table share lock instrumentation. */
+void PFS_table_share::destroy_lock_stat()
+{
+ void *addr= & this->m_race_lock_stat;
+ void * volatile * typed_addr= static_cast<void * volatile *>(addr);
+ void *new_ptr= NULL;
+ void *old_ptr;
+
+ old_ptr= my_atomic_fasptr(typed_addr, new_ptr);
+ if (old_ptr != NULL)
+ {
+ PFS_table_share_lock *pfs;
+ pfs= static_cast<PFS_table_share_lock *>(old_ptr);
+ release_table_share_lock_stat(pfs);
+ }
+}
+
+/**
+ Find an existing table share index instrumentation.
+ @return a table share index
+*/
+PFS_table_share_index*
+PFS_table_share::find_index_stat(uint index) const
+{
+ DBUG_ASSERT(index <= MAX_INDEXES);
+
+ PFS_table_share *that= const_cast<PFS_table_share*>(this);
+ void *addr= & that->m_race_index_stat[index];
+ void * volatile * typed_addr= static_cast<void * volatile *>(addr);
+ void *ptr;
+
+ /* Atomic Load */
+ ptr= my_atomic_loadptr(typed_addr);
+
+ PFS_table_share_index *pfs;
+ pfs= static_cast<PFS_table_share_index *>(ptr);
+ return pfs;
+}
+
+/**
+ Find or create a table share index instrumentation.
+ @param server_share
+ @index index
+ @return a table share index, or NULL
+*/
+PFS_table_share_index*
+PFS_table_share::find_or_create_index_stat(const TABLE_SHARE *server_share, uint index)
+{
+ DBUG_ASSERT(index <= MAX_INDEXES);
+
+ void *addr= & this->m_race_index_stat[index];
+ void * volatile * typed_addr= static_cast<void * volatile *>(addr);
+ void *ptr;
+
+ /* (1) Atomic Load */
+ ptr= my_atomic_loadptr(typed_addr);
+
+ PFS_table_share_index *pfs;
+ if (ptr != NULL)
+ {
+ pfs= static_cast<PFS_table_share_index *>(ptr);
+ return pfs;
+ }
+
+ /* (2) Create an index stat */
+ pfs= create_table_share_index_stat(server_share, index);
+ if (pfs == NULL)
+ return NULL;
+ pfs->m_owner= this;
+
+ void *old_ptr= NULL;
+ ptr= pfs;
+
+ /* (3) Atomic CAS */
+ if (my_atomic_casptr(typed_addr, & old_ptr, ptr))
+ {
+ /* Ok. */
+ return pfs;
+ }
+
+ /* Collision with another thread that also executed (2) and (3). */
+ release_table_share_index_stat(pfs);
+
+ pfs= static_cast<PFS_table_share_index *>(old_ptr);
+ return pfs;
+}
+
+/** Destroy table share index instrumentation. */
+void PFS_table_share::destroy_index_stats()
+{
+ uint index;
+
+ for (index= 0; index <= MAX_INDEXES; index++)
+ {
+ void *addr= & this->m_race_index_stat[index];
+ void * volatile * typed_addr= static_cast<void * volatile *>(addr);
+ void *new_ptr= NULL;
+ void *old_ptr;
+
+ old_ptr= my_atomic_fasptr(typed_addr, new_ptr);
+ if (old_ptr != NULL)
+ {
+ PFS_table_share_index *pfs;
+ pfs= static_cast<PFS_table_share_index *>(old_ptr);
+ release_table_share_index_stat(pfs);
+ }
+ }
+}
+
void PFS_table_share::refresh_setup_object_flags(PFS_thread *thread)
{
+ bool old_enabled= m_enabled;
+
lookup_setup_object(thread,
OBJECT_TYPE_TABLE,
m_schema_name, m_schema_name_length,
m_table_name, m_table_name_length,
&m_enabled, &m_timed);
+
+ /*
+ If instrumentation for this table was enabled earlier and is disabled now,
+ cleanup slots reserved for lock stats and index stats.
+ */
+ if (old_enabled && ! m_enabled)
+ {
+ destroy_lock_stat();
+ destroy_index_stats();
+ }
+}
+
+/**
+ Initialize the table lock stat buffer.
+ @param table_stat_sizing max number of table lock statistics
+ @return 0 on success
+*/
+int init_table_share_lock_stat(uint table_stat_sizing)
+{
+ if (global_table_share_lock_container.init(table_stat_sizing))
+ return 1;
+
+ return 0;
+}
+
+/**
+ Create a table share lock instrumentation.
+ @return table share lock instrumentation, or NULL
+*/
+PFS_table_share_lock*
+create_table_share_lock_stat()
+{
+ PFS_table_share_lock *pfs= NULL;
+ pfs_dirty_state dirty_state;
+
+ /* Create a new record in table stat array. */
+ pfs= global_table_share_lock_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ /* Reset the stats. */
+ pfs->m_stat.reset();
+
+ /* Use this stat buffer. */
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ }
+
+ return pfs;
+}
+
+/** Release a table share lock instrumentation. */
+void release_table_share_lock_stat(PFS_table_share_lock *pfs)
+{
+ pfs->m_owner= NULL;
+ global_table_share_lock_container.deallocate(pfs);
+ return;
+}
+
+/** Cleanup the table stat buffers. */
+void cleanup_table_share_lock_stat(void)
+{
+ global_table_share_lock_container.cleanup();
+}
+
+/**
+ Initialize table index stat buffer.
+ @param index_stat_sizing max number of index statistics
+ @return 0 on success
+*/
+int init_table_share_index_stat(uint index_stat_sizing)
+{
+ if (global_table_share_index_container.init(index_stat_sizing))
+ return 1;
+
+ return 0;
+}
+
+/**
+ Create a table share index instrumentation.
+ @return table share index instrumentation, or NULL
+*/
+PFS_table_share_index*
+create_table_share_index_stat(const TABLE_SHARE *server_share, uint server_index)
+{
+ DBUG_ASSERT((server_share != NULL) || (server_index == MAX_INDEXES));
+
+ PFS_table_share_index *pfs= NULL;
+ pfs_dirty_state dirty_state;
+
+ /* Create a new record in index stat array. */
+ pfs= global_table_share_index_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ if (server_index == MAX_INDEXES)
+ {
+ pfs->m_key.m_name_length= 0;
+ }
+ else
+ {
+ KEY *key_info= server_share->key_info + server_index;
+ size_t len= key_info->name.length;
+
+ memcpy(pfs->m_key.m_name, key_info->name.str, len);
+ pfs->m_key.m_name_length= static_cast<uint>(len);
+ }
+
+ /* Reset the stats. */
+ pfs->m_stat.reset();
+
+ /* Use this stat buffer. */
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ }
+
+ return pfs;
+}
+
+/** Release a table share index instrumentation. */
+void release_table_share_index_stat(PFS_table_share_index *pfs)
+{
+ pfs->m_owner= NULL;
+ global_table_share_index_container.deallocate(pfs);
+ return;
+}
+
+/** Cleanup the table stat buffers. */
+void cleanup_table_share_index_stat(void)
+{
+ global_table_share_index_container.cleanup();
}
/**
@@ -482,8 +823,10 @@ int init_file_class(uint file_class_sizing)
if (file_class_max > 0)
{
- file_class_array= PFS_MALLOC_ARRAY(file_class_max, sizeof(PFS_file_class),
- PFS_file_class, MYF(MY_ZEROFILL));
+ file_class_array= PFS_MALLOC_ARRAY(& builtin_memory_file_class,
+ file_class_max,
+ sizeof(PFS_file_class), PFS_file_class,
+ MYF(MY_ZEROFILL));
if (unlikely(file_class_array == NULL))
return 1;
}
@@ -496,7 +839,9 @@ int init_file_class(uint file_class_sizing)
/** Cleanup the file class buffers. */
void cleanup_file_class(void)
{
- pfs_free(file_class_array);
+ PFS_FREE_ARRAY(& builtin_memory_file_class,
+ file_class_max, sizeof(PFS_file_class),
+ file_class_array);
file_class_array= NULL;
file_class_dirty_count= file_class_allocated_count= 0;
file_class_max= 0;
@@ -516,8 +861,10 @@ int init_stage_class(uint stage_class_sizing)
if (stage_class_max > 0)
{
- stage_class_array= PFS_MALLOC_ARRAY(stage_class_max, sizeof(PFS_stage_class),
- PFS_stage_class, MYF(MY_ZEROFILL));
+ stage_class_array= PFS_MALLOC_ARRAY(& builtin_memory_stage_class,
+ stage_class_max,
+ sizeof(PFS_stage_class), PFS_stage_class,
+ MYF(MY_ZEROFILL));
if (unlikely(stage_class_array == NULL))
return 1;
}
@@ -530,7 +877,9 @@ int init_stage_class(uint stage_class_sizing)
/** Cleanup the stage class buffers. */
void cleanup_stage_class(void)
{
- pfs_free(stage_class_array);
+ PFS_FREE_ARRAY(& builtin_memory_stage_class,
+ stage_class_max, sizeof(PFS_stage_class),
+ stage_class_array);
stage_class_array= NULL;
stage_class_dirty_count= stage_class_allocated_count= 0;
stage_class_max= 0;
@@ -550,8 +899,10 @@ int init_statement_class(uint statement_class_sizing)
if (statement_class_max > 0)
{
- statement_class_array= PFS_MALLOC_ARRAY(statement_class_max, sizeof(PFS_statement_class),
- PFS_statement_class, MYF(MY_ZEROFILL));
+ statement_class_array= PFS_MALLOC_ARRAY(& builtin_memory_statement_class,
+ statement_class_max,
+ sizeof(PFS_statement_class), PFS_statement_class,
+ MYF(MY_ZEROFILL));
if (unlikely(statement_class_array == NULL))
return 1;
}
@@ -564,7 +915,9 @@ int init_statement_class(uint statement_class_sizing)
/** Cleanup the statement class buffers. */
void cleanup_statement_class(void)
{
- pfs_free(statement_class_array);
+ PFS_FREE_ARRAY(& builtin_memory_statement_class,
+ statement_class_max, sizeof(PFS_statement_class),
+ statement_class_array);
statement_class_array= NULL;
statement_class_dirty_count= statement_class_allocated_count= 0;
statement_class_max= 0;
@@ -584,8 +937,10 @@ int init_socket_class(uint socket_class_sizing)
if (socket_class_max > 0)
{
- socket_class_array= PFS_MALLOC_ARRAY(socket_class_max, sizeof(PFS_socket_class),
- PFS_socket_class, MYF(MY_ZEROFILL));
+ socket_class_array= PFS_MALLOC_ARRAY(& builtin_memory_socket_class,
+ socket_class_max,
+ sizeof(PFS_socket_class), PFS_socket_class,
+ MYF(MY_ZEROFILL));
if (unlikely(socket_class_array == NULL))
return 1;
}
@@ -598,12 +953,52 @@ int init_socket_class(uint socket_class_sizing)
/** Cleanup the socket class buffers. */
void cleanup_socket_class(void)
{
- pfs_free(socket_class_array);
+ PFS_FREE_ARRAY(& builtin_memory_socket_class,
+ socket_class_max, sizeof(PFS_socket_class),
+ socket_class_array);
socket_class_array= NULL;
socket_class_dirty_count= socket_class_allocated_count= 0;
socket_class_max= 0;
}
+/**
+ Initialize the memory class buffer.
+ @param memory_class_sizing max number of memory class
+ @return 0 on success
+*/
+int init_memory_class(uint memory_class_sizing)
+{
+ int result= 0;
+ memory_class_dirty_count= memory_class_allocated_count= 0;
+ memory_class_max= memory_class_sizing;
+ memory_class_lost= 0;
+
+ if (memory_class_max > 0)
+ {
+ memory_class_array= PFS_MALLOC_ARRAY(& builtin_memory_memory_class,
+ memory_class_max,
+ sizeof(PFS_memory_class), PFS_memory_class,
+ MYF(MY_ZEROFILL));
+ if (unlikely(memory_class_array == NULL))
+ return 1;
+ }
+ else
+ memory_class_array= NULL;
+
+ return result;
+}
+
+/** Cleanup the memory class buffers. */
+void cleanup_memory_class(void)
+{
+ PFS_FREE_ARRAY(& builtin_memory_memory_class,
+ memory_class_max, sizeof(PFS_memory_class),
+ memory_class_array);
+ memory_class_array= NULL;
+ memory_class_dirty_count= memory_class_allocated_count= 0;
+ memory_class_max= 0;
+}
+
static void init_instr_class(PFS_instr_class *klass,
const char *name,
uint name_length,
@@ -612,7 +1007,7 @@ static void init_instr_class(PFS_instr_class *klass,
{
DBUG_ASSERT(name_length <= PFS_MAX_INFO_NAME_LENGTH);
memset(klass, 0, sizeof(PFS_instr_class));
- strncpy(klass->m_name, name, name_length);
+ memcpy(klass->m_name, name, name_length);
klass->m_name_length= name_length;
klass->m_flags= flags;
klass->m_enabled= true;
@@ -628,10 +1023,13 @@ static void configure_instr_class(PFS_instr_class *entry)
{
uint match_length= 0; /* length of matching pattern */
- for (uint i= 0; i < pfs_instr_config_array.elements; i++)
+ // May be NULL in unit tests
+ if (pfs_instr_config_array == NULL)
+ return;
+ PFS_instr_config **it= pfs_instr_config_array->front();
+ for ( ; it != pfs_instr_config_array->end(); it++)
{
- PFS_instr_config* e;
- get_dynamic(&pfs_instr_config_array, (uchar*)&e, i);
+ PFS_instr_config* e= *it;
/**
Compare class name to all configuration entries. In case of multiple
@@ -757,7 +1155,8 @@ PFS_sync_key register_mutex_class(const char *name, uint name_length,
Out of space, report to SHOW STATUS that
the allocated memory was too small.
*/
- mutex_class_lost++;
+ if (pfs_enabled)
+ mutex_class_lost++;
return 0;
}
@@ -795,7 +1194,8 @@ PFS_sync_key register_rwlock_class(const char *name, uint name_length,
return (index + 1);
}
- rwlock_class_lost++;
+ if (pfs_enabled)
+ rwlock_class_lost++;
return 0;
}
@@ -832,7 +1232,8 @@ PFS_sync_key register_cond_class(const char *name, uint name_length,
return (index + 1);
}
- cond_class_lost++;
+ if (pfs_enabled)
+ cond_class_lost++;
return 0;
}
@@ -922,7 +1323,8 @@ PFS_thread_key register_thread_class(const char *name, uint name_length,
return (index + 1);
}
- thread_class_lost++;
+ if (pfs_enabled)
+ thread_class_lost++;
return 0;
}
@@ -971,10 +1373,12 @@ PFS_file_key register_file_class(const char *name, uint name_length,
/* Set user-defined configuration options for this instrument */
configure_instr_class(entry);
PFS_atomic::add_u32(&file_class_allocated_count, 1);
+
return (index + 1);
}
- file_class_lost++;
+ if (pfs_enabled)
+ file_class_lost++;
return 0;
}
@@ -1006,8 +1410,20 @@ PFS_stage_key register_stage_class(const char *name,
init_instr_class(entry, name, name_length, flags, PFS_CLASS_STAGE);
entry->m_prefix_length= prefix_length;
entry->m_event_name_index= index;
- entry->m_enabled= false; /* disabled by default */
- entry->m_timed= false;
+
+ if (flags & PSI_FLAG_STAGE_PROGRESS)
+ {
+ /* Stages with progress information are enabled and timed by default */
+ entry->m_enabled= true;
+ entry->m_timed= true;
+ }
+ else
+ {
+ /* Stages without progress information are disabled by default */
+ entry->m_enabled= false;
+ entry->m_timed= false;
+ }
+
/* Set user-defined configuration options for this instrument */
configure_instr_class(entry);
PFS_atomic::add_u32(&stage_class_allocated_count, 1);
@@ -1015,7 +1431,8 @@ PFS_stage_key register_stage_class(const char *name,
return (index + 1);
}
- stage_class_lost++;
+ if (pfs_enabled)
+ stage_class_lost++;
return 0;
}
@@ -1052,7 +1469,8 @@ PFS_statement_key register_statement_class(const char *name, uint name_length,
return (index + 1);
}
- statement_class_lost++;
+ if (pfs_enabled)
+ statement_class_lost++;
return 0;
}
@@ -1134,7 +1552,8 @@ PFS_socket_key register_socket_class(const char *name, uint name_length,
return (index + 1);
}
- socket_class_lost++;
+ if (pfs_enabled)
+ socket_class_lost++;
return 0;
}
@@ -1153,6 +1572,58 @@ PFS_socket_class *sanitize_socket_class(PFS_socket_class *unsafe)
SANITIZE_ARRAY_BODY(PFS_socket_class, socket_class_array, socket_class_max, unsafe);
}
+/**
+ Register a memory instrumentation metadata.
+ @param name the instrumented name
+ @param name_length length in bytes of name
+ @param flags the instrumentation flags
+ @return a memory instrumentation key
+*/
+PFS_memory_key register_memory_class(const char *name, uint name_length,
+ int flags)
+{
+ /* See comments in register_mutex_class */
+ uint32 index;
+ PFS_memory_class *entry;
+
+ REGISTER_CLASS_BODY_PART(index, memory_class_array, memory_class_max,
+ name, name_length)
+
+ index= PFS_atomic::add_u32(&memory_class_dirty_count, 1);
+
+ if (index < memory_class_max)
+ {
+ entry= &memory_class_array[index];
+ init_instr_class(entry, name, name_length, flags, PFS_CLASS_MEMORY);
+ entry->m_event_name_index= index;
+ entry->m_enabled= false; /* disabled by default */
+ /* Set user-defined configuration options for this instrument */
+ configure_instr_class(entry);
+ entry->m_timed= false; /* Immutable */
+ PFS_atomic::add_u32(&memory_class_allocated_count, 1);
+ return (index + 1);
+ }
+
+ if (pfs_enabled)
+ memory_class_lost++;
+ return 0;
+}
+
+/**
+ Find a memory instrumentation class by key.
+ @param key the instrument key
+ @return the instrument class, or NULL
+*/
+PFS_memory_class *find_memory_class(PFS_memory_key key)
+{
+ FIND_CLASS_BODY(key, memory_class_allocated_count, memory_class_array);
+}
+
+PFS_memory_class *sanitize_memory_class(PFS_memory_class *unsafe)
+{
+ SANITIZE_ARRAY_BODY(PFS_memory_class, memory_class_array, memory_class_max, unsafe);
+}
+
PFS_instr_class *find_table_class(uint index)
{
if (index == 1)
@@ -1184,49 +1655,64 @@ PFS_instr_class *sanitize_idle_class(PFS_instr_class *unsafe)
return NULL;
}
-static void set_keys(PFS_table_share *pfs, const TABLE_SHARE *share)
+PFS_instr_class *find_metadata_class(uint index)
{
- uint len;
- KEY *key_info= share->key_info;
- PFS_table_key *pfs_key= pfs->m_keys;
- PFS_table_key *pfs_key_last= pfs->m_keys + share->keys;
- pfs->m_key_count= share->keys;
+ if (index == 1)
+ return & global_metadata_class;
+ return NULL;
+}
- for ( ; pfs_key < pfs_key_last; pfs_key++, key_info++)
- {
- len= (uint)key_info->name.length;
- memcpy(pfs_key->m_name, key_info->name.str, len);
- pfs_key->m_name_length= len;
- }
+PFS_instr_class *sanitize_metadata_class(PFS_instr_class *unsafe)
+{
+ if (likely(& global_metadata_class == unsafe))
+ return unsafe;
+ return NULL;
+}
- pfs_key_last= pfs->m_keys + MAX_INDEXES;
- for ( ; pfs_key < pfs_key_last; pfs_key++)
- pfs_key->m_name_length= 0;
+PFS_transaction_class *find_transaction_class(uint index)
+{
+ if (index == 1)
+ return &global_transaction_class;
+ return NULL;
}
-static int compare_keys(PFS_table_share *pfs, const TABLE_SHARE *share)
+PFS_transaction_class *sanitize_transaction_class(PFS_transaction_class *unsafe)
{
- uint len;
- KEY *key_info= share->key_info;
- PFS_table_key *pfs_key= pfs->m_keys;
- PFS_table_key *pfs_key_last= pfs->m_keys + share->keys;
+ if (likely(&global_transaction_class == unsafe))
+ return unsafe;
+ return NULL;
+}
+static int compare_keys(PFS_table_share *pfs, const TABLE_SHARE *share)
+{
if (pfs->m_key_count != share->keys)
return 1;
- for ( ; pfs_key < pfs_key_last; pfs_key++, key_info++)
+ size_t len;
+ uint index= 0;
+ uint key_count= share->keys;
+ KEY *key_info= share->key_info;
+ PFS_table_share_index *index_stat;
+
+ for ( ; index < key_count; key_info++, index++)
{
- len= (uint)key_info->name.length;
- if (len != pfs_key->m_name_length)
- return 1;
+ index_stat= pfs->find_index_stat(index);
+ if (index_stat != NULL)
+ {
+ len= key_info->name.length;
- if (memcmp(pfs_key->m_name, key_info->name.str, len) != 0)
- return 1;
+ if (len != index_stat->m_key.m_name_length)
+ return 1;
+
+ if (memcmp(index_stat->m_key.m_name, key_info->name.str, len) != 0)
+ return 1;
+ }
}
return 0;
}
+
/**
Find or create a table share instrumentation.
@param thread the executing instrumented thread
@@ -1244,14 +1730,14 @@ PFS_table_share* find_or_create_table_share(PFS_thread *thread,
LF_PINS *pins= get_table_share_hash_pins(thread);
if (unlikely(pins == NULL))
{
- table_share_lost++;
+ global_table_share_container.m_lost++;
return NULL;
}
const char *schema_name= share->db.str;
- uint schema_name_length= (uint)share->db.length;
+ size_t schema_name_length= share->db.length;
const char *table_name= share->table_name.str;
- uint table_name_length= (uint)share->table_name.length;
+ size_t table_name_length= share->table_name.length;
set_table_share_key(&key, temporary,
schema_name, schema_name_length,
@@ -1262,10 +1748,8 @@ PFS_table_share* find_or_create_table_share(PFS_thread *thread,
const uint retry_max= 3;
bool enabled= true;
bool timed= true;
- static uint PFS_ALIGNED table_share_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_table_share *pfs;
+ pfs_dirty_state dirty_state;
search:
entry= reinterpret_cast<PFS_table_share**>
@@ -1277,9 +1761,19 @@ search:
pfs->inc_refcount() ;
if (compare_keys(pfs, share) != 0)
{
- set_keys(pfs, share);
- /* FIXME: aggregate to table_share sink ? */
- pfs->m_table_stat.fast_reset();
+ /*
+ Some DDL was detected.
+ - keep the lock stats, they are unaffected
+ - destroy the index stats, indexes changed.
+ - adjust the expected key count
+ - recreate index stats
+ */
+ pfs->destroy_index_stats();
+ pfs->m_key_count= share->keys;
+ for (uint index= 0; index < pfs->m_key_count; index++)
+ {
+ (void)pfs->find_or_create_index_stat(share, index);
+ }
}
lf_hash_search_unpin(pins);
return pfs;
@@ -1291,8 +1785,8 @@ search:
{
lookup_setup_object(thread,
OBJECT_TYPE_TABLE,
- schema_name, schema_name_length,
- table_name, table_name_length,
+ schema_name, static_cast<uint>(schema_name_length),
+ table_name, static_cast<uint>(table_name_length),
&enabled, &timed);
/*
Even when enabled is false, a record is added in the dictionary:
@@ -1302,85 +1796,136 @@ search:
*/
}
- while (++attempts <= table_share_max)
+ pfs= global_table_share_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& table_share_monotonic_index, 1) % table_share_max;
- pfs= table_share_array + index;
-
- if (pfs->m_lock.is_free())
+ pfs->m_key= key;
+ pfs->m_schema_name= &pfs->m_key.m_hash_key[1];
+ pfs->m_schema_name_length= static_cast<uint>(schema_name_length);
+ pfs->m_table_name= &pfs->m_key.m_hash_key[schema_name_length + 2];
+ pfs->m_table_name_length= static_cast<uint>(table_name_length);
+ pfs->m_enabled= enabled;
+ pfs->m_timed= timed;
+ pfs->init_refcount();
+ pfs->destroy_lock_stat();
+ pfs->destroy_index_stats();
+ pfs->m_key_count= share->keys;
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&table_share_hash, pins, &pfs);
+
+ if (likely(res == 0))
{
- if (pfs->m_lock.free_to_dirty())
+ /* Create table share index stats. */
+ for (uint index= 0; index < pfs->m_key_count; index++)
{
- pfs->m_key= key;
- pfs->m_schema_name= &pfs->m_key.m_hash_key[1];
- pfs->m_schema_name_length= schema_name_length;
- pfs->m_table_name= &pfs->m_key.m_hash_key[schema_name_length + 2];
- pfs->m_table_name_length= table_name_length;
- pfs->m_enabled= enabled;
- pfs->m_timed= timed;
- pfs->init_refcount();
- pfs->m_table_stat.fast_reset();
- set_keys(pfs, share);
-
- int res;
- res= lf_hash_insert(&table_share_hash, pins, &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- return pfs;
- }
-
- pfs->m_lock.dirty_to_free();
+ (void)pfs->find_or_create_index_stat(share, index);
+ }
+ return pfs;
+ }
- if (res > 0)
- {
- /* Duplicate insert by another thread */
- if (++retry_count > retry_max)
- {
- /* Avoid infinite loops */
- table_share_lost++;
- return NULL;
- }
- goto search;
- }
+ global_table_share_container.deallocate(pfs);
- /* OOM in lf_hash_insert */
- table_share_lost++;
+ if (res > 0)
+ {
+ /* Duplicate insert by another thread */
+ if (++retry_count > retry_max)
+ {
+ /* Avoid infinite loops */
+ global_table_share_container.m_lost++;
return NULL;
}
+ goto search;
}
+
+ /* OOM in lf_hash_insert */
+ global_table_share_container.m_lost++;
+ return NULL;
}
- table_share_lost++;
return NULL;
}
void PFS_table_share::aggregate_io(void)
{
+ uint index;
uint safe_key_count= sanitize_index_count(m_key_count);
- PFS_table_io_stat *from_stat;
- PFS_table_io_stat *from_stat_last;
+ PFS_table_share_index *from_stat;
PFS_table_io_stat sum_io;
/* Aggregate stats for each index, if any */
- from_stat= & m_table_stat.m_index_stat[0];
- from_stat_last= from_stat + safe_key_count;
- for ( ; from_stat < from_stat_last ; from_stat++)
- sum_io.aggregate(from_stat);
+ for (index= 0; index < safe_key_count; index++)
+ {
+ from_stat= find_index_stat(index);
+ if (from_stat != NULL)
+ {
+ sum_io.aggregate(& from_stat->m_stat);
+ from_stat->m_stat.reset();
+ }
+ }
/* Aggregate stats for the table */
- sum_io.aggregate(& m_table_stat.m_index_stat[MAX_INDEXES]);
+ from_stat= find_index_stat(MAX_INDEXES);
+ if (from_stat != NULL)
+ {
+ sum_io.aggregate(& from_stat->m_stat);
+ from_stat->m_stat.reset();
+ }
/* Add this table stats to the global sink. */
global_table_io_stat.aggregate(& sum_io);
- m_table_stat.fast_reset_io();
+}
+
+void PFS_table_share::sum_io(PFS_single_stat *result, uint key_count)
+{
+ uint index;
+ PFS_table_share_index *stat;
+
+ DBUG_ASSERT(key_count <= MAX_INDEXES);
+
+ /* Sum stats for each index, if any */
+ for (index= 0; index < key_count; index++)
+ {
+ stat= find_index_stat(index);
+ if (stat != NULL)
+ {
+ stat->m_stat.sum(result);
+ }
+ }
+
+ /* Sum stats for the table */
+ stat= find_index_stat(MAX_INDEXES);
+ if (stat != NULL)
+ {
+ stat->m_stat.sum(result);
+ }
+}
+
+void PFS_table_share::sum_lock(PFS_single_stat *result)
+{
+ PFS_table_share_lock *lock_stat;
+ lock_stat= find_lock_stat();
+ if (lock_stat != NULL)
+ lock_stat->m_stat.sum(result);
+}
+
+void PFS_table_share::sum(PFS_single_stat *result, uint key_count)
+{
+ sum_io(result, key_count);
+ sum_lock(result);
}
void PFS_table_share::aggregate_lock(void)
{
- global_table_lock_stat.aggregate(& m_table_stat.m_lock_stat);
- m_table_stat.fast_reset_lock();
+ PFS_table_share_lock *lock_stat;
+ lock_stat= find_lock_stat();
+ if (lock_stat != NULL)
+ {
+ global_table_lock_stat.aggregate(& lock_stat->m_stat);
+ /* Reset lock stat. */
+ lock_stat->m_stat.reset();
+ }
}
void release_table_share(PFS_table_share *pfs)
@@ -1418,6 +1963,9 @@ void drop_table_share(PFS_thread *thread,
PFS_table_share *pfs= *entry;
lf_hash_delete(&table_share_hash, pins,
pfs->m_key.m_hash_key, pfs->m_key.m_key_length);
+ pfs->destroy_lock_stat();
+ pfs->destroy_index_stats();
+
pfs->m_lock.allocated_to_free();
}
@@ -1431,7 +1979,7 @@ void drop_table_share(PFS_thread *thread,
*/
PFS_table_share *sanitize_table_share(PFS_table_share *unsafe)
{
- SANITIZE_ARRAY_BODY(PFS_table_share, table_share_array, table_share_max, unsafe);
+ return global_table_share_container.sanitize(unsafe);
}
/** Reset the wait statistics per instrument class. */
@@ -1442,6 +1990,7 @@ void reset_events_waits_by_class()
global_idle_stat.reset();
global_table_io_stat.reset();
global_table_lock_stat.reset();
+ global_metadata_stat.reset();
}
/** Reset the io statistics per file class. */
@@ -1464,16 +2013,50 @@ void reset_socket_class_io(void)
pfs->m_socket_stat.m_io_stat.reset();
}
+class Proc_table_share_derived_flags
+ : public PFS_buffer_processor<PFS_table_share>
+{
+public:
+ Proc_table_share_derived_flags(PFS_thread *thread)
+ : m_thread(thread)
+ {}
+
+ virtual void operator()(PFS_table_share *pfs)
+ {
+ pfs->refresh_setup_object_flags(m_thread);
+ }
+
+private:
+ PFS_thread* m_thread;
+};
+
void update_table_share_derived_flags(PFS_thread *thread)
{
- PFS_table_share *pfs= table_share_array;
- PFS_table_share *pfs_last= table_share_array + table_share_max;
+ Proc_table_share_derived_flags proc(thread);
+ global_table_share_container.apply(proc);
+}
- for ( ; pfs < pfs_last; pfs++)
+class Proc_program_share_derived_flags
+ : public PFS_buffer_processor<PFS_program>
+{
+public:
+ Proc_program_share_derived_flags(PFS_thread *thread)
+ : m_thread(thread)
+ {}
+
+ virtual void operator()(PFS_program *pfs)
{
- if (pfs->m_lock.is_populated())
- pfs->refresh_setup_object_flags(thread);
+ pfs->refresh_setup_object_flags(m_thread);
}
+
+private:
+ PFS_thread* m_thread;
+};
+
+void update_program_share_derived_flags(PFS_thread *thread)
+{
+ Proc_program_share_derived_flags proc(thread);
+ global_program_container.apply(proc);
}
/** @} */
diff --git a/storage/perfschema/pfs_instr_class.h b/storage/perfschema/pfs_instr_class.h
index 9d256fac78a..573cfe33ffb 100644
--- a/storage/perfschema/pfs_instr_class.h
+++ b/storage/perfschema/pfs_instr_class.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2016, 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, version 2.0,
@@ -27,6 +27,8 @@
#include "mysql_com.h" /* NAME_LEN */
#include "lf.h"
#include "pfs_global.h"
+#include "pfs_atomic.h"
+#include "sql_array.h"
/**
@file storage/perfschema/pfs_instr_class.h
@@ -48,7 +50,6 @@
*/
#define PFS_MAX_FULL_PREFIX_NAME_LENGTH 32
-#include <my_global.h>
#include <my_sys.h>
#include <mysql/psi/psi.h>
#include "pfs_lock.h"
@@ -56,6 +57,8 @@
#include "pfs_column_types.h"
struct PFS_global_param;
+struct PFS_table_share;
+class PFS_opaque_container_page;
/**
@addtogroup Performance_schema_buffers
@@ -75,8 +78,12 @@ typedef unsigned int PFS_file_key;
typedef unsigned int PFS_stage_key;
/** Key, naming a statement instrument. */
typedef unsigned int PFS_statement_key;
+/** Key, naming a transaction instrument. */
+typedef unsigned int PFS_transaction_key;
/** Key, naming a socket instrument. */
typedef unsigned int PFS_socket_key;
+/** Key, naming a memory instrument. */
+typedef unsigned int PFS_memory_key;
enum PFS_class_type
{
@@ -88,11 +95,14 @@ enum PFS_class_type
PFS_CLASS_TABLE= 5,
PFS_CLASS_STAGE= 6,
PFS_CLASS_STATEMENT= 7,
- PFS_CLASS_SOCKET= 8,
- PFS_CLASS_TABLE_IO= 9,
- PFS_CLASS_TABLE_LOCK= 10,
- PFS_CLASS_IDLE= 11,
- PFS_CLASS_LAST= PFS_CLASS_IDLE,
+ PFS_CLASS_TRANSACTION= 8,
+ PFS_CLASS_SOCKET= 9,
+ PFS_CLASS_TABLE_IO= 10,
+ PFS_CLASS_TABLE_LOCK= 11,
+ PFS_CLASS_IDLE= 12,
+ PFS_CLASS_MEMORY= 13,
+ PFS_CLASS_METADATA= 14,
+ PFS_CLASS_LAST= PFS_CLASS_METADATA,
PFS_CLASS_MAX= PFS_CLASS_LAST + 1
};
@@ -109,12 +119,8 @@ struct PFS_instr_config
bool m_timed;
};
-extern DYNAMIC_ARRAY pfs_instr_config_array;
-extern int pfs_instr_config_state;
-
-static const int PFS_INSTR_CONFIG_NOT_INITIALIZED= 0;
-static const int PFS_INSTR_CONFIG_ALLOCATED= 1;
-static const int PFS_INSTR_CONFIG_DEALLOCATED= 2;
+typedef Dynamic_array<PFS_instr_config*> Pfs_instr_config_array;
+extern Pfs_instr_config_array *pfs_instr_config_array;
struct PFS_thread;
@@ -136,12 +142,15 @@ struct PFS_instr_class
bool m_timed;
/** Instrument flags. */
int m_flags;
+ /** Volatility index. */
+ int m_volatility;
/**
Instrument name index.
Self index in:
- EVENTS_WAITS_SUMMARY_*_BY_EVENT_NAME for waits
- EVENTS_STAGES_SUMMARY_*_BY_EVENT_NAME for stages
- EVENTS_STATEMENTS_SUMMARY_*_BY_EVENT_NAME for statements
+ - EVENTS_TRANSACTIONS_SUMMARY_*_BY_EVENT_NAME for transactions
*/
uint m_event_name_index;
/** Instrument name. */
@@ -161,6 +170,18 @@ struct PFS_instr_class
return m_flags & PSI_FLAG_MUTABLE;
}
+ bool is_progress() const
+ {
+ DBUG_ASSERT(m_type == PFS_CLASS_STAGE);
+ return m_flags & PSI_FLAG_STAGE_PROGRESS;
+ }
+
+ bool is_shared_exclusive() const
+ {
+ DBUG_ASSERT(m_type == PFS_CLASS_RWLOCK);
+ return m_flags & PSI_RWLOCK_FLAG_SX;
+ }
+
static void set_enabled(PFS_instr_class *pfs, bool enabled);
static void set_timed(PFS_instr_class *pfs, bool timed);
@@ -252,6 +273,32 @@ struct PFS_table_key
uint m_name_length;
};
+/** Index statistics of a table.*/
+struct PFS_table_share_index
+{
+ pfs_lock m_lock;
+ /** The index name */
+ PFS_table_key m_key;
+ /** The index stat */
+ PFS_table_io_stat m_stat;
+ /** Owner table share. To be used later. */
+ PFS_table_share* m_owner;
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
+};
+
+/** Lock statistics of a table.*/
+struct PFS_table_share_lock
+{
+ pfs_lock m_lock;
+ /** Lock stats. */
+ PFS_table_lock_stat m_stat;
+ /** Owner table share. To be used later. */
+ PFS_table_share* m_owner;
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
+};
+
/** Instrumentation metadata for a table share. */
struct PFS_ALIGNED PFS_table_share
{
@@ -267,6 +314,10 @@ public:
void aggregate_io(void);
void aggregate_lock(void);
+ void sum_io(PFS_single_stat *result, uint key_count);
+ void sum_lock(PFS_single_stat *result);
+ void sum(PFS_single_stat *result, uint key_count);
+
inline void aggregate(void)
{
aggregate_io();
@@ -307,6 +358,7 @@ public:
This flag is computed from the content of table setup_objects.
*/
bool m_timed;
+
/** Search key. */
PFS_table_share_key m_key;
/** Schema name. */
@@ -319,14 +371,24 @@ public:
uint m_table_name_length;
/** Number of indexes. */
uint m_key_count;
- /** Table statistics. */
- PFS_table_stat m_table_stat;
- /** Index names. */
- PFS_table_key m_keys[MAX_INDEXES];
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
+
+ PFS_table_share_lock *find_lock_stat() const;
+ PFS_table_share_lock *find_or_create_lock_stat();
+ void destroy_lock_stat();
+
+ PFS_table_share_index *find_index_stat(uint index) const;
+ PFS_table_share_index *find_or_create_index_stat(const TABLE_SHARE *server_share, uint index);
+ void destroy_index_stats();
private:
/** Number of opened table handles. */
int m_refcount;
+ /** Table locks statistics. */
+ PFS_table_share_lock *m_race_lock_stat;
+ /** Table indexes' stats. */
+ PFS_table_share_index *m_race_index_stat[MAX_INDEXES + 1];
};
/** Statistics for the IDLE instrument. */
@@ -335,6 +397,10 @@ extern PFS_single_stat global_idle_stat;
extern PFS_table_io_stat global_table_io_stat;
/** Statistics for dropped table lock. */
extern PFS_table_lock_stat global_table_lock_stat;
+/** Statistics for the METADATA instrument. */
+extern PFS_single_stat global_metadata_stat;
+/** Statistics for the transaction instrument. */
+extern PFS_transaction_stat global_transaction_stat;
inline uint sanitize_index_count(uint count)
{
@@ -346,6 +412,12 @@ inline uint sanitize_index_count(uint count)
#define GLOBAL_TABLE_IO_EVENT_INDEX 0
#define GLOBAL_TABLE_LOCK_EVENT_INDEX 1
#define GLOBAL_IDLE_EVENT_INDEX 2
+#define GLOBAL_METADATA_EVENT_INDEX 3
+/** Number of global wait events. */
+#define COUNT_GLOBAL_EVENT_INDEX 4
+
+/** Transaction events are not wait events .*/
+#define GLOBAL_TRANSACTION_INDEX 0
/**
Instrument controlling all table io.
@@ -364,6 +436,8 @@ extern PFS_instr_class global_table_lock_class;
*/
extern PFS_instr_class global_idle_class;
+extern PFS_instr_class global_metadata_class;
+
struct PFS_file;
/** Instrumentation metadata for a file. */
@@ -392,7 +466,14 @@ struct PFS_ALIGNED PFS_statement_class : public PFS_instr_class
{
};
-struct PFS_socket;
+/** Instrumentation metadata for a transaction. */
+struct PFS_ALIGNED PFS_transaction_class : public PFS_instr_class
+{
+};
+
+extern PFS_transaction_class global_transaction_class;
+
+struct PFS_socket;
/** Instrumentation metadata for a socket. */
struct PFS_ALIGNED PFS_socket_class : public PFS_instr_class
@@ -403,6 +484,20 @@ struct PFS_ALIGNED PFS_socket_class : public PFS_instr_class
PFS_socket *m_singleton;
};
+/** Instrumentation metadata for a memory. */
+struct PFS_ALIGNED PFS_memory_class : public PFS_instr_class
+{
+ bool is_global() const
+ {
+ return m_flags & PSI_FLAG_GLOBAL;
+ }
+
+ bool is_transferable() const
+ {
+ return m_flags & PSI_FLAG_TRANSFER;
+ }
+};
+
void init_event_name_sizing(const PFS_global_param *param);
void register_global_classes();
@@ -416,7 +511,18 @@ int init_thread_class(uint thread_class_sizing);
void cleanup_thread_class();
int init_table_share(uint table_share_sizing);
void cleanup_table_share();
-int init_table_share_hash();
+
+int init_table_share_lock_stat(uint table_stat_sizing);
+void cleanup_table_share_lock_stat();
+PFS_table_share_lock* create_table_share_lock_stat();
+void release_table_share_lock_stat(PFS_table_share_lock *pfs);
+
+int init_table_share_index_stat(uint index_stat_sizing);
+void cleanup_table_share_index_stat();
+PFS_table_share_index* create_table_share_index_stat(const TABLE_SHARE *share, uint index);
+void release_table_share_index_stat(PFS_table_share_index *pfs);
+
+int init_table_share_hash(const PFS_global_param *param);
void cleanup_table_share_hash();
int init_file_class(uint file_class_sizing);
void cleanup_file_class();
@@ -426,6 +532,8 @@ int init_statement_class(uint statement_class_sizing);
void cleanup_statement_class();
int init_socket_class(uint socket_class_sizing);
void cleanup_socket_class();
+int init_memory_class(uint memory_class_sizing);
+void cleanup_memory_class();
PFS_sync_key register_mutex_class(const char *name, uint name_length,
int flags);
@@ -453,6 +561,9 @@ PFS_statement_key register_statement_class(const char *name, uint name_length,
PFS_socket_key register_socket_class(const char *name, uint name_length,
int flags);
+PFS_memory_key register_memory_class(const char *name, uint name_length,
+ int flags);
+
PFS_mutex_class *find_mutex_class(PSI_mutex_key key);
PFS_mutex_class *sanitize_mutex_class(PFS_mutex_class *unsafe);
PFS_rwlock_class *find_rwlock_class(PSI_rwlock_key key);
@@ -471,8 +582,14 @@ PFS_instr_class *find_table_class(uint index);
PFS_instr_class *sanitize_table_class(PFS_instr_class *unsafe);
PFS_socket_class *find_socket_class(PSI_socket_key key);
PFS_socket_class *sanitize_socket_class(PFS_socket_class *unsafe);
+PFS_memory_class *find_memory_class(PSI_memory_key key);
+PFS_memory_class *sanitize_memory_class(PFS_memory_class *unsafe);
PFS_instr_class *find_idle_class(uint index);
PFS_instr_class *sanitize_idle_class(PFS_instr_class *unsafe);
+PFS_instr_class *find_metadata_class(uint index);
+PFS_instr_class *sanitize_metadata_class(PFS_instr_class *unsafe);
+PFS_transaction_class *find_transaction_class(uint index);
+PFS_transaction_class *sanitize_transaction_class(PFS_transaction_class *unsafe);
PFS_table_share *find_or_create_table_share(PFS_thread *thread,
bool temporary,
@@ -499,10 +616,11 @@ extern ulong stage_class_max;
extern ulong stage_class_lost;
extern ulong statement_class_max;
extern ulong statement_class_lost;
+extern ulong transaction_class_max;
extern ulong socket_class_max;
extern ulong socket_class_lost;
-extern ulong table_share_max;
-extern ulong table_share_lost;
+extern ulong memory_class_max;
+extern ulong memory_class_lost;
/* Exposing the data directly, for iterators. */
@@ -510,7 +628,6 @@ extern PFS_mutex_class *mutex_class_array;
extern PFS_rwlock_class *rwlock_class_array;
extern PFS_cond_class *cond_class_array;
extern PFS_file_class *file_class_array;
-extern PFS_table_share *table_share_array;
void reset_events_waits_by_class();
void reset_file_class_io();
@@ -519,6 +636,9 @@ void reset_socket_class_io();
/** Update derived flags for all table shares. */
void update_table_share_derived_flags(PFS_thread *thread);
+/** Update derived flags for all stored procedure shares. */
+void update_program_share_derived_flags(PFS_thread *thread);
+
extern LF_HASH table_share_hash;
/** @} */
diff --git a/storage/perfschema/pfs_lock.h b/storage/perfschema/pfs_lock.h
index b74131c79e1..3730e61ced7 100644
--- a/storage/perfschema/pfs_lock.h
+++ b/storage/perfschema/pfs_lock.h
@@ -28,8 +28,15 @@
Performance schema internal locks (declarations).
*/
+#include "my_global.h"
+
#include "pfs_atomic.h"
+/* to cause bugs, testing */
+// #define MEM(X) std::memory_order_relaxed
+/* correct code */
+#define MEM(X) X
+
/**
@addtogroup Performance_schema_buffers
@{
@@ -61,6 +68,16 @@
#define STATE_MASK 0x00000003
#define VERSION_INC 4
+struct pfs_optimistic_state
+{
+ uint32 m_version_state;
+};
+
+struct pfs_dirty_state
+{
+ uint32 m_version_state;
+};
+
/**
A 'lock' protecting performance schema internal buffers.
This lock is used to mark the state of a record.
@@ -86,19 +103,34 @@ struct pfs_lock
The version number is stored in the high 30 bits.
The state is stored in the low 2 bits.
*/
- volatile uint32 m_version_state;
+ uint32 m_version_state;
+
+ uint32 copy_version_state()
+ {
+ uint32 copy;
+
+ copy= m_version_state; /* dirty read */
+
+ return copy;
+ }
/** Returns true if the record is free. */
bool is_free(void)
{
- uint32 copy= m_version_state; /* non volatile copy, and dirty read */
+ uint32 copy;
+
+ copy= PFS_atomic::load_u32(&m_version_state);
+
return ((copy & STATE_MASK) == PFS_LOCK_FREE);
}
/** Returns true if the record contains values that can be read. */
bool is_populated(void)
{
- uint32 copy= m_version_state; /* non volatile copy, and dirty read */
+ uint32 copy;
+
+ copy= PFS_atomic::load_u32(&m_version_state);
+
return ((copy & STATE_MASK) == PFS_LOCK_ALLOCATED);
}
@@ -108,13 +140,28 @@ struct pfs_lock
Only one writer will succeed to acquire the record.
@return true if the operation succeed
*/
- bool free_to_dirty(void)
+ bool free_to_dirty(pfs_dirty_state *copy_ptr)
{
- uint32 copy= m_version_state; /* non volatile copy, and dirty read */
- uint32 old_val= (copy & VERSION_MASK) + PFS_LOCK_FREE;
- uint32 new_val= (copy & VERSION_MASK) + PFS_LOCK_DIRTY;
+ uint32 old_val;
+
+ old_val= PFS_atomic::load_u32(&m_version_state);
+
+ if ((old_val & STATE_MASK) != PFS_LOCK_FREE)
+ {
+ return false;
+ }
- return (PFS_atomic::cas_u32(&m_version_state, &old_val, new_val));
+ uint32 new_val= (old_val & VERSION_MASK) + PFS_LOCK_DIRTY;
+ bool pass;
+
+ pass= PFS_atomic::cas_u32(&m_version_state, &old_val, new_val);
+
+ if (pass)
+ {
+ copy_ptr->m_version_state= new_val;
+ }
+
+ return pass;
}
/**
@@ -122,15 +169,18 @@ struct pfs_lock
This transition should be executed by the writer that owns the record,
before the record is modified.
*/
- void allocated_to_dirty(void)
+ void allocated_to_dirty(pfs_dirty_state *copy_ptr)
{
- uint32 copy= PFS_atomic::load_u32(&m_version_state);
+ uint32 copy= copy_version_state();
/* Make sure the record was ALLOCATED. */
DBUG_ASSERT((copy & STATE_MASK) == PFS_LOCK_ALLOCATED);
/* Keep the same version, set the DIRTY state */
uint32 new_val= (copy & VERSION_MASK) + PFS_LOCK_DIRTY;
/* We own the record, no need to use compare and swap. */
+
PFS_atomic::store_u32(&m_version_state, new_val);
+
+ copy_ptr->m_version_state= new_val;
}
/**
@@ -138,13 +188,13 @@ struct pfs_lock
This transition should be executed by the writer that owns the record,
after the record is in a state ready to be read.
*/
- void dirty_to_allocated(void)
+ void dirty_to_allocated(const pfs_dirty_state *copy)
{
- uint32 copy= PFS_atomic::load_u32(&m_version_state);
/* Make sure the record was DIRTY. */
- DBUG_ASSERT((copy & STATE_MASK) == PFS_LOCK_DIRTY);
+ DBUG_ASSERT((copy->m_version_state & STATE_MASK) == PFS_LOCK_DIRTY);
/* Increment the version, set the ALLOCATED state */
- uint32 new_val= (copy & VERSION_MASK) + VERSION_INC + PFS_LOCK_ALLOCATED;
+ uint32 new_val= (copy->m_version_state & VERSION_MASK) + VERSION_INC + PFS_LOCK_ALLOCATED;
+
PFS_atomic::store_u32(&m_version_state, new_val);
}
@@ -156,35 +206,38 @@ struct pfs_lock
void set_allocated(void)
{
/* Do not set the version to 0, read the previous value. */
- uint32 copy= PFS_atomic::load_u32(&m_version_state);
+ uint32 copy= copy_version_state();
/* Increment the version, set the ALLOCATED state */
uint32 new_val= (copy & VERSION_MASK) + VERSION_INC + PFS_LOCK_ALLOCATED;
+
PFS_atomic::store_u32(&m_version_state, new_val);
}
/**
Initialize a lock to dirty.
*/
- void set_dirty(void)
+ void set_dirty(pfs_dirty_state *copy_ptr)
{
/* Do not set the version to 0, read the previous value. */
uint32 copy= PFS_atomic::load_u32(&m_version_state);
/* Increment the version, set the DIRTY state */
uint32 new_val= (copy & VERSION_MASK) + VERSION_INC + PFS_LOCK_DIRTY;
PFS_atomic::store_u32(&m_version_state, new_val);
+
+ copy_ptr->m_version_state= new_val;
}
/**
Execute a dirty to free transition.
This transition should be executed by the writer that owns the record.
*/
- void dirty_to_free(void)
+ void dirty_to_free(const pfs_dirty_state *copy)
{
- uint32 copy= PFS_atomic::load_u32(&m_version_state);
/* Make sure the record was DIRTY. */
- DBUG_ASSERT((copy & STATE_MASK) == PFS_LOCK_DIRTY);
+ DBUG_ASSERT((copy->m_version_state & STATE_MASK) == PFS_LOCK_DIRTY);
/* Keep the same version, set the FREE state */
- uint32 new_val= (copy & VERSION_MASK) + PFS_LOCK_FREE;
+ uint32 new_val= (copy->m_version_state & VERSION_MASK) + PFS_LOCK_FREE;
+
PFS_atomic::store_u32(&m_version_state, new_val);
}
@@ -198,22 +251,22 @@ struct pfs_lock
If this record is not in the ALLOCATED state and the caller is trying
to free it, this is a bug: the caller is confused,
and potentially damaging data owned by another thread or object.
- The correct assert to use here to guarantee data integrity is simply:
- DBUG_ASSERT(m_state == PFS_LOCK_ALLOCATED);
*/
- uint32 copy= PFS_atomic::load_u32(&m_version_state);
+ uint32 copy= copy_version_state();
/* Make sure the record was ALLOCATED. */
DBUG_ASSERT(((copy & STATE_MASK) == PFS_LOCK_ALLOCATED));
/* Keep the same version, set the FREE state */
uint32 new_val= (copy & VERSION_MASK) + PFS_LOCK_FREE;
+
PFS_atomic::store_u32(&m_version_state, new_val);
}
/**
Start an optimistic read operation.
+ @param [out] copy Saved lock state
@sa end_optimist_lock.
*/
- void begin_optimistic_lock(struct pfs_lock *copy)
+ void begin_optimistic_lock(struct pfs_optimistic_state *copy)
{
copy->m_version_state= PFS_atomic::load_u32(&m_version_state);
}
@@ -221,16 +274,21 @@ struct pfs_lock
/**
End an optimistic read operation.
@sa begin_optimist_lock.
+ @param copy Saved lock state
@return true if the data read is safe to use.
*/
- bool end_optimistic_lock(struct pfs_lock *copy)
+ bool end_optimistic_lock(const struct pfs_optimistic_state *copy)
{
+ uint32 version_state;
+
/* Check there was valid data to look at. */
if ((copy->m_version_state & STATE_MASK) != PFS_LOCK_ALLOCATED)
return false;
+ version_state= PFS_atomic::load_u32(&m_version_state);
+
/* Check the version + state has not changed. */
- if (copy->m_version_state != PFS_atomic::load_u32(&m_version_state))
+ if (copy->m_version_state != version_state)
return false;
return true;
@@ -238,7 +296,11 @@ struct pfs_lock
uint32 get_version()
{
- return (PFS_atomic::load_u32(&m_version_state) & VERSION_MASK);
+ uint32 version_state;
+
+ version_state= PFS_atomic::load_u32(&m_version_state);
+
+ return (version_state & VERSION_MASK);
}
};
diff --git a/storage/perfschema/pfs_memory.cc b/storage/perfschema/pfs_memory.cc
new file mode 100644
index 00000000000..c4e92d7d6b0
--- /dev/null
+++ b/storage/perfschema/pfs_memory.cc
@@ -0,0 +1,98 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/pfs_memory.cc
+ Memory statistics aggregation (implementation).
+*/
+
+#include "my_global.h"
+#include "my_sys.h"
+#include "pfs_global.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_account.h"
+#include "pfs_host.h"
+#include "pfs_user.h"
+#include "pfs_atomic.h"
+#include "pfs_buffer_container.h"
+#include "m_string.h"
+
+static void fct_reset_memory_by_thread(PFS_thread *pfs)
+{
+ PFS_account *account= sanitize_account(pfs->m_account);
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ aggregate_thread_memory(true, pfs, account, user, host);
+}
+
+/** Reset table MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME data. */
+void reset_memory_by_thread()
+{
+ global_thread_container.apply(fct_reset_memory_by_thread);
+}
+
+static void fct_reset_memory_by_account(PFS_account *pfs)
+{
+ PFS_user *user= sanitize_user(pfs->m_user);
+ PFS_host *host= sanitize_host(pfs->m_host);
+ pfs->aggregate_memory(true, user, host);
+}
+
+/** Reset table MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME data. */
+void reset_memory_by_account()
+{
+ global_account_container.apply(fct_reset_memory_by_account);
+}
+
+static void fct_reset_memory_by_user(PFS_user *pfs)
+{
+ pfs->aggregate_memory(true);
+}
+
+/** Reset table MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME data. */
+void reset_memory_by_user()
+{
+ global_user_container.apply(fct_reset_memory_by_user);
+}
+
+static void fct_reset_memory_by_host(PFS_host *pfs)
+{
+ pfs->aggregate_memory(true);
+}
+
+/** Reset table MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME data. */
+void reset_memory_by_host()
+{
+ global_host_container.apply(fct_reset_memory_by_host);
+}
+
+/** Reset table MEMORY_GLOBAL_BY_EVENT_NAME data. */
+void reset_memory_global()
+{
+ PFS_memory_stat *stat= global_instr_class_memory_array;
+ PFS_memory_stat *stat_last= global_instr_class_memory_array + memory_class_max;
+
+ for ( ; stat < stat_last; stat++)
+ stat->rebase();
+}
+
diff --git a/storage/perfschema/pfs_memory.h b/storage/perfschema/pfs_memory.h
new file mode 100644
index 00000000000..4dc21b892d5
--- /dev/null
+++ b/storage/perfschema/pfs_memory.h
@@ -0,0 +1,38 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef PFS_MEMORY_H
+#define PFS_MEMORY_H
+
+/**
+ @file storage/perfschema/pfs_memory.h
+ Memory statistics aggregation (declarations).
+*/
+
+void reset_memory_by_thread();
+void reset_memory_by_account();
+void reset_memory_by_user();
+void reset_memory_by_host();
+void reset_memory_global();
+
+#endif
+
diff --git a/storage/perfschema/pfs_prepared_stmt.cc b/storage/perfschema/pfs_prepared_stmt.cc
new file mode 100644
index 00000000000..dcb7991633a
--- /dev/null
+++ b/storage/perfschema/pfs_prepared_stmt.cc
@@ -0,0 +1,145 @@
+/* Copyright (c) 2014, 2017, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/pfs_prepared_stmt.cc
+ Prepared Statement data structures (implementation).
+*/
+
+/*
+ This code needs extra visibility in the lexer structures
+*/
+
+#include "my_global.h"
+#include "my_sys.h"
+#include "pfs_instr.h"
+#include "pfs_prepared_stmt.h"
+#include "pfs_global.h"
+#include "sql_string.h"
+#include "pfs_buffer_container.h"
+#include <string.h>
+
+/**
+ Initialize table PREPARED_STATEMENTS_INSTANCE.
+ @param param performance schema sizing
+*/
+int init_prepared_stmt(const PFS_global_param *param)
+{
+ if (global_prepared_stmt_container.init(param->m_prepared_stmt_sizing))
+ return 1;
+
+ reset_prepared_stmt_instances();
+ return 0;
+}
+
+/** Cleanup table PREPARED_STATEMENTS_INSTANCE. */
+void cleanup_prepared_stmt(void)
+{
+ global_prepared_stmt_container.cleanup();
+}
+
+void PFS_prepared_stmt::reset_data()
+{
+ m_prepare_stat.reset();
+ m_reprepare_stat.reset();
+ m_execute_stat.reset();
+}
+
+static void fct_reset_prepared_stmt_instances(PFS_prepared_stmt *pfs)
+{
+ pfs->reset_data();
+}
+
+void reset_prepared_stmt_instances()
+{
+ global_prepared_stmt_container.apply_all(fct_reset_prepared_stmt_instances);
+}
+
+PFS_prepared_stmt*
+create_prepared_stmt(void *identity,
+ PFS_thread *thread, PFS_program *pfs_program,
+ PFS_events_statements *pfs_stmt, uint stmt_id,
+ const char* stmt_name, uint stmt_name_length)
+{
+ PFS_prepared_stmt *pfs= NULL;
+ pfs_dirty_state dirty_state;
+
+ /* Create a new record in prepared stmt stat array. */
+ pfs= global_prepared_stmt_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ /* Reset the stats. */
+ pfs->reset_data();
+ /* Do the assignments. */
+ pfs->m_identity= identity;
+
+ pfs->m_sqltext_length= 0;
+
+ if (stmt_name != NULL)
+ {
+ pfs->m_stmt_name_length= stmt_name_length;
+ if (pfs->m_stmt_name_length > PS_NAME_LENGTH)
+ pfs->m_stmt_name_length= PS_NAME_LENGTH;
+ strncpy(pfs->m_stmt_name, stmt_name, pfs->m_stmt_name_length);
+ }
+ else
+ pfs->m_stmt_name_length= 0;
+
+ pfs->m_stmt_id= stmt_id;
+ pfs->m_owner_thread_id= thread->m_thread_internal_id;
+
+ /* If this statement prepare is called from a SP. */
+ if (pfs_program)
+ {
+ pfs->m_owner_object_type= pfs_program->m_type;
+ strncpy(pfs->m_owner_object_schema, pfs_program->m_schema_name, pfs_program->m_schema_name_length);
+ pfs->m_owner_object_schema_length= pfs_program->m_schema_name_length;
+ strncpy(pfs->m_owner_object_name, pfs_program->m_object_name, pfs_program->m_object_name_length);
+ pfs->m_owner_object_name_length= pfs_program->m_object_name_length;
+ }
+ else
+ {
+ pfs->m_owner_object_type= NO_OBJECT_TYPE;
+ pfs->m_owner_object_schema_length= 0;
+ pfs->m_owner_object_name_length= 0;
+ }
+
+ if (pfs_stmt)
+ {
+ if (pfs_program)
+ pfs->m_owner_event_id= pfs_stmt->m_nesting_event_id;
+ else
+ pfs->m_owner_event_id= pfs_stmt->m_event_id;
+ }
+
+ /* Insert this record. */
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ }
+
+ return pfs;
+}
+
+void delete_prepared_stmt(PFS_prepared_stmt *pfs)
+{
+ global_prepared_stmt_container.deallocate(pfs);
+ return;
+}
diff --git a/storage/perfschema/pfs_prepared_stmt.h b/storage/perfschema/pfs_prepared_stmt.h
new file mode 100644
index 00000000000..c163514ccc2
--- /dev/null
+++ b/storage/perfschema/pfs_prepared_stmt.h
@@ -0,0 +1,95 @@
+/* Copyright (c) 2014, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef PFS_PS_H
+#define PFS_PS_H
+
+/**
+ @file storage/perfschema/pfs_prepared_statement.h
+ Stored Program data structures (declarations).
+*/
+
+#include "pfs_stat.h"
+#include "include/mysql/psi/psi.h"
+#include "include/mysql/psi/mysql_ps.h"
+#include "pfs_program.h"
+
+#define PS_NAME_LENGTH NAME_LEN
+
+struct PFS_ALIGNED PFS_prepared_stmt : public PFS_instr
+{
+ /** Column OBJECT_INSTANCE_BEGIN */
+ const void *m_identity;
+
+ /** STATEMENT_ID */
+ ulonglong m_stmt_id;
+
+ /** STATEMENT_NAME */
+ char m_stmt_name[PS_NAME_LENGTH];
+ uint m_stmt_name_length;
+
+ /** SQL_TEXT */
+ char m_sqltext[COL_INFO_SIZE];
+ uint m_sqltext_length;
+
+ /** Column OWNER_THREAD_ID */
+ ulonglong m_owner_thread_id;
+
+ /** Column OWNER_EVENT_ID. */
+ ulonglong m_owner_event_id;
+
+ /** Column OBJECT_OWNER_TYPE. */
+ enum_object_type m_owner_object_type;
+
+ /** Column OBJECT_OWNER_SCHEMA. */
+ char m_owner_object_schema[COL_OBJECT_SCHEMA_SIZE];
+ uint m_owner_object_schema_length;
+
+ /** Column OBJECT_OWNER_NAME. */
+ char m_owner_object_name[COL_OBJECT_NAME_SIZE];
+ uint m_owner_object_name_length;
+
+ /** COLUMN TIMER_PREPARE. Prepared stmt prepare stat. */
+ PFS_single_stat m_prepare_stat;
+
+ /** COLUMN COUNT_REPREPARE. Prepared stmt reprepare stat. */
+ PFS_single_stat m_reprepare_stat;
+
+ /** Prepared stmt execution stat. */
+ PFS_statement_stat m_execute_stat;
+
+ /** Reset data for this record. */
+ void reset_data();
+};
+
+int init_prepared_stmt(const PFS_global_param *param);
+void cleanup_prepared_stmt(void);
+
+void reset_prepared_stmt_instances();
+
+PFS_prepared_stmt*
+create_prepared_stmt(void *identity,
+ PFS_thread *thread, PFS_program *pfs_program,
+ PFS_events_statements *pfs_stmt, uint stmt_id,
+ const char* stmt_name, uint stmt_name_length);
+void delete_prepared_stmt(PFS_prepared_stmt *pfs_ps);
+#endif
diff --git a/storage/perfschema/pfs_program.cc b/storage/perfschema/pfs_program.cc
new file mode 100644
index 00000000000..8e6d02c761c
--- /dev/null
+++ b/storage/perfschema/pfs_program.cc
@@ -0,0 +1,322 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/pfs_program.cc
+ Statement Digest data structures (implementation).
+*/
+
+/*
+ This code needs extra visibility in the lexer structures
+*/
+
+#include "my_global.h"
+#include "my_sys.h"
+#include "pfs_instr.h"
+#include "pfs_program.h"
+#include "pfs_global.h"
+#include "sql_string.h"
+#include "pfs_setup_object.h"
+#include "pfs_buffer_container.h"
+#include "mysqld.h" //system_charset_info
+#include <string.h>
+
+LF_HASH program_hash;
+static bool program_hash_inited= false;
+
+/**
+ Initialize table EVENTS_STATEMENTS_SUMMARY_BY_PROGRAM.
+ @param param performance schema sizing
+*/
+int init_program(const PFS_global_param *param)
+{
+ if (global_program_container.init(param->m_program_sizing))
+ return 1;
+
+ reset_esms_by_program();
+ return 0;
+}
+
+/** Cleanup table EVENTS_STATEMENTS_SUMMARY_BY_PROGRAM. */
+void cleanup_program(void)
+{
+ global_program_container.cleanup();
+}
+
+C_MODE_START
+static uchar *program_hash_get_key(const uchar *entry, size_t *length,
+ my_bool)
+{
+ const PFS_program * const *typed_entry;
+ const PFS_program *program;
+ const void *result;
+ typed_entry= reinterpret_cast<const PFS_program* const *> (entry);
+ DBUG_ASSERT(typed_entry != NULL);
+ program= *typed_entry;
+ DBUG_ASSERT(program != NULL);
+ *length= program->m_key.m_key_length;
+ result= program->m_key.m_hash_key;
+ return const_cast<uchar*> (reinterpret_cast<const uchar*> (result));
+}
+C_MODE_END
+
+/**
+ Initialize the program hash.
+ @return 0 on success
+*/
+int init_program_hash(const PFS_global_param *param)
+{
+ if ((! program_hash_inited) && (param->m_program_sizing != 0))
+ {
+ lf_hash_init(&program_hash, sizeof(PFS_program*), LF_HASH_UNIQUE,
+ 0, 0, program_hash_get_key, &my_charset_bin);
+ program_hash_inited= true;
+ }
+ return 0;
+}
+
+/** Cleanup the program hash. */
+void cleanup_program_hash(void)
+{
+ if (program_hash_inited)
+ {
+ lf_hash_destroy(&program_hash);
+ program_hash_inited= false;
+ }
+}
+
+static void set_program_key(PFS_program_key *key,
+ enum_object_type object_type,
+ const char *object_name, uint object_name_length,
+ const char *schema_name, uint schema_name_length)
+{
+ DBUG_ASSERT(object_name_length <= COL_OBJECT_NAME_SIZE);
+ DBUG_ASSERT(schema_name_length <= COL_OBJECT_SCHEMA_SIZE);
+
+ /*
+ To make sure generated key is case insensitive,
+ convert object_name/schema_name to lowercase.
+ */
+
+ char *ptr= &key->m_hash_key[0];
+
+ ptr[0]= object_type;
+ ptr++;
+
+ if (object_name_length > 0)
+ {
+ char tmp_object_name[COL_OBJECT_NAME_SIZE + 1];
+ memcpy(tmp_object_name, object_name, object_name_length);
+ tmp_object_name[object_name_length]= '\0';
+ my_casedn_str(system_charset_info, tmp_object_name);
+ memcpy(ptr, tmp_object_name, object_name_length);
+ ptr+= object_name_length;
+ }
+ ptr[0]= 0;
+ ptr++;
+
+ if (schema_name_length > 0)
+ {
+ char tmp_schema_name[COL_OBJECT_SCHEMA_SIZE + 1];
+ memcpy(tmp_schema_name, schema_name, schema_name_length);
+ tmp_schema_name[schema_name_length]='\0';
+ my_casedn_str(system_charset_info, tmp_schema_name);
+ memcpy(ptr, tmp_schema_name, schema_name_length);
+ ptr+= schema_name_length;
+ }
+ ptr[0]= 0;
+ ptr++;
+
+ key->m_key_length= static_cast<uint>(ptr - &key->m_hash_key[0]);
+}
+
+
+
+void PFS_program::reset_data()
+{
+ m_sp_stat.reset();
+ m_stmt_stat.reset();
+}
+
+static void fct_reset_esms_by_program(PFS_program *pfs)
+{
+ pfs->reset_data();
+}
+
+void reset_esms_by_program()
+{
+ global_program_container.apply_all(fct_reset_esms_by_program);
+}
+
+static LF_PINS* get_program_hash_pins(PFS_thread *thread)
+{
+ if (unlikely(thread->m_program_hash_pins == NULL))
+ {
+ if (! program_hash_inited)
+ return NULL;
+ thread->m_program_hash_pins= lf_hash_get_pins(&program_hash);
+ }
+ return thread->m_program_hash_pins;
+}
+
+PFS_program*
+find_or_create_program(PFS_thread *thread,
+ enum_object_type object_type,
+ const char *object_name,
+ uint object_name_length,
+ const char *schema_name,
+ uint schema_name_length)
+{
+ bool is_enabled, is_timed;
+
+ LF_PINS *pins= get_program_hash_pins(thread);
+ if (unlikely(pins == NULL))
+ {
+ global_program_container.m_lost++;
+ return NULL;
+ }
+
+ /* Prepare program key */
+ PFS_program_key key;
+ set_program_key(&key, object_type,
+ object_name, object_name_length,
+ schema_name, schema_name_length);
+
+ PFS_program **entry;
+ PFS_program *pfs= NULL;
+ uint retry_count= 0;
+ const uint retry_max= 3;
+ pfs_dirty_state dirty_state;
+
+search:
+ entry= reinterpret_cast<PFS_program**>
+ (lf_hash_search(&program_hash, pins,
+ key.m_hash_key, key.m_key_length));
+
+ if (entry && (entry != MY_ERRPTR))
+ {
+ /* If record already exists then return its pointer. */
+ pfs= *entry;
+ lf_hash_search_unpin(pins);
+ return pfs;
+ }
+
+ lf_hash_search_unpin(pins);
+
+ /*
+ First time while inserting this record to program array we need to
+ find out if it is enabled and timed.
+ */
+ lookup_setup_object(thread, object_type,
+ schema_name, schema_name_length,
+ object_name, object_name_length,
+ &is_enabled, &is_timed);
+
+ /* Else create a new record in program stat array. */
+ pfs= global_program_container.allocate(& dirty_state);
+ if (pfs != NULL)
+ {
+ /* Do the assignments. */
+ memcpy(pfs->m_key.m_hash_key, key.m_hash_key, key.m_key_length);
+ pfs->m_key.m_key_length= key.m_key_length;
+ pfs->m_type= object_type;
+
+ pfs->m_object_name= pfs->m_key.m_hash_key + 1;
+ pfs->m_object_name_length= object_name_length;
+ pfs->m_schema_name= pfs->m_object_name + object_name_length + 1;
+ pfs->m_schema_name_length= schema_name_length;
+ pfs->m_enabled= is_enabled;
+ pfs->m_timed= is_timed;
+
+ /* Insert this record. */
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ int res= lf_hash_insert(&program_hash, pins, &pfs);
+
+ if (likely(res == 0))
+ {
+ return pfs;
+ }
+
+ global_program_container.deallocate(pfs);
+
+ if (res > 0)
+ {
+ /* Duplicate insert by another thread */
+ if (++retry_count > retry_max)
+ {
+ /* Avoid infinite loops */
+ global_program_container.m_lost++;
+ return NULL;
+ }
+ goto search;
+ }
+ /* OOM in lf_hash_insert */
+ global_program_container.m_lost++;
+ return NULL;
+ }
+
+ return NULL;
+}
+
+void drop_program(PFS_thread *thread,
+ enum_object_type object_type,
+ const char *object_name,
+ uint object_name_length,
+ const char *schema_name,
+ uint schema_name_length)
+{
+ LF_PINS *pins= get_program_hash_pins(thread);
+ if (unlikely(pins == NULL))
+ return;
+
+ /* Prepare program key */
+ PFS_program_key key;
+ set_program_key(&key, object_type,
+ object_name, object_name_length,
+ schema_name, schema_name_length);
+
+ PFS_program **entry;
+ entry= reinterpret_cast<PFS_program**>
+ (lf_hash_search(&program_hash, pins,
+ key.m_hash_key, key.m_key_length));
+
+ if (entry && (entry != MY_ERRPTR))
+ {
+ PFS_program *pfs= NULL;
+ pfs= *entry;
+
+ lf_hash_delete(&program_hash, pins,
+ key.m_hash_key, key.m_key_length);
+ global_program_container.deallocate(pfs);
+ }
+
+ lf_hash_search_unpin(pins);
+ return;
+}
+
+void PFS_program::refresh_setup_object_flags(PFS_thread *thread)
+{
+ lookup_setup_object(thread, m_type,
+ m_schema_name, m_schema_name_length,
+ m_object_name, m_object_name_length,
+ &m_enabled, &m_timed);
+}
diff --git a/storage/perfschema/pfs_program.h b/storage/perfschema/pfs_program.h
new file mode 100644
index 00000000000..0cbd24b8699
--- /dev/null
+++ b/storage/perfschema/pfs_program.h
@@ -0,0 +1,103 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef PFS_PROGRAM_H
+#define PFS_PROGRAM_H
+
+/**
+ @file storage/perfschema/pfs_program.h
+ Stored Program data structures (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_stat.h"
+
+#define PROGRAM_HASH_KEY_LENGTH sizeof(enum_object_type) + COL_OBJECT_NAME_SIZE + 1 + COL_OBJECT_SCHEMA_SIZE + 1
+
+extern LF_HASH program_hash;
+
+/**
+ Hash key for a program.
+*/
+struct PFS_program_key
+{
+ /**
+ Hash search key.
+ This has to be a string for LF_HASH,
+ the format is "<object_type><0x00><object_name><0x00><schema_name><0x00>"
+ */
+ char m_hash_key[PROGRAM_HASH_KEY_LENGTH];
+ uint m_key_length;
+};
+
+struct PFS_ALIGNED PFS_program : public PFS_instr
+{
+ /** Object type. */
+ enum_object_type m_type;
+
+ /** Object name. */
+ const char *m_object_name;
+ int m_object_name_length;
+
+ /** Object Schema name. */
+ const char *m_schema_name;
+ int m_schema_name_length;
+
+ /** Hash key */
+ PFS_program_key m_key;
+
+ /** Sub statement stat. */
+ PFS_statement_stat m_stmt_stat;
+
+ /** Stored program stat. */
+ PFS_sp_stat m_sp_stat;
+
+ /** Referesh setup object flags. */
+ void refresh_setup_object_flags(PFS_thread* thread);
+
+ /** Reset data for this record. */
+ void reset_data();
+};
+
+int init_program(const PFS_global_param *param);
+void cleanup_program(void);
+int init_program_hash(const PFS_global_param *param);
+void cleanup_program_hash(void);
+
+void reset_esms_by_program();
+
+PFS_program*
+find_or_create_program(PFS_thread *thread,
+ enum_object_type object_type,
+ const char *object_name,
+ uint object_name_length,
+ const char *schema,
+ uint schema_length);
+
+void
+drop_program(PFS_thread *thread,
+ enum_object_type object_type,
+ const char *object_name,
+ uint object_name_length,
+ const char *schema_name,
+ uint schema_name_length);
+#endif
diff --git a/storage/perfschema/pfs_server.cc b/storage/perfschema/pfs_server.cc
index f3f22bbcf4f..63deba92de8 100644
--- a/storage/perfschema/pfs_server.cc
+++ b/storage/perfschema/pfs_server.cc
@@ -32,10 +32,12 @@
#include "pfs.h"
#include "pfs_global.h"
#include "pfs_instr_class.h"
+#include "pfs_builtin_memory.h"
#include "pfs_instr.h"
#include "pfs_events_waits.h"
#include "pfs_events_stages.h"
#include "pfs_events_statements.h"
+#include "pfs_events_transactions.h"
#include "pfs_timer.h"
#include "pfs_setup_actor.h"
#include "pfs_setup_object.h"
@@ -44,6 +46,9 @@
#include "pfs_account.h"
#include "pfs_defaults.h"
#include "pfs_digest.h"
+#include "pfs_program.h"
+//#include "template_utils.h"
+#include "pfs_prepared_stmt.h"
PFS_global_param pfs_param;
@@ -56,48 +61,69 @@ C_MODE_END
static void cleanup_performance_schema(void);
void cleanup_instrument_config(void);
-struct PSI_bootstrap*
-initialize_performance_schema(PFS_global_param *param)
+void pre_initialize_performance_schema()
{
pfs_initialized= false;
+ init_all_builtin_memory_class();
+
PFS_table_stat::g_reset_template.reset();
global_idle_stat.reset();
global_table_io_stat.reset();
global_table_lock_stat.reset();
- pfs_automated_sizing(param);
+ if (my_create_thread_local_key(&THR_PFS, destroy_pfs_thread))
+ return;
+ if (my_create_thread_local_key(&THR_PFS_VG, NULL)) // global_variables
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SV, NULL)) // session_variables
+ return;
+ if (my_create_thread_local_key(&THR_PFS_VBT, NULL)) // variables_by_thread
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SG, NULL)) // global_status
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SS, NULL)) // session_status
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SBT, NULL)) // status_by_thread
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SBU, NULL)) // status_by_user
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SBH, NULL)) // status_by_host
+ return;
+ if (my_create_thread_local_key(&THR_PFS_SBA, NULL)) // status_by_account
+ return;
+
+ THR_PFS_initialized= true;
+}
- if (! param->m_enabled)
+struct PSI_bootstrap*
+initialize_performance_schema(PFS_global_param *param)
+{
+ if (!THR_PFS_initialized)
{
- /*
- The performance schema is disabled in the startup command line.
- All the instrumentation is turned off.
- */
- pfs_enabled= 0;
+ /* Pre-initialization failed. */
return NULL;
}
- pfs_enabled= TRUE;
- init_timers();
+ pfs_enabled= param->m_enabled;
+ pfs_automated_sizing(param);
+ init_timers();
init_event_name_sizing(param);
register_global_classes();
- if (pthread_key_create(&THR_PFS, destroy_pfs_thread))
- return NULL;
-
- THR_PFS_initialized= true;
-
if (init_sync_class(param->m_mutex_class_sizing,
param->m_rwlock_class_sizing,
param->m_cond_class_sizing) ||
init_thread_class(param->m_thread_class_sizing) ||
init_table_share(param->m_table_share_sizing) ||
+ init_table_share_lock_stat(param->m_table_lock_stat_sizing) ||
+ init_table_share_index_stat(param->m_index_stat_sizing) ||
init_file_class(param->m_file_class_sizing) ||
init_stage_class(param->m_stage_class_sizing) ||
init_statement_class(param->m_statement_class_sizing) ||
init_socket_class(param->m_socket_class_sizing) ||
+ init_memory_class(param->m_memory_class_sizing) ||
init_instruments(param) ||
init_events_waits_history_long(
param->m_events_waits_history_long_sizing) ||
@@ -105,20 +131,25 @@ initialize_performance_schema(PFS_global_param *param)
param->m_events_stages_history_long_sizing) ||
init_events_statements_history_long(
param->m_events_statements_history_long_sizing) ||
- init_file_hash() ||
- init_table_share_hash() ||
+ init_events_transactions_history_long(
+ param->m_events_transactions_history_long_sizing) ||
+ init_file_hash(param) ||
+ init_table_share_hash(param) ||
init_setup_actor(param) ||
- init_setup_actor_hash() ||
+ init_setup_actor_hash(param) ||
init_setup_object(param) ||
- init_setup_object_hash() ||
+ init_setup_object_hash(param) ||
init_host(param) ||
- init_host_hash() ||
+ init_host_hash(param) ||
init_user(param) ||
- init_user_hash() ||
+ init_user_hash(param) ||
init_account(param) ||
- init_account_hash() ||
+ init_account_hash(param) ||
init_digest(param) ||
- init_digest_hash())
+ init_digest_hash(param) ||
+ init_program(param) ||
+ init_program_hash(param) ||
+ init_prepared_stmt(param))
{
/*
The performance schema initialization failed.
@@ -128,24 +159,53 @@ initialize_performance_schema(PFS_global_param *param)
return NULL;
}
+ if (param->m_enabled)
+ {
+ /** Default values for SETUP_CONSUMERS */
+ flag_events_stages_current= param->m_consumer_events_stages_current_enabled;
+ flag_events_stages_history= param->m_consumer_events_stages_history_enabled;
+ flag_events_stages_history_long= param->m_consumer_events_stages_history_long_enabled;
+ flag_events_statements_current= param->m_consumer_events_statements_current_enabled;
+ flag_events_statements_history= param->m_consumer_events_statements_history_enabled;
+ flag_events_statements_history_long= param->m_consumer_events_statements_history_long_enabled;
+ flag_events_transactions_current= param->m_consumer_events_transactions_current_enabled;
+ flag_events_transactions_history= param->m_consumer_events_transactions_history_enabled;
+ flag_events_transactions_history_long= param->m_consumer_events_transactions_history_long_enabled;
+ flag_events_waits_current= param->m_consumer_events_waits_current_enabled;
+ flag_events_waits_history= param->m_consumer_events_waits_history_enabled;
+ flag_events_waits_history_long= param->m_consumer_events_waits_history_long_enabled;
+ flag_global_instrumentation= param->m_consumer_global_instrumentation_enabled;
+ flag_thread_instrumentation= param->m_consumer_thread_instrumentation_enabled;
+ flag_statements_digest= param->m_consumer_statement_digest_enabled;
+ }
+ else
+ {
+ flag_events_stages_current= false;
+ flag_events_stages_history= false;
+ flag_events_stages_history_long= false;
+ flag_events_statements_current= false;
+ flag_events_statements_history= false;
+ flag_events_statements_history_long= false;
+ flag_events_transactions_current= false;
+ flag_events_transactions_history= false;
+ flag_events_transactions_history_long= false;
+ flag_events_waits_current= false;
+ flag_events_waits_history= false;
+ flag_events_waits_history_long= false;
+ flag_global_instrumentation= false;
+ flag_thread_instrumentation= false;
+ flag_statements_digest= false;
+ }
+
pfs_initialized= true;
- /** Default values for SETUP_CONSUMERS */
- flag_events_stages_current= param->m_consumer_events_stages_current_enabled;
- flag_events_stages_history= param->m_consumer_events_stages_history_enabled;
- flag_events_stages_history_long= param->m_consumer_events_stages_history_long_enabled;
- flag_events_statements_current= param->m_consumer_events_statements_current_enabled;
- flag_events_statements_history= param->m_consumer_events_statements_history_enabled;
- flag_events_statements_history_long= param->m_consumer_events_statements_history_long_enabled;
- flag_events_waits_current= param->m_consumer_events_waits_current_enabled;
- flag_events_waits_history= param->m_consumer_events_waits_history_enabled;
- flag_events_waits_history_long= param->m_consumer_events_waits_history_long_enabled;
- flag_global_instrumentation= param->m_consumer_global_instrumentation_enabled;
- flag_thread_instrumentation= param->m_consumer_thread_instrumentation_enabled;
- flag_statements_digest= param->m_consumer_statement_digest_enabled;
-
- install_default_setup(&PFS_bootstrap);
- return &PFS_bootstrap;
+ if (param->m_enabled)
+ {
+ install_default_setup(&PFS_bootstrap);
+ return &PFS_bootstrap;
+ }
+
+ return NULL;
}
static void destroy_pfs_thread(void *key)
@@ -169,50 +229,131 @@ static void destroy_pfs_thread(void *key)
static void cleanup_performance_schema(void)
{
+ /*
+ my.cnf options
+ */
+
cleanup_instrument_config();
- cleanup_instruments();
+
+ /*
+ All the LF_HASH
+ */
+
+ cleanup_setup_actor_hash();
+ cleanup_setup_object_hash();
+ cleanup_account_hash();
+ cleanup_host_hash();
+ cleanup_user_hash();
+ cleanup_program_hash();
+ cleanup_table_share_hash();
+ cleanup_file_hash();
+ cleanup_digest_hash();
+
+ /*
+ Then the lookup tables
+ */
+
+ cleanup_setup_actor();
+ cleanup_setup_object();
+
+ /*
+ Then the history tables
+ */
+
+ cleanup_events_waits_history_long();
+ cleanup_events_stages_history_long();
+ cleanup_events_statements_history_long();
+ cleanup_events_transactions_history_long();
+
+ /*
+ Then the various aggregations
+ */
+
+ cleanup_digest();
+ cleanup_account();
+ cleanup_host();
+ cleanup_user();
+
+ /*
+ Then the instrument classes.
+ Once a class is cleaned up,
+ find_XXX_class(key)
+ will return PSI_NOT_INSTRUMENTED
+ */
+ cleanup_program();
+ cleanup_prepared_stmt();
cleanup_sync_class();
cleanup_thread_class();
cleanup_table_share();
+ cleanup_table_share_lock_stat();
+ cleanup_table_share_index_stat();
cleanup_file_class();
cleanup_stage_class();
cleanup_statement_class();
cleanup_socket_class();
- cleanup_events_waits_history_long();
- cleanup_events_stages_history_long();
- cleanup_events_statements_history_long();
- cleanup_table_share_hash();
- cleanup_file_hash();
- cleanup_setup_actor();
- cleanup_setup_actor_hash();
- cleanup_setup_object();
- cleanup_setup_object_hash();
- cleanup_host();
- cleanup_host_hash();
- cleanup_user();
- cleanup_user_hash();
- cleanup_account();
- cleanup_account_hash();
- cleanup_digest();
- cleanup_digest_hash();
+ cleanup_memory_class();
+
+ cleanup_instruments();
}
void shutdown_performance_schema(void)
{
pfs_initialized= false;
+
+ /* disable everything, especially for this thread. */
+ flag_events_stages_current= false;
+ flag_events_stages_history= false;
+ flag_events_stages_history_long= false;
+ flag_events_statements_current= false;
+ flag_events_statements_history= false;
+ flag_events_statements_history_long= false;
+ flag_events_transactions_current= false;
+ flag_events_transactions_history= false;
+ flag_events_transactions_history_long= false;
+ flag_events_waits_current= false;
+ flag_events_waits_history= false;
+ flag_events_waits_history_long= false;
+ flag_global_instrumentation= false;
+ flag_thread_instrumentation= false;
+ flag_statements_digest= false;
+
+ global_table_io_class.m_enabled= false;
+ global_table_lock_class.m_enabled= false;
+ global_idle_class.m_enabled= false;
+ global_metadata_class.m_enabled= false;
+ global_transaction_class.m_enabled= false;
+
cleanup_performance_schema();
-#if 0
/*
Be careful to not delete un-initialized keys,
this would affect key 0, which is THR_KEY_mysys,
*/
if (THR_PFS_initialized)
{
- my_pthread_setspecific_ptr(THR_PFS, NULL);
- pthread_key_delete(THR_PFS);
+ my_set_thread_local(THR_PFS, NULL);
+ my_set_thread_local(THR_PFS_VG, NULL); // global_variables
+ my_set_thread_local(THR_PFS_SV, NULL); // session_variables
+ my_set_thread_local(THR_PFS_VBT, NULL); // variables_by_thread
+ my_set_thread_local(THR_PFS_SG, NULL); // global_status
+ my_set_thread_local(THR_PFS_SS, NULL); // session_status
+ my_set_thread_local(THR_PFS_SBT, NULL); // status_by_thread
+ my_set_thread_local(THR_PFS_SBU, NULL); // status_by_user
+ my_set_thread_local(THR_PFS_SBH, NULL); // status_by_host
+ my_set_thread_local(THR_PFS_SBA, NULL); // status_by_account
+
+ my_delete_thread_local_key(THR_PFS);
+ my_delete_thread_local_key(THR_PFS_VG);
+ my_delete_thread_local_key(THR_PFS_SV);
+ my_delete_thread_local_key(THR_PFS_VBT);
+ my_delete_thread_local_key(THR_PFS_SG);
+ my_delete_thread_local_key(THR_PFS_SS);
+ my_delete_thread_local_key(THR_PFS_SBT);
+ my_delete_thread_local_key(THR_PFS_SBU);
+ my_delete_thread_local_key(THR_PFS_SBH);
+ my_delete_thread_local_key(THR_PFS_SBA);
+
THR_PFS_initialized= false;
}
-#endif
}
/**
@@ -221,27 +362,22 @@ void shutdown_performance_schema(void)
*/
void init_pfs_instrument_array()
{
- my_init_dynamic_array(&pfs_instr_config_array, sizeof(PFS_instr_config*),
- 10, 10, MYF(0));
- pfs_instr_config_state= PFS_INSTR_CONFIG_ALLOCATED;
+ pfs_instr_config_array= new Pfs_instr_config_array((PSI_memory_key)PSI_NOT_INSTRUMENTED);
}
/**
- Deallocate the PFS_INSTRUMENT array. Use an atomic compare-and-swap to ensure
- that it is deallocated only once in the chaotic environment of server shutdown.
+ Deallocate the PFS_INSTRUMENT array.
*/
void cleanup_instrument_config()
{
- int desired_state= PFS_INSTR_CONFIG_ALLOCATED;
-
- /* Ignore if another thread has already deallocated the array */
- if (my_atomic_cas32(&pfs_instr_config_state, &desired_state, PFS_INSTR_CONFIG_DEALLOCATED))
+ if (pfs_instr_config_array != NULL)
{
- PFS_instr_config **array=dynamic_element(&pfs_instr_config_array, 0, PFS_instr_config**);
- for (uint i=0; i < pfs_instr_config_array.elements; i++)
- my_free(array[i]);
- delete_dynamic(&pfs_instr_config_array);
+ PFS_instr_config **it= pfs_instr_config_array->front();
+ for ( ; it != pfs_instr_config_array->end(); it++)
+ my_free(*it);
}
+ delete pfs_instr_config_array;
+ pfs_instr_config_array= NULL;
}
/**
@@ -260,16 +396,17 @@ int add_pfs_instr_to_array(const char* name, const char* value)
size_t value_length= strlen(value);
/* Allocate structure plus string buffers plus null terminators */
- PFS_instr_config* e = (PFS_instr_config*)my_malloc(sizeof(PFS_instr_config)
+ PFS_instr_config* e = (PFS_instr_config*)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(PFS_instr_config)
+ name_length + 1 + value_length + 1, MYF(MY_WME));
if (!e) return 1;
-
+
/* Copy the instrument name */
e->m_name= (char*)e + sizeof(PFS_instr_config);
memcpy(e->m_name, name, name_length);
e->m_name_length= (uint)name_length;
e->m_name[name_length]= '\0';
-
+
/* Set flags accordingly */
if (!my_strcasecmp(&my_charset_latin1, value, "counted"))
{
@@ -301,7 +438,7 @@ int add_pfs_instr_to_array(const char* name, const char* value)
}
/* Add to the array of default startup options */
- if (insert_dynamic(&pfs_instr_config_array, &e))
+ if (pfs_instr_config_array->push(e))
{
my_free(e);
return 1;
diff --git a/storage/perfschema/pfs_server.h b/storage/perfschema/pfs_server.h
index 9f904e6545b..68f6f71d619 100644
--- a/storage/perfschema/pfs_server.h
+++ b/storage/perfschema/pfs_server.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2018, 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, version 2.0,
@@ -28,11 +28,14 @@
Private interface for the server (declarations).
*/
+#define PFS_AUTOSCALE_VALUE (-1)
+#define PFS_AUTOSIZE_VALUE (-1)
+
#ifndef PFS_MAX_MUTEX_CLASS
- #define PFS_MAX_MUTEX_CLASS 200
+ #define PFS_MAX_MUTEX_CLASS 210
#endif
#ifndef PFS_MAX_RWLOCK_CLASS
- #define PFS_MAX_RWLOCK_CLASS 40
+ #define PFS_MAX_RWLOCK_CLASS 50
#endif
#ifndef PFS_MAX_COND_CLASS
#define PFS_MAX_COND_CLASS 90
@@ -41,7 +44,7 @@
#define PFS_MAX_THREAD_CLASS 50
#endif
#ifndef PFS_MAX_FILE_CLASS
- #define PFS_MAX_FILE_CLASS 50
+ #define PFS_MAX_FILE_CLASS 80
#endif
#ifndef PFS_MAX_FILE_HANDLE
#define PFS_MAX_FILE_HANDLE 32768
@@ -49,28 +52,29 @@
#ifndef PFS_MAX_SOCKET_CLASS
#define PFS_MAX_SOCKET_CLASS 10
#endif
-#ifndef PFS_MAX_SETUP_ACTOR
- #define PFS_MAX_SETUP_ACTOR 100
-#endif
-#ifndef PFS_MAX_SETUP_OBJECT
- #define PFS_MAX_SETUP_OBJECT 100
-#endif
#ifndef PFS_MAX_STAGE_CLASS
#define PFS_MAX_STAGE_CLASS 160
#endif
#ifndef PFS_STATEMENTS_STACK_SIZE
#define PFS_STATEMENTS_STACK_SIZE 10
#endif
-#ifndef PFS_CONNECT_ATTRS_SIZE
- #define PFS_SESSION_CONNECT_ATTRS_SIZE 2048
+#ifndef PFS_MAX_MEMORY_CLASS
+ #define PFS_MAX_MEMORY_CLASS 320
#endif
+/** Sizing hints, from the server configuration. */
struct PFS_sizing_hints
{
+ /** Value of @c Sys_table_def_size */
long m_table_definition_cache;
+ /** Value of @c Sys_table_cache_size */
long m_table_open_cache;
+ /** Value of @c Sys_max_connections */
long m_max_connections;
+ /** Value of @c Sys_open_files_limit */
long m_open_files_limit;
+ /** Value of @c Sys_max_prepared_stmt_count */
+ long m_max_prepared_stmt_count;
};
/** Performance schema global sizing parameters. */
@@ -85,6 +89,9 @@ struct PFS_global_param
bool m_consumer_events_statements_current_enabled;
bool m_consumer_events_statements_history_enabled;
bool m_consumer_events_statements_history_long_enabled;
+ bool m_consumer_events_transactions_current_enabled;
+ bool m_consumer_events_transactions_history_enabled;
+ bool m_consumer_events_transactions_history_long_enabled;
bool m_consumer_events_waits_current_enabled;
bool m_consumer_events_waits_history_enabled;
bool m_consumer_events_waits_history_long_enabled;
@@ -121,6 +128,16 @@ struct PFS_global_param
*/
long m_table_share_sizing;
/**
+ Maximum number of lock statistics collected for tables.
+ @sa table_lock_stat_lost.
+ */
+ long m_table_lock_stat_sizing;
+ /**
+ Maximum number of index statistics collected for tables.
+ @sa table_index_lost.
+ */
+ long m_index_stat_sizing;
+ /**
Maximum number of instrumented file classes.
@sa file_class_lost.
*/
@@ -162,7 +179,7 @@ struct PFS_global_param
long m_file_handle_sizing;
/**
Maxium number of instrumented socket instances
- @sa socket_lost
+ @sa socket_lost
*/
long m_socket_sizing;
/**
@@ -175,9 +192,9 @@ struct PFS_global_param
/** Maximum number of rows in table EVENTS_WAITS_HISTORY_LONG. */
long m_events_waits_history_long_sizing;
/** Maximum number of rows in table SETUP_ACTORS. */
- ulong m_setup_actor_sizing;
+ long m_setup_actor_sizing;
/** Maximum number of rows in table SETUP_OBJECTS. */
- ulong m_setup_object_sizing;
+ long m_setup_object_sizing;
/** Maximum number of rows in table HOSTS. */
long m_host_sizing;
/** Maximum number of rows in table USERS. */
@@ -198,16 +215,36 @@ struct PFS_global_param
@sa statement_class_lost.
*/
ulong m_statement_class_sizing;
- /** Maximum number of rows per thread in table EVENTS_STATEMENT_HISTORY. */
+ /** Maximum number of rows per thread in table EVENTS_STATEMENTS_HISTORY. */
long m_events_statements_history_sizing;
/** Maximum number of rows in table EVENTS_STATEMENTS_HISTORY_LONG. */
long m_events_statements_history_long_sizing;
/** Maximum number of digests to be captured */
long m_digest_sizing;
+ /** Maximum number of programs to be captured */
+ long m_program_sizing;
+ /** Maximum number of prepared statements to be captured */
+ long m_prepared_stmt_sizing;
+ /** Maximum number of rows per thread in table EVENTS_TRANSACTIONS_HISTORY. */
+ long m_events_transactions_history_sizing;
+ /** Maximum number of rows in table EVENTS_TRANSACTIONS_HISTORY_LONG. */
+ long m_events_transactions_history_long_sizing;
+
/** Maximum number of session attribute strings per thread */
long m_session_connect_attrs_sizing;
+ /** Maximum size of statement stack */
+ ulong m_statement_stack_sizing;
+
+ /**
+ Maximum number of instrumented memory classes.
+ @sa memory_class_lost.
+ */
+ ulong m_memory_class_sizing;
+
+ long m_metadata_lock_sizing;
long m_max_digest_length;
+ ulong m_max_sql_text_length;
/** Sizing hints, for auto tuning. */
PFS_sizing_hints m_hints;
@@ -220,9 +257,17 @@ struct PFS_global_param
extern PFS_global_param pfs_param;
/**
+ Null initialization.
+ Disable all instrumentation, size all internal buffers to 0.
+ This pre initialization step is needed to ensure that events can be collected
+ and discarded, until such time @c initialize_performance_schema() is called.
+*/
+void pre_initialize_performance_schema();
+
+/**
Initialize the performance schema.
@param param Size parameters to use.
- @return A boostrap handle, or NULL.
+ @return A bootstrap handle, or NULL.
*/
struct PSI_bootstrap*
initialize_performance_schema(PFS_global_param *param);
@@ -233,14 +278,19 @@ void pfs_automated_sizing(PFS_global_param *param);
Initialize the performance schema ACL.
ACL is strictly enforced when the server is running in normal mode,
to enforce that only legal operations are allowed.
- When running in boostrap mode, ACL restrictions are relaxed,
- to allow the boostrap scripts to DROP / CREATE performance schema tables.
+ When running in bootstrap mode, ACL restrictions are relaxed,
+ to allow the bootstrap scripts to DROP / CREATE performance schema tables.
@sa ACL_internal_schema_registry
@param bootstrap True if the server is starting in bootstrap mode.
*/
void initialize_performance_schema_acl(bool bootstrap);
/**
+ Reset the aggregated status counter stats.
+*/
+void reset_pfs_status_stats();
+
+/**
Initialize the dynamic array holding individual instrument settings collected
from the server configuration options.
*/
diff --git a/storage/perfschema/pfs_setup_actor.cc b/storage/perfschema/pfs_setup_actor.cc
index c4cec6c9ff8..96b367b65db 100644
--- a/storage/perfschema/pfs_setup_actor.cc
+++ b/storage/perfschema/pfs_setup_actor.cc
@@ -32,23 +32,15 @@
#include "pfs_stat.h"
#include "pfs_instr.h"
#include "pfs_setup_actor.h"
+#include "pfs_account.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
/**
@addtogroup Performance_schema_buffers
@{
*/
-/** Size of the setup_actor instances array. @sa setup_actor_array */
-ulong setup_actor_max;
-
-/**
- Setup_actor instances array.
- @sa setup_actor_max
-*/
-
-PFS_setup_actor *setup_actor_array= NULL;
-
/** Hash table for setup_actor records. */
LF_HASH setup_actor_hash;
/** True if @c setup_actor_hash is initialized. */
@@ -61,27 +53,13 @@ static bool setup_actor_hash_inited= false;
*/
int init_setup_actor(const PFS_global_param *param)
{
- setup_actor_max= param->m_setup_actor_sizing;
-
- setup_actor_array= NULL;
-
- if (setup_actor_max > 0)
- {
- setup_actor_array= PFS_MALLOC_ARRAY(setup_actor_max, sizeof(PFS_setup_actor),
- PFS_setup_actor, MYF(MY_ZEROFILL));
- if (unlikely(setup_actor_array == NULL))
- return 1;
- }
-
- return 0;
+ return global_setup_actor_container.init(param->m_setup_actor_sizing);
}
/** Cleanup all the setup actor buffers. */
void cleanup_setup_actor(void)
{
- pfs_free(setup_actor_array);
- setup_actor_array= NULL;
- setup_actor_max= 0;
+ global_setup_actor_container.cleanup();
}
C_MODE_START
@@ -105,13 +83,13 @@ C_MODE_END
Initialize the setup actor hash.
@return 0 on success
*/
-int init_setup_actor_hash(void)
+int init_setup_actor_hash(const PFS_global_param *param)
{
- if ((! setup_actor_hash_inited) && (setup_actor_max > 0))
+ if ((! setup_actor_hash_inited) && (param->m_setup_actor_sizing != 0))
{
lf_hash_init(&setup_actor_hash, sizeof(PFS_setup_actor*), LF_HASH_UNIQUE,
0, 0, setup_actor_hash_get_key, &my_charset_bin);
- /* setup_actor_hash.size= setup_actor_max; */
+ /* setup_actor_hash.size= param->m_setup_actor_sizing; */
setup_actor_hash_inited= true;
}
return 0;
@@ -162,11 +140,9 @@ static void set_setup_actor_key(PFS_setup_actor_key *key,
key->m_key_length= (uint)(ptr - &key->m_hash_key[0]);
}
-int insert_setup_actor(const String *user, const String *host, const String *role)
+int insert_setup_actor(const String *user, const String *host, const String *role,
+ bool enabled, bool history)
{
- if (setup_actor_max == 0)
- return HA_ERR_RECORD_FILE_FULL;
-
PFS_thread *thread= PFS_thread::get_current_thread();
if (unlikely(thread == NULL))
return HA_ERR_OUT_OF_MEM;
@@ -175,46 +151,39 @@ int insert_setup_actor(const String *user, const String *host, const String *rol
if (unlikely(pins == NULL))
return HA_ERR_OUT_OF_MEM;
- static uint PFS_ALIGNED setup_actor_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_setup_actor *pfs;
+ pfs_dirty_state dirty_state;
- while (++attempts <= setup_actor_max)
+ pfs= global_setup_actor_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& setup_actor_monotonic_index, 1) % setup_actor_max;
- pfs= setup_actor_array + index;
-
- if (pfs->m_lock.is_free())
+ set_setup_actor_key(&pfs->m_key,
+ user->ptr(), user->length(),
+ host->ptr(), host->length(),
+ role->ptr(), role->length());
+ pfs->m_username= &pfs->m_key.m_hash_key[0];
+ pfs->m_username_length= user->length();
+ pfs->m_hostname= pfs->m_username + pfs->m_username_length + 1;
+ pfs->m_hostname_length= host->length();
+ pfs->m_rolename= pfs->m_hostname + pfs->m_hostname_length + 1;
+ pfs->m_rolename_length= role->length();
+ pfs->m_enabled= enabled;
+ pfs->m_history= history;
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&setup_actor_hash, pins, &pfs);
+ if (likely(res == 0))
{
- if (pfs->m_lock.free_to_dirty())
- {
- set_setup_actor_key(&pfs->m_key,
- user->ptr(), user->length(),
- host->ptr(), host->length(),
- role->ptr(), role->length());
- pfs->m_username= &pfs->m_key.m_hash_key[0];
- pfs->m_username_length= user->length();
- pfs->m_hostname= pfs->m_username + pfs->m_username_length + 1;
- pfs->m_hostname_length= host->length();
- pfs->m_rolename= pfs->m_hostname + pfs->m_hostname_length + 1;
- pfs->m_rolename_length= role->length();
-
- int res;
- res= lf_hash_insert(&setup_actor_hash, pins, &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- return 0;
- }
-
- pfs->m_lock.dirty_to_free();
- if (res > 0)
- return HA_ERR_FOUND_DUPP_KEY;
- return HA_ERR_OUT_OF_MEM;
- }
+ update_setup_actors_derived_flags();
+ return 0;
}
+
+ global_setup_actor_container.deallocate(pfs);
+
+ if (res > 0)
+ return HA_ERR_FOUND_DUPP_KEY;
+ return HA_ERR_OUT_OF_MEM;
}
return HA_ERR_RECORD_FILE_FULL;
@@ -244,14 +213,36 @@ int delete_setup_actor(const String *user, const String *host, const String *rol
{
PFS_setup_actor *pfs= *entry;
lf_hash_delete(&setup_actor_hash, pins, key.m_hash_key, key.m_key_length);
- pfs->m_lock.allocated_to_free();
+ global_setup_actor_container.deallocate(pfs);
}
lf_hash_search_unpin(pins);
+ update_setup_actors_derived_flags();
+
return 0;
}
+class Proc_reset_setup_actor
+ : public PFS_buffer_processor<PFS_setup_actor>
+{
+public:
+ Proc_reset_setup_actor(LF_PINS* pins)
+ : m_pins(pins)
+ {}
+
+ virtual void operator()(PFS_setup_actor *pfs)
+ {
+ lf_hash_delete(&setup_actor_hash, m_pins,
+ pfs->m_key.m_hash_key, pfs->m_key.m_key_length);
+
+ global_setup_actor_container.deallocate(pfs);
+ }
+
+private:
+ LF_PINS* m_pins;
+};
+
int reset_setup_actor()
{
PFS_thread *thread= PFS_thread::get_current_thread();
@@ -262,18 +253,11 @@ int reset_setup_actor()
if (unlikely(pins == NULL))
return HA_ERR_OUT_OF_MEM;
- PFS_setup_actor *pfs= setup_actor_array;
- PFS_setup_actor *pfs_last= setup_actor_array + setup_actor_max;
+ Proc_reset_setup_actor proc(pins);
+ // FIXME: delete helper instead
+ global_setup_actor_container.apply(proc);
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- lf_hash_delete(&setup_actor_hash, pins,
- pfs->m_key.m_hash_key, pfs->m_key.m_key_length);
- pfs->m_lock.allocated_to_free();
- }
- }
+ update_setup_actors_derived_flags();
return 0;
}
@@ -291,7 +275,7 @@ long setup_actor_count()
void lookup_setup_actor(PFS_thread *thread,
const char *user, uint user_length,
const char *host, uint host_length,
- bool *enabled)
+ bool *enabled, bool *history)
{
PFS_setup_actor_key key;
PFS_setup_actor **entry;
@@ -301,6 +285,7 @@ void lookup_setup_actor(PFS_thread *thread,
if (unlikely(pins == NULL))
{
*enabled= false;
+ *history= false;
return;
}
@@ -330,15 +315,28 @@ void lookup_setup_actor(PFS_thread *thread,
if (entry && (entry != MY_ERRPTR))
{
+ PFS_setup_actor *pfs= *entry;
lf_hash_search_unpin(pins);
- *enabled= true;
+ *enabled= pfs->m_enabled;
+ *history= pfs->m_history;
return;
}
lf_hash_search_unpin(pins);
}
*enabled= false;
+ *history= false;
return;
}
+int update_setup_actors_derived_flags()
+{
+ PFS_thread *thread= PFS_thread::get_current_thread();
+ if (unlikely(thread == NULL))
+ return HA_ERR_OUT_OF_MEM;
+
+ update_accounts_derived_flags(thread);
+ return 0;
+}
+
/** @} */
diff --git a/storage/perfschema/pfs_setup_actor.h b/storage/perfschema/pfs_setup_actor.h
index 613d5454a9c..3d00c52aa32 100644
--- a/storage/perfschema/pfs_setup_actor.h
+++ b/storage/perfschema/pfs_setup_actor.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2016, 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, version 2.0,
@@ -33,6 +33,7 @@
#include "lf.h"
struct PFS_global_param;
+class PFS_opaque_container_page;
/* WL#988 Roles Not implemented yet */
#define ROLENAME_LENGTH 64
@@ -74,30 +75,35 @@ struct PFS_ALIGNED PFS_setup_actor
const char *m_rolename;
/** Length of @c m_rolename. */
uint m_rolename_length;
+ /** ENABLED flag. */
+ bool m_enabled;
+ /** HISTORY flag. */
+ bool m_history;
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
};
int init_setup_actor(const PFS_global_param *param);
void cleanup_setup_actor(void);
-int init_setup_actor_hash(void);
+int init_setup_actor_hash(const PFS_global_param *param);
void cleanup_setup_actor_hash(void);
-int insert_setup_actor(const String *user, const String *host, const String *role);
-int delete_setup_actor(const String *user, const String *host, const String *role);
+int insert_setup_actor(const String *user, const String *host,
+ const String *role, bool enabled, bool history);
+int delete_setup_actor(const String *user, const String *host,
+ const String *role);
int reset_setup_actor(void);
long setup_actor_count(void);
void lookup_setup_actor(PFS_thread *thread,
const char *user, uint user_length,
const char *host, uint host_length,
- bool *enabled);
+ bool *enabled, bool *history);
-/* For iterators and show status. */
+/** Update derived flags for all setup_actors. */
+int update_setup_actors_derived_flags();
-extern ulong setup_actor_max;
-
-/* Exposing the data directly, for iterators. */
-
-extern PFS_setup_actor *setup_actor_array;
+/* For show status. */
extern LF_HASH setup_actor_hash;
diff --git a/storage/perfschema/pfs_setup_object.cc b/storage/perfschema/pfs_setup_object.cc
index f33030e927f..9325b84997f 100644
--- a/storage/perfschema/pfs_setup_object.cc
+++ b/storage/perfschema/pfs_setup_object.cc
@@ -34,6 +34,7 @@
#include "pfs_instr.h"
#include "pfs_setup_object.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
/**
@addtogroup Performance_schema_buffers
@@ -42,10 +43,6 @@
uint setup_objects_version= 0;
-ulong setup_object_max;
-
-PFS_setup_object *setup_object_array= NULL;
-
LF_HASH setup_object_hash;
static bool setup_object_hash_inited= false;
@@ -56,27 +53,13 @@ static bool setup_object_hash_inited= false;
*/
int init_setup_object(const PFS_global_param *param)
{
- setup_object_max= param->m_setup_object_sizing;
-
- setup_object_array= NULL;
-
- if (setup_object_max > 0)
- {
- setup_object_array= PFS_MALLOC_ARRAY(setup_object_max, sizeof(PFS_setup_object),
- PFS_setup_object, MYF(MY_ZEROFILL));
- if (unlikely(setup_object_array == NULL))
- return 1;
- }
-
- return 0;
+ return global_setup_object_container.init(param->m_setup_object_sizing);
}
/** Cleanup all the setup object buffers. */
void cleanup_setup_object(void)
{
- pfs_free(setup_object_array);
- setup_object_array= NULL;
- setup_object_max= 0;
+ global_setup_object_container.cleanup();
}
C_MODE_START
@@ -100,13 +83,12 @@ C_MODE_END
Initialize the setup objects hash.
@return 0 on success
*/
-int init_setup_object_hash(void)
+int init_setup_object_hash(const PFS_global_param *param)
{
- if ((! setup_object_hash_inited) && (setup_object_max > 0))
+ if ((! setup_object_hash_inited) && (param->m_setup_object_sizing != 0))
{
lf_hash_init(&setup_object_hash, sizeof(PFS_setup_object*), LF_HASH_UNIQUE,
0, 0, setup_object_hash_get_key, &my_charset_bin);
- /* setup_object_hash.size= setup_object_max; */
setup_object_hash_inited= true;
}
return 0;
@@ -158,9 +140,6 @@ static void set_setup_object_key(PFS_setup_object_key *key,
int insert_setup_object(enum_object_type object_type, const String *schema,
const String *object, bool enabled, bool timed)
{
- if (setup_object_max == 0)
- return HA_ERR_RECORD_FILE_FULL;
-
PFS_thread *thread= PFS_thread::get_current_thread();
if (unlikely(thread == NULL))
return HA_ERR_OUT_OF_MEM;
@@ -169,47 +148,37 @@ int insert_setup_object(enum_object_type object_type, const String *schema,
if (unlikely(pins == NULL))
return HA_ERR_OUT_OF_MEM;
- static uint PFS_ALIGNED setup_object_monotonic_index= 0;
- uint index;
- uint attempts= 0;
PFS_setup_object *pfs;
+ pfs_dirty_state dirty_state;
- while (++attempts <= setup_object_max)
+ pfs= global_setup_object_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- /* See create_mutex() */
- index= PFS_atomic::add_u32(& setup_object_monotonic_index, 1) % setup_object_max;
- pfs= setup_object_array + index;
-
- if (pfs->m_lock.is_free())
+ set_setup_object_key(&pfs->m_key, object_type,
+ schema->ptr(), schema->length(),
+ object->ptr(), object->length());
+ pfs->m_schema_name= &pfs->m_key.m_hash_key[1];
+ pfs->m_schema_name_length= schema->length();
+ pfs->m_object_name= pfs->m_schema_name + pfs->m_schema_name_length + 1;
+ pfs->m_object_name_length= object->length();
+ pfs->m_enabled= enabled;
+ pfs->m_timed= timed;
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&setup_object_hash, pins, &pfs);
+ if (likely(res == 0))
{
- if (pfs->m_lock.free_to_dirty())
- {
- set_setup_object_key(&pfs->m_key, object_type,
- schema->ptr(), schema->length(),
- object->ptr(), object->length());
- pfs->m_schema_name= &pfs->m_key.m_hash_key[1];
- pfs->m_schema_name_length= schema->length();
- pfs->m_object_name= pfs->m_schema_name + pfs->m_schema_name_length + 1;
- pfs->m_object_name_length= object->length();
- pfs->m_enabled= enabled;
- pfs->m_timed= timed;
-
- int res;
- res= lf_hash_insert(&setup_object_hash, pins, &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- setup_objects_version++;
- return 0;
- }
-
- pfs->m_lock.dirty_to_free();
- if (res > 0)
- return HA_ERR_FOUND_DUPP_KEY;
- /* OOM in lf_hash_insert */
- return HA_ERR_OUT_OF_MEM;
- }
+ setup_objects_version++;
+ return 0;
}
+
+ global_setup_object_container.deallocate(pfs);
+
+ if (res > 0)
+ return HA_ERR_FOUND_DUPP_KEY;
+ /* OOM in lf_hash_insert */
+ return HA_ERR_OUT_OF_MEM;
}
return HA_ERR_RECORD_FILE_FULL;
@@ -239,7 +208,7 @@ int delete_setup_object(enum_object_type object_type, const String *schema,
{
PFS_setup_object *pfs= *entry;
lf_hash_delete(&setup_object_hash, pins, key.m_hash_key, key.m_key_length);
- pfs->m_lock.allocated_to_free();
+ global_setup_object_container.deallocate(pfs);
}
lf_hash_search_unpin(pins);
@@ -248,6 +217,26 @@ int delete_setup_object(enum_object_type object_type, const String *schema,
return 0;
}
+class Proc_reset_setup_object
+ : public PFS_buffer_processor<PFS_setup_object>
+{
+public:
+ Proc_reset_setup_object(LF_PINS* pins)
+ : m_pins(pins)
+ {}
+
+ virtual void operator()(PFS_setup_object *pfs)
+ {
+ lf_hash_delete(&setup_object_hash, m_pins,
+ pfs->m_key.m_hash_key, pfs->m_key.m_key_length);
+
+ global_setup_object_container.deallocate(pfs);
+ }
+
+private:
+ LF_PINS* m_pins;
+};
+
int reset_setup_object()
{
PFS_thread *thread= PFS_thread::get_current_thread();
@@ -258,18 +247,9 @@ int reset_setup_object()
if (unlikely(pins == NULL))
return HA_ERR_OUT_OF_MEM;
- PFS_setup_object *pfs= setup_object_array;
- PFS_setup_object *pfs_last= setup_object_array + setup_object_max;
-
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- lf_hash_delete(&setup_object_hash, pins,
- pfs->m_key.m_hash_key, pfs->m_key.m_key_length);
- pfs->m_lock.allocated_to_free();
- }
- }
+ Proc_reset_setup_object proc(pins);
+ // FIXME: delete helper instead
+ global_setup_object_container.apply(proc);
setup_objects_version++;
return 0;
diff --git a/storage/perfschema/pfs_setup_object.h b/storage/perfschema/pfs_setup_object.h
index ee40742941c..d49be341bbe 100644
--- a/storage/perfschema/pfs_setup_object.h
+++ b/storage/perfschema/pfs_setup_object.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2016, 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, version 2.0,
@@ -33,6 +33,7 @@
class String;
struct PFS_global_param;
+class PFS_opaque_container_page;
/**
@addtogroup Performance_schema_buffers
@@ -75,11 +76,13 @@ struct PFS_ALIGNED PFS_setup_object
bool m_enabled;
/** TIMED flag. */
bool m_timed;
+ /** Container page. */
+ PFS_opaque_container_page *m_page;
};
int init_setup_object(const PFS_global_param *param);
void cleanup_setup_object(void);
-int init_setup_object_hash(void);
+int init_setup_object_hash(const PFS_global_param *param);
void cleanup_setup_object_hash(void);
int insert_setup_object(enum_object_type object_type, const String *schema,
@@ -95,13 +98,7 @@ void lookup_setup_object(PFS_thread *thread,
const char *object_name, int object_name_length,
bool *enabled, bool *timed);
-/* For iterators and show status. */
-
-extern ulong setup_object_max;
-
-/* Exposing the data directly, for iterators. */
-
-extern PFS_setup_object *setup_object_array;
+/* For show status. */
extern LF_HASH setup_object_hash;
diff --git a/storage/perfschema/pfs_stat.h b/storage/perfschema/pfs_stat.h
index 8a049e3013b..e3e06760eb6 100644
--- a/storage/perfschema/pfs_stat.h
+++ b/storage/perfschema/pfs_stat.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -23,6 +23,7 @@
#ifndef PFS_STAT_H
#define PFS_STAT_H
+#include <algorithm>
#include "sql_const.h"
/* memcpy */
#include "string.h"
@@ -53,7 +54,7 @@ struct PFS_single_stat
{
m_count= 0;
m_sum= 0;
- m_min= ULONGLONG_MAX;
+ m_min= ULLONG_MAX;
m_max= 0;
}
@@ -61,7 +62,7 @@ struct PFS_single_stat
{
m_count= 0;
m_sum= 0;
- m_min= ULONGLONG_MAX;
+ m_min= ULLONG_MAX;
m_max= 0;
}
@@ -72,6 +73,19 @@ struct PFS_single_stat
inline void aggregate(const PFS_single_stat *stat)
{
+ if (stat->m_count != 0)
+ {
+ m_count+= stat->m_count;
+ m_sum+= stat->m_sum;
+ if (unlikely(m_min > stat->m_min))
+ m_min= stat->m_min;
+ if (unlikely(m_max < stat->m_max))
+ m_max= stat->m_max;
+ }
+ }
+
+ inline void aggregate_no_check(const PFS_single_stat *stat)
+ {
m_count+= stat->m_count;
m_sum+= stat->m_sum;
if (unlikely(m_min > stat->m_min))
@@ -99,6 +113,16 @@ struct PFS_single_stat
if (unlikely(m_max < value))
m_max= value;
}
+
+ inline void aggregate_many_value(ulonglong value, ulonglong count)
+ {
+ m_count+= count;
+ m_sum+= value;
+ if (unlikely(m_min > value))
+ m_min= value;
+ if (unlikely(m_max < value))
+ m_max= value;
+ }
};
/** Combined statistic. */
@@ -107,39 +131,49 @@ struct PFS_byte_stat : public PFS_single_stat
/** Byte count statistics */
ulonglong m_bytes;
- /* Aggregate wait stats, event count and byte count */
+ /** Aggregate wait stats, event count and byte count */
inline void aggregate(const PFS_byte_stat *stat)
{
- PFS_single_stat::aggregate(stat);
+ if (stat->m_count != 0)
+ {
+ PFS_single_stat::aggregate_no_check(stat);
+ m_bytes+= stat->m_bytes;
+ }
+ }
+
+ /** Aggregate wait stats, event count and byte count */
+ inline void aggregate_no_check(const PFS_byte_stat *stat)
+ {
+ PFS_single_stat::aggregate_no_check(stat);
m_bytes+= stat->m_bytes;
}
- /* Aggregate individual wait time, event count and byte count */
+ /** Aggregate individual wait time, event count and byte count */
inline void aggregate(ulonglong wait, ulonglong bytes)
{
aggregate_value(wait);
m_bytes+= bytes;
}
- /* Aggregate wait stats and event count */
+ /** Aggregate wait stats and event count */
inline void aggregate_waits(const PFS_byte_stat *stat)
{
PFS_single_stat::aggregate(stat);
}
- /* Aggregate event count and byte count */
+ /** Aggregate event count and byte count */
inline void aggregate_counted()
{
PFS_single_stat::aggregate_counted();
}
- /* Aggregate event count and byte count */
+ /** Aggregate event count and byte count */
inline void aggregate_counted(ulonglong bytes)
{
PFS_single_stat::aggregate_counted();
m_bytes+= bytes;
}
-
+
PFS_byte_stat()
{
reset();
@@ -157,22 +191,28 @@ struct PFS_mutex_stat
{
/** Wait statistics. */
PFS_single_stat m_wait_stat;
+#ifdef PFS_LATER
/**
Lock statistics.
This statistic is not exposed in user visible tables yet.
*/
PFS_single_stat m_lock_stat;
+#endif
inline void aggregate(const PFS_mutex_stat *stat)
{
m_wait_stat.aggregate(&stat->m_wait_stat);
+#ifdef PFS_LATER
m_lock_stat.aggregate(&stat->m_lock_stat);
+#endif
}
inline void reset(void)
{
m_wait_stat.reset();
+#ifdef PFS_LATER
m_lock_stat.reset();
+#endif
}
};
@@ -181,6 +221,7 @@ struct PFS_rwlock_stat
{
/** Wait statistics. */
PFS_single_stat m_wait_stat;
+#ifdef PFS_LATER
/**
RWLock read lock usage statistics.
This statistic is not exposed in user visible tables yet.
@@ -191,19 +232,24 @@ struct PFS_rwlock_stat
This statistic is not exposed in user visible tables yet.
*/
PFS_single_stat m_write_lock_stat;
+#endif
inline void aggregate(const PFS_rwlock_stat *stat)
{
m_wait_stat.aggregate(&stat->m_wait_stat);
+#ifdef PFS_LATER
m_read_lock_stat.aggregate(&stat->m_read_lock_stat);
m_write_lock_stat.aggregate(&stat->m_write_lock_stat);
+#endif
}
inline void reset(void)
{
m_wait_stat.reset();
+#ifdef PFS_LATER
m_read_lock_stat.reset();
m_write_lock_stat.reset();
+#endif
}
};
@@ -212,6 +258,7 @@ struct PFS_cond_stat
{
/** Wait statistics. */
PFS_single_stat m_wait_stat;
+#ifdef PFS_LATER
/**
Number of times a condition was signalled.
This statistic is not exposed in user visible tables yet.
@@ -222,19 +269,24 @@ struct PFS_cond_stat
This statistic is not exposed in user visible tables yet.
*/
ulonglong m_broadcast_count;
+#endif
inline void aggregate(const PFS_cond_stat *stat)
{
m_wait_stat.aggregate(&stat->m_wait_stat);
+#ifdef PFS_LATER
m_signal_count+= stat->m_signal_count;
m_broadcast_count+= stat->m_broadcast_count;
+#endif
}
inline void reset(void)
{
m_wait_stat.reset();
+#ifdef PFS_LATER
m_signal_count= 0;
m_broadcast_count= 0;
+#endif
}
};
@@ -245,7 +297,7 @@ struct PFS_file_io_stat
PFS_byte_stat m_read;
/** WRITE statistics */
PFS_byte_stat m_write;
- /** Miscelleanous statistics */
+ /** Miscellaneous statistics */
PFS_byte_stat m_misc;
inline void reset(void)
@@ -313,11 +365,51 @@ struct PFS_stage_stat
inline void aggregate_value(ulonglong value)
{ m_timer1_stat.aggregate_value(value); }
+ inline void aggregate(const PFS_stage_stat *stat)
+ { m_timer1_stat.aggregate(& stat->m_timer1_stat); }
+};
+
+/** Statistics for stored program usage. */
+struct PFS_sp_stat
+{
+ PFS_single_stat m_timer1_stat;
+
+ inline void reset(void)
+ { m_timer1_stat.reset(); }
+
+ inline void aggregate_counted()
+ { m_timer1_stat.aggregate_counted(); }
+
+ inline void aggregate_value(ulonglong value)
+ { m_timer1_stat.aggregate_value(value); }
+
+ inline void aggregate(const PFS_stage_stat *stat)
+ { m_timer1_stat.aggregate(& stat->m_timer1_stat); }
+};
+
+/** Statistics for prepared statement usage. */
+struct PFS_prepared_stmt_stat
+{
+ PFS_single_stat m_timer1_stat;
+
+ inline void reset(void)
+ { m_timer1_stat.reset(); }
+
+ inline void aggregate_counted()
+ { m_timer1_stat.aggregate_counted(); }
+
+ inline void aggregate_value(ulonglong value)
+ { m_timer1_stat.aggregate_value(value); }
+
inline void aggregate(PFS_stage_stat *stat)
{ m_timer1_stat.aggregate(& stat->m_timer1_stat); }
};
-/** Statistics for statement usage. */
+/**
+ Statistics for statement usage.
+ This structure uses lazy initialization,
+ controlled by member @c m_timer1_stat.m_count.
+*/
struct PFS_statement_stat
{
PFS_single_stat m_timer1_stat;
@@ -343,80 +435,128 @@ struct PFS_statement_stat
PFS_statement_stat()
{
- m_error_count= 0;
- m_warning_count= 0;
- m_rows_affected= 0;
- m_lock_time= 0;
- m_rows_sent= 0;
- m_rows_examined= 0;
- m_created_tmp_disk_tables= 0;
- m_created_tmp_tables= 0;
- m_select_full_join= 0;
- m_select_full_range_join= 0;
- m_select_range= 0;
- m_select_range_check= 0;
- m_select_scan= 0;
- m_sort_merge_passes= 0;
- m_sort_range= 0;
- m_sort_rows= 0;
- m_sort_scan= 0;
- m_no_index_used= 0;
- m_no_good_index_used= 0;
+ reset();
}
- inline void reset(void)
+ inline void reset()
{
- m_timer1_stat.reset();
- m_error_count= 0;
- m_warning_count= 0;
- m_rows_affected= 0;
- m_lock_time= 0;
- m_rows_sent= 0;
- m_rows_examined= 0;
- m_created_tmp_disk_tables= 0;
- m_created_tmp_tables= 0;
- m_select_full_join= 0;
- m_select_full_range_join= 0;
- m_select_range= 0;
- m_select_range_check= 0;
- m_select_scan= 0;
- m_sort_merge_passes= 0;
- m_sort_range= 0;
- m_sort_rows= 0;
- m_sort_scan= 0;
- m_no_index_used= 0;
- m_no_good_index_used= 0;
+ m_timer1_stat.m_count= 0;
}
+ inline void mark_used()
+ {
+ delayed_reset();
+ }
+
+private:
+ inline void delayed_reset(void)
+ {
+ if (m_timer1_stat.m_count == 0)
+ {
+ m_timer1_stat.reset();
+ m_error_count= 0;
+ m_warning_count= 0;
+ m_rows_affected= 0;
+ m_lock_time= 0;
+ m_rows_sent= 0;
+ m_rows_examined= 0;
+ m_created_tmp_disk_tables= 0;
+ m_created_tmp_tables= 0;
+ m_select_full_join= 0;
+ m_select_full_range_join= 0;
+ m_select_range= 0;
+ m_select_range_check= 0;
+ m_select_scan= 0;
+ m_sort_merge_passes= 0;
+ m_sort_range= 0;
+ m_sort_rows= 0;
+ m_sort_scan= 0;
+ m_no_index_used= 0;
+ m_no_good_index_used= 0;
+ }
+ }
+
+public:
inline void aggregate_counted()
- { m_timer1_stat.aggregate_counted(); }
+ {
+ delayed_reset();
+ m_timer1_stat.aggregate_counted();
+ }
inline void aggregate_value(ulonglong value)
- { m_timer1_stat.aggregate_value(value); }
+ {
+ delayed_reset();
+ m_timer1_stat.aggregate_value(value);
+ }
+
+ inline void aggregate(const PFS_statement_stat *stat)
+ {
+ if (stat->m_timer1_stat.m_count != 0)
+ {
+ delayed_reset();
+ m_timer1_stat.aggregate_no_check(& stat->m_timer1_stat);
+
+ m_error_count+= stat->m_error_count;
+ m_warning_count+= stat->m_warning_count;
+ m_rows_affected+= stat->m_rows_affected;
+ m_lock_time+= stat->m_lock_time;
+ m_rows_sent+= stat->m_rows_sent;
+ m_rows_examined+= stat->m_rows_examined;
+ m_created_tmp_disk_tables+= stat->m_created_tmp_disk_tables;
+ m_created_tmp_tables+= stat->m_created_tmp_tables;
+ m_select_full_join+= stat->m_select_full_join;
+ m_select_full_range_join+= stat->m_select_full_range_join;
+ m_select_range+= stat->m_select_range;
+ m_select_range_check+= stat->m_select_range_check;
+ m_select_scan+= stat->m_select_scan;
+ m_sort_merge_passes+= stat->m_sort_merge_passes;
+ m_sort_range+= stat->m_sort_range;
+ m_sort_rows+= stat->m_sort_rows;
+ m_sort_scan+= stat->m_sort_scan;
+ m_no_index_used+= stat->m_no_index_used;
+ m_no_good_index_used+= stat->m_no_good_index_used;
+ }
+ }
+};
+
+/** Statistics for transaction usage. */
+struct PFS_transaction_stat
+{
+ PFS_single_stat m_read_write_stat;
+ PFS_single_stat m_read_only_stat;
+
+ ulonglong m_savepoint_count;
+ ulonglong m_rollback_to_savepoint_count;
+ ulonglong m_release_savepoint_count;
+
+ PFS_transaction_stat()
+ {
+ m_savepoint_count= 0;
+ m_rollback_to_savepoint_count= 0;
+ m_release_savepoint_count= 0;
+ }
+
+ ulonglong count(void)
+ {
+ return (m_read_write_stat.m_count + m_read_only_stat.m_count);
+ }
+
+ inline void reset(void)
+ {
+ m_read_write_stat.reset();
+ m_read_only_stat.reset();
+ m_savepoint_count= 0;
+ m_rollback_to_savepoint_count= 0;
+ m_release_savepoint_count= 0;
+ }
- inline void aggregate(PFS_statement_stat *stat)
- {
- m_timer1_stat.aggregate(& stat->m_timer1_stat);
-
- m_error_count+= stat->m_error_count;
- m_warning_count+= stat->m_warning_count;
- m_rows_affected+= stat->m_rows_affected;
- m_lock_time+= stat->m_lock_time;
- m_rows_sent+= stat->m_rows_sent;
- m_rows_examined+= stat->m_rows_examined;
- m_created_tmp_disk_tables+= stat->m_created_tmp_disk_tables;
- m_created_tmp_tables+= stat->m_created_tmp_tables;
- m_select_full_join+= stat->m_select_full_join;
- m_select_full_range_join+= stat->m_select_full_range_join;
- m_select_range+= stat->m_select_range;
- m_select_range_check+= stat->m_select_range_check;
- m_select_scan+= stat->m_select_scan;
- m_sort_merge_passes+= stat->m_sort_merge_passes;
- m_sort_range+= stat->m_sort_range;
- m_sort_rows+= stat->m_sort_rows;
- m_sort_scan+= stat->m_sort_scan;
- m_no_index_used+= stat->m_no_index_used;
- m_no_good_index_used+= stat->m_no_good_index_used;
+ inline void aggregate(const PFS_transaction_stat *stat)
+ {
+ m_read_write_stat.aggregate(&stat->m_read_write_stat);
+ m_read_only_stat.aggregate(&stat->m_read_only_stat);
+ m_savepoint_count+= stat->m_savepoint_count;
+ m_rollback_to_savepoint_count+= stat->m_rollback_to_savepoint_count;
+ m_release_savepoint_count+= stat->m_release_savepoint_count;
}
};
@@ -486,7 +626,9 @@ enum PFS_TL_LOCK_TYPE
/* Locks for handler::ha_external_lock() */
PFS_TL_READ_EXTERNAL= 9,
- PFS_TL_WRITE_EXTERNAL= 10
+ PFS_TL_WRITE_EXTERNAL= 10,
+
+ PFS_TL_NONE= 99
};
#define COUNT_PFS_TL_LOCK_TYPE 11
@@ -644,7 +786,7 @@ struct PFS_socket_io_stat
PFS_byte_stat m_read;
/** WRITE statistics */
PFS_byte_stat m_write;
- /** Miscelleanous statistics */
+ /** Miscellaneous statistics */
PFS_byte_stat m_misc;
inline void reset(void)
@@ -691,6 +833,478 @@ struct PFS_socket_stat
}
};
+struct PFS_memory_stat_delta
+{
+ size_t m_alloc_count_delta;
+ size_t m_free_count_delta;
+ size_t m_alloc_size_delta;
+ size_t m_free_size_delta;
+
+ void reset()
+ {
+ m_alloc_count_delta= 0;
+ m_free_count_delta= 0;
+ m_alloc_size_delta= 0;
+ m_free_size_delta= 0;
+ }
+};
+
+/**
+ Memory statistics.
+ Conceptually, the following statistics are maintained:
+ - CURRENT_COUNT_USED,
+ - LOW_COUNT_USED,
+ - HIGH_COUNT_USED
+ - CURRENT_SIZE_USED,
+ - LOW_SIZE_USED,
+ - HIGH_SIZE_USED
+ Now, the implementation keeps different counters,
+ which are easier (less overhead) to maintain while
+ collecting statistics.
+ Invariants are as follows:
+ CURRENT_COUNT_USED = @c m_alloc_count - @c m_free_count
+ LOW_COUNT_USED + @c m_free_count_capacity = CURRENT_COUNT_USED
+ CURRENT_COUNT_USED + @c m_alloc_count_capacity = HIGH_COUNT_USED
+ CURRENT_SIZE_USED = @c m_alloc_size - @c m_free_size
+ LOW_SIZE_USED + @c m_free_size_capacity = CURRENT_SIZE_USED
+ CURRENT_SIZE_USED + @c m_alloc_size_capacity = HIGH_SIZE_USED
+
+*/
+struct PFS_memory_stat
+{
+ bool m_used;
+ size_t m_alloc_count;
+ size_t m_free_count;
+ size_t m_alloc_size;
+ size_t m_free_size;
+
+ size_t m_alloc_count_capacity;
+ size_t m_free_count_capacity;
+ size_t m_alloc_size_capacity;
+ size_t m_free_size_capacity;
+
+ inline void reset(void)
+ {
+ m_used= false;
+ m_alloc_count= 0;
+ m_free_count= 0;
+ m_alloc_size= 0;
+ m_free_size= 0;
+
+ m_alloc_count_capacity= 0;
+ m_free_count_capacity= 0;
+ m_alloc_size_capacity= 0;
+ m_free_size_capacity= 0;
+ }
+
+ inline void rebase(void)
+ {
+ if (! m_used)
+ return;
+
+ size_t base;
+
+ base= std::min<size_t>(m_alloc_count, m_free_count);
+ m_alloc_count-= base;
+ m_free_count-= base;
+
+ base= std::min<size_t>(m_alloc_size, m_free_size);
+ m_alloc_size-= base;
+ m_free_size-= base;
+
+ m_alloc_count_capacity= 0;
+ m_free_count_capacity= 0;
+ m_alloc_size_capacity= 0;
+ m_free_size_capacity= 0;
+ }
+
+ inline void partial_aggregate_to(PFS_memory_stat *stat)
+ {
+ if (! m_used)
+ return;
+
+ size_t base;
+
+ stat->m_used= true;
+
+ base= std::min<size_t>(m_alloc_count, m_free_count);
+ if (base != 0)
+ {
+ stat->m_alloc_count+= base;
+ stat->m_free_count+= base;
+ m_alloc_count-= base;
+ m_free_count-= base;
+ }
+
+ base= std::min<size_t>(m_alloc_size, m_free_size);
+ if (base != 0)
+ {
+ stat->m_alloc_size+= base;
+ stat->m_free_size+= base;
+ m_alloc_size-= base;
+ m_free_size-= base;
+ }
+
+ stat->m_alloc_count_capacity+= m_alloc_count_capacity;
+ stat->m_free_count_capacity+= m_free_count_capacity;
+ stat->m_alloc_size_capacity+= m_alloc_size_capacity;
+ stat->m_free_size_capacity+= m_free_size_capacity;
+
+ m_alloc_count_capacity= 0;
+ m_free_count_capacity= 0;
+ m_alloc_size_capacity= 0;
+ m_free_size_capacity= 0;
+ }
+
+ inline void full_aggregate_to(PFS_memory_stat *stat) const
+ {
+ if (! m_used)
+ return;
+
+ stat->m_used= true;
+
+ stat->m_alloc_count+= m_alloc_count;
+ stat->m_free_count+= m_free_count;
+ stat->m_alloc_size+= m_alloc_size;
+ stat->m_free_size+= m_free_size;
+
+ stat->m_alloc_count_capacity+= m_alloc_count_capacity;
+ stat->m_free_count_capacity+= m_free_count_capacity;
+ stat->m_alloc_size_capacity+= m_alloc_size_capacity;
+ stat->m_free_size_capacity+= m_free_size_capacity;
+ }
+
+ inline void partial_aggregate_to(PFS_memory_stat *stat1, PFS_memory_stat *stat2)
+ {
+ if (! m_used)
+ return;
+
+ size_t base;
+
+ stat1->m_used= true;
+ stat2->m_used= true;
+
+ base= std::min<size_t>(m_alloc_count, m_free_count);
+ if (base != 0)
+ {
+ stat1->m_alloc_count+= base;
+ stat2->m_alloc_count+= base;
+ stat1->m_free_count+= base;
+ stat2->m_free_count+= base;
+ m_alloc_count-= base;
+ m_free_count-= base;
+ }
+
+ base= std::min<size_t>(m_alloc_size, m_free_size);
+ if (base != 0)
+ {
+ stat1->m_alloc_size+= base;
+ stat2->m_alloc_size+= base;
+ stat1->m_free_size+= base;
+ stat2->m_free_size+= base;
+ m_alloc_size-= base;
+ m_free_size-= base;
+ }
+
+ stat1->m_alloc_count_capacity+= m_alloc_count_capacity;
+ stat2->m_alloc_count_capacity+= m_alloc_count_capacity;
+ stat1->m_free_count_capacity+= m_free_count_capacity;
+ stat2->m_free_count_capacity+= m_free_count_capacity;
+ stat1->m_alloc_size_capacity+= m_alloc_size_capacity;
+ stat2->m_alloc_size_capacity+= m_alloc_size_capacity;
+ stat1->m_free_size_capacity+= m_free_size_capacity;
+ stat2->m_free_size_capacity+= m_free_size_capacity;
+
+ m_alloc_count_capacity= 0;
+ m_free_count_capacity= 0;
+ m_alloc_size_capacity= 0;
+ m_free_size_capacity= 0;
+ }
+
+ inline void full_aggregate_to(PFS_memory_stat *stat1, PFS_memory_stat *stat2) const
+ {
+ if (! m_used)
+ return;
+
+ stat1->m_used= true;
+ stat2->m_used= true;
+
+ stat1->m_alloc_count+= m_alloc_count;
+ stat2->m_alloc_count+= m_alloc_count;
+ stat1->m_free_count+= m_free_count;
+ stat2->m_free_count+= m_free_count;
+ stat1->m_alloc_size+= m_alloc_size;
+ stat2->m_alloc_size+= m_alloc_size;
+ stat1->m_free_size+= m_free_size;
+ stat2->m_free_size+= m_free_size;
+
+ stat1->m_alloc_count_capacity+= m_alloc_count_capacity;
+ stat2->m_alloc_count_capacity+= m_alloc_count_capacity;
+ stat1->m_free_count_capacity+= m_free_count_capacity;
+ stat2->m_free_count_capacity+= m_free_count_capacity;
+ stat1->m_alloc_size_capacity+= m_alloc_size_capacity;
+ stat2->m_alloc_size_capacity+= m_alloc_size_capacity;
+ stat1->m_free_size_capacity+= m_free_size_capacity;
+ stat2->m_free_size_capacity+= m_free_size_capacity;
+ }
+
+ void count_builtin_alloc(size_t size)
+ {
+ m_used= true;
+
+ m_alloc_count++;
+ m_free_count_capacity++;
+ m_alloc_size+= size;
+ m_free_size_capacity+= size;
+
+ if (m_alloc_count_capacity >= 1)
+ {
+ m_alloc_count_capacity--;
+ }
+
+ if (m_alloc_size_capacity >= size)
+ {
+ m_alloc_size_capacity-= size;
+ }
+
+ return;
+ }
+
+ void count_builtin_free(size_t size)
+ {
+ m_used= true;
+
+ m_free_count++;
+ m_alloc_count_capacity++;
+ m_free_size+= size;
+ m_alloc_size_capacity+= size;
+
+ if (m_free_count_capacity >= 1)
+ {
+ m_free_count_capacity--;
+ }
+
+ if (m_free_size_capacity >= size)
+ {
+ m_free_size_capacity-= size;
+ }
+
+ return;
+ }
+
+ inline PFS_memory_stat_delta *count_alloc(size_t size,
+ PFS_memory_stat_delta *delta)
+ {
+ m_used= true;
+
+ m_alloc_count++;
+ m_free_count_capacity++;
+ m_alloc_size+= size;
+ m_free_size_capacity+= size;
+
+ if ((m_alloc_count_capacity >= 1) &&
+ (m_alloc_size_capacity >= size))
+ {
+ m_alloc_count_capacity--;
+ m_alloc_size_capacity-= size;
+ return NULL;
+ }
+
+ delta->reset();
+
+ if (m_alloc_count_capacity >= 1)
+ {
+ m_alloc_count_capacity--;
+ }
+ else
+ {
+ delta->m_alloc_count_delta= 1;
+ }
+
+ if (m_alloc_size_capacity >= size)
+ {
+ m_alloc_size_capacity-= size;
+ }
+ else
+ {
+ delta->m_alloc_size_delta= size - m_alloc_size_capacity;
+ m_alloc_size_capacity= 0;
+ }
+
+ return delta;
+ }
+
+ inline PFS_memory_stat_delta *count_realloc(size_t old_size, size_t new_size,
+ PFS_memory_stat_delta *delta)
+ {
+ m_used= true;
+
+ size_t size_delta= new_size - old_size;
+ m_alloc_count++;
+ m_alloc_size+= new_size;
+ m_free_count++;
+ m_free_size+= old_size;
+
+ if (new_size == old_size)
+ {
+ return NULL;
+ }
+
+ if (new_size > old_size)
+ {
+ /* Growing */
+ size_delta= new_size - old_size;
+ m_free_size_capacity+= size_delta;
+
+ if (m_alloc_size_capacity >= size_delta)
+ {
+ m_alloc_size_capacity-= size_delta;
+ return NULL;
+ }
+
+ delta->reset();
+ delta->m_alloc_size_delta= size_delta - m_alloc_size_capacity;
+ m_alloc_size_capacity= 0;
+ }
+ else
+ {
+ /* Shrinking */
+ size_delta= old_size - new_size;
+ m_alloc_size_capacity+= size_delta;
+
+ if (m_free_size_capacity >= size_delta)
+ {
+ m_free_size_capacity-= size_delta;
+ return NULL;
+ }
+
+ delta->reset();
+ delta->m_free_size_delta= size_delta - m_free_size_capacity;
+ m_free_size_capacity= 0;
+ }
+
+ return delta;
+ }
+
+ inline PFS_memory_stat_delta *count_free(size_t size, PFS_memory_stat_delta *delta)
+ {
+ m_used= true;
+
+ m_free_count++;
+ m_alloc_count_capacity++;
+ m_free_size+= size;
+ m_alloc_size_capacity+= size;
+
+ if ((m_free_count_capacity >= 1) &&
+ (m_free_size_capacity >= size))
+ {
+ m_free_count_capacity--;
+ m_free_size_capacity-= size;
+ return NULL;
+ }
+
+ delta->reset();
+
+ if (m_free_count_capacity >= 1)
+ {
+ m_free_count_capacity--;
+ }
+ else
+ {
+ delta->m_free_count_delta= 1;
+ }
+
+ if (m_free_size_capacity >= size)
+ {
+ m_free_size_capacity-= size;
+ }
+ else
+ {
+ delta->m_free_size_delta= size - m_free_size_capacity;
+ m_free_size_capacity= 0;
+ }
+
+ return delta;
+ }
+
+ inline PFS_memory_stat_delta *apply_delta(const PFS_memory_stat_delta *delta,
+ PFS_memory_stat_delta *delta_buffer)
+ {
+ size_t val;
+ size_t remaining_alloc_count;
+ size_t remaining_alloc_size;
+ size_t remaining_free_count;
+ size_t remaining_free_size;
+ bool has_remaining= false;
+
+ m_used= true;
+
+ val= delta->m_alloc_count_delta;
+ if (val <= m_alloc_count_capacity)
+ {
+ m_alloc_count_capacity-= val;
+ remaining_alloc_count= 0;
+ }
+ else
+ {
+ remaining_alloc_count= val - m_alloc_count_capacity;
+ m_alloc_count_capacity= 0;
+ has_remaining= true;
+ }
+
+ val= delta->m_alloc_size_delta;
+ if (val <= m_alloc_size_capacity)
+ {
+ m_alloc_size_capacity-= val;
+ remaining_alloc_size= 0;
+ }
+ else
+ {
+ remaining_alloc_size= val - m_alloc_size_capacity;
+ m_alloc_size_capacity= 0;
+ has_remaining= true;
+ }
+
+ val= delta->m_free_count_delta;
+ if (val <= m_free_count_capacity)
+ {
+ m_free_count_capacity-= val;
+ remaining_free_count= 0;
+ }
+ else
+ {
+ remaining_free_count= val - m_free_count_capacity;
+ m_free_count_capacity= 0;
+ has_remaining= true;
+ }
+
+ val= delta->m_free_size_delta;
+ if (val <= m_free_size_capacity)
+ {
+ m_free_size_capacity-= val;
+ remaining_free_size= 0;
+ }
+ else
+ {
+ remaining_free_size= val - m_free_size_capacity;
+ m_free_size_capacity= 0;
+ has_remaining= true;
+ }
+
+ if (! has_remaining)
+ return NULL;
+
+ delta_buffer->m_alloc_count_delta= remaining_alloc_count;
+ delta_buffer->m_alloc_size_delta= remaining_alloc_size;
+ delta_buffer->m_free_count_delta= remaining_free_count;
+ delta_buffer->m_free_size_delta= remaining_free_size;
+ return delta_buffer;
+ }
+};
+
+#define PFS_MEMORY_STAT_INITIALIZER { false, 0, 0, 0, 0, 0, 0, 0, 0}
+
+/** Connections statistics. */
struct PFS_connection_stat
{
PFS_connection_stat()
diff --git a/storage/perfschema/pfs_status.cc b/storage/perfschema/pfs_status.cc
new file mode 100644
index 00000000000..2007d191d13
--- /dev/null
+++ b/storage/perfschema/pfs_status.cc
@@ -0,0 +1,166 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/pfs_status.cc
+ Status variables statistics (implementation).
+*/
+
+#include "my_global.h"
+#include "my_sys.h"
+#include "pfs_global.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_account.h"
+#include "pfs_host.h"
+#include "pfs_user.h"
+#include "pfs_status.h"
+#include "pfs_atomic.h"
+#include "pfs_buffer_container.h"
+
+#include "sql_show.h" /* reset_status_vars */
+
+PFS_status_stats::PFS_status_stats()
+{
+ reset();
+}
+
+void PFS_status_stats::reset()
+{
+ m_has_stats= false;
+ memset(&m_stats, 0, sizeof(m_stats));
+}
+
+void PFS_status_stats::aggregate(const PFS_status_stats *from)
+{
+ if (from->m_has_stats)
+ {
+ m_has_stats= true;
+ for (int i= 0; i < COUNT_GLOBAL_STATUS_VARS; i++)
+ {
+ m_stats[i] += from->m_stats[i];
+ }
+ }
+}
+
+void PFS_status_stats::aggregate_from(const STATUS_VAR *from)
+{
+ ulong *from_var= (ulong*) from;
+
+ m_has_stats= true;
+ for (int i= 0;
+ i < COUNT_GLOBAL_STATUS_VARS;
+ i++, from_var++)
+ {
+ m_stats[i] += *from_var;
+ }
+}
+
+void PFS_status_stats::aggregate_to(STATUS_VAR *to)
+{
+ if (m_has_stats)
+ {
+ ulong *to_var= (ulong*) to;
+
+ for (int i= 0;
+ i < COUNT_GLOBAL_STATUS_VARS;
+ i++, to_var++)
+ {
+ *to_var += m_stats[i];
+ }
+ }
+}
+
+static void fct_reset_status_by_thread(PFS_thread *thread)
+{
+ PFS_account *account;
+ PFS_user *user;
+ PFS_host *host;
+
+ if (thread->m_lock.is_populated())
+ {
+ account= sanitize_account(thread->m_account);
+ user= sanitize_user(thread->m_user);
+ host= sanitize_host(thread->m_host);
+ aggregate_thread_status(thread, account, user, host);
+ }
+}
+
+/** Reset table STATUS_BY_THREAD data. */
+void reset_status_by_thread()
+{
+ global_thread_container.apply_all(fct_reset_status_by_thread);
+}
+
+static void fct_reset_status_by_account(PFS_account *account)
+{
+ PFS_user *user;
+ PFS_host *host;
+
+ if (account->m_lock.is_populated())
+ {
+ user= sanitize_user(account->m_user);
+ host= sanitize_host(account->m_host);
+ account->aggregate_status(user, host);
+ }
+}
+
+/** Reset table STATUS_BY_ACCOUNT data. */
+void reset_status_by_account()
+{
+ global_account_container.apply_all(fct_reset_status_by_account);
+}
+
+static void fct_reset_status_by_user(PFS_user *user)
+{
+ if (user->m_lock.is_populated())
+ user->aggregate_status();
+}
+
+/** Reset table STATUS_BY_USER data. */
+void reset_status_by_user()
+{
+ global_user_container.apply_all(fct_reset_status_by_user);
+}
+
+static void fct_reset_status_by_host(PFS_host *host)
+{
+ if (host->m_lock.is_populated())
+ host->aggregate_status();
+}
+
+/** Reset table STATUS_BY_HOST data. */
+void reset_status_by_host()
+{
+ global_host_container.apply_all(fct_reset_status_by_host);
+}
+
+/** Reset table GLOBAL_STATUS data. */
+void reset_global_status()
+{
+ /*
+ Do not memset global_status_var,
+ NO_FLUSH counters need to be preserved
+ */
+ reset_status_vars();
+}
+
diff --git a/storage/perfschema/pfs_status.h b/storage/perfschema/pfs_status.h
new file mode 100644
index 00000000000..6b35a162982
--- /dev/null
+++ b/storage/perfschema/pfs_status.h
@@ -0,0 +1,51 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef PFS_STATUS_H
+#define PFS_STATUS_H
+
+/**
+ @file storage/perfschema/pfs_status.h
+ Status variables statistics (declarations).
+*/
+
+struct PFS_status_stats
+{
+ PFS_status_stats();
+
+ void reset();
+ void aggregate(const PFS_status_stats *from);
+ void aggregate_from(const STATUS_VAR *from);
+ void aggregate_to(STATUS_VAR *to);
+
+ bool m_has_stats;
+ ulong m_stats[COUNT_GLOBAL_STATUS_VARS];
+};
+
+void reset_status_by_thread();
+void reset_status_by_account();
+void reset_status_by_user();
+void reset_status_by_host();
+void reset_global_status();
+
+#endif
+
diff --git a/storage/perfschema/pfs_timer.cc b/storage/perfschema/pfs_timer.cc
index 8533dffcb27..ceec4ed9359 100644
--- a/storage/perfschema/pfs_timer.cc
+++ b/storage/perfschema/pfs_timer.cc
@@ -33,6 +33,7 @@ enum_timer_name idle_timer= TIMER_NAME_MICROSEC;
enum_timer_name wait_timer= TIMER_NAME_CYCLE;
enum_timer_name stage_timer= TIMER_NAME_NANOSEC;
enum_timer_name statement_timer= TIMER_NAME_NANOSEC;
+enum_timer_name transaction_timer= TIMER_NAME_NANOSEC;
static ulonglong cycle_v0;
static ulonglong nanosec_v0;
@@ -174,30 +175,35 @@ void init_timers(void)
/* Normal case. */
stage_timer= TIMER_NAME_NANOSEC;
statement_timer= TIMER_NAME_NANOSEC;
+ transaction_timer= TIMER_NAME_NANOSEC;
}
else if (microsec_to_pico != 0)
{
/* Windows. */
stage_timer= TIMER_NAME_MICROSEC;
statement_timer= TIMER_NAME_MICROSEC;
+ transaction_timer= TIMER_NAME_MICROSEC;
}
else if (millisec_to_pico != 0)
{
/* Robustness, no known cases. */
stage_timer= TIMER_NAME_MILLISEC;
statement_timer= TIMER_NAME_MILLISEC;
+ transaction_timer= TIMER_NAME_MILLISEC;
}
else if (tick_to_pico != 0)
{
/* Robustness, no known cases. */
stage_timer= TIMER_NAME_TICK;
statement_timer= TIMER_NAME_TICK;
+ transaction_timer= TIMER_NAME_TICK;
}
else
{
/* Robustness, no known cases. */
stage_timer= TIMER_NAME_CYCLE;
statement_timer= TIMER_NAME_CYCLE;
+ transaction_timer= TIMER_NAME_CYCLE;
}
/*
diff --git a/storage/perfschema/pfs_timer.h b/storage/perfschema/pfs_timer.h
index 222a7f00fae..f2bedc878e7 100644
--- a/storage/perfschema/pfs_timer.h
+++ b/storage/perfschema/pfs_timer.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -106,6 +106,11 @@ extern enum_timer_name stage_timer;
*/
extern enum_timer_name statement_timer;
/**
+ Transaction timer.
+ The timer used to measure all transaction events.
+*/
+extern enum_timer_name transaction_timer;
+/**
Timer information data.
Characteristics about each supported timer.
*/
diff --git a/storage/perfschema/pfs_user.cc b/storage/perfschema/pfs_user.cc
index 14b86e1478e..feb99f41147 100644
--- a/storage/perfschema/pfs_user.cc
+++ b/storage/perfschema/pfs_user.cc
@@ -34,21 +34,13 @@
#include "pfs_user.h"
#include "pfs_global.h"
#include "pfs_instr_class.h"
+#include "pfs_buffer_container.h"
/**
@addtogroup Performance_schema_buffers
@{
*/
-ulong user_max;
-ulong user_lost;
-
-PFS_user *user_array= NULL;
-
-static PFS_single_stat *user_instr_class_waits_array= NULL;
-static PFS_stage_stat *user_instr_class_stages_array= NULL;
-static PFS_statement_stat *user_instr_class_statements_array= NULL;
-
LF_HASH user_hash;
static bool user_hash_inited= false;
@@ -59,59 +51,8 @@ static bool user_hash_inited= false;
*/
int init_user(const PFS_global_param *param)
{
- uint index;
-
- user_max= param->m_user_sizing;
-
- user_array= NULL;
- user_instr_class_waits_array= NULL;
- user_instr_class_stages_array= NULL;
- user_instr_class_statements_array= NULL;
- uint waits_sizing= user_max * wait_class_max;
- uint stages_sizing= user_max * stage_class_max;
- uint statements_sizing= user_max * statement_class_max;
-
- if (user_max > 0)
- {
- user_array= PFS_MALLOC_ARRAY(user_max, sizeof(PFS_user), PFS_user,
- MYF(MY_ZEROFILL));
- if (unlikely(user_array == NULL))
- return 1;
- }
-
- if (waits_sizing > 0)
- {
- user_instr_class_waits_array=
- PFS_connection_slice::alloc_waits_slice(waits_sizing);
- if (unlikely(user_instr_class_waits_array == NULL))
- return 1;
- }
-
- if (stages_sizing > 0)
- {
- user_instr_class_stages_array=
- PFS_connection_slice::alloc_stages_slice(stages_sizing);
- if (unlikely(user_instr_class_stages_array == NULL))
- return 1;
- }
-
- if (statements_sizing > 0)
- {
- user_instr_class_statements_array=
- PFS_connection_slice::alloc_statements_slice(statements_sizing);
- if (unlikely(user_instr_class_statements_array == NULL))
- return 1;
- }
-
- for (index= 0; index < user_max; index++)
- {
- user_array[index].m_instr_class_waits_stats=
- &user_instr_class_waits_array[index * wait_class_max];
- user_array[index].m_instr_class_stages_stats=
- &user_instr_class_stages_array[index * stage_class_max];
- user_array[index].m_instr_class_statements_stats=
- &user_instr_class_statements_array[index * statement_class_max];
- }
+ if (global_user_container.init(param->m_user_sizing))
+ return 1;
return 0;
}
@@ -119,15 +60,7 @@ int init_user(const PFS_global_param *param)
/** Cleanup all the user buffers. */
void cleanup_user(void)
{
- pfs_free(user_array);
- user_array= NULL;
- pfs_free(user_instr_class_waits_array);
- user_instr_class_waits_array= NULL;
- pfs_free(user_instr_class_stages_array);
- user_instr_class_stages_array= NULL;
- pfs_free(user_instr_class_statements_array);
- user_instr_class_statements_array= NULL;
- user_max= 0;
+ global_user_container.cleanup();
}
C_MODE_START
@@ -151,13 +84,12 @@ C_MODE_END
Initialize the user hash.
@return 0 on success
*/
-int init_user_hash(void)
+int init_user_hash(const PFS_global_param *param)
{
- if ((! user_hash_inited) && (user_max > 0))
+ if ((! user_hash_inited) && (param->m_user_sizing != 0))
{
lf_hash_init(&user_hash, sizeof(PFS_user*), LF_HASH_UNIQUE,
0, 0, user_hash_get_key, &my_charset_bin);
- /* user_hash.size= user_max; */
user_hash_inited= true;
}
return 0;
@@ -204,16 +136,10 @@ PFS_user *
find_or_create_user(PFS_thread *thread,
const char *username, uint username_length)
{
- if (user_max == 0)
- {
- user_lost++;
- return NULL;
- }
-
LF_PINS *pins= get_user_hash_pins(thread);
if (unlikely(pins == NULL))
{
- user_lost++;
+ global_user_container.m_lost++;
return NULL;
}
@@ -221,8 +147,10 @@ find_or_create_user(PFS_thread *thread,
set_user_key(&key, username, username_length);
PFS_user **entry;
+ PFS_user *pfs;
uint retry_count= 0;
const uint retry_max= 3;
+ pfs_dirty_state dirty_state;
search:
entry= reinterpret_cast<PFS_user**>
@@ -230,7 +158,6 @@ search:
key.m_hash_key, key.m_key_length));
if (entry && (entry != MY_ERRPTR))
{
- PFS_user *pfs;
pfs= *entry;
pfs->inc_refcount();
lf_hash_search_unpin(pins);
@@ -239,68 +166,55 @@ search:
lf_hash_search_unpin(pins);
- PFS_scan scan;
- uint random= randomized_index(username, user_max);
-
- for (scan.init(random, user_max);
- scan.has_pass();
- scan.next_pass())
+ pfs= global_user_container.allocate(& dirty_state);
+ if (pfs != NULL)
{
- PFS_user *pfs= user_array + scan.first();
- PFS_user *pfs_last= user_array + scan.last();
- for ( ; pfs < pfs_last; pfs++)
+ pfs->m_key= key;
+ if (username_length > 0)
+ pfs->m_username= &pfs->m_key.m_hash_key[0];
+ else
+ pfs->m_username= NULL;
+ pfs->m_username_length= username_length;
+
+ pfs->init_refcount();
+ pfs->reset_stats();
+ pfs->m_disconnected_count= 0;
+
+ int res;
+ pfs->m_lock.dirty_to_allocated(& dirty_state);
+ res= lf_hash_insert(&user_hash, pins, &pfs);
+ if (likely(res == 0))
{
- if (pfs->m_lock.is_free())
+ return pfs;
+ }
+
+ global_user_container.deallocate(pfs);
+
+ if (res > 0)
+ {
+ if (++retry_count > retry_max)
{
- if (pfs->m_lock.free_to_dirty())
- {
- pfs->m_key= key;
- if (username_length > 0)
- pfs->m_username= &pfs->m_key.m_hash_key[0];
- else
- pfs->m_username= NULL;
- pfs->m_username_length= username_length;
-
- pfs->init_refcount();
- pfs->reset_stats();
- pfs->m_disconnected_count= 0;
-
- int res;
- res= lf_hash_insert(&user_hash, pins, &pfs);
- if (likely(res == 0))
- {
- pfs->m_lock.dirty_to_allocated();
- return pfs;
- }
-
- pfs->m_lock.dirty_to_free();
-
- if (res > 0)
- {
- if (++retry_count > retry_max)
- {
- user_lost++;
- return NULL;
- }
- goto search;
- }
-
- user_lost++;
- return NULL;
- }
+ global_user_container.m_lost++;
+ return NULL;
}
+ goto search;
}
+
+ global_user_container.m_lost++;
+ return NULL;
}
- user_lost++;
return NULL;
}
-void PFS_user::aggregate()
+void PFS_user::aggregate(bool alive)
{
aggregate_waits();
aggregate_stages();
aggregate_statements();
+ aggregate_transactions();
+ aggregate_memory(alive);
+ aggregate_status();
aggregate_stats();
}
@@ -322,6 +236,24 @@ void PFS_user::aggregate_statements()
reset_statements_stats();
}
+void PFS_user::aggregate_transactions()
+{
+ /* No parent to aggregate to, clean the stats */
+ reset_transactions_stats();
+}
+
+void PFS_user::aggregate_memory(bool alive)
+{
+ /* No parent to aggregate to, clean the stats */
+ rebase_memory_stats();
+}
+
+void PFS_user::aggregate_status()
+{
+ /* No parent to aggregate to, clean the stats */
+ reset_status_stats();
+}
+
void PFS_user::aggregate_stats()
{
/* No parent to aggregate to, clean the stats */
@@ -333,12 +265,20 @@ void PFS_user::release()
dec_refcount();
}
+void PFS_user::carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index)
+{
+ PFS_memory_stat *event_name_array;
+ PFS_memory_stat *stat;
+ PFS_memory_stat_delta delta_buffer;
+
+ event_name_array= write_instr_class_memory_stats();
+ stat= & event_name_array[index];
+ (void) stat->apply_delta(delta, &delta_buffer);
+}
+
PFS_user *sanitize_user(PFS_user *unsafe)
{
- if ((&user_array[0] <= unsafe) &&
- (unsafe < &user_array[user_max]))
- return unsafe;
- return NULL;
+ return global_user_container.sanitize(unsafe);
}
void purge_user(PFS_thread *thread, PFS_user *user)
@@ -358,13 +298,33 @@ void purge_user(PFS_thread *thread, PFS_user *user)
{
lf_hash_delete(&user_hash, pins,
user->m_key.m_hash_key, user->m_key.m_key_length);
- user->m_lock.allocated_to_free();
+ user->aggregate(false);
+ global_user_container.deallocate(user);
}
}
lf_hash_search_unpin(pins);
}
+class Proc_purge_user
+ : public PFS_buffer_processor<PFS_user>
+{
+public:
+ Proc_purge_user(PFS_thread *thread)
+ : m_thread(thread)
+ {}
+
+ virtual void operator()(PFS_user *pfs)
+ {
+ pfs->aggregate(true);
+ if (pfs->get_refcount() == 0)
+ purge_user(m_thread, pfs);
+ }
+
+private:
+ PFS_thread *m_thread;
+};
+
/** Purge non connected users, reset stats of connected users. */
void purge_all_user(void)
{
@@ -372,18 +332,8 @@ void purge_all_user(void)
if (unlikely(thread == NULL))
return;
- PFS_user *pfs= user_array;
- PFS_user *pfs_last= user_array + user_max;
-
- for ( ; pfs < pfs_last; pfs++)
- {
- if (pfs->m_lock.is_populated())
- {
- pfs->aggregate();
- if (pfs->get_refcount() == 0)
- purge_user(thread, pfs);
- }
- }
+ Proc_purge_user proc(thread);
+ global_user_container.apply(proc);
}
/** @} */
diff --git a/storage/perfschema/pfs_user.h b/storage/perfschema/pfs_user.h
index 3d0457eae59..9553ff8cae7 100644
--- a/storage/perfschema/pfs_user.h
+++ b/storage/perfschema/pfs_user.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -40,6 +40,7 @@ struct PFS_thread;
@{
*/
+/** Hash key for a user. */
struct PFS_user_key
{
/**
@@ -51,6 +52,7 @@ struct PFS_user_key
uint m_key_length;
};
+/** Per user statistics. */
struct PFS_ALIGNED PFS_user : public PFS_connection_slice
{
public:
@@ -74,13 +76,18 @@ public:
PFS_atomic::add_32(& m_refcount, -1);
}
- void aggregate(void);
+ void aggregate(bool alive);
void aggregate_waits(void);
void aggregate_stages(void);
void aggregate_statements(void);
+ void aggregate_transactions(void);
+ void aggregate_memory(bool alive);
+ void aggregate_status(void);
void aggregate_stats(void);
void release(void);
+ void carry_memory_stat_delta(PFS_memory_stat_delta *delta, uint index);
+
/** Internal lock. */
pfs_lock m_lock;
PFS_user_key m_key;
@@ -95,7 +102,7 @@ private:
int init_user(const PFS_global_param *param);
void cleanup_user(void);
-int init_user_hash(void);
+int init_user_hash(const PFS_global_param *param);
void cleanup_user_hash(void);
PFS_user *
@@ -106,14 +113,7 @@ PFS_user *sanitize_user(PFS_user *unsafe);
void purge_all_user(void);
-/* For iterators and show status. */
-
-extern ulong user_max;
-extern ulong user_lost;
-
-/* Exposing the data directly, for iterators. */
-
-extern PFS_user *user_array;
+/* For show status. */
extern LF_HASH user_hash;
diff --git a/storage/perfschema/pfs_variable.cc b/storage/perfschema/pfs_variable.cc
new file mode 100644
index 00000000000..3654dba2936
--- /dev/null
+++ b/storage/perfschema/pfs_variable.cc
@@ -0,0 +1,1294 @@
+/* Copyright (c) 2015, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+/**
+ @file storage/perfschema/pfs_variable.cc
+ Performance schema system variable and status variable (implementation).
+*/
+#include "sql_plugin.h"
+#include "pfs_variable.h"
+#include "my_sys.h"
+#include "debug_sync.h"
+#include "pfs.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "sql_audit.h" // audit_global_variable_get
+
+static inline SHOW_SCOPE show_scope_from_type(enum enum_mysql_show_type type)
+{
+ switch(type) {
+ case SHOW_BOOL:
+ case SHOW_CHAR:
+ case SHOW_CHAR_PTR:
+ case SHOW_DOUBLE:
+ case SHOW_HAVE:
+ case SHOW_HA_ROWS:
+ case SHOW_KEY_CACHE_LONG:
+ case SHOW_LEX_STRING:
+ case SHOW_LONG_NOFLUSH:
+ case SHOW_MY_BOOL:
+ case SHOW_SINT:
+ case SHOW_SLONG:
+ case SHOW_SLONGLONG:
+ case SHOW_SYS:
+ case SHOW_UINT:
+ case SHOW_ULONG:
+ case SHOW_ULONGLONG:
+ return SHOW_SCOPE_GLOBAL;
+
+ case SHOW_DOUBLE_STATUS:
+ case SHOW_LONGLONG_STATUS:
+ case SHOW_LONG_STATUS:
+ return SHOW_SCOPE_ALL;
+
+ case SHOW_ARRAY:
+ case SHOW_FUNC:
+ case SHOW_SIMPLE_FUNC:
+ case SHOW_UNDEF:
+ default:
+ return SHOW_SCOPE_UNDEF;
+ }
+ return SHOW_SCOPE_UNDEF;
+}
+
+
+/**
+ CLASS PFS_system_variable_cache
+*/
+
+/**
+ Build a sorted list of all system variables from the system variable hash.
+ Filter by scope. Must be called inside of LOCK_plugin_delete.
+*/
+bool PFS_system_variable_cache::init_show_var_array(enum_var_type scope, bool strict)
+{
+ DBUG_ASSERT(!m_initialized);
+ m_query_scope= scope;
+
+ mysql_prlock_rdlock(&LOCK_system_variables_hash);
+ DEBUG_SYNC(m_current_thd, "acquired_LOCK_system_variables_hash");
+
+ /* Record the system variable hash version to detect subsequent changes. */
+ m_version= get_system_variable_hash_version();
+
+ /* Build the SHOW_VAR array from the system variable hash. */
+ SHOW_VAR *vars= enumerate_sys_vars(m_current_thd, true, m_query_scope/*, strict */);
+ m_show_var_array.reserve(get_system_variable_hash_records());
+ for (int i=0; vars[i].name; i++)
+ m_show_var_array.set(i, vars[i]);
+
+ mysql_prlock_unlock(&LOCK_system_variables_hash);
+
+ /* Increase cache size if necessary. */
+ m_cache.reserve(m_show_var_array.elements());
+
+ m_initialized= true;
+ return true;
+}
+
+/**
+ Build an array of SHOW_VARs from the system variable hash.
+ Filter for SESSION scope.
+*/
+bool PFS_system_variable_cache::do_initialize_session(void)
+{
+ /* Block plugins from unloading. */
+ mysql_mutex_lock(&LOCK_plugin_delete);
+
+ /* Build the array. */
+ bool ret= init_show_var_array(OPT_SESSION, true);
+
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return ret;
+}
+
+/**
+ Match system variable scope to desired scope.
+*/
+bool PFS_system_variable_cache::match_scope(int scope)
+{
+ switch (scope)
+ {
+ case sys_var::GLOBAL:
+ return m_query_scope == OPT_GLOBAL;
+ break;
+
+ case sys_var::SESSION:
+ return (m_query_scope == OPT_GLOBAL || m_query_scope == OPT_SESSION);
+ break;
+
+ case sys_var::ONLY_SESSION:
+ return m_query_scope == OPT_SESSION;
+ break;
+
+ default:
+ return false;
+ break;
+ }
+ return false;
+}
+
+/**
+ Build a GLOBAL system variable cache.
+*/
+int PFS_system_variable_cache::do_materialize_global(void)
+{
+ /* Block system variable additions or deletions. */
+ mysql_mutex_lock(&LOCK_global_system_variables);
+
+ m_materialized= false;
+
+ /*
+ Build array of SHOW_VARs from system variable hash. Do this within
+ LOCK_plugin_delete to ensure that the hash table remains unchanged
+ during materialization.
+ */
+ if (!m_external_init)
+ init_show_var_array(OPT_GLOBAL, true);
+
+ /* Resolve the value for each SHOW_VAR in the array, add to cache. */
+ for (SHOW_VAR *show_var= m_show_var_array.front();
+ show_var->value && (show_var != m_show_var_array.end()); show_var++)
+ {
+ const char* name= show_var->name;
+ sys_var *value= (sys_var *)show_var->value;
+ DBUG_ASSERT(value);
+
+ if ((m_query_scope == OPT_GLOBAL) &&
+ (!my_strcasecmp(system_charset_info, name, "sql_log_bin")))
+ {
+ /*
+ PLEASE READ:
+ http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-6.html
+
+ SQL_LOG_BIN is:
+ - declared in sys_vars.cc as both GLOBAL and SESSION in 5.7
+ - impossible to SET with SET GLOBAL (raises an error)
+ - and yet can be read with @@global.sql_log_bin
+
+ When show_compatibility_56 = ON,
+ - SHOW GLOBAL VARIABLES does expose a row for SQL_LOG_BIN
+ - INFORMATION_SCHEMA.GLOBAL_VARIABLES also does expose a row,
+ both are for backward compatibility of existing applications,
+ so that no application logic change is required.
+
+ Now, with show_compatibility_56 = OFF (aka, in this code)
+ - SHOW GLOBAL VARIABLES does -- not -- expose a row for SQL_LOG_BIN
+ - PERFORMANCE_SCHEMA.GLOBAL_VARIABLES also does -- not -- expose a row
+ so that a clean interface is exposed to (upgraded and modified) applications.
+
+ The assert below will fail once SQL_LOG_BIN really is defined
+ as SESSION_ONLY (in 5.8), so that this special case can be removed.
+ */
+ DBUG_ASSERT(value->scope() == sys_var::SESSION);
+ continue;
+ }
+
+ /* Match the system variable scope to the target scope. */
+ if (match_scope(value->scope()))
+ {
+ /* Resolve value, convert to text, add to cache. */
+ System_variable system_var(m_current_thd, show_var, m_query_scope, false);
+ m_cache.push(system_var);
+ }
+ }
+
+ m_materialized= true;
+ mysql_mutex_unlock(&LOCK_global_system_variables);
+ return 0;
+}
+
+/**
+ Build a GLOBAL and SESSION system variable cache.
+*/
+int PFS_system_variable_cache::do_materialize_all(THD *unsafe_thd)
+{
+ int ret= 1;
+
+ m_unsafe_thd= unsafe_thd;
+ m_safe_thd= NULL;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Block plugins from unloading. */
+ mysql_mutex_lock(&LOCK_plugin_delete);
+
+ /*
+ Build array of SHOW_VARs from system variable hash. Do this within
+ LOCK_plugin_delete to ensure that the hash table remains unchanged
+ while this thread is materialized.
+ */
+ if (!m_external_init)
+ init_show_var_array(OPT_SESSION, false);
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(unsafe_thd)) != NULL)
+ {
+ DEBUG_SYNC(m_current_thd, "materialize_session_variable_array_THD_locked");
+ for (SHOW_VAR *show_var= m_show_var_array.front();
+ show_var->value && (show_var != m_show_var_array.end()); show_var++)
+ {
+ sys_var *value= (sys_var *)show_var->value;
+ DBUG_ASSERT(value);
+
+ /* Resolve value, convert to text, add to cache. */
+ System_variable system_var(m_safe_thd, show_var, m_query_scope, false);
+ m_cache.push(system_var);
+ }
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return ret;
+}
+
+/**
+ Allocate and assign mem_root for system variable materialization.
+*/
+void PFS_system_variable_cache::set_mem_root(void)
+{
+ if (m_mem_sysvar_ptr == NULL)
+ {
+ init_sql_alloc(PSI_INSTRUMENT_ME, &m_mem_sysvar, SYSVAR_MEMROOT_BLOCK_SIZE, 0, 0);
+ m_mem_sysvar_ptr= &m_mem_sysvar;
+ }
+ m_mem_thd= &current_thd->mem_root; /* pointer to current THD mem_root */
+ m_mem_thd_save= *m_mem_thd; /* restore later */
+ *m_mem_thd= &m_mem_sysvar; /* use temporary mem_root */
+}
+
+/**
+ Mark memory blocks in the temporary mem_root as free.
+ Restore THD::mem_root.
+*/
+void PFS_system_variable_cache::clear_mem_root(void)
+{
+ if (m_mem_sysvar_ptr)
+ {
+ free_root(&m_mem_sysvar, MYF(MY_MARK_BLOCKS_FREE));
+ *m_mem_thd= m_mem_thd_save; /* restore original mem_root */
+ m_mem_thd= NULL;
+ m_mem_thd_save= NULL;
+ }
+}
+
+/**
+ Free the temporary mem_root.
+ Restore THD::mem_root if necessary.
+*/
+void PFS_system_variable_cache::free_mem_root(void)
+{
+ if (m_mem_sysvar_ptr)
+ {
+ free_root(&m_mem_sysvar, MYF(0));
+ m_mem_sysvar_ptr= NULL;
+ if (m_mem_thd && m_mem_thd_save)
+ {
+ *m_mem_thd= m_mem_thd_save; /* restore original mem_root */
+ m_mem_thd= NULL;
+ m_mem_thd_save= NULL;
+ }
+ }
+}
+
+/**
+ Build a SESSION system variable cache for a pfs_thread.
+ Requires that init_show_var_array() has already been called.
+ Return 0 for success.
+*/
+int PFS_system_variable_cache::do_materialize_session(PFS_thread *pfs_thread)
+{
+ int ret= 1;
+
+ m_pfs_thread= pfs_thread;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Block plugins from unloading. */
+ mysql_mutex_lock(&LOCK_plugin_delete);
+
+ /* The SHOW_VAR array must be initialized externally. */
+ DBUG_ASSERT(m_initialized);
+
+ /* Use a temporary mem_root to avoid depleting THD mem_root. */
+ if (m_use_mem_root)
+ set_mem_root();
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(pfs_thread)) != NULL)
+ {
+ for (SHOW_VAR *show_var= m_show_var_array.front();
+ show_var->value && (show_var != m_show_var_array.end()); show_var++)
+ {
+ sys_var *value= (sys_var *)show_var->value;
+
+ /* Match the system variable scope to the target scope. */
+ if (match_scope(value->scope()))
+ {
+ /* Resolve value, convert to text, add to cache. */
+ System_variable system_var(m_safe_thd, show_var, m_query_scope, false);
+ m_cache.push(system_var);
+ }
+ }
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ /* Mark mem_root blocks as free. */
+ if (m_use_mem_root)
+ clear_mem_root();
+
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return ret;
+}
+
+/**
+ Materialize a single system variable for a pfs_thread.
+ Requires that init_show_var_array() has already been called.
+ Return 0 for success.
+*/
+int PFS_system_variable_cache::do_materialize_session(PFS_thread *pfs_thread, uint index)
+{
+ int ret= 1;
+
+ m_pfs_thread= pfs_thread;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Block plugins from unloading. */
+ mysql_mutex_lock(&LOCK_plugin_delete);
+
+ /* The SHOW_VAR array must be initialized externally. */
+ DBUG_ASSERT(m_initialized);
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(pfs_thread)) != NULL)
+ {
+ SHOW_VAR *show_var= &m_show_var_array.at(index);
+
+ if (show_var && show_var->value &&
+ (show_var != m_show_var_array.end()))
+ {
+ sys_var *value= (sys_var *)show_var->value;
+
+ /* Match the system variable scope to the target scope. */
+ if (match_scope(value->scope()))
+ {
+ /* Resolve value, convert to text, add to cache. */
+ System_variable system_var(m_safe_thd, show_var, m_query_scope, false);
+ m_cache.push(system_var);
+ }
+ }
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return ret;
+}
+
+/**
+ Build a SESSION system variable cache for a THD.
+*/
+int PFS_system_variable_cache::do_materialize_session(THD *unsafe_thd)
+{
+ int ret= 1;
+
+ m_unsafe_thd= unsafe_thd;
+ m_safe_thd= NULL;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Block plugins from unloading. */
+ mysql_mutex_lock(&LOCK_plugin_delete);
+
+ /*
+ Build array of SHOW_VARs from system variable hash. Do this within
+ LOCK_plugin_delete to ensure that the hash table remains unchanged
+ while this thread is materialized.
+ */
+ if (!m_external_init)
+ init_show_var_array(OPT_SESSION, true);
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(unsafe_thd)) != NULL)
+ {
+ for (SHOW_VAR *show_var= m_show_var_array.front();
+ show_var->value && (show_var != m_show_var_array.end()); show_var++)
+ {
+ sys_var *value = (sys_var *)show_var->value;
+
+ /* Match the system variable scope to the target scope. */
+ if (match_scope(value->scope()))
+ {
+ /* Resolve value, convert to text, add to cache. */
+ System_variable system_var(m_safe_thd, show_var, m_query_scope, false);
+ m_cache.push(system_var);
+ }
+ }
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return ret;
+}
+
+
+/**
+ CLASS System_variable
+*/
+
+/**
+ Empty placeholder.
+*/
+System_variable::System_variable()
+ : m_name(NULL), m_name_length(0), m_value_length(0), m_type(SHOW_UNDEF), m_scope(0),
+ m_ignore(false), m_charset(NULL), m_initialized(false)
+{
+ m_value_str[0]= '\0';
+}
+
+/**
+ GLOBAL or SESSION system variable.
+*/
+System_variable::System_variable(THD *target_thd, const SHOW_VAR *show_var,
+ enum_var_type query_scope, bool ignore)
+ : m_name(NULL), m_name_length(0), m_value_length(0), m_type(SHOW_UNDEF), m_scope(0),
+ m_ignore(ignore), m_charset(NULL), m_initialized(false)
+{
+ init(target_thd, show_var, query_scope);
+}
+
+/**
+ Get sys_var value from global or local source then convert to string.
+*/
+void System_variable::init(THD *target_thd, const SHOW_VAR *show_var,
+ enum_var_type query_scope)
+{
+ if (show_var == NULL || show_var->name == NULL)
+ return;
+
+ enum_mysql_show_type show_var_type= show_var->type;
+ DBUG_ASSERT(show_var_type == SHOW_SYS);
+
+ m_name= show_var->name;
+ m_name_length= strlen(m_name);
+
+ /* Deprecated variables are ignored but must still be accounted for. */
+ if (m_ignore)
+ {
+ m_value_str[0]= '\0';
+ m_value_length= 0;
+ m_initialized= true;
+ return;
+ }
+
+ /* Block remote target thread from updating this system variable. */
+ /*XXX
+ THD *current_thread= current_thd;
+ if (target_thd != current_thread)
+ mysql_mutex_lock(&target_thd->LOCK_thd_sysvar);*/
+
+ sys_var *system_var= (sys_var *)show_var->value;
+ DBUG_ASSERT(system_var != NULL);
+ m_charset= system_var->charset(target_thd);
+ m_type= system_var->show_type();
+ m_scope= system_var->scope();
+
+ /* Get the value of the system variable. */
+ String buf(m_value_str, sizeof(m_value_str) - 1, system_charset_info);
+ if (!system_var->val_str_nolock(&buf, target_thd,
+ system_var->value_ptr(target_thd, query_scope, &null_clex_str)))
+ buf.length(0);
+
+ m_value_length= MY_MIN(buf.length(), SHOW_VAR_FUNC_BUFF_SIZE);
+
+ /* Returned value may reference a string other than m_value_str. */
+ if (buf.ptr() != m_value_str)
+ memcpy(m_value_str, buf.ptr(), m_value_length);
+ m_value_str[m_value_length]= 0;
+
+ /*XXX
+ if (target_thd != current_thread)
+ mysql_mutex_unlock(&target_thd->LOCK_thd_sysvar);*/
+
+ m_initialized= true;
+}
+
+
+/**
+ CLASS PFS_status_variable_cache
+*/
+
+PFS_status_variable_cache::
+PFS_status_variable_cache(bool external_init) :
+ PFS_variable_cache<Status_variable>(external_init),
+ m_show_command(false), m_sum_client_status(NULL)
+{
+ /* Determine if the originating query is a SHOW command. */
+ m_show_command= (m_current_thd->lex->sql_command == SQLCOM_SHOW_STATUS);
+}
+
+/**
+ Build cache of SESSION status variables for a user.
+*/
+int PFS_status_variable_cache::materialize_user(PFS_user *pfs_user)
+{
+ if (!pfs_user)
+ return 1;
+
+ if (is_materialized(pfs_user))
+ return 0;
+
+ if (!pfs_user->m_lock.is_populated())
+ return 1;
+
+ /* Set callback function. */
+ m_sum_client_status= sum_user_status;
+ return do_materialize_client((PFS_client *)pfs_user);
+}
+
+/**
+ Build cache of SESSION status variables for a host.
+*/
+int PFS_status_variable_cache::materialize_host(PFS_host *pfs_host)
+{
+ if (!pfs_host)
+ return 1;
+
+ if (is_materialized(pfs_host))
+ return 0;
+
+ if (!pfs_host->m_lock.is_populated())
+ return 1;
+
+ /* Set callback function. */
+ m_sum_client_status= sum_host_status;
+ return do_materialize_client((PFS_client *)pfs_host);
+}
+
+/**
+ Build cache of SESSION status variables for an account.
+*/
+int PFS_status_variable_cache::materialize_account(PFS_account *pfs_account)
+{
+ if (!pfs_account)
+ return 1;
+
+ if (is_materialized(pfs_account))
+ return 0;
+
+ if (!pfs_account->m_lock.is_populated())
+ return 1;
+
+ /* Set callback function. */
+ m_sum_client_status= sum_account_status;
+ return do_materialize_client((PFS_client *)pfs_account);
+}
+/**
+ Compare status variable scope to desired scope.
+ @param variable_scope Scope of current status variable
+ @return TRUE if variable matches the query scope
+*/
+bool PFS_status_variable_cache::match_scope(SHOW_SCOPE variable_scope, bool strict)
+{
+ switch (variable_scope)
+ {
+ case SHOW_SCOPE_GLOBAL:
+ return (m_query_scope == OPT_GLOBAL) || (! strict && (m_query_scope == OPT_SESSION));
+ break;
+ case SHOW_SCOPE_SESSION:
+ /* Ignore session-only vars if aggregating by user, host or account. */
+ if (m_aggregate)
+ return false;
+ else
+ return (m_query_scope == OPT_SESSION);
+ break;
+ case SHOW_SCOPE_ALL:
+ return (m_query_scope == OPT_GLOBAL || m_query_scope == OPT_SESSION);
+ break;
+ case SHOW_SCOPE_UNDEF:
+ default:
+ return false;
+ break;
+ }
+ return false;
+}
+
+/*
+ Exclude specific status variables from the query by name or prefix.
+ Return TRUE if variable should be filtered.
+*/
+bool PFS_status_variable_cache::filter_by_name(const SHOW_VAR *show_var)
+{
+ DBUG_ASSERT(show_var);
+ DBUG_ASSERT(show_var->name);
+
+ if (show_var->type == SHOW_ARRAY)
+ {
+ /* The SHOW_ARRAY name is the prefix for the variables in the subarray. */
+ const char *prefix= show_var->name;
+ /* Exclude COM counters if not a SHOW STATUS command. */
+ if (!my_strcasecmp(system_charset_info, prefix, "Com") && !m_show_command)
+ return true;
+ }
+ else
+ {
+ /*
+ Slave status resides in Performance Schema replication tables. Exclude
+ these slave status variables from the SHOW STATUS command and from the
+ status tables.
+ Assume null prefix to ensure that only server-defined slave status
+ variables are filtered.
+ */
+ const char *name= show_var->name;
+ if (!my_strcasecmp(system_charset_info, name, "Slave_running") ||
+ !my_strcasecmp(system_charset_info, name, "Slave_retried_transactions") ||
+ !my_strcasecmp(system_charset_info, name, "Slave_last_heartbeat") ||
+ !my_strcasecmp(system_charset_info, name, "Slave_received_heartbeats") ||
+ !my_strcasecmp(system_charset_info, name, "Slave_heartbeat_period"))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ Check that the variable type is aggregatable.
+
+ @param variable_type Status variable type
+ @return TRUE if variable type can be aggregated
+*/
+bool PFS_status_variable_cache::can_aggregate(enum_mysql_show_type variable_type)
+{
+ switch(variable_type)
+ {
+ /*
+ All server status counters that are totaled across threads are defined in
+ system_status_var as either SHOW_LONGLONG_STATUS or SHOW_LONG_STATUS.
+ These data types are not available to plugins.
+ */
+ case SHOW_LONGLONG_STATUS:
+ case SHOW_LONG_STATUS:
+ return true;
+ break;
+
+ /* Server and plugin */
+ case SHOW_UNDEF:
+ case SHOW_BOOL:
+ case SHOW_CHAR:
+ case SHOW_CHAR_PTR:
+ case SHOW_ARRAY:
+ case SHOW_FUNC:
+ case SHOW_INT:
+ case SHOW_LONG:
+ case SHOW_LONGLONG:
+ case SHOW_DOUBLE:
+ /* Server only */
+ case SHOW_HAVE:
+ case SHOW_MY_BOOL:
+ case SHOW_SYS:
+ case SHOW_LEX_STRING:
+ case SHOW_KEY_CACHE_LONG:
+ case SHOW_DOUBLE_STATUS:
+ case SHOW_HA_ROWS:
+ case SHOW_LONG_NOFLUSH:
+ case SHOW_SLONG:
+ default:
+ return false;
+ break;
+ }
+}
+
+/**
+ Check if a status variable should be excluded from the query.
+ Return TRUE if the variable should be excluded.
+*/
+bool PFS_status_variable_cache::filter_show_var(const SHOW_VAR *show_var, bool strict)
+{
+ /* Match the variable scope with the query scope. */
+ if (!match_scope(show_scope_from_type(show_var->type), strict))
+ return true;
+
+ /* Exclude specific status variables by name or prefix. */
+ if (filter_by_name(show_var))
+ return true;
+
+ /* For user, host or account, ignore variables having non-aggregatable types. */
+ if (m_aggregate && !can_aggregate(show_var->type))
+ return true;
+
+ return false;
+}
+
+
+/**
+ Build an array of SHOW_VARs from the global status array. Expand nested
+ subarrays, filter unwanted variables.
+ NOTE: Must be done inside of LOCK_status to guard against plugin load/unload.
+*/
+bool PFS_status_variable_cache::init_show_var_array(enum_var_type scope, bool strict)
+{
+ DBUG_ASSERT(!m_initialized);
+
+ /* Resize if necessary. */
+ m_show_var_array.reserve(all_status_vars.elements + 1);
+
+ m_query_scope= scope;
+
+ for (SHOW_VAR *show_var_iter= dynamic_element(&all_status_vars, 0, SHOW_VAR *);
+ show_var_iter != dynamic_element(&all_status_vars, all_status_vars.elements, SHOW_VAR *);
+ show_var_iter++)
+ {
+ SHOW_VAR show_var= *show_var_iter;
+
+ /* Check if this status var should be excluded from the query. */
+ if (filter_show_var(&show_var, strict))
+ continue;
+
+ if (show_var.type == SHOW_ARRAY)
+ {
+ /* Expand nested subarray. The name is used as a prefix. */
+ expand_show_var_array((SHOW_VAR *)show_var.value, show_var.name, strict);
+ }
+ else
+ {
+ show_var.name= make_show_var_name(NULL, show_var.name);
+ m_show_var_array.push(show_var);
+ }
+ }
+
+ /* Last element is NULL. */
+ st_mysql_show_var empty= {0,0,SHOW_UNDEF};
+ m_show_var_array.push(empty);
+
+ /* Get the latest version of all_status_vars. */
+ m_version= get_status_vars_version();
+
+ /* Increase cache size if necessary. */
+ m_cache.reserve(m_show_var_array.elements());
+
+ m_initialized= true;
+ return true;
+}
+
+/**
+ Expand a nested subarray of status variables, indicated by a type of SHOW_ARRAY.
+*/
+void PFS_status_variable_cache::expand_show_var_array(const SHOW_VAR *show_var_array, const char *prefix, bool strict)
+{
+ for (const SHOW_VAR *show_var_ptr= show_var_array;
+ show_var_ptr && show_var_ptr->name;
+ show_var_ptr++)
+ {
+ SHOW_VAR show_var= *show_var_ptr;
+
+ if (filter_show_var(&show_var, strict))
+ continue;
+
+ if (show_var.type == SHOW_ARRAY)
+ {
+ char name_buf[SHOW_VAR_MAX_NAME_LEN];
+ show_var.name= make_show_var_name(prefix, show_var.name, name_buf, sizeof(name_buf));
+ /* Expand nested subarray. The name is used as a prefix. */
+ expand_show_var_array((SHOW_VAR *)show_var.value, show_var.name, strict);
+ }
+ else
+ {
+ /* Add the SHOW_VAR element. Make a local copy of the name string. */
+ show_var.name= make_show_var_name(prefix, show_var.name);
+ m_show_var_array.push(show_var);
+ }
+ }
+}
+
+/**
+ Build the complete status variable name, with prefix. Return in buffer provided.
+*/
+char * PFS_status_variable_cache::make_show_var_name(const char* prefix, const char* name,
+ char *name_buf, size_t buf_len)
+{
+ DBUG_ASSERT(name_buf != NULL);
+ char *prefix_end= name_buf;
+
+ if (prefix && *prefix)
+ {
+ /* Drop the prefix into the front of the name buffer. */
+ prefix_end= my_stpnmov(name_buf, prefix, buf_len-1);
+ *prefix_end++= '_';
+ }
+
+ /* Restrict name length to remaining buffer size. */
+ size_t max_name_len= name_buf + buf_len - prefix_end;
+
+ /* Load the name into the buffer after the prefix. */
+ my_stpnmov(prefix_end, name, max_name_len);
+ name_buf[buf_len-1]= 0;
+
+ return (name_buf);
+}
+
+/**
+ Make a copy of the name string prefixed with the subarray name if necessary.
+*/
+char * PFS_status_variable_cache::make_show_var_name(const char* prefix, const char* name)
+{
+ char name_buf[SHOW_VAR_MAX_NAME_LEN];
+ size_t buf_len= sizeof(name_buf);
+ make_show_var_name(prefix, name, name_buf, buf_len);
+ return m_current_thd->strdup(name_buf); /* freed at statement end */
+}
+
+/**
+ Build an internal SHOW_VAR array from the external status variable array.
+*/
+bool PFS_status_variable_cache::do_initialize_session(void)
+{
+ /* Acquire LOCK_status to guard against plugin load/unload. */
+ //if (m_current_thd->fill_status_recursion_level++ == 0)
+ mysql_mutex_lock(&LOCK_status);
+
+ bool ret= init_show_var_array(OPT_SESSION, true);
+
+ //if (m_current_thd->fill_status_recursion_level-- == 1)
+ mysql_mutex_unlock(&LOCK_status);
+
+ return ret;
+}
+
+/**
+ For the current THD, use initial_status_vars taken from before the query start.
+*/
+STATUS_VAR *PFS_status_variable_cache::set_status_vars(void)
+{
+ STATUS_VAR *status_vars;
+ if (m_safe_thd == m_current_thd && m_current_thd->initial_status_var != NULL)
+ status_vars= m_current_thd->initial_status_var;
+ else
+ status_vars= &m_safe_thd->status_var;
+
+ return status_vars;
+}
+
+/**
+ Build cache for GLOBAL status variables using values totaled from all threads.
+*/
+int PFS_status_variable_cache::do_materialize_global(void)
+{
+ STATUS_VAR status_totals;
+
+ m_materialized= false;
+ DEBUG_SYNC(m_current_thd, "before_materialize_global_status_array");
+
+ /* Acquire LOCK_status to guard against plugin load/unload. */
+ //if (m_current_thd->fill_status_recursion_level++ == 0)
+ mysql_mutex_lock(&LOCK_status);
+
+ /*
+ Build array of SHOW_VARs from global status array. Do this within
+ LOCK_status to ensure that the array remains unchanged during
+ materialization.
+ */
+ if (!m_external_init)
+ init_show_var_array(OPT_GLOBAL, true);
+
+ /*
+ Collect totals for all active threads. Start with global status vars as a
+ baseline.
+ */
+ PFS_connection_status_visitor visitor(&status_totals);
+ PFS_connection_iterator::visit_global(false, /* hosts */
+ false, /* users */
+ false, /* accounts */
+ false, /* threads */
+ true, /* THDs */
+ &visitor);
+ /*
+ Build the status variable cache using the SHOW_VAR array as a reference.
+ Use the status totals collected from all threads.
+ */
+ manifest(m_current_thd, m_show_var_array.front(), &status_totals, "", false, true);
+
+ //if (m_current_thd->fill_status_recursion_level-- == 1)
+ mysql_mutex_unlock(&LOCK_status);
+
+ m_materialized= true;
+ DEBUG_SYNC(m_current_thd, "after_materialize_global_status_array");
+
+ return 0;
+}
+
+/**
+ Build GLOBAL and SESSION status variable cache using values for a non-instrumented thread.
+*/
+int PFS_status_variable_cache::do_materialize_all(THD* unsafe_thd)
+{
+ int ret= 1;
+ DBUG_ASSERT(unsafe_thd != NULL);
+
+ m_unsafe_thd= unsafe_thd;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Avoid recursive acquisition of LOCK_status. */
+ //if (m_current_thd->fill_status_recursion_level++ == 0)
+ mysql_mutex_lock(&LOCK_status);
+
+ /*
+ Build array of SHOW_VARs from global status array. Do this within
+ LOCK_status to ensure that the array remains unchanged while this
+ thread is materialized.
+ */
+ if (!m_external_init)
+ init_show_var_array(OPT_SESSION, false);
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(unsafe_thd)) != NULL)
+ {
+ /*
+ Build the status variable cache using the SHOW_VAR array as a reference.
+ Use the status values from the THD protected by the thread manager lock.
+ */
+ STATUS_VAR *status_vars= set_status_vars();
+ manifest(m_safe_thd, m_show_var_array.front(), status_vars, "", false, false);
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ //if (m_current_thd->fill_status_recursion_level-- == 1)
+ mysql_mutex_unlock(&LOCK_status);
+ return ret;
+}
+
+/**
+ Build SESSION status variable cache using values for a non-instrumented thread.
+*/
+int PFS_status_variable_cache::do_materialize_session(THD* unsafe_thd)
+{
+ int ret= 1;
+ DBUG_ASSERT(unsafe_thd != NULL);
+
+ m_unsafe_thd= unsafe_thd;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Avoid recursive acquisition of LOCK_status. */
+ //if (m_current_thd->fill_status_recursion_level++ == 0)
+ mysql_mutex_lock(&LOCK_status);
+
+ /*
+ Build array of SHOW_VARs from global status array. Do this within
+ LOCK_status to ensure that the array remains unchanged while this
+ thread is materialized.
+ */
+ if (!m_external_init)
+ init_show_var_array(OPT_SESSION, true);
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(unsafe_thd)) != NULL)
+ {
+ /*
+ Build the status variable cache using the SHOW_VAR array as a reference.
+ Use the status values from the THD protected by the thread manager lock.
+ */
+ STATUS_VAR *status_vars= set_status_vars();
+ manifest(m_safe_thd, m_show_var_array.front(), status_vars, "", false, true);
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ //if (m_current_thd->fill_status_recursion_level-- == 1)
+ mysql_mutex_unlock(&LOCK_status);
+ return ret;
+}
+
+/**
+ Build SESSION status variable cache using values for a PFS_thread.
+ NOTE: Requires that init_show_var_array() has already been called.
+*/
+int PFS_status_variable_cache::do_materialize_session(PFS_thread *pfs_thread)
+{
+ int ret= 1;
+ DBUG_ASSERT(pfs_thread != NULL);
+
+ m_pfs_thread= pfs_thread;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Acquire LOCK_status to guard against plugin load/unload. */
+ //if (m_current_thd->fill_status_recursion_level++ == 0)
+ mysql_mutex_lock(&LOCK_status);
+
+ /* The SHOW_VAR array must be initialized externally. */
+ DBUG_ASSERT(m_initialized);
+
+ /* Get and lock a validated THD from the thread manager. */
+ if ((m_safe_thd= get_THD(pfs_thread)) != NULL)
+ {
+ /*
+ Build the status variable cache using the SHOW_VAR array as a reference.
+ Use the status values from the THD protected by the thread manager lock.
+ */
+ STATUS_VAR *status_vars= set_status_vars();
+ manifest(m_safe_thd, m_show_var_array.front(), status_vars, "", false, true);
+
+ /* Release lock taken in get_THD(). */
+ mysql_mutex_unlock(&m_safe_thd->LOCK_thd_data);
+
+ m_materialized= true;
+ ret= 0;
+ }
+
+ //if (m_current_thd->fill_status_recursion_level-- == 1)
+ mysql_mutex_unlock(&LOCK_status);
+ return ret;
+}
+
+/**
+ Build cache of SESSION status variables using the status values provided.
+ The cache is associated with a user, host or account, but not with any
+ particular thread.
+ NOTE: Requires that init_show_var_array() has already been called.
+*/
+int PFS_status_variable_cache::do_materialize_client(PFS_client *pfs_client)
+{
+ DBUG_ASSERT(pfs_client != NULL);
+ STATUS_VAR status_totals;
+
+ m_pfs_client= pfs_client;
+ m_materialized= false;
+ m_cache.clear();
+
+ /* Acquire LOCK_status to guard against plugin load/unload. */
+ //if (m_current_thd->fill_status_recursion_level++ == 0)
+ mysql_mutex_lock(&LOCK_status);
+
+ /* The SHOW_VAR array must be initialized externally. */
+ DBUG_ASSERT(m_initialized);
+
+ /*
+ Generate status totals from active threads and from totals aggregated
+ from disconnected threads.
+ */
+ m_sum_client_status(pfs_client, &status_totals);
+
+ /*
+ Build the status variable cache using the SHOW_VAR array as a reference and
+ the status totals collected from threads associated with this client.
+ */
+ manifest(m_current_thd, m_show_var_array.front(), &status_totals, "", false, true);
+
+ //if (m_current_thd->fill_status_recursion_level-- == 1)
+ mysql_mutex_unlock(&LOCK_status);
+
+ m_materialized= true;
+ return 0;
+}
+
+/*
+ Build the status variable cache from the expanded and sorted SHOW_VAR array.
+ Resolve status values using the STATUS_VAR struct provided.
+*/
+void PFS_status_variable_cache::manifest(THD *thd, const SHOW_VAR *show_var_array,
+ STATUS_VAR *status_vars, const char *prefix,
+ bool nested_array, bool strict)
+{
+ for (const SHOW_VAR *show_var_iter= show_var_array;
+ show_var_iter && show_var_iter->name;
+ show_var_iter++)
+ {
+ // work buffer, must be aligned to handle long/longlong values
+ my_aligned_storage<SHOW_VAR_FUNC_BUFF_SIZE+1, MY_ALIGNOF(longlong)>
+ value_buf;
+ SHOW_VAR show_var_tmp;
+ const SHOW_VAR *show_var_ptr= show_var_iter; /* preserve array pointer */
+
+ /*
+ If the value is a function reference, then execute the function and
+ reevaluate the new SHOW_TYPE and value. Handle nested case where
+ SHOW_FUNC resolves to another SHOW_FUNC.
+ */
+ if (show_var_ptr->type == SHOW_FUNC)
+ {
+ show_var_tmp= *show_var_ptr;
+ /*
+ Execute the function reference in show_var_tmp->value, which returns
+ show_var_tmp with a new type and new value.
+ */
+ for (const SHOW_VAR *var= show_var_ptr; var->type == SHOW_FUNC; var= &show_var_tmp)
+ {
+ ((mysql_show_var_func)(var->value))(thd, &show_var_tmp, value_buf.data, NULL, m_query_scope);
+ }
+ show_var_ptr= &show_var_tmp;
+ }
+
+ /*
+ If we are expanding a SHOW_ARRAY, filter variables that were not prefiltered by
+ init_show_var_array().
+ */
+ if (nested_array && filter_show_var(show_var_ptr, strict))
+ continue;
+
+ if (show_var_ptr->type == SHOW_ARRAY)
+ {
+ /*
+ Status variables of type SHOW_ARRAY were expanded and filtered by
+ init_show_var_array(), except where a SHOW_FUNC resolves into a
+ SHOW_ARRAY, such as with InnoDB. Recurse to expand the subarray.
+ */
+ manifest(thd, (SHOW_VAR *)show_var_ptr->value, status_vars, show_var_ptr->name, true, strict);
+ }
+ else
+ {
+ /* Add the materialized status variable to the cache. */
+ SHOW_VAR show_var= *show_var_ptr;
+ /*
+ For nested array expansions, make a copy of the variable name, just as
+ done in init_show_var_array().
+ */
+ if (nested_array)
+ show_var.name= make_show_var_name(prefix, show_var_ptr->name);
+
+ /* Convert status value to string format. Add to the cache. */
+ Status_variable status_var(&show_var, status_vars, m_query_scope);
+ m_cache.push(status_var);
+ }
+ }
+}
+
+/**
+ CLASS Status_variable
+*/
+Status_variable::Status_variable(const SHOW_VAR *show_var, STATUS_VAR *status_vars, enum_var_type query_scope)
+ : m_name_length(0), m_value_length(0), m_type(SHOW_UNDEF),
+ m_charset(NULL), m_initialized(false)
+{
+ init(show_var, status_vars, query_scope);
+}
+
+/**
+ Resolve status value, convert to string.
+ show_var->value is an offset into status_vars.
+ NOTE: Assumes LOCK_status is held.
+*/
+void Status_variable::init(const SHOW_VAR *show_var, STATUS_VAR *status_vars, enum_var_type query_scope)
+{
+ if (show_var == NULL || show_var->name == NULL)
+ return;
+ m_name= show_var->name;
+ m_name_length= strlen(m_name);
+ m_type= show_var->type;
+
+ /* Get the value of the status variable. */
+ const char *value;
+ value= get_one_variable(current_thd, show_var, query_scope, m_type,
+ status_vars, &m_charset, m_value_str, &m_value_length);
+ m_value_length= MY_MIN(m_value_length, SHOW_VAR_FUNC_BUFF_SIZE);
+ m_charset= system_charset_info;
+
+ /* Returned value may reference a string other than m_value_str. */
+ if (value != m_value_str)
+ memcpy(m_value_str, value, m_value_length);
+ m_value_str[m_value_length]= 0;
+
+ m_initialized= true;
+}
+
+/*
+ Get status totals for this user from active THDs and related accounts.
+*/
+void sum_user_status(PFS_client *pfs_user, STATUS_VAR *status_totals)
+{
+ PFS_connection_status_visitor visitor(status_totals);
+ PFS_connection_iterator::visit_user((PFS_user *)pfs_user,
+ true, /* accounts */
+ false, /* threads */
+ true, /* THDs */
+ &visitor);
+}
+
+/*
+ Get status totals for this host from active THDs and related accounts.
+*/
+void sum_host_status(PFS_client *pfs_host, STATUS_VAR *status_totals)
+{
+ PFS_connection_status_visitor visitor(status_totals);
+ PFS_connection_iterator::visit_host((PFS_host *)pfs_host,
+ true, /* accounts */
+ false, /* threads */
+ true, /* THDs */
+ &visitor);
+}
+
+/*
+ Get status totals for this account from active THDs and from totals aggregated
+ from disconnectd threads.
+*/
+void sum_account_status(PFS_client *pfs_account, STATUS_VAR *status_totals)
+{
+ PFS_connection_status_visitor visitor(status_totals);
+ PFS_connection_iterator::visit_account((PFS_account *)pfs_account,
+ false, /* threads */
+ true, /* THDs */
+ &visitor);
+}
+
+/**
+ Reset aggregated status counter stats for account, user and host.
+ NOTE: Assumes LOCK_status is held.
+*/
+void reset_pfs_status_stats()
+{
+ reset_status_by_account();
+ reset_status_by_user();
+ reset_status_by_host();
+}
+
+/** @} */
diff --git a/storage/perfschema/pfs_variable.h b/storage/perfschema/pfs_variable.h
new file mode 100644
index 00000000000..bfe51c6d1b3
--- /dev/null
+++ b/storage/perfschema/pfs_variable.h
@@ -0,0 +1,716 @@
+/* Copyright (c) 2015, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+#ifndef PFS_VARIABLE_H
+#define PFS_VARIABLE_H
+
+/**
+ @file storage/perfschema/pfs_variable.h
+ Performance schema system and status variables (declarations).
+*/
+
+/**
+ OVERVIEW
+ --------
+ Status and system variables are implemented differently in the server, but the
+ steps to process them in the Performance Schema are essentially the same:
+
+ 1. INITIALIZE - Build or acquire a sorted list of variables to use for input.
+ Use the SHOW_VAR struct as an intermediate format common to system, status
+ and user vars:
+
+ SHOW_VAR
+ Name - Text string
+ Value - Pointer to memory location, function, subarray structure
+ Type - Scalar, function, or subarray
+ Scope - SESSION, GLOBAL, BOTH
+
+ Steps:
+ - Register the server's internal buffer with the class. Acquire locks
+ if necessary, then scan the contents of the input buffer.
+ - For system variables, convert each element to SHOW_VAR format, store in
+ a temporary array.
+ - For status variables, copy existing global status array into a local
+ array that can be used without locks. Expand nested subarrays, indicated
+ by a type of SHOW_ARRAY.
+
+ 2. MATERIALIZE - Convert the list of SHOW_VAR variables to string format,
+ store in a local cache:
+ - Resolve each variable according to the type.
+ - Recursively process unexpanded nested arrays and callback functions.
+ - Aggregate values across threads for global status.
+ - Convert numeric values to a string.
+ - Prefix variable name with the plugin name.
+
+ 3. OUTPUT - Iterate the cache for the SHOW command or table query.
+
+ CLASS OVERVIEW
+ --------------
+ 1. System_variable - A materialized system variable
+ 2. Status_variable - A materialized status variable
+ 3. PFS_variable_cache - Base class that defines the interface for the operations above.
+ public
+ init_show_var_array() - Build SHOW_VAR list of variables for processing
+ materialize_global() - Materialize global variables, aggregate across sessions
+ materialize_session() - Materialize variables for a given PFS_thread or THD
+ materialize_user() - Materialize variables for a user, aggregate across related threads.
+ materialize_host() - Materialize variables for a host, aggregate across related threads.
+ materialize_account() - Materialize variables for a account, aggregate across related threads.
+ private
+ m_show_var_array - Prealloc_array of SHOW_VARs for input to Materialize
+ m_cache - Prealloc_array of materialized variables for output
+ do_materialize_global() - Implementation of materialize_global()
+ do_materialize_session() - Implementation of materialize_session()
+ do_materialize_client() - Implementation of materialize_user/host/account()
+
+ 4. PFS_system_variable_cache - System variable implementation of PFS_variable_cache
+ 5. PFS_status_variable_cache - Status variable implementation of PFS_variable_cache
+ 6. Find_THD_variable - Used by the thread manager to find and lock a THD.
+
+ GLOSSARY
+ --------
+ Status variable - Server or plugin status counter. Not dynamic.
+ System variable - Server or plugin configuration variable. Usually dynamic.
+ GLOBAL scope - Associated with the server, no context at thread level.
+ SESSION scope - Associated with a connection or thread, but no global context.
+ BOTH scope - Globally defined but applies at the session level.
+ Initialize - Build list of variables in SHOW_VAR format.
+ Materialize - Convert variables in SHOW_VAR list to string, cache for output.
+ Manifest - Substep of Materialize. Resolve variable values according to
+ type. This includes SHOW_FUNC types which are resolved by
+ executing a callback function (possibly recursively), and
+ SHOW_ARRAY types that expand into nested subarrays.
+ LOCK PRIORITIES
+ ---------------
+ System Variables
+ LOCK_plugin_delete (block plugin delete)
+ LOCK_system_variables_hash
+ LOCK_thd_data (block THD delete)
+ LOCK_thd_sysvar (block system variable updates, alloc_and_copy_thd_dynamic_variables)
+ LOCK_global_system_variables (very briefly held)
+
+ Status Variables
+ LOCK_status
+ LOCK_thd_data (block THD delete)
+*/
+
+/* Iteration on THD from the sql layer. */
+#include "mysqld_thd_manager.h"
+#define PFS_VAR
+/* Class sys_var */
+#include "set_var.h"
+/* convert_value_to_string */
+#include "sql_show.h"
+/* PFS_thread */
+#include "pfs_instr.h"
+#include "pfs_user.h"
+#include "pfs_host.h"
+#include "pfs_account.h"
+
+/* Global array of all server and plugin-defined status variables. */
+extern DYNAMIC_ARRAY all_status_vars;
+extern bool status_vars_inited;
+static const uint SYSVAR_MEMROOT_BLOCK_SIZE = 4096;
+
+extern mysql_mutex_t LOCK_plugin_delete;
+
+class Find_THD_Impl;
+class Find_THD_variable;
+typedef PFS_connection_slice PFS_client;
+
+/**
+ CLASS System_variable - System variable derived from sys_var object.
+*/
+class System_variable
+{
+public:
+ System_variable();
+ System_variable(THD *target_thd, const SHOW_VAR *show_var,
+ enum_var_type query_scope, bool ignore);
+ ~System_variable() {}
+
+ bool is_null() const { return !m_initialized; }
+ bool is_ignored() const { return m_ignore; }
+
+public:
+ const char *m_name;
+ size_t m_name_length;
+ char m_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1];
+ size_t m_value_length;
+ enum_mysql_show_type m_type;
+ int m_scope;
+ bool m_ignore;
+ const CHARSET_INFO *m_charset;
+
+private:
+ bool m_initialized;
+ void init(THD *thd, const SHOW_VAR *show_var, enum_var_type query_scope);
+};
+
+
+/**
+ CLASS Status_variable - Status variable derived from SHOW_VAR.
+*/
+class Status_variable
+{
+public:
+ Status_variable() : m_name(NULL), m_name_length(0), m_value_length(0),
+ m_type(SHOW_UNDEF),
+ m_charset(NULL), m_initialized(false) {}
+
+ Status_variable(const SHOW_VAR *show_var, STATUS_VAR *status_array, enum_var_type query_scope);
+
+ ~Status_variable() {}
+
+ bool is_null() const {return !m_initialized;};
+
+public:
+ const char *m_name;
+ size_t m_name_length;
+ char m_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1];
+ size_t m_value_length;
+ SHOW_TYPE m_type;
+ const CHARSET_INFO *m_charset;
+private:
+ bool m_initialized;
+ void init(const SHOW_VAR *show_var, STATUS_VAR *status_array, enum_var_type query_scope);
+};
+
+
+/**
+ CLASS Find_THD_variable - Get and lock a validated THD from the thread manager.
+*/
+class Find_THD_variable : public Find_THD_Impl
+{
+public:
+ Find_THD_variable() : m_unsafe_thd(NULL) {}
+ Find_THD_variable(THD *unsafe_thd) : m_unsafe_thd(unsafe_thd) {}
+
+ virtual bool operator()(THD *thd)
+ {
+ //TODO: filter bg threads?
+ if (thd != m_unsafe_thd)
+ return false;
+
+ /* Hold this lock to keep THD during materialization. */
+ mysql_mutex_lock(&thd->LOCK_thd_data);
+ return true;
+ }
+ void set_unsafe_thd(THD *unsafe_thd) { m_unsafe_thd= unsafe_thd; }
+private:
+ THD *m_unsafe_thd;
+};
+
+/**
+ CLASS PFS_variable_cache - Base class for a system or status variable cache.
+*/
+template <class Var_type>
+class PFS_variable_cache
+{
+public:
+ typedef Dynamic_array<Var_type> Variable_array;
+
+ PFS_variable_cache(bool external_init)
+ : m_safe_thd(NULL),
+ m_unsafe_thd(NULL),
+ m_current_thd(current_thd),
+ m_pfs_thread(NULL),
+ m_pfs_client(NULL),
+ m_thd_finder(),
+ m_cache(PSI_INSTRUMENT_MEM),
+ m_initialized(false),
+ m_external_init(external_init),
+ m_materialized(false),
+ m_show_var_array(PSI_INSTRUMENT_MEM),
+ m_version(0),
+ m_query_scope(OPT_DEFAULT),
+ m_use_mem_root(false),
+ m_aggregate(false)
+ { }
+
+ virtual ~PFS_variable_cache()= 0;
+
+ /**
+ Build array of SHOW_VARs from the external variable source.
+ Filter using session scope.
+ */
+ bool initialize_session(void);
+
+ /**
+ Build array of SHOW_VARs suitable for aggregation by user, host or account.
+ Filter using session scope.
+ */
+ bool initialize_client_session(void);
+
+ /**
+ Build cache of GLOBAL system or status variables.
+ Aggregate across threads if applicable.
+ */
+ int materialize_global();
+
+ /**
+ Build cache of GLOBAL and SESSION variables for a non-instrumented thread.
+ */
+ int materialize_all(THD *thd);
+
+ /**
+ Build cache of SESSION variables for a non-instrumented thread.
+ */
+ int materialize_session(THD *thd);
+
+ /**
+ Build cache of SESSION variables for an instrumented thread.
+ */
+ int materialize_session(PFS_thread *pfs_thread, bool use_mem_root= false);
+
+ /**
+ Cache a single SESSION variable for an instrumented thread.
+ */
+ int materialize_session(PFS_thread *pfs_thread, uint index);
+
+ /**
+ Build cache of SESSION status variables for a user.
+ */
+ int materialize_user(PFS_user *pfs_user);
+
+ /**
+ Build cache of SESSION status variables for a host.
+ */
+ int materialize_host(PFS_host *pfs_host);
+
+ /**
+ Build cache of SESSION status variables for an account.
+ */
+ int materialize_account(PFS_account *pfs_account);
+
+ /**
+ True if variables have been materialized.
+ */
+ bool is_materialized(void)
+ {
+ return m_materialized;
+ }
+
+ /**
+ True if variables have been materialized for given THD.
+ */
+ bool is_materialized(THD *unsafe_thd)
+ {
+ return (unsafe_thd == m_unsafe_thd && m_materialized);
+ }
+
+ /**
+ True if variables have been materialized for given PFS_thread.
+ */
+ bool is_materialized(PFS_thread *pfs_thread)
+ {
+ return (pfs_thread == m_pfs_thread && m_materialized);
+ }
+
+ /**
+ True if variables have been materialized for given PFS_user.
+ */
+ bool is_materialized(PFS_user *pfs_user)
+ {
+ return (static_cast<PFS_client *>(pfs_user) == m_pfs_client && m_materialized);
+ }
+
+ /**
+ True if variables have been materialized for given PFS_host.
+ */
+ bool is_materialized(PFS_host *pfs_host)
+ {
+ return (static_cast<PFS_client *>(pfs_host) == m_pfs_client && m_materialized);
+ }
+
+ /**
+ True if variables have been materialized for given PFS_account.
+ */
+ bool is_materialized(PFS_account *pfs_account)
+ {
+ return (static_cast<PFS_client *>(pfs_account) == m_pfs_client && m_materialized);
+ }
+
+ /**
+ True if variables have been materialized for given PFS_user/host/account.
+ */
+ bool is_materialized(PFS_client *pfs_client)
+ {
+ return (static_cast<PFS_client *>(pfs_client) == m_pfs_client && m_materialized);
+ }
+
+ /**
+ Get a validated THD from the thread manager. Execute callback function while
+ inside of the thread manager locks.
+ */
+ THD *get_THD(THD *thd);
+ THD *get_THD(PFS_thread *pfs_thread);
+
+ /**
+ Get a single variable from the cache.
+ Get the first element in the cache by default.
+ */
+ const Var_type *get(uint index= 0) const
+ {
+ if (index >= m_cache.elements())
+ return NULL;
+
+ const Var_type *p= &m_cache.at(index);
+ return p;
+ }
+
+ /**
+ Number of elements in the cache.
+ */
+ uint size()
+ {
+ return (uint)m_cache.elements();
+ }
+
+private:
+ virtual bool do_initialize_global(void) { return true; }
+ virtual bool do_initialize_session(void) { return true; }
+ virtual int do_materialize_global(void) { return 1; }
+ virtual int do_materialize_all(THD *thd) { return 1; }
+ virtual int do_materialize_session(THD *thd) { return 1; }
+ virtual int do_materialize_session(PFS_thread *) { return 1; }
+ virtual int do_materialize_session(PFS_thread *, uint index) { return 1; }
+
+protected:
+ /* Validated THD */
+ THD *m_safe_thd;
+
+ /* Unvalidated THD */
+ THD *m_unsafe_thd;
+
+ /* Current THD */
+ THD *m_current_thd;
+
+ /* Current PFS_thread. */
+ PFS_thread *m_pfs_thread;
+
+ /* Current PFS_user, host or account. */
+ PFS_client *m_pfs_client;
+
+ /* Callback for thread iterator. */
+ Find_THD_variable m_thd_finder;
+
+ /* Cache of materialized variables. */
+ Variable_array m_cache;
+
+ /* True when list of SHOW_VAR is complete. */
+ bool m_initialized;
+
+ /*
+ True if the SHOW_VAR array must be initialized externally from the
+ materialization step, such as with aggregations and queries by thread.
+ */
+ bool m_external_init;
+
+ /* True when cache is complete. */
+ bool m_materialized;
+
+ /* Array of variables to be materialized. Last element must be null. */
+ Dynamic_array<SHOW_VAR> m_show_var_array;
+
+ /* Version of global hash/array. Changes when vars added/removed. */
+ ulonglong m_version;
+
+ /* Query scope: GLOBAL or SESSION. */
+ enum_var_type m_query_scope;
+
+ /* True if temporary mem_root should be used for materialization. */
+ bool m_use_mem_root;
+
+ /* True if summarizing across users, hosts or accounts. */
+ bool m_aggregate;
+
+};
+
+/**
+ Required implementation for pure virtual destructor of a template class.
+*/
+template <class Var_type>
+PFS_variable_cache<Var_type>::~PFS_variable_cache()
+{
+}
+
+/**
+ Get a validated THD from the thread manager. Execute callback function while
+ while inside the thread manager lock.
+*/
+template <class Var_type>
+THD *PFS_variable_cache<Var_type>::get_THD(THD *unsafe_thd)
+{
+ if (unsafe_thd == NULL)
+ {
+ /*
+ May happen, precisely because the pointer is unsafe
+ (THD just disconnected for example).
+ No need to walk Global_THD_manager for that.
+ */
+ return NULL;
+ }
+
+ m_thd_finder.set_unsafe_thd(unsafe_thd);
+ THD* safe_thd= Global_THD_manager::get_instance()->find_thd(&m_thd_finder);
+ return safe_thd;
+}
+
+template <class Var_type>
+THD *PFS_variable_cache<Var_type>::get_THD(PFS_thread *pfs_thread)
+{
+ DBUG_ASSERT(pfs_thread != NULL);
+ return get_THD(pfs_thread->m_thd);
+}
+
+/**
+ Build array of SHOW_VARs from external source of system or status variables.
+ Filter using session scope.
+*/
+template <class Var_type>
+bool PFS_variable_cache<Var_type>::initialize_session(void)
+{
+ if (m_initialized)
+ return 0;
+
+ return do_initialize_session();
+}
+
+/**
+ Build array of SHOW_VARs suitable for aggregation by user, host or account.
+ Filter using session scope.
+*/
+template <class Var_type>
+bool PFS_variable_cache<Var_type>::initialize_client_session(void)
+{
+ if (m_initialized)
+ return 0;
+
+ /* Requires aggregation by user, host or account. */
+ m_aggregate= true;
+
+ return do_initialize_session();
+}
+
+/**
+ Build cache of all GLOBAL variables.
+*/
+template <class Var_type>
+int PFS_variable_cache<Var_type>::materialize_global()
+{
+ if (is_materialized())
+ return 0;
+
+ return do_materialize_global();
+}
+
+/**
+ Build cache of GLOBAL and SESSION variables for a non-instrumented thread.
+*/
+template <class Var_type>
+int PFS_variable_cache<Var_type>::materialize_all(THD *unsafe_thd)
+{
+ if (!unsafe_thd)
+ return 1;
+
+ if (is_materialized(unsafe_thd))
+ return 0;
+
+ return do_materialize_all(unsafe_thd);
+}
+
+/**
+ Build cache of SESSION variables for a non-instrumented thread.
+*/
+template <class Var_type>
+int PFS_variable_cache<Var_type>::materialize_session(THD *unsafe_thd)
+{
+ if (!unsafe_thd)
+ return 1;
+
+ if (is_materialized(unsafe_thd))
+ return 0;
+
+ return do_materialize_session(unsafe_thd);
+}
+
+/**
+ Build cache of SESSION variables for a thread.
+*/
+template <class Var_type>
+int PFS_variable_cache<Var_type>::materialize_session(PFS_thread *pfs_thread, bool use_mem_root)
+{
+ if (!pfs_thread)
+ return 1;
+
+ if (is_materialized(pfs_thread))
+ return 0;
+
+ if (!pfs_thread->m_lock.is_populated() || pfs_thread->m_thd == NULL)
+ return 1;
+
+ m_use_mem_root= use_mem_root;
+
+ return do_materialize_session(pfs_thread);
+}
+
+/**
+ Materialize a single variable for a thread.
+*/
+template <class Var_type>
+int PFS_variable_cache<Var_type>::materialize_session(PFS_thread *pfs_thread, uint index)
+{
+ /* No check for is_materialized(). */
+
+ if (!pfs_thread)
+ return 1;
+
+ if (!pfs_thread->m_lock.is_populated() || pfs_thread->m_thd == NULL)
+ return 1;
+
+ return do_materialize_session(pfs_thread, index);
+}
+
+/**
+ CLASS PFS_system_variable_cache - System variable cache.
+*/
+class PFS_system_variable_cache : public PFS_variable_cache<System_variable>
+{
+public:
+ PFS_system_variable_cache(bool external_init) :
+ PFS_variable_cache<System_variable>(external_init),
+ m_mem_thd(NULL), m_mem_thd_save(NULL),
+ m_mem_sysvar_ptr(NULL) { }
+ bool match_scope(int scope);
+ ulonglong get_sysvar_hash_version(void) { return m_version; }
+ ~PFS_system_variable_cache() { free_mem_root(); }
+
+private:
+ /* Build SHOW_var array. */
+ bool init_show_var_array(enum_var_type scope, bool strict);
+ bool do_initialize_session(void);
+
+ /* Global */
+ int do_materialize_global(void);
+ /* Global and Session - THD */
+ int do_materialize_all(THD* thd);
+ /* Session - THD */
+ int do_materialize_session(THD* thd);
+ /* Session - PFS_thread */
+ int do_materialize_session(PFS_thread *thread);
+ /* Single variable - PFS_thread */
+ int do_materialize_session(PFS_thread *pfs_thread, uint index);
+
+ /* Temporary mem_root to use for materialization. */
+ MEM_ROOT m_mem_sysvar;
+ /* Pointer to THD::mem_root. */
+ MEM_ROOT **m_mem_thd;
+ /* Save THD::mem_root. */
+ MEM_ROOT *m_mem_thd_save;
+ /* Pointer to temporary mem_root. */
+ MEM_ROOT *m_mem_sysvar_ptr;
+ /* Allocate and/or assign temporary mem_root. */
+ void set_mem_root(void);
+ /* Mark all memory blocks as free in temporary mem_root. */
+ void clear_mem_root(void);
+ /* Free mem_root memory. */
+ void free_mem_root(void);
+};
+
+
+/**
+ CLASS PFS_status_variable_cache - Status variable cache
+*/
+class PFS_status_variable_cache : public PFS_variable_cache<Status_variable>
+{
+public:
+ PFS_status_variable_cache(bool external_init);
+
+ int materialize_user(PFS_user *pfs_user);
+ int materialize_host(PFS_host *pfs_host);
+ int materialize_account(PFS_account *pfs_account);
+
+ ulonglong get_status_array_version(void) { return m_version; }
+
+protected:
+ /* Get PFS_user, account or host associated with a PFS_thread. Implemented by table class. */
+ virtual PFS_client *get_pfs(PFS_thread *pfs_thread) { return NULL; }
+
+ /* True if query is a SHOW command. */
+ bool m_show_command;
+
+private:
+ bool do_initialize_session(void);
+
+ int do_materialize_global(void);
+ /* Global and Session - THD */
+ int do_materialize_all(THD* thd);
+ int do_materialize_session(THD *thd);
+ int do_materialize_session(PFS_thread *thread);
+ int do_materialize_session(PFS_thread *thread, uint index) { return 0; }
+ int do_materialize_client(PFS_client *pfs_client);
+
+ /* Callback to sum user, host or account status variables. */
+ void (*m_sum_client_status)(PFS_client *pfs_client, STATUS_VAR *status_totals);
+
+ /* Build SHOW_VAR array from external source. */
+ bool init_show_var_array(enum_var_type scope, bool strict);
+
+ /* Recursively expand nested SHOW_VAR arrays. */
+ void expand_show_var_array(const SHOW_VAR *show_var_array, const char *prefix, bool strict);
+
+ /* Exclude unwanted variables from the query. */
+ bool filter_show_var(const SHOW_VAR *show_var, bool strict);
+
+ /* Check the variable scope against the query scope. */
+ bool match_scope(SHOW_SCOPE variable_scope, bool strict);
+
+ /* Exclude specific status variables by name or prefix. */
+ bool filter_by_name(const SHOW_VAR *show_var);
+
+ /* Check if a variable has an aggregatable type. */
+ bool can_aggregate(enum_mysql_show_type variable_type);
+
+ /* Build status variable name with prefix. Return in the buffer provided. */
+ char *make_show_var_name(const char* prefix, const char* name, char *name_buf, size_t buf_len);
+
+ /* Build status variable name with prefix. Return copy of the string. */
+ char *make_show_var_name(const char* prefix, const char* name);
+
+ /* For the current THD, use initial_status_vars taken from before the query start. */
+ STATUS_VAR *set_status_vars(void);
+
+ /* Build the list of status variables from SHOW_VAR array. */
+ void manifest(THD *thd, const SHOW_VAR *show_var_array,
+ STATUS_VAR *status_var_array, const char *prefix, bool nested_array, bool strict);
+};
+
+/* Callback functions to sum status variables for a given user, host or account. */
+void sum_user_status(PFS_client *pfs_user, STATUS_VAR *status_totals);
+void sum_host_status(PFS_client *pfs_host, STATUS_VAR *status_totals);
+void sum_account_status(PFS_client *pfs_account, STATUS_VAR *status_totals);
+
+
+/** @} */
+#endif
+
diff --git a/storage/perfschema/pfs_visitor.cc b/storage/perfschema/pfs_visitor.cc
index 097965fde17..638877d8755 100644
--- a/storage/perfschema/pfs_visitor.cc
+++ b/storage/perfschema/pfs_visitor.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -28,6 +28,9 @@
#include "pfs_user.h"
#include "pfs_host.h"
#include "pfs_account.h"
+#include "pfs_buffer_container.h"
+
+#include "mysqld_thd_manager.h"
/**
@file storage/perfschema/pfs_visitor.cc
@@ -39,182 +42,330 @@
@{
*/
+class All_THD_visitor_adapter : public Do_THD_Impl
+{
+public:
+ All_THD_visitor_adapter(PFS_connection_visitor *visitor)
+ : m_visitor(visitor)
+ {}
+
+ virtual void operator()(THD *thd)
+ {
+ m_visitor->visit_THD(thd);
+ }
+
+private:
+ PFS_connection_visitor *m_visitor;
+};
+
/** Connection iterator */
void PFS_connection_iterator::visit_global(bool with_hosts, bool with_users,
bool with_accounts, bool with_threads,
+ bool with_THDs,
PFS_connection_visitor *visitor)
{
DBUG_ASSERT(visitor != NULL);
+ DBUG_ASSERT(! with_threads || ! with_THDs);
visitor->visit_global();
if (with_hosts)
{
- PFS_host *pfs= host_array;
- PFS_host *pfs_last= pfs + host_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_host_iterator it= global_host_container.iterate();
+ PFS_host *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- visitor->visit_host(pfs);
+ visitor->visit_host(pfs);
+ pfs= it.scan_next();
}
}
if (with_users)
{
- PFS_user *pfs= user_array;
- PFS_user *pfs_last= pfs + user_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_user_iterator it= global_user_container.iterate();
+ PFS_user *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- visitor->visit_user(pfs);
+ visitor->visit_user(pfs);
+ pfs= it.scan_next();
}
}
if (with_accounts)
{
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= pfs + account_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_account_iterator it= global_account_container.iterate();
+ PFS_account *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- visitor->visit_account(pfs);
+ visitor->visit_account(pfs);
+ pfs= it.scan_next();
}
}
+
if (with_threads)
{
- PFS_thread *pfs= thread_array;
- PFS_thread *pfs_last= pfs + thread_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_thread_iterator it= global_thread_container.iterate();
+ PFS_thread *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- visitor->visit_thread(pfs);
+ visitor->visit_thread(pfs);
+ pfs= it.scan_next();
}
}
+
+ if (with_THDs)
+ {
+ All_THD_visitor_adapter adapter(visitor);
+ Global_THD_manager::get_instance()->do_for_all_thd(& adapter);
+ }
}
+class All_host_THD_visitor_adapter : public Do_THD_Impl
+{
+public:
+ All_host_THD_visitor_adapter(PFS_connection_visitor *visitor, PFS_host *host)
+ : m_visitor(visitor), m_host(host)
+ {}
+
+ virtual void operator()(THD *thd)
+ {
+ PSI_thread *psi= thd->get_psi();
+ PFS_thread *pfs= reinterpret_cast<PFS_thread*>(psi);
+ pfs= sanitize_thread(pfs);
+ if (pfs != NULL)
+ {
+ PFS_account *account= sanitize_account(pfs->m_account);
+ if (account != NULL)
+ {
+ if (account->m_host == m_host)
+ {
+ m_visitor->visit_THD(thd);
+ }
+ }
+ else if (pfs->m_host == m_host)
+ {
+ m_visitor->visit_THD(thd);
+ }
+ }
+ }
+
+private:
+ PFS_connection_visitor *m_visitor;
+ PFS_host *m_host;
+};
+
void PFS_connection_iterator::visit_host(PFS_host *host,
bool with_accounts, bool with_threads,
+ bool with_THDs,
PFS_connection_visitor *visitor)
{
DBUG_ASSERT(visitor != NULL);
+ DBUG_ASSERT(! with_threads || ! with_THDs);
visitor->visit_host(host);
if (with_accounts)
{
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= pfs + account_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_account_iterator it= global_account_container.iterate();
+ PFS_account *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_host == host) && pfs->m_lock.is_populated())
+ if (pfs->m_host == host)
{
visitor->visit_account(pfs);
}
+ pfs= it.scan_next();
}
}
if (with_threads)
{
- PFS_thread *pfs= thread_array;
- PFS_thread *pfs_last= pfs + thread_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_thread_iterator it= global_thread_container.iterate();
+ PFS_thread *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
+ PFS_account *safe_account= sanitize_account(pfs->m_account);
+ if (((safe_account != NULL) && (safe_account->m_host == host)) /* 1 */
+ || (pfs->m_host == host)) /* 2 */
{
- PFS_account *safe_account= sanitize_account(pfs->m_account);
- if ((safe_account != NULL) && (safe_account->m_host == host))
- {
- /*
- If the thread belongs to a known user@host that belongs to this host,
- process it.
- */
- visitor->visit_thread(pfs);
- }
- else if (pfs->m_host == host)
+ /*
+ If the thread belongs to:
+ - (1) a known user@host that belongs to this host,
+ - (2) a 'lost' user@host that belongs to this host
+ process it.
+ */
+ visitor->visit_thread(pfs);
+ }
+ pfs= it.scan_next();
+ }
+ }
+
+ if (with_THDs)
+ {
+ All_host_THD_visitor_adapter adapter(visitor, host);
+ Global_THD_manager::get_instance()->do_for_all_thd(& adapter);
+ }
+}
+
+class All_user_THD_visitor_adapter : public Do_THD_Impl
+{
+public:
+ All_user_THD_visitor_adapter(PFS_connection_visitor *visitor, PFS_user *user)
+ : m_visitor(visitor), m_user(user)
+ {}
+
+ virtual void operator()(THD *thd)
+ {
+ PSI_thread *psi= thd->get_psi();
+ PFS_thread *pfs= reinterpret_cast<PFS_thread*>(psi);
+ pfs= sanitize_thread(pfs);
+ if (pfs != NULL)
+ {
+ PFS_account *account= sanitize_account(pfs->m_account);
+ if (account != NULL)
+ {
+ if (account->m_user == m_user)
{
- /*
- If the thread belongs to a 'lost' user@host that belong to this host,
- process it.
- */
- visitor->visit_thread(pfs);
+ m_visitor->visit_THD(thd);
}
}
+ else if (pfs->m_user == m_user)
+ {
+ m_visitor->visit_THD(thd);
+ }
}
}
-}
+
+private:
+ PFS_connection_visitor *m_visitor;
+ PFS_user *m_user;
+};
void PFS_connection_iterator::visit_user(PFS_user *user,
bool with_accounts, bool with_threads,
+ bool with_THDs,
PFS_connection_visitor *visitor)
{
DBUG_ASSERT(visitor != NULL);
+ DBUG_ASSERT(! with_threads || ! with_THDs);
visitor->visit_user(user);
if (with_accounts)
{
- PFS_account *pfs= account_array;
- PFS_account *pfs_last= pfs + account_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_account_iterator it= global_account_container.iterate();
+ PFS_account *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_user == user) && pfs->m_lock.is_populated())
+ if (pfs->m_user == user)
{
visitor->visit_account(pfs);
}
+ pfs= it.scan_next();
}
}
if (with_threads)
{
- PFS_thread *pfs= thread_array;
- PFS_thread *pfs_last= pfs + thread_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_thread_iterator it= global_thread_container.iterate();
+ PFS_thread *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
+ PFS_account *safe_account= sanitize_account(pfs->m_account);
+ if (((safe_account != NULL) && (safe_account->m_user == user)) /* 1 */
+ || (pfs->m_user == user)) /* 2 */
{
- PFS_account *safe_account= sanitize_account(pfs->m_account);
- if ((safe_account != NULL) && (safe_account->m_user == user))
- {
- /*
- If the thread belongs to a known user@host that belongs to this user,
- process it.
- */
- visitor->visit_thread(pfs);
- }
- else if (pfs->m_user == user)
- {
- /*
- If the thread belongs to a 'lost' user@host that belong to this user,
- process it.
- */
- visitor->visit_thread(pfs);
- }
+ /*
+ If the thread belongs to:
+ - (1) a known user@host that belongs to this user,
+ - (2) a 'lost' user@host that belongs to this user
+ process it.
+ */
+ visitor->visit_thread(pfs);
}
+ pfs= it.scan_next();
}
}
+
+ if (with_THDs)
+ {
+ All_user_THD_visitor_adapter adapter(visitor, user);
+ Global_THD_manager::get_instance()->do_for_all_thd(& adapter);
+ }
}
+class All_account_THD_visitor_adapter : public Do_THD_Impl
+{
+public:
+ All_account_THD_visitor_adapter(PFS_connection_visitor *visitor, PFS_account *account)
+ : m_visitor(visitor), m_account(account)
+ {}
+
+ virtual void operator()(THD *thd)
+ {
+ PSI_thread *psi= thd->get_psi();
+ PFS_thread *pfs= reinterpret_cast<PFS_thread*>(psi);
+ pfs= sanitize_thread(pfs);
+ if (pfs != NULL)
+ {
+ if (pfs->m_account == m_account)
+ {
+ m_visitor->visit_THD(thd);
+ }
+ }
+ }
+
+private:
+ PFS_connection_visitor *m_visitor;
+ PFS_account *m_account;
+};
+
void PFS_connection_iterator::visit_account(PFS_account *account,
- bool with_threads,
- PFS_connection_visitor *visitor)
+ bool with_threads,
+ bool with_THDs,
+ PFS_connection_visitor *visitor)
{
DBUG_ASSERT(visitor != NULL);
+ DBUG_ASSERT(! with_threads || ! with_THDs);
visitor->visit_account(account);
if (with_threads)
{
- PFS_thread *pfs= thread_array;
- PFS_thread *pfs_last= pfs + thread_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_thread_iterator it= global_thread_container.iterate();
+ PFS_thread *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_account == account) && pfs->m_lock.is_populated())
+ if (pfs->m_account == account)
{
visitor->visit_thread(pfs);
}
+ pfs= it.scan_next();
}
}
+
+ if (with_THDs)
+ {
+ All_account_THD_visitor_adapter adapter(visitor, account);
+ Global_THD_manager::get_instance()->do_for_all_thd(& adapter);
+ }
+}
+
+void PFS_connection_iterator::visit_THD(THD *thd,
+ PFS_connection_visitor *visitor)
+{
+ DBUG_ASSERT(visitor != NULL);
+ visitor->visit_THD(thd);
}
void PFS_instance_iterator::visit_all(PFS_instance_visitor *visitor)
@@ -246,14 +397,13 @@ void PFS_instance_iterator::visit_all_mutex_classes(PFS_instance_visitor *visito
void PFS_instance_iterator::visit_all_mutex_instances(PFS_instance_visitor *visitor)
{
- PFS_mutex *pfs= mutex_array;
- PFS_mutex *pfs_last= pfs + mutex_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_mutex_iterator it= global_mutex_container.iterate();
+ PFS_mutex *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- {
- visitor->visit_mutex(pfs);
- }
+ visitor->visit_mutex(pfs);
+ pfs= it.scan_next();
}
}
@@ -278,14 +428,13 @@ void PFS_instance_iterator::visit_all_rwlock_classes(PFS_instance_visitor *visit
void PFS_instance_iterator::visit_all_rwlock_instances(PFS_instance_visitor *visitor)
{
- PFS_rwlock *pfs= rwlock_array;
- PFS_rwlock *pfs_last= pfs + rwlock_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_rwlock_iterator it= global_rwlock_container.iterate();
+ PFS_rwlock *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- {
- visitor->visit_rwlock(pfs);
- }
+ visitor->visit_rwlock(pfs);
+ pfs= it.scan_next();
}
}
@@ -310,14 +459,13 @@ void PFS_instance_iterator::visit_all_cond_classes(PFS_instance_visitor *visitor
void PFS_instance_iterator::visit_all_cond_instances(PFS_instance_visitor *visitor)
{
- PFS_cond *pfs= cond_array;
- PFS_cond *pfs_last= pfs + cond_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_cond_iterator it= global_cond_container.iterate();
+ PFS_cond *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- {
- visitor->visit_cond(pfs);
- }
+ visitor->visit_cond(pfs);
+ pfs= it.scan_next();
}
}
@@ -342,14 +490,13 @@ void PFS_instance_iterator::visit_all_file_classes(PFS_instance_visitor *visitor
void PFS_instance_iterator::visit_all_file_instances(PFS_instance_visitor *visitor)
{
- PFS_file *pfs= file_array;
- PFS_file *pfs_last= pfs + file_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_file_iterator it= global_file_container.iterate();
+ PFS_file *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if (pfs->m_lock.is_populated())
- {
- visitor->visit_file(pfs);
- }
+ visitor->visit_file(pfs);
+ pfs= it.scan_next();
}
}
@@ -375,14 +522,16 @@ void PFS_instance_iterator::visit_mutex_instances(PFS_mutex_class *klass,
}
else
{
- PFS_mutex *pfs= mutex_array;
- PFS_mutex *pfs_last= pfs + mutex_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_mutex_iterator it= global_mutex_container.iterate();
+ PFS_mutex *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_class == klass) && pfs->m_lock.is_populated())
+ if (pfs->m_class == klass)
{
visitor->visit_mutex(pfs);
}
+ pfs= it.scan_next();
}
}
}
@@ -407,14 +556,16 @@ void PFS_instance_iterator::visit_rwlock_instances(PFS_rwlock_class *klass,
}
else
{
- PFS_rwlock *pfs= rwlock_array;
- PFS_rwlock *pfs_last= pfs + rwlock_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_rwlock_iterator it= global_rwlock_container.iterate();
+ PFS_rwlock *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_class == klass) && pfs->m_lock.is_populated())
+ if (pfs->m_class == klass)
{
visitor->visit_rwlock(pfs);
}
+ pfs= it.scan_next();
}
}
}
@@ -439,14 +590,16 @@ void PFS_instance_iterator::visit_cond_instances(PFS_cond_class *klass,
}
else
{
- PFS_cond *pfs= cond_array;
- PFS_cond *pfs_last= pfs + cond_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_cond_iterator it= global_cond_container.iterate();
+ PFS_cond *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_class == klass) && pfs->m_lock.is_populated())
+ if (pfs->m_class == klass)
{
visitor->visit_cond(pfs);
}
+ pfs= it.scan_next();
}
}
}
@@ -471,14 +624,16 @@ void PFS_instance_iterator::visit_file_instances(PFS_file_class *klass,
}
else
{
- PFS_file *pfs= file_array;
- PFS_file *pfs_last= pfs + file_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_file_iterator it= global_file_container.iterate();
+ PFS_file *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_class == klass) && pfs->m_lock.is_populated())
+ if (pfs->m_class == klass)
{
visitor->visit_file(pfs);
}
+ pfs= it.scan_next();
}
}
}
@@ -505,14 +660,16 @@ void PFS_instance_iterator::visit_socket_instances(PFS_socket_class *klass,
}
else
{
- PFS_socket *pfs= socket_array;
- PFS_socket *pfs_last= pfs + socket_max;
- for ( ; pfs < pfs_last; pfs++)
+ PFS_socket_iterator it= global_socket_container.iterate();
+ PFS_socket *pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- if ((pfs->m_class == klass) && pfs->m_lock.is_populated())
+ if (pfs->m_class == klass)
{
visitor->visit_socket(pfs);
}
+ pfs= it.scan_next();
}
}
}
@@ -542,16 +699,17 @@ void PFS_instance_iterator::visit_socket_instances(PFS_socket_class *klass,
else
{
/* Get current socket stats from each socket instance owned by this thread */
- PFS_socket *pfs= socket_array;
- PFS_socket *pfs_last= pfs + socket_max;
+ PFS_socket_iterator it= global_socket_container.iterate();
+ PFS_socket *pfs= it.scan_next();
- for ( ; pfs < pfs_last; pfs++)
+ while (pfs != NULL)
{
if (unlikely((pfs->m_class == klass) &&
(pfs->m_thread_owner == thread)))
{
visitor->visit_socket(pfs);
}
+ pfs= it.scan_next();
}
}
}
@@ -586,53 +744,127 @@ void PFS_object_iterator::visit_all(PFS_object_visitor *visitor)
visit_all_tables(visitor);
}
-void PFS_object_iterator::visit_all_tables(PFS_object_visitor *visitor)
+class Proc_all_table_shares
+ : public PFS_buffer_processor<PFS_table_share>
{
- DBUG_ASSERT(visitor != NULL);
+public:
+ Proc_all_table_shares(PFS_object_visitor *visitor)
+ : m_visitor(visitor)
+ {}
- visitor->visit_global();
+ virtual void operator()(PFS_table_share *pfs)
+ {
+ if (pfs->m_enabled)
+ {
+ m_visitor->visit_table_share(pfs);
+ }
+ }
- /* For all the table shares ... */
- PFS_table_share *share= table_share_array;
- PFS_table_share *share_last= table_share_array + table_share_max;
- for ( ; share < share_last; share++)
+private:
+ PFS_object_visitor* m_visitor;
+};
+
+class Proc_all_table_handles
+ : public PFS_buffer_processor<PFS_table>
+{
+public:
+ Proc_all_table_handles(PFS_object_visitor *visitor)
+ : m_visitor(visitor)
+ {}
+
+ virtual void operator()(PFS_table *pfs)
{
- if (share->m_lock.is_populated())
+ PFS_table_share *safe_share= sanitize_table_share(pfs->m_share);
+ if (safe_share != NULL)
{
- visitor->visit_table_share(share);
+ if (safe_share->m_enabled)
+ {
+ m_visitor->visit_table(pfs);
+ }
}
}
+private:
+ PFS_object_visitor* m_visitor;
+};
+
+void PFS_object_iterator::visit_all_tables(PFS_object_visitor *visitor)
+{
+ DBUG_ASSERT(visitor != NULL);
+
+ visitor->visit_global();
+
+ /* For all the table shares ... */
+ Proc_all_table_shares proc_shares(visitor);
+ global_table_share_container.apply(proc_shares);
+
/* For all the table handles ... */
- PFS_table *table= table_array;
- PFS_table *table_last= table_array + table_max;
- for ( ; table < table_last; table++)
+ Proc_all_table_handles proc_handles(visitor);
+ global_table_container.apply(proc_handles);
+}
+
+class Proc_one_table_share_handles
+ : public PFS_buffer_processor<PFS_table>
+{
+public:
+ Proc_one_table_share_handles(PFS_object_visitor *visitor, PFS_table_share *share)
+ : m_visitor(visitor), m_share(share)
+ {}
+
+ virtual void operator()(PFS_table *pfs)
{
- if (table->m_lock.is_populated())
+ if (pfs->m_share == m_share)
{
- visitor->visit_table(table);
+ m_visitor->visit_table(pfs);
}
}
-}
+
+private:
+ PFS_object_visitor* m_visitor;
+ PFS_table_share* m_share;
+};
void PFS_object_iterator::visit_tables(PFS_table_share *share,
PFS_object_visitor *visitor)
{
DBUG_ASSERT(visitor != NULL);
+ if (!share->m_enabled)
+ return;
+
visitor->visit_table_share(share);
+#ifdef LATER
+ if (share->get_refcount() == 0)
+ return;
+#endif
+
/* For all the table handles ... */
- PFS_table *table= table_array;
- PFS_table *table_last= table_array + table_max;
- for ( ; table < table_last; table++)
+ Proc_one_table_share_handles proc(visitor, share);
+ global_table_container.apply(proc);
+}
+
+class Proc_one_table_share_indexes
+ : public PFS_buffer_processor<PFS_table>
+{
+public:
+ Proc_one_table_share_indexes(PFS_object_visitor *visitor, PFS_table_share *share, uint index)
+ : m_visitor(visitor), m_share(share), m_index(index)
+ {}
+
+ virtual void operator()(PFS_table *pfs)
{
- if ((table->m_share == share) && table->m_lock.is_populated())
+ if (pfs->m_share == m_share)
{
- visitor->visit_table(table);
+ m_visitor->visit_table_index(pfs, m_index);
}
}
-}
+
+private:
+ PFS_object_visitor* m_visitor;
+ PFS_table_share* m_share;
+ uint m_index;
+};
void PFS_object_iterator::visit_table_indexes(PFS_table_share *share,
uint index,
@@ -640,18 +872,19 @@ void PFS_object_iterator::visit_table_indexes(PFS_table_share *share,
{
DBUG_ASSERT(visitor != NULL);
+ if (!share->m_enabled)
+ return;
+
visitor->visit_table_share_index(share, index);
+#ifdef LATER
+ if (share->get_refcount() == 0)
+ return;
+#endif
+
/* For all the table handles ... */
- PFS_table *table= table_array;
- PFS_table *table_last= table_array + table_max;
- for ( ; table < table_last; table++)
- {
- if ((table->m_share == share) && table->m_lock.is_populated())
- {
- visitor->visit_table_index(table, index);
- }
- }
+ Proc_one_table_share_indexes proc(visitor, share, index);
+ global_table_container.apply(proc);
}
/** Connection wait visitor */
@@ -668,32 +901,62 @@ PFS_connection_wait_visitor::~PFS_connection_wait_visitor()
void PFS_connection_wait_visitor::visit_global()
{
/*
- This visitor is used only for idle instruments.
+ This visitor is used only for global instruments
+ that do not have instances.
For waits, do not sum by connection but by instances,
it is more efficient.
*/
- DBUG_ASSERT(m_index == global_idle_class.m_event_name_index);
- m_stat.aggregate(& global_idle_stat);
+ DBUG_ASSERT( (m_index == global_idle_class.m_event_name_index)
+ || (m_index == global_metadata_class.m_event_name_index));
+
+ if (m_index == global_idle_class.m_event_name_index)
+ {
+ m_stat.aggregate(& global_idle_stat);
+ }
+ else
+ {
+ m_stat.aggregate(& global_metadata_stat);
+ }
}
void PFS_connection_wait_visitor::visit_host(PFS_host *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_waits_stats[m_index]);
+ const PFS_single_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_waits_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_wait_visitor::visit_user(PFS_user *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_waits_stats[m_index]);
+ const PFS_single_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_waits_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_wait_visitor::visit_account(PFS_account *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_waits_stats[m_index]);
+ const PFS_single_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_waits_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_wait_visitor::visit_thread(PFS_thread *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_waits_stats[m_index]);
+ const PFS_single_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_waits_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
PFS_connection_all_wait_visitor
@@ -711,11 +974,14 @@ void PFS_connection_all_wait_visitor::visit_global()
void PFS_connection_all_wait_visitor::visit_connection_slice(PFS_connection_slice *pfs)
{
- PFS_single_stat *stat= pfs->m_instr_class_waits_stats;
- PFS_single_stat *stat_last= stat + wait_class_max;
- for ( ; stat < stat_last; stat++)
+ const PFS_single_stat *stat= pfs->read_instr_class_waits_stats();
+ if (stat != NULL)
{
- m_stat.aggregate(stat);
+ const PFS_single_stat *stat_last= stat + wait_class_max;
+ for ( ; stat < stat_last; stat++)
+ {
+ m_stat.aggregate(stat);
+ }
}
}
@@ -754,22 +1020,42 @@ void PFS_connection_stage_visitor::visit_global()
void PFS_connection_stage_visitor::visit_host(PFS_host *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_stages_stats[m_index]);
+ const PFS_stage_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_stages_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_stage_visitor::visit_user(PFS_user *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_stages_stats[m_index]);
+ const PFS_stage_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_stages_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_stage_visitor::visit_account(PFS_account *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_stages_stats[m_index]);
+ const PFS_stage_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_stages_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_stage_visitor::visit_thread(PFS_thread *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_stages_stats[m_index]);
+ const PFS_stage_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_stages_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
PFS_connection_statement_visitor
@@ -788,22 +1074,42 @@ void PFS_connection_statement_visitor::visit_global()
void PFS_connection_statement_visitor::visit_host(PFS_host *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_statements_stats[m_index]);
+ const PFS_statement_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_statements_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_statement_visitor::visit_user(PFS_user *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_statements_stats[m_index]);
+ const PFS_statement_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_statements_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_statement_visitor::visit_account(PFS_account *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_statements_stats[m_index]);
+ const PFS_statement_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_statements_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
void PFS_connection_statement_visitor::visit_thread(PFS_thread *pfs)
{
- m_stat.aggregate(& pfs->m_instr_class_statements_stats[m_index]);
+ const PFS_statement_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_statements_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
}
/** Instance wait visitor */
@@ -826,11 +1132,14 @@ void PFS_connection_all_statement_visitor::visit_global()
void PFS_connection_all_statement_visitor::visit_connection_slice(PFS_connection_slice *pfs)
{
- PFS_statement_stat *stat= pfs->m_instr_class_statements_stats;
- PFS_statement_stat *stat_last= stat + statement_class_max;
- for ( ; stat < stat_last; stat++)
+ const PFS_statement_stat *stat= pfs->read_instr_class_statements_stats();
+ if (stat != NULL)
{
- m_stat.aggregate(stat);
+ const PFS_statement_stat *stat_last= stat + statement_class_max;
+ for ( ; stat < stat_last; stat++)
+ {
+ m_stat.aggregate(stat);
+ }
}
}
@@ -854,6 +1163,102 @@ void PFS_connection_all_statement_visitor::visit_thread(PFS_thread *pfs)
visit_connection_slice(pfs);
}
+PFS_connection_transaction_visitor
+::PFS_connection_transaction_visitor(PFS_transaction_class *klass)
+{
+ m_index= klass->m_event_name_index;
+}
+
+PFS_connection_transaction_visitor::~PFS_connection_transaction_visitor()
+{}
+
+void PFS_connection_transaction_visitor::visit_global()
+{
+ m_stat.aggregate(&global_transaction_stat);
+}
+
+void PFS_connection_transaction_visitor::visit_host(PFS_host *pfs)
+{
+ const PFS_transaction_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_transactions_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
+}
+
+void PFS_connection_transaction_visitor::visit_user(PFS_user *pfs)
+{
+ const PFS_transaction_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_transactions_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
+}
+
+void PFS_connection_transaction_visitor::visit_account(PFS_account *pfs)
+{
+ const PFS_transaction_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_transactions_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
+}
+
+void PFS_connection_transaction_visitor::visit_thread(PFS_thread *pfs)
+{
+ const PFS_transaction_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_transactions_stats();
+ if (event_name_array != NULL)
+ {
+ m_stat.aggregate(& event_name_array[m_index]);
+ }
+}
+
+/** Disabled pending code review */
+#if 0
+/** Instance wait visitor */
+PFS_connection_all_transaction_visitor
+::PFS_connection_all_transaction_visitor()
+{}
+
+PFS_connection_all_transaction_visitor::~PFS_connection_all_transaction_visitor()
+{}
+
+void PFS_connection_all_transaction_visitor::visit_global()
+{
+ m_stat.aggregate(&global_transaction_stat);
+}
+
+void PFS_connection_all_transaction_visitor::visit_connection_slice(PFS_connection_slice *pfs)
+{
+ PFS_transaction_stat *stat= pfs->m_instr_class_transactions_stats;
+ m_stat.aggregate(stat);
+}
+
+void PFS_connection_all_transaction_visitor::visit_host(PFS_host *pfs)
+{
+ visit_connection_slice(pfs);
+}
+
+void PFS_connection_all_transaction_visitor::visit_user(PFS_user *pfs)
+{
+ visit_connection_slice(pfs);
+}
+
+void PFS_connection_all_transaction_visitor::visit_account(PFS_account *pfs)
+{
+ visit_connection_slice(pfs);
+}
+
+void PFS_connection_all_transaction_visitor::visit_thread(PFS_thread *pfs)
+{
+ visit_connection_slice(pfs);
+}
+#endif
+
PFS_connection_stat_visitor::PFS_connection_stat_visitor()
{}
@@ -883,10 +1288,117 @@ void PFS_connection_stat_visitor::visit_thread(PFS_thread *)
m_stat.aggregate_active(1);
}
-PFS_instance_wait_visitor::PFS_instance_wait_visitor()
+PFS_connection_memory_visitor
+::PFS_connection_memory_visitor(PFS_memory_class *klass)
+{
+ m_index= klass->m_event_name_index;
+ m_stat.reset();
+}
+
+PFS_connection_memory_visitor::~PFS_connection_memory_visitor()
+{}
+
+void PFS_connection_memory_visitor::visit_global()
+{
+ PFS_memory_stat *stat;
+ stat= & global_instr_class_memory_array[m_index];
+ stat->full_aggregate_to(& m_stat);
+}
+
+void PFS_connection_memory_visitor::visit_host(PFS_host *pfs)
+{
+ const PFS_memory_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_memory_stats();
+ if (event_name_array != NULL)
+ {
+ const PFS_memory_stat *stat;
+ stat= & event_name_array[m_index];
+ stat->full_aggregate_to(& m_stat);
+ }
+}
+
+void PFS_connection_memory_visitor::visit_user(PFS_user *pfs)
+{
+ const PFS_memory_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_memory_stats();
+ if (event_name_array != NULL)
+ {
+ const PFS_memory_stat *stat;
+ stat= & event_name_array[m_index];
+ stat->full_aggregate_to(& m_stat);
+ }
+}
+
+void PFS_connection_memory_visitor::visit_account(PFS_account *pfs)
+{
+ const PFS_memory_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_memory_stats();
+ if (event_name_array != NULL)
+ {
+ const PFS_memory_stat *stat;
+ stat= & event_name_array[m_index];
+ stat->full_aggregate_to(& m_stat);
+ }
+}
+
+void PFS_connection_memory_visitor::visit_thread(PFS_thread *pfs)
+{
+ const PFS_memory_stat *event_name_array;
+ event_name_array= pfs->read_instr_class_memory_stats();
+ if (event_name_array != NULL)
+ {
+ const PFS_memory_stat *stat;
+ stat= & event_name_array[m_index];
+ stat->full_aggregate_to(& m_stat);
+ }
+}
+
+
+PFS_connection_status_visitor::
+PFS_connection_status_visitor(STATUS_VAR *status_vars) : m_status_vars(status_vars)
+{
+ memset(m_status_vars, 0, sizeof(STATUS_VAR));
+}
+
+PFS_connection_status_visitor::~PFS_connection_status_visitor()
+{}
+
+/** Aggregate from global status. */
+void PFS_connection_status_visitor::visit_global()
+{
+ /* NOTE: Requires lock on LOCK_status. */
+ mysql_mutex_assert_owner(&LOCK_status);
+ add_to_status(m_status_vars, &global_status_var);
+}
+
+void PFS_connection_status_visitor::visit_host(PFS_host *pfs)
+{
+ pfs->m_status_stats.aggregate_to(m_status_vars);
+}
+
+void PFS_connection_status_visitor::visit_user(PFS_user *pfs)
+{
+ pfs->m_status_stats.aggregate_to(m_status_vars);
+}
+
+void PFS_connection_status_visitor::visit_account(PFS_account *pfs)
+{
+ pfs->m_status_stats.aggregate_to(m_status_vars);
+}
+
+void PFS_connection_status_visitor::visit_thread(PFS_thread *pfs)
+{
+}
+
+void PFS_connection_status_visitor::visit_THD(THD *thd)
{
+ add_to_status(m_status_vars, &thd->status_var);
}
+
+PFS_instance_wait_visitor::PFS_instance_wait_visitor()
+{}
+
PFS_instance_wait_visitor::~PFS_instance_wait_visitor()
{}
@@ -930,7 +1442,7 @@ void PFS_instance_wait_visitor::visit_cond(PFS_cond *pfs)
m_stat.aggregate(& pfs->m_cond_stat.m_wait_stat);
}
-void PFS_instance_wait_visitor::visit_file(PFS_file *pfs)
+void PFS_instance_wait_visitor::visit_file(PFS_file *pfs)
{
/* Combine per-operation file wait stats before aggregating */
PFS_single_stat stat;
@@ -938,7 +1450,7 @@ void PFS_instance_wait_visitor::visit_file(PFS_file *pfs)
m_stat.aggregate(&stat);
}
-void PFS_instance_wait_visitor::visit_socket(PFS_socket *pfs)
+void PFS_instance_wait_visitor::visit_socket(PFS_socket *pfs)
{
/* Combine per-operation socket wait stats before aggregating */
PFS_single_stat stat;
@@ -963,7 +1475,7 @@ void PFS_object_wait_visitor::visit_global()
void PFS_object_wait_visitor::visit_table_share(PFS_table_share *pfs)
{
uint safe_key_count= sanitize_index_count(pfs->m_key_count);
- pfs->m_table_stat.sum(& m_stat, safe_key_count);
+ pfs->sum(& m_stat, safe_key_count);
}
void PFS_object_wait_visitor::visit_table(PFS_table *pfs)
@@ -992,13 +1504,20 @@ void PFS_table_io_wait_visitor::visit_table_share(PFS_table_share *pfs)
PFS_table_io_stat io_stat;
uint safe_key_count= sanitize_index_count(pfs->m_key_count);
uint index;
+ PFS_table_share_index *index_stat;
/* Aggregate index stats */
for (index= 0; index < safe_key_count; index++)
- io_stat.aggregate(& pfs->m_table_stat.m_index_stat[index]);
+ {
+ index_stat= pfs->find_index_stat(index);
+ if (index_stat != NULL)
+ io_stat.aggregate(& index_stat->m_stat);
+ }
/* Aggregate global stats */
- io_stat.aggregate(& pfs->m_table_stat.m_index_stat[MAX_INDEXES]);
+ index_stat= pfs->find_index_stat(MAX_INDEXES);
+ if (index_stat != NULL)
+ io_stat.aggregate(& index_stat->m_stat);
io_stat.sum(& m_stat);
}
@@ -1036,13 +1555,20 @@ void PFS_table_io_stat_visitor::visit_table_share(PFS_table_share *pfs)
{
uint safe_key_count= sanitize_index_count(pfs->m_key_count);
uint index;
+ PFS_table_share_index *index_stat;
/* Aggregate index stats */
for (index= 0; index < safe_key_count; index++)
- m_stat.aggregate(& pfs->m_table_stat.m_index_stat[index]);
+ {
+ index_stat= pfs->find_index_stat(index);
+ if (index_stat != NULL)
+ m_stat.aggregate(& index_stat->m_stat);
+ }
/* Aggregate global stats */
- m_stat.aggregate(& pfs->m_table_stat.m_index_stat[MAX_INDEXES]);
+ index_stat= pfs->find_index_stat(MAX_INDEXES);
+ if (index_stat != NULL)
+ m_stat.aggregate(& index_stat->m_stat);
}
void PFS_table_io_stat_visitor::visit_table(PFS_table *pfs)
@@ -1073,7 +1599,11 @@ PFS_index_io_stat_visitor::~PFS_index_io_stat_visitor()
void PFS_index_io_stat_visitor::visit_table_share_index(PFS_table_share *pfs, uint index)
{
- m_stat.aggregate(& pfs->m_table_stat.m_index_stat[index]);
+ PFS_table_share_index *index_stat;
+
+ index_stat= pfs->find_index_stat(index);
+ if (index_stat != NULL)
+ m_stat.aggregate(& index_stat->m_stat);
}
void PFS_index_io_stat_visitor::visit_table_index(PFS_table *pfs, uint index)
@@ -1096,7 +1626,7 @@ void PFS_table_lock_wait_visitor::visit_global()
void PFS_table_lock_wait_visitor::visit_table_share(PFS_table_share *pfs)
{
- pfs->m_table_stat.sum_lock(& m_stat);
+ pfs->sum_lock(& m_stat);
}
void PFS_table_lock_wait_visitor::visit_table(PFS_table *pfs)
@@ -1114,7 +1644,11 @@ PFS_table_lock_stat_visitor::~PFS_table_lock_stat_visitor()
void PFS_table_lock_stat_visitor::visit_table_share(PFS_table_share *pfs)
{
- m_stat.aggregate(& pfs->m_table_stat.m_lock_stat);
+ PFS_table_share_lock *lock_stat;
+
+ lock_stat= pfs->find_lock_stat();
+ if (lock_stat != NULL)
+ m_stat.aggregate(& lock_stat->m_stat);
}
void PFS_table_lock_stat_visitor::visit_table(PFS_table *pfs)
@@ -1128,32 +1662,31 @@ PFS_instance_socket_io_stat_visitor::PFS_instance_socket_io_stat_visitor()
PFS_instance_socket_io_stat_visitor::~PFS_instance_socket_io_stat_visitor()
{}
-void PFS_instance_socket_io_stat_visitor::visit_socket_class(PFS_socket_class *pfs)
+void PFS_instance_socket_io_stat_visitor::visit_socket_class(PFS_socket_class *pfs)
{
/* Aggregate wait times, event counts and byte counts */
m_socket_io_stat.aggregate(&pfs->m_socket_stat.m_io_stat);
}
-void PFS_instance_socket_io_stat_visitor::visit_socket(PFS_socket *pfs)
+void PFS_instance_socket_io_stat_visitor::visit_socket(PFS_socket *pfs)
{
/* Aggregate wait times, event counts and byte counts */
m_socket_io_stat.aggregate(&pfs->m_socket_stat.m_io_stat);
}
-
PFS_instance_file_io_stat_visitor::PFS_instance_file_io_stat_visitor()
{}
PFS_instance_file_io_stat_visitor::~PFS_instance_file_io_stat_visitor()
{}
-void PFS_instance_file_io_stat_visitor::visit_file_class(PFS_file_class *pfs)
+void PFS_instance_file_io_stat_visitor::visit_file_class(PFS_file_class *pfs)
{
/* Aggregate wait times, event counts and byte counts */
m_file_io_stat.aggregate(&pfs->m_file_stat.m_io_stat);
}
-void PFS_instance_file_io_stat_visitor::visit_file(PFS_file *pfs)
+void PFS_instance_file_io_stat_visitor::visit_file(PFS_file *pfs)
{
/* Aggregate wait times, event counts and byte counts */
m_file_io_stat.aggregate(&pfs->m_file_stat.m_io_stat);
diff --git a/storage/perfschema/pfs_visitor.h b/storage/perfschema/pfs_visitor.h
index 120b5928045..a81567e9921 100644
--- a/storage/perfschema/pfs_visitor.h
+++ b/storage/perfschema/pfs_visitor.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -25,6 +25,8 @@
#include "pfs_stat.h"
+typedef struct system_status_var STATUS_VAR;
+
/**
@file storage/perfschema/pfs_visitor.h
Visitors (declarations).
@@ -45,6 +47,7 @@ struct PFS_rwlock_class;
struct PFS_cond_class;
struct PFS_file_class;
struct PFS_socket_class;
+struct PFS_memory_class;
struct PFS_table_share;
struct PFS_mutex;
struct PFS_rwlock;
@@ -53,6 +56,7 @@ struct PFS_file;
struct PFS_table;
struct PFS_stage_class;
struct PFS_statement_class;
+struct PFS_transaction_class;
struct PFS_socket;
struct PFS_connection_slice;
@@ -75,6 +79,8 @@ public:
virtual void visit_user(PFS_user *pfs) {}
/** Visit a thread. */
virtual void visit_thread(PFS_thread *pfs) {}
+ /** Visit a THD associated with a thread. */
+ virtual void visit_THD(THD *thd) {}
};
/**
@@ -90,37 +96,45 @@ public:
@param with_users when true, visit also all users.
@param with_accounts when true, visit also all user+host.
@param with_threads when true, visit also all threads.
+ @param with_THDs when true, visit also all threads THD.
@param visitor the visitor to call
*/
static void visit_global(bool with_hosts, bool with_users,
bool with_accounts, bool with_threads,
+ bool with_THDs,
PFS_connection_visitor *visitor);
/**
Visit all connections of a host.
@param host the host to visit.
@param with_accounts when true, visit also all related user+host.
@param with_threads when true, visit also all related threads.
+ @param with_THDs when true, visit also all related threads THD.
@param visitor the visitor to call
*/
static void visit_host(PFS_host *host, bool with_accounts, bool with_threads,
+ bool with_THDs,
PFS_connection_visitor *visitor);
/**
Visit all connections of a user.
@param user the user to visit.
@param with_accounts when true, visit also all related user+host.
@param with_threads when true, visit also all related threads.
+ @param with_THDs when true, visit also all related threads THD.
@param visitor the visitor to call
*/
static void visit_user(PFS_user *user, bool with_accounts, bool with_threads,
+ bool with_THDs,
PFS_connection_visitor *visitor);
/**
Visit all connections of a user+host.
@param account the user+host to visit.
@param with_threads when true, visit also all related threads.
+ @param with_THDs when true, visit also all related threads THD.
@param visitor the visitor to call
*/
static void visit_account(PFS_account *account, bool with_threads,
- PFS_connection_visitor *visitor);
+ bool with_THDs,
+ PFS_connection_visitor *visitor);
/**
Visit a thread or connection.
@param thread the thread to visit.
@@ -129,6 +143,13 @@ public:
static inline void visit_thread(PFS_thread *thread,
PFS_connection_visitor *visitor)
{ visitor->visit_thread(thread); }
+
+ /**
+ Visit THD.
+ @param thd the THD to visit.
+ @param visitor the visitor to call.
+ */
+ static void visit_THD(THD *thd, PFS_connection_visitor *visitor);
};
/**
@@ -397,6 +418,54 @@ private:
/**
A concrete connection visitor that aggregates
+ transaction statistics for a given event_name.
+*/
+class PFS_connection_transaction_visitor : public PFS_connection_visitor
+{
+public:
+ /** Constructor. */
+ PFS_connection_transaction_visitor(PFS_transaction_class *klass);
+ virtual ~PFS_connection_transaction_visitor();
+ virtual void visit_global();
+ virtual void visit_host(PFS_host *pfs);
+ virtual void visit_account(PFS_account *pfs);
+ virtual void visit_user(PFS_user *pfs);
+ virtual void visit_thread(PFS_thread *pfs);
+
+ /** EVENT_NAME instrument index. */
+ uint m_index;
+ /** Statement statistic collected. */
+ PFS_transaction_stat m_stat;
+};
+
+/** Disabled pending code review */
+#if 0
+/**
+ A concrete connection visitor that aggregates
+ transaction statistics for all events.
+*/
+class PFS_connection_all_transaction_visitor : public PFS_connection_visitor
+{
+public:
+ /** Constructor. */
+ PFS_connection_all_transaction_visitor();
+ virtual ~PFS_connection_all_transaction_visitor();
+ virtual void visit_global();
+ virtual void visit_host(PFS_host *pfs);
+ virtual void visit_account(PFS_account *pfs);
+ virtual void visit_user(PFS_user *pfs);
+ virtual void visit_thread(PFS_thread *pfs);
+
+ /** Statement statistic collected. */
+ PFS_transaction_stat m_stat;
+
+private:
+ void visit_connection_slice(PFS_connection_slice *pfs);
+};
+#endif
+
+/**
+ A concrete connection visitor that aggregates
connection statistics.
*/
class PFS_connection_stat_visitor : public PFS_connection_visitor
@@ -416,6 +485,49 @@ public:
};
/**
+ A concrete connection visitor that aggregates
+ memory statistics for a given event_name.
+*/
+class PFS_connection_memory_visitor : public PFS_connection_visitor
+{
+public:
+ /** Constructor. */
+ PFS_connection_memory_visitor(PFS_memory_class *klass);
+ virtual ~PFS_connection_memory_visitor();
+ virtual void visit_global();
+ virtual void visit_host(PFS_host *pfs);
+ virtual void visit_account(PFS_account *pfs);
+ virtual void visit_user(PFS_user *pfs);
+ virtual void visit_thread(PFS_thread *pfs);
+
+ /** EVENT_NAME instrument index. */
+ uint m_index;
+ /** Statement statistic collected. */
+ PFS_memory_stat m_stat;
+};
+
+/**
+ A concrete connection visitor that aggregates
+ status variables.
+*/
+class PFS_connection_status_visitor : public PFS_connection_visitor
+{
+public:
+ /** Constructor. */
+ PFS_connection_status_visitor(STATUS_VAR *status_vars);
+ virtual ~PFS_connection_status_visitor();
+ virtual void visit_global();
+ virtual void visit_host(PFS_host *pfs);
+ virtual void visit_account(PFS_account *pfs);
+ virtual void visit_user(PFS_user *pfs);
+ virtual void visit_thread(PFS_thread *pfs);
+ virtual void visit_THD(THD *thd);
+
+private:
+ STATUS_VAR *m_status_vars;
+};
+
+/**
A concrete instance visitor that aggregates
wait statistics.
*/
diff --git a/storage/perfschema/rpl_gtid.h b/storage/perfschema/rpl_gtid.h
new file mode 100644
index 00000000000..6d9ecb0ea5f
--- /dev/null
+++ b/storage/perfschema/rpl_gtid.h
@@ -0,0 +1,17 @@
+#ifndef STORAGE_PERFSCHEMA_RPL_GTID_INCLUDED
+#define STORAGE_PERFSCHEMA_RPL_GTID_INCLUDED
+
+struct TABLE;
+
+#include "../../sql/rpl_gtid.h"
+
+class Gtid_specification: public rpl_gtid
+{
+public:
+ size_t to_string(char *buf)
+ {
+ return my_snprintf(buf, GTID_MAX_STR_LENGTH, "%u-%u-%llu",
+ domain_id, server_id, seq_no);
+ }
+};
+#endif
diff --git a/storage/perfschema/table_accounts.cc b/storage/perfschema/table_accounts.cc
index 708f8269a69..eb3f6481696 100644
--- a/storage/perfschema/table_accounts.cc
+++ b/storage/perfschema/table_accounts.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -21,12 +21,15 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_accounts.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_status.h"
+#include "field.h"
THR_LOCK table_accounts::m_table_lock;
@@ -35,18 +38,18 @@ table_accounts::m_share=
{
{ C_STRING_WITH_LEN("accounts") },
&pfs_truncatable_acl,
- &table_accounts::create,
+ table_accounts::create,
NULL, /* write_row */
table_accounts::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ cursor_by_account::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE accounts("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"HOST CHAR(60) collate utf8_bin default null,"
"CURRENT_CONNECTIONS bigint not null,"
- "TOTAL_CONNECTIONS bigint not null)") }
+ "TOTAL_CONNECTIONS bigint not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_accounts::create()
@@ -63,6 +66,12 @@ table_accounts::delete_all_rows(void)
reset_events_stages_by_account();
reset_events_statements_by_thread();
reset_events_statements_by_account();
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ reset_status_by_thread();
+ reset_status_by_account();
purge_all_account();
return 0;
}
@@ -74,7 +83,7 @@ table_accounts::table_accounts()
void table_accounts::make_row(PFS_account *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
pfs->m_lock.begin_optimistic_lock(&lock);
@@ -83,7 +92,10 @@ void table_accounts::make_row(PFS_account *pfs)
return;
PFS_connection_stat_visitor visitor;
- PFS_connection_iterator::visit_account(pfs, true, & visitor);
+ PFS_connection_iterator::visit_account(pfs,
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! pfs->m_lock.end_optimistic_lock(& lock))
return;
diff --git a/storage/perfschema/table_accounts.h b/storage/perfschema/table_accounts.h
index dfc2cc322e0..7563e85c1d7 100644
--- a/storage/perfschema/table_accounts.h
+++ b/storage/perfschema/table_accounts.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_all_instr.cc b/storage/perfschema/table_all_instr.cc
index d48028b1539..b030b8824ca 100644
--- a/storage/perfschema/table_all_instr.cc
+++ b/storage/perfschema/table_all_instr.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,9 +26,20 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_all_instr.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+
+ha_rows
+table_all_instr::get_row_count(void)
+{
+ return global_mutex_container.get_row_count()
+ + global_rwlock_container.get_row_count()
+ + global_cond_container.get_row_count()
+ + global_file_container.get_row_count()
+ + global_socket_container.get_row_count() ;
+}
table_all_instr::table_all_instr(const PFS_engine_table_share *share)
: PFS_engine_table(share, &m_pos),
@@ -55,10 +66,10 @@ int table_all_instr::rnd_next(void)
{
switch (m_pos.m_index_1) {
case pos_all_instr::VIEW_MUTEX:
- for ( ; m_pos.m_index_2 < mutex_max; m_pos.m_index_2++)
{
- mutex= &mutex_array[m_pos.m_index_2];
- if (mutex->m_lock.is_populated())
+ PFS_mutex_iterator it= global_mutex_container.iterate(m_pos.m_index_2);
+ mutex= it.scan_next(& m_pos.m_index_2);
+ if (mutex != NULL)
{
make_mutex_row(mutex);
m_next_pos.set_after(&m_pos);
@@ -67,10 +78,10 @@ int table_all_instr::rnd_next(void)
}
break;
case pos_all_instr::VIEW_RWLOCK:
- for ( ; m_pos.m_index_2 < rwlock_max; m_pos.m_index_2++)
{
- rwlock= &rwlock_array[m_pos.m_index_2];
- if (rwlock->m_lock.is_populated())
+ PFS_rwlock_iterator it= global_rwlock_container.iterate(m_pos.m_index_2);
+ rwlock= it.scan_next(& m_pos.m_index_2);
+ if (rwlock != NULL)
{
make_rwlock_row(rwlock);
m_next_pos.set_after(&m_pos);
@@ -79,10 +90,10 @@ int table_all_instr::rnd_next(void)
}
break;
case pos_all_instr::VIEW_COND:
- for ( ; m_pos.m_index_2 < cond_max; m_pos.m_index_2++)
{
- cond= &cond_array[m_pos.m_index_2];
- if (cond->m_lock.is_populated())
+ PFS_cond_iterator it= global_cond_container.iterate(m_pos.m_index_2);
+ cond= it.scan_next(& m_pos.m_index_2);
+ if (cond != NULL)
{
make_cond_row(cond);
m_next_pos.set_after(&m_pos);
@@ -91,10 +102,10 @@ int table_all_instr::rnd_next(void)
}
break;
case pos_all_instr::VIEW_FILE:
- for ( ; m_pos.m_index_2 < file_max; m_pos.m_index_2++)
{
- file= &file_array[m_pos.m_index_2];
- if (file->m_lock.is_populated())
+ PFS_file_iterator it= global_file_container.iterate(m_pos.m_index_2);
+ file= it.scan_next(& m_pos.m_index_2);
+ if (file != NULL)
{
make_file_row(file);
m_next_pos.set_after(&m_pos);
@@ -103,10 +114,10 @@ int table_all_instr::rnd_next(void)
}
break;
case pos_all_instr::VIEW_SOCKET:
- for ( ; m_pos.m_index_2 < socket_max; m_pos.m_index_2++)
{
- socket= &socket_array[m_pos.m_index_2];
- if (socket->m_lock.is_populated())
+ PFS_socket_iterator it= global_socket_container.iterate(m_pos.m_index_2);
+ socket= it.scan_next(& m_pos.m_index_2);
+ if (socket != NULL)
{
make_socket_row(socket);
m_next_pos.set_after(&m_pos);
@@ -132,45 +143,40 @@ int table_all_instr::rnd_pos(const void *pos)
switch (m_pos.m_index_1) {
case pos_all_instr::VIEW_MUTEX:
- DBUG_ASSERT(m_pos.m_index_2 < mutex_max);
- mutex= &mutex_array[m_pos.m_index_2];
- if (mutex->m_lock.is_populated())
+ mutex= global_mutex_container.get(m_pos.m_index_2);
+ if (mutex != NULL)
{
make_mutex_row(mutex);
return 0;
}
break;
case pos_all_instr::VIEW_RWLOCK:
- DBUG_ASSERT(m_pos.m_index_2 < rwlock_max);
- rwlock= &rwlock_array[m_pos.m_index_2];
- if (rwlock->m_lock.is_populated())
+ rwlock= global_rwlock_container.get(m_pos.m_index_2);
+ if (rwlock != NULL)
{
make_rwlock_row(rwlock);
return 0;
}
break;
case pos_all_instr::VIEW_COND:
- DBUG_ASSERT(m_pos.m_index_2 < cond_max);
- cond= &cond_array[m_pos.m_index_2];
- if (cond->m_lock.is_populated())
+ cond= global_cond_container.get(m_pos.m_index_2);
+ if (cond != NULL)
{
make_cond_row(cond);
return 0;
}
break;
case pos_all_instr::VIEW_FILE:
- DBUG_ASSERT(m_pos.m_index_2 < file_max);
- file= &file_array[m_pos.m_index_2];
- if (file->m_lock.is_populated())
+ file= global_file_container.get(m_pos.m_index_2);
+ if (file != NULL)
{
make_file_row(file);
return 0;
}
break;
case pos_all_instr::VIEW_SOCKET:
- DBUG_ASSERT(m_pos.m_index_2 < socket_max);
- socket= &socket_array[m_pos.m_index_2];
- if (socket->m_lock.is_populated())
+ socket= global_socket_container.get(m_pos.m_index_2);
+ if (socket != NULL)
{
make_socket_row(socket);
return 0;
diff --git a/storage/perfschema/table_all_instr.h b/storage/perfschema/table_all_instr.h
index 072221ba86e..3b5388dfb6e 100644
--- a/storage/perfschema/table_all_instr.h
+++ b/storage/perfschema/table_all_instr.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -74,6 +74,8 @@ struct pos_all_instr : public PFS_double_index,
class table_all_instr : public PFS_engine_table
{
public:
+ static ha_rows get_row_count();
+
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
diff --git a/storage/perfschema/table_esgs_by_account_by_event_name.cc b/storage/perfschema/table_esgs_by_account_by_event_name.cc
index 22e4e0040f1..68b7b2f57e2 100644
--- a/storage/perfschema/table_esgs_by_account_by_event_name.cc
+++ b/storage/perfschema/table_esgs_by_account_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_esgs_by_account_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esgs_by_account_by_event_name::m_table_lock;
@@ -44,19 +46,19 @@ table_esgs_by_account_by_event_name::m_share=
table_esgs_by_account_by_event_name::create,
NULL, /* write_row */
table_esgs_by_account_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esgs_by_account_by_event_name::get_row_count,
sizeof(pos_esgs_by_account_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_summary_by_account_by_event_name("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"HOST CHAR(60) collate utf8_bin default null,"
"EVENT_NAME VARCHAR(128) not null,"
"COUNT_STAR BIGINT unsigned not null,"
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -73,6 +75,12 @@ table_esgs_by_account_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esgs_by_account_by_event_name::get_row_count(void)
+{
+ return global_account_container.get_row_count() * stage_class_max;
+}
+
table_esgs_by_account_by_event_name::table_esgs_by_account_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -94,13 +102,14 @@ int table_esgs_by_account_by_event_name::rnd_next(void)
{
PFS_account *account;
PFS_stage_class *stage_class;
+ bool has_more_account= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_account();
+ has_more_account;
m_pos.next_account())
{
- account= &account_array[m_pos.m_index_1];
- if (account->m_lock.is_populated())
+ account= global_account_container.get(m_pos.m_index_1, & has_more_account);
+ if (account != NULL)
{
stage_class= find_stage_class(m_pos.m_index_2);
if (stage_class)
@@ -122,17 +131,16 @@ table_esgs_by_account_by_event_name::rnd_pos(const void *pos)
PFS_stage_class *stage_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < account_max);
- account= &account_array[m_pos.m_index_1];
- if (! account->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- stage_class= find_stage_class(m_pos.m_index_2);
- if (stage_class)
+ account= global_account_container.get(m_pos.m_index_1);
+ if (account != NULL)
{
- make_row(account, stage_class);
- return 0;
+ stage_class= find_stage_class(m_pos.m_index_2);
+ if (stage_class)
+ {
+ make_row(account, stage_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -141,7 +149,7 @@ table_esgs_by_account_by_event_name::rnd_pos(const void *pos)
void table_esgs_by_account_by_event_name
::make_row(PFS_account *account, PFS_stage_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
account->m_lock.begin_optimistic_lock(&lock);
@@ -152,7 +160,10 @@ void table_esgs_by_account_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_stage_visitor visitor(klass);
- PFS_connection_iterator::visit_account(account, true, & visitor);
+ PFS_connection_iterator::visit_account(account,
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! account->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_esgs_by_account_by_event_name.h b/storage/perfschema/table_esgs_by_account_by_event_name.h
index ee855d42818..011503aa64b 100644
--- a/storage/perfschema/table_esgs_by_account_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_account_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -57,7 +57,7 @@ struct row_esgs_by_account_by_event_name
/**
Position of a cursor on
PERFORMANCE_SCHEMA.EVENTS_STAGES_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
- Index 1 on user@host (0 based)
+ Index 1 on account (0 based)
Index 2 on stage class (1 based)
*/
struct pos_esgs_by_account_by_event_name
@@ -73,9 +73,6 @@ struct pos_esgs_by_account_by_event_name
m_index_2= 1;
}
- inline bool has_more_account(void)
- { return (m_index_1 < account_max); }
-
inline void next_account(void)
{
m_index_1++;
@@ -91,6 +88,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esgs_by_host_by_event_name.cc b/storage/perfschema/table_esgs_by_host_by_event_name.cc
index 86cc2eb1b86..1d3f6126862 100644
--- a/storage/perfschema/table_esgs_by_host_by_event_name.cc
+++ b/storage/perfschema/table_esgs_by_host_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -34,6 +34,8 @@
#include "pfs_global.h"
#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esgs_by_host_by_event_name::m_table_lock;
@@ -45,8 +47,7 @@ table_esgs_by_host_by_event_name::m_share=
table_esgs_by_host_by_event_name::create,
NULL, /* write_row */
table_esgs_by_host_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esgs_by_host_by_event_name::get_row_count,
sizeof(pos_esgs_by_host_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_summary_by_host_by_event_name("
@@ -56,7 +57,8 @@ table_esgs_by_host_by_event_name::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -74,6 +76,12 @@ table_esgs_by_host_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esgs_by_host_by_event_name::get_row_count(void)
+{
+ return global_host_container.get_row_count() * stage_class_max;
+}
+
table_esgs_by_host_by_event_name::table_esgs_by_host_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -95,13 +103,14 @@ int table_esgs_by_host_by_event_name::rnd_next(void)
{
PFS_host *host;
PFS_stage_class *stage_class;
+ bool has_more_host= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_host();
+ has_more_host;
m_pos.next_host())
{
- host= &host_array[m_pos.m_index_1];
- if (host->m_lock.is_populated())
+ host= global_host_container.get(m_pos.m_index_1, & has_more_host);
+ if (host != NULL)
{
stage_class= find_stage_class(m_pos.m_index_2);
if (stage_class)
@@ -123,17 +132,16 @@ table_esgs_by_host_by_event_name::rnd_pos(const void *pos)
PFS_stage_class *stage_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < host_max);
- host= &host_array[m_pos.m_index_1];
- if (! host->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- stage_class= find_stage_class(m_pos.m_index_2);
- if (stage_class)
+ host= global_host_container.get(m_pos.m_index_1);
+ if (host != NULL)
{
- make_row(host, stage_class);
- return 0;
+ stage_class= find_stage_class(m_pos.m_index_2);
+ if (stage_class)
+ {
+ make_row(host, stage_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -142,7 +150,7 @@ table_esgs_by_host_by_event_name::rnd_pos(const void *pos)
void table_esgs_by_host_by_event_name
::make_row(PFS_host *host, PFS_stage_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
host->m_lock.begin_optimistic_lock(&lock);
@@ -153,7 +161,11 @@ void table_esgs_by_host_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_stage_visitor visitor(klass);
- PFS_connection_iterator::visit_host(host, true, true, & visitor);
+ PFS_connection_iterator::visit_host(host,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! host->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_esgs_by_host_by_event_name.h b/storage/perfschema/table_esgs_by_host_by_event_name.h
index 6042e6396af..14ddbb8b338 100644
--- a/storage/perfschema/table_esgs_by_host_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_host_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -73,9 +73,6 @@ struct pos_esgs_by_host_by_event_name
m_index_2= 1;
}
- inline bool has_more_host(void)
- { return (m_index_1 < host_max); }
-
inline void next_host(void)
{
m_index_1++;
@@ -91,6 +88,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esgs_by_thread_by_event_name.cc b/storage/perfschema/table_esgs_by_thread_by_event_name.cc
index dfda9702abb..c266bfaf7a6 100644
--- a/storage/perfschema/table_esgs_by_thread_by_event_name.cc
+++ b/storage/perfschema/table_esgs_by_thread_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_esgs_by_thread_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esgs_by_thread_by_event_name::m_table_lock;
@@ -44,8 +46,7 @@ table_esgs_by_thread_by_event_name::m_share=
table_esgs_by_thread_by_event_name::create,
NULL, /* write_row */
table_esgs_by_thread_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esgs_by_thread_by_event_name::get_row_count,
sizeof(pos_esgs_by_thread_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_summary_by_thread_by_event_name("
@@ -55,7 +56,8 @@ table_esgs_by_thread_by_event_name::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -71,6 +73,12 @@ table_esgs_by_thread_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esgs_by_thread_by_event_name::get_row_count(void)
+{
+ return global_thread_container.get_row_count() * stage_class_max;
+}
+
table_esgs_by_thread_by_event_name::table_esgs_by_thread_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -92,18 +100,14 @@ int table_esgs_by_thread_by_event_name::rnd_next(void)
{
PFS_thread *thread;
PFS_stage_class *stage_class;
+ bool has_more_thread= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_thread();
+ has_more_thread;
m_pos.next_thread())
{
- thread= &thread_array[m_pos.m_index_1];
-
- /*
- Important note: the thread scan is the outer loop (index 1),
- to minimize the number of calls to atomic operations.
- */
- if (thread->m_lock.is_populated())
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
{
stage_class= find_stage_class(m_pos.m_index_2);
if (stage_class)
@@ -125,17 +129,16 @@ table_esgs_by_thread_by_event_name::rnd_pos(const void *pos)
PFS_stage_class *stage_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- thread= &thread_array[m_pos.m_index_1];
- if (! thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- stage_class= find_stage_class(m_pos.m_index_2);
- if (stage_class)
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
{
- make_row(thread, stage_class);
- return 0;
+ stage_class= find_stage_class(m_pos.m_index_2);
+ if (stage_class)
+ {
+ make_row(thread, stage_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -144,7 +147,7 @@ table_esgs_by_thread_by_event_name::rnd_pos(const void *pos)
void table_esgs_by_thread_by_event_name
::make_row(PFS_thread *thread, PFS_stage_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
/* Protect this reader against a thread termination */
diff --git a/storage/perfschema/table_esgs_by_thread_by_event_name.h b/storage/perfschema/table_esgs_by_thread_by_event_name.h
index 6ff677a95e2..d3798e419b6 100644
--- a/storage/perfschema/table_esgs_by_thread_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_thread_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -72,9 +72,6 @@ struct pos_esgs_by_thread_by_event_name
m_index_2= 1;
}
- inline bool has_more_thread(void)
- { return (m_index_1 < thread_max); }
-
inline void next_thread(void)
{
m_index_1++;
@@ -95,6 +92,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esgs_by_user_by_event_name.cc b/storage/perfschema/table_esgs_by_user_by_event_name.cc
index af73c1fc5fd..e6e6c321888 100644
--- a/storage/perfschema/table_esgs_by_user_by_event_name.cc
+++ b/storage/perfschema/table_esgs_by_user_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,14 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_esgs_by_user_by_event_name.h"
#include "pfs_global.h"
-#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esgs_by_user_by_event_name::m_table_lock;
@@ -45,18 +46,18 @@ table_esgs_by_user_by_event_name::m_share=
table_esgs_by_user_by_event_name::create,
NULL, /* write_row */
table_esgs_by_user_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esgs_by_user_by_event_name::get_row_count,
sizeof(pos_esgs_by_user_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_summary_by_user_by_event_name("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"EVENT_NAME VARCHAR(128) not null,"
"COUNT_STAR BIGINT unsigned not null,"
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -74,6 +75,12 @@ table_esgs_by_user_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esgs_by_user_by_event_name::get_row_count(void)
+{
+ return global_user_container.get_row_count() * stage_class_max;
+}
+
table_esgs_by_user_by_event_name::table_esgs_by_user_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -95,13 +102,14 @@ int table_esgs_by_user_by_event_name::rnd_next(void)
{
PFS_user *user;
PFS_stage_class *stage_class;
+ bool has_more_user= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_user();
+ has_more_user;
m_pos.next_user())
{
- user= &user_array[m_pos.m_index_1];
- if (user->m_lock.is_populated())
+ user= global_user_container.get(m_pos.m_index_1, & has_more_user);
+ if (user != NULL)
{
stage_class= find_stage_class(m_pos.m_index_2);
if (stage_class)
@@ -123,17 +131,16 @@ table_esgs_by_user_by_event_name::rnd_pos(const void *pos)
PFS_stage_class *stage_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < user_max);
- user= &user_array[m_pos.m_index_1];
- if (! user->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- stage_class= find_stage_class(m_pos.m_index_2);
- if (stage_class)
+ user= global_user_container.get(m_pos.m_index_1);
+ if (user != NULL)
{
- make_row(user, stage_class);
- return 0;
+ stage_class= find_stage_class(m_pos.m_index_2);
+ if (stage_class)
+ {
+ make_row(user, stage_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -142,7 +149,7 @@ table_esgs_by_user_by_event_name::rnd_pos(const void *pos)
void table_esgs_by_user_by_event_name
::make_row(PFS_user *user, PFS_stage_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
user->m_lock.begin_optimistic_lock(&lock);
@@ -153,7 +160,11 @@ void table_esgs_by_user_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_stage_visitor visitor(klass);
- PFS_connection_iterator::visit_user(user, true, true, & visitor);
+ PFS_connection_iterator::visit_user(user,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! user->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_esgs_by_user_by_event_name.h b/storage/perfschema/table_esgs_by_user_by_event_name.h
index bc545c2438a..464165a068a 100644
--- a/storage/perfschema/table_esgs_by_user_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_user_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -73,9 +73,6 @@ struct pos_esgs_by_user_by_event_name
m_index_2= 1;
}
- inline bool has_more_user(void)
- { return (m_index_1 < user_max); }
-
inline void next_user(void)
{
m_index_1++;
@@ -96,6 +93,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esgs_global_by_event_name.cc b/storage/perfschema/table_esgs_global_by_event_name.cc
index 6c5f0866671..71145844f9d 100644
--- a/storage/perfschema/table_esgs_global_by_event_name.cc
+++ b/storage/perfschema/table_esgs_global_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -35,6 +35,7 @@
#include "pfs_instr.h"
#include "pfs_timer.h"
#include "pfs_visitor.h"
+#include "field.h"
THR_LOCK table_esgs_global_by_event_name::m_table_lock;
@@ -46,8 +47,7 @@ table_esgs_global_by_event_name::m_share=
table_esgs_global_by_event_name::create,
NULL, /* write_row */
table_esgs_global_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esgs_global_by_event_name::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_summary_global_by_event_name("
@@ -56,7 +56,8 @@ table_esgs_global_by_event_name::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -76,6 +77,12 @@ table_esgs_global_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esgs_global_by_event_name::get_row_count(void)
+{
+ return stage_class_max;
+}
+
table_esgs_global_by_event_name::table_esgs_global_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(1), m_next_pos(1)
@@ -140,9 +147,12 @@ void table_esgs_global_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_stage_visitor visitor(klass);
- PFS_connection_iterator::visit_global(true, /* hosts */
+ PFS_connection_iterator::visit_global(true, /* hosts */
false, /* users */
- true, true, & visitor);
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
m_row.m_stat.set(m_normalizer, & visitor.m_stat);
m_row_exists= true;
diff --git a/storage/perfschema/table_esgs_global_by_event_name.h b/storage/perfschema/table_esgs_global_by_event_name.h
index b8884355676..44b3ea5ce7b 100644
--- a/storage/perfschema/table_esgs_global_by_event_name.h
+++ b/storage/perfschema/table_esgs_global_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -59,6 +59,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esms_by_account_by_event_name.cc b/storage/perfschema/table_esms_by_account_by_event_name.cc
index 7afdabcbbfe..09b872e8ecb 100644
--- a/storage/perfschema/table_esms_by_account_by_event_name.cc
+++ b/storage/perfschema/table_esms_by_account_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_esms_by_account_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esms_by_account_by_event_name::m_table_lock;
@@ -44,12 +46,11 @@ table_esms_by_account_by_event_name::m_share=
table_esms_by_account_by_event_name::create,
NULL, /* write_row */
table_esms_by_account_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esms_by_account_by_event_name::get_row_count,
sizeof(pos_esms_by_account_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_by_account_by_event_name("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"HOST CHAR(60) collate utf8_bin default null,"
"EVENT_NAME VARCHAR(128) not null,"
"COUNT_STAR BIGINT unsigned not null,"
@@ -75,7 +76,8 @@ table_esms_by_account_by_event_name::m_share=
"SUM_SORT_ROWS BIGINT unsigned not null,"
"SUM_SORT_SCAN BIGINT unsigned not null,"
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
- "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") }
+ "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -92,6 +94,12 @@ table_esms_by_account_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esms_by_account_by_event_name::get_row_count(void)
+{
+ return global_account_container.get_row_count() * statement_class_max;
+}
+
table_esms_by_account_by_event_name::table_esms_by_account_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -113,13 +121,14 @@ int table_esms_by_account_by_event_name::rnd_next(void)
{
PFS_account *account;
PFS_statement_class *statement_class;
+ bool has_more_account= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_account();
+ has_more_account;
m_pos.next_account())
{
- account= &account_array[m_pos.m_index_1];
- if (account->m_lock.is_populated())
+ account= global_account_container.get(m_pos.m_index_1, & has_more_account);
+ if (account != NULL)
{
statement_class= find_statement_class(m_pos.m_index_2);
if (statement_class)
@@ -141,17 +150,16 @@ table_esms_by_account_by_event_name::rnd_pos(const void *pos)
PFS_statement_class *statement_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < account_max);
- account= &account_array[m_pos.m_index_1];
- if (! account->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- statement_class= find_statement_class(m_pos.m_index_2);
- if (statement_class)
+ account= global_account_container.get(m_pos.m_index_1);
+ if (account != NULL)
{
- make_row(account, statement_class);
- return 0;
+ statement_class= find_statement_class(m_pos.m_index_2);
+ if (statement_class)
+ {
+ make_row(account, statement_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -160,7 +168,7 @@ table_esms_by_account_by_event_name::rnd_pos(const void *pos)
void table_esms_by_account_by_event_name
::make_row(PFS_account *account, PFS_statement_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
if (klass->is_mutable())
@@ -174,7 +182,10 @@ void table_esms_by_account_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_statement_visitor visitor(klass);
- PFS_connection_iterator::visit_account(account, true, & visitor);
+ PFS_connection_iterator::visit_account(account,
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! account->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_esms_by_account_by_event_name.h b/storage/perfschema/table_esms_by_account_by_event_name.h
index 64f2053cff6..3881dd5d978 100644
--- a/storage/perfschema/table_esms_by_account_by_event_name.h
+++ b/storage/perfschema/table_esms_by_account_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -57,7 +57,7 @@ struct row_esms_by_account_by_event_name
/**
Position of a cursor on
PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
- Index 1 on user@host (0 based)
+ Index 1 on account (0 based)
Index 2 on statement class (1 based)
*/
struct pos_esms_by_account_by_event_name
@@ -73,9 +73,6 @@ struct pos_esms_by_account_by_event_name
m_index_2= 1;
}
- inline bool has_more_account(void)
- { return (m_index_1 < account_max); }
-
inline void next_account(void)
{
m_index_1++;
@@ -91,6 +88,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esms_by_digest.cc b/storage/perfschema/table_esms_by_digest.cc
index 5295c29dc40..acb9e059711 100644
--- a/storage/perfschema/table_esms_by_digest.cc
+++ b/storage/perfschema/table_esms_by_digest.cc
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -37,6 +37,7 @@
#include "pfs_visitor.h"
#include "table_esms_by_digest.h"
#include "pfs_digest.h"
+#include "field.h"
THR_LOCK table_esms_by_digest::m_table_lock;
@@ -48,8 +49,7 @@ table_esms_by_digest::m_share=
table_esms_by_digest::create,
NULL, /* write_row */
table_esms_by_digest::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esms_by_digest::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_by_digest("
@@ -81,7 +81,8 @@ table_esms_by_digest::m_share=
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
"SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"FIRST_SEEN TIMESTAMP(0) NOT NULL default 0,"
- "LAST_SEEN TIMESTAMP(0) NOT NULL default 0)") }
+ "LAST_SEEN TIMESTAMP(0) NOT NULL default 0)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -97,6 +98,12 @@ table_esms_by_digest::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esms_by_digest::get_row_count(void)
+{
+ return digest_max;
+}
+
table_esms_by_digest::table_esms_by_digest()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -183,7 +190,7 @@ int table_esms_by_digest
if (unlikely(! m_row_exists))
return HA_ERR_RECORD_DELETED;
- /*
+ /*
Set the null bits. It indicates how many fields could be null
in the table.
*/
diff --git a/storage/perfschema/table_esms_by_digest.h b/storage/perfschema/table_esms_by_digest.h
index 903b86110f6..9aa005bb6cc 100644
--- a/storage/perfschema/table_esms_by_digest.h
+++ b/storage/perfschema/table_esms_by_digest.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -62,6 +62,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_esms_by_host_by_event_name.cc b/storage/perfschema/table_esms_by_host_by_event_name.cc
index 42629ab6c09..c77f5f1320f 100644
--- a/storage/perfschema/table_esms_by_host_by_event_name.cc
+++ b/storage/perfschema/table_esms_by_host_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -34,6 +34,8 @@
#include "pfs_global.h"
#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esms_by_host_by_event_name::m_table_lock;
@@ -45,8 +47,7 @@ table_esms_by_host_by_event_name::m_share=
table_esms_by_host_by_event_name::create,
NULL, /* write_row */
table_esms_by_host_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esms_by_host_by_event_name::get_row_count,
sizeof(pos_esms_by_host_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_by_host_by_event_name("
@@ -75,7 +76,8 @@ table_esms_by_host_by_event_name::m_share=
"SUM_SORT_ROWS BIGINT unsigned not null,"
"SUM_SORT_SCAN BIGINT unsigned not null,"
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
- "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") }
+ "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -93,6 +95,12 @@ table_esms_by_host_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esms_by_host_by_event_name::get_row_count(void)
+{
+ return global_host_container.get_row_count() * statement_class_max;
+}
+
table_esms_by_host_by_event_name::table_esms_by_host_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -114,13 +122,14 @@ int table_esms_by_host_by_event_name::rnd_next(void)
{
PFS_host *host;
PFS_statement_class *statement_class;
+ bool has_more_host= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_host();
+ has_more_host;
m_pos.next_host())
{
- host= &host_array[m_pos.m_index_1];
- if (host->m_lock.is_populated())
+ host= global_host_container.get(m_pos.m_index_1, & has_more_host);
+ if (host != NULL)
{
statement_class= find_statement_class(m_pos.m_index_2);
if (statement_class)
@@ -142,17 +151,16 @@ table_esms_by_host_by_event_name::rnd_pos(const void *pos)
PFS_statement_class *statement_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < host_max);
- host= &host_array[m_pos.m_index_1];
- if (! host->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- statement_class= find_statement_class(m_pos.m_index_2);
- if (statement_class)
+ host= global_host_container.get(m_pos.m_index_1);
+ if (host != NULL)
{
- make_row(host, statement_class);
- return 0;
+ statement_class= find_statement_class(m_pos.m_index_2);
+ if (statement_class)
+ {
+ make_row(host, statement_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -161,7 +169,7 @@ table_esms_by_host_by_event_name::rnd_pos(const void *pos)
void table_esms_by_host_by_event_name
::make_row(PFS_host *host, PFS_statement_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
if (klass->is_mutable())
@@ -175,7 +183,11 @@ void table_esms_by_host_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_statement_visitor visitor(klass);
- PFS_connection_iterator::visit_host(host, true, true, & visitor);
+ PFS_connection_iterator::visit_host(host,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! host->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_esms_by_host_by_event_name.h b/storage/perfschema/table_esms_by_host_by_event_name.h
index a6985b48149..807db6d48d3 100644
--- a/storage/perfschema/table_esms_by_host_by_event_name.h
+++ b/storage/perfschema/table_esms_by_host_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -73,9 +73,6 @@ struct pos_esms_by_host_by_event_name
m_index_2= 1;
}
- inline bool has_more_host(void)
- { return (m_index_1 < host_max); }
-
inline void next_host(void)
{
m_index_1++;
@@ -91,6 +88,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esms_by_program.cc b/storage/perfschema/table_esms_by_program.cc
new file mode 100644
index 00000000000..3cb2e4a4d46
--- /dev/null
+++ b/storage/perfschema/table_esms_by_program.cc
@@ -0,0 +1,245 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/table_esms_by_program.cc
+ Table EVENTS_STATEMENTS_SUMMARY_BY_PROGRAM (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+#include "pfs_instr.h"
+#include "pfs_timer.h"
+#include "pfs_visitor.h"
+#include "pfs_program.h"
+#include "table_esms_by_program.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_esms_by_program::m_table_lock;
+
+PFS_engine_table_share
+table_esms_by_program::m_share=
+{
+ { C_STRING_WITH_LEN("events_statements_summary_by_program") },
+ &pfs_truncatable_acl,
+ table_esms_by_program::create,
+ NULL, /* write_row */
+ table_esms_by_program::delete_all_rows,
+ table_esms_by_program::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_by_program ("
+ "OBJECT_TYPE enum('EVENT', 'FUNCTION', 'PROCEDURE', 'TABLE', 'TRIGGER'),"
+ "OBJECT_SCHEMA varchar(64) NOT NULL,"
+ "OBJECT_NAME varchar(64) 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,"
+ "COUNT_STATEMENTS bigint(20) unsigned NOT NULL,"
+ "SUM_STATEMENTS_WAIT bigint(20) unsigned NOT NULL,"
+ "MIN_STATEMENTS_WAIT bigint(20) unsigned NOT NULL,"
+ "AVG_STATEMENTS_WAIT bigint(20) unsigned NOT NULL,"
+ "MAX_STATEMENTS_WAIT bigint(20) unsigned NOT NULL,"
+ "SUM_LOCK_TIME bigint(20) unsigned NOT NULL,"
+ "SUM_ERRORS bigint(20) unsigned NOT NULL,"
+ "SUM_WARNINGS bigint(20) unsigned NOT NULL,"
+ "SUM_ROWS_AFFECTED bigint(20) unsigned NOT NULL,"
+ "SUM_ROWS_SENT bigint(20) unsigned NOT NULL,"
+ "SUM_ROWS_EXAMINED bigint(20) unsigned NOT NULL,"
+ "SUM_CREATED_TMP_DISK_TABLES bigint(20) unsigned NOT NULL,"
+ "SUM_CREATED_TMP_TABLES bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_FULL_JOIN bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_FULL_RANGE_JOIN bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_RANGE bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_RANGE_CHECK bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_SCAN bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_MERGE_PASSES bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_RANGE bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_ROWS bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_SCAN bigint(20) unsigned NOT NULL,"
+ "SUM_NO_INDEX_USED bigint(20) unsigned NOT NULL,"
+ "SUM_NO_GOOD_INDEX_USED bigint(20) unsigned NOT NULL)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_esms_by_program::create(void)
+{
+ return new table_esms_by_program();
+}
+
+int
+table_esms_by_program::delete_all_rows(void)
+{
+ reset_esms_by_program();
+ return 0;
+}
+
+ha_rows
+table_esms_by_program::get_row_count(void)
+{
+ return global_program_container.get_row_count();
+}
+
+table_esms_by_program::table_esms_by_program()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_esms_by_program::reset_position(void)
+{
+ m_pos= 0;
+ m_next_pos= 0;
+}
+
+int table_esms_by_program::rnd_next(void)
+{
+ PFS_program* pfs;
+
+ m_pos.set_at(&m_next_pos);
+ PFS_program_iterator it= global_program_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_esms_by_program::rnd_pos(const void *pos)
+{
+ PFS_program* pfs;
+
+ set_position(pos);
+
+ pfs= global_program_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+
+void table_esms_by_program::make_row(PFS_program* program)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ program->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_object_type= program->m_type;
+
+ m_row.m_object_name_length= program->m_object_name_length;
+ if(m_row.m_object_name_length > 0)
+ memcpy(m_row.m_object_name, program->m_object_name,
+ m_row.m_object_name_length);
+
+ m_row.m_schema_name_length= program->m_schema_name_length;
+ if(m_row.m_schema_name_length > 0)
+ memcpy(m_row.m_schema_name, program->m_schema_name,
+ m_row.m_schema_name_length);
+
+ time_normalizer *normalizer= time_normalizer::get(statement_timer);
+ /* Get stored program's over all stats. */
+ m_row.m_sp_stat.set(normalizer, &program->m_sp_stat);
+ /* Get sub statements' stats. */
+ m_row.m_stmt_stat.set(normalizer, & program->m_stmt_stat);
+
+ if (! program->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_esms_by_program
+::read_row_values(TABLE *table, unsigned char *buf, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /*
+ Set the null bits. It indicates how many fields could be null
+ in the table.
+ */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* OBJECT_TYPE */
+ if(m_row.m_object_type != 0)
+ set_field_enum(f, m_row.m_object_type);
+ else
+ f->set_null();
+ break;
+ case 1: /* OBJECT_SCHEMA */
+ if(m_row.m_schema_name_length > 0)
+ set_field_varchar_utf8(f, m_row.m_schema_name,
+ m_row.m_schema_name_length);
+ else
+ f->set_null();
+ break;
+ case 2: /* OBJECT_NAME */
+ if(m_row.m_object_name_length > 0)
+ set_field_varchar_utf8(f, m_row.m_object_name,
+ m_row.m_object_name_length);
+ else
+ f->set_null();
+ break;
+ case 3: /* COUNT_STAR */
+ case 4: /* SUM_TIMER_WAIT */
+ case 5: /* MIN_TIMER_WAIT */
+ case 6: /* AVG_TIMER_WAIT */
+ case 7: /* MAX_TIMER_WAIT */
+ m_row.m_sp_stat.set_field(f->field_index - 3, f);
+ break;
+ default: /* 8, ... COUNT/SUM/MIN/AVG/MAX */
+ m_row.m_stmt_stat.set_field(f->field_index - 8, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_esms_by_program.h b/storage/perfschema/table_esms_by_program.h
new file mode 100644
index 00000000000..cc263878e28
--- /dev/null
+++ b/storage/perfschema/table_esms_by_program.h
@@ -0,0 +1,113 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_ESMS_BY_PROGRAM_H
+#define TABLE_ESMS_BY_PROGRAM_H
+
+/**
+ @file storage/perfschema/table_esms_by_program.h
+ Table EVENTS_STATEMENTS_SUMMARY_BY_PROGRAM (declarations).
+*/
+
+#include "table_helper.h"
+#include "pfs_program.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_PROGRAM.
+*/
+struct row_esms_by_program
+{
+ /** Column OBJECT_TYPE. */
+ enum_object_type m_object_type;
+ /** Column OBJECT_SCHEMA. */
+ char m_schema_name[COL_OBJECT_SCHEMA_SIZE];
+ int m_schema_name_length;
+ /** Column OBJECT_NAME. */
+ char m_object_name[COL_OBJECT_NAME_SIZE];
+ int m_object_name_length;
+
+ /**
+ Columns COUNT_STAR
+ SUM_TIMER_WAIT
+ MIN_TIMER_WAIT
+ AVG_TIMER_WAIT
+ MAX_TIMER_WAIT
+ */
+ PFS_sp_stat_row m_sp_stat;
+
+ /** Columns COUNT_STATEMENTS,SUM_STATEMENTS_WAIT...SUM_NO_GOOD_INDEX_USED. */
+ PFS_statement_stat_row m_stmt_stat;
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_PROGRAM. */
+class table_esms_by_program : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_esms_by_program();
+
+public:
+ ~table_esms_by_program()
+ {}
+
+protected:
+ void make_row(PFS_program*);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_esms_by_program m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_esms_by_thread_by_event_name.cc b/storage/perfschema/table_esms_by_thread_by_event_name.cc
index 0a7cf46986c..306edc769c8 100644
--- a/storage/perfschema/table_esms_by_thread_by_event_name.cc
+++ b/storage/perfschema/table_esms_by_thread_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_esms_by_thread_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esms_by_thread_by_event_name::m_table_lock;
@@ -44,8 +46,7 @@ table_esms_by_thread_by_event_name::m_share=
table_esms_by_thread_by_event_name::create,
NULL, /* write_row */
table_esms_by_thread_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esms_by_thread_by_event_name::get_row_count,
sizeof(pos_esms_by_thread_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_by_thread_by_event_name("
@@ -74,7 +75,8 @@ table_esms_by_thread_by_event_name::m_share=
"SUM_SORT_ROWS BIGINT unsigned not null,"
"SUM_SORT_SCAN BIGINT unsigned not null,"
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
- "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") }
+ "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -90,6 +92,12 @@ table_esms_by_thread_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esms_by_thread_by_event_name::get_row_count(void)
+{
+ return global_thread_container.get_row_count() * statement_class_max;
+}
+
table_esms_by_thread_by_event_name::table_esms_by_thread_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -111,18 +119,14 @@ int table_esms_by_thread_by_event_name::rnd_next(void)
{
PFS_thread *thread;
PFS_statement_class *statement_class;
+ bool has_more_thread= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_thread();
+ has_more_thread;
m_pos.next_thread())
{
- thread= &thread_array[m_pos.m_index_1];
-
- /*
- Important note: the thread scan is the outer loop (index 1),
- to minimize the number of calls to atomic operations.
- */
- if (thread->m_lock.is_populated())
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
{
statement_class= find_statement_class(m_pos.m_index_2);
if (statement_class)
@@ -144,17 +148,16 @@ table_esms_by_thread_by_event_name::rnd_pos(const void *pos)
PFS_statement_class *statement_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- thread= &thread_array[m_pos.m_index_1];
- if (! thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- statement_class= find_statement_class(m_pos.m_index_2);
- if (statement_class)
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
{
- make_row(thread, statement_class);
- return 0;
+ statement_class= find_statement_class(m_pos.m_index_2);
+ if (statement_class)
+ {
+ make_row(thread, statement_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -163,7 +166,7 @@ table_esms_by_thread_by_event_name::rnd_pos(const void *pos)
void table_esms_by_thread_by_event_name
::make_row(PFS_thread *thread, PFS_statement_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
if (klass->is_mutable())
diff --git a/storage/perfschema/table_esms_by_thread_by_event_name.h b/storage/perfschema/table_esms_by_thread_by_event_name.h
index 72645d03389..41fec4e10d7 100644
--- a/storage/perfschema/table_esms_by_thread_by_event_name.h
+++ b/storage/perfschema/table_esms_by_thread_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -72,9 +72,6 @@ struct pos_esms_by_thread_by_event_name
m_index_2= 1;
}
- inline bool has_more_thread(void)
- { return (m_index_1 < thread_max); }
-
inline void next_thread(void)
{
m_index_1++;
@@ -95,6 +92,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esms_by_user_by_event_name.cc b/storage/perfschema/table_esms_by_user_by_event_name.cc
index f8708ac9a14..c0517748b99 100644
--- a/storage/perfschema/table_esms_by_user_by_event_name.cc
+++ b/storage/perfschema/table_esms_by_user_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,14 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_esms_by_user_by_event_name.h"
#include "pfs_global.h"
-#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_esms_by_user_by_event_name::m_table_lock;
@@ -45,12 +46,11 @@ table_esms_by_user_by_event_name::m_share=
table_esms_by_user_by_event_name::create,
NULL, /* write_row */
table_esms_by_user_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esms_by_user_by_event_name::get_row_count,
sizeof(pos_esms_by_user_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_by_user_by_event_name("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"EVENT_NAME VARCHAR(128) not null,"
"COUNT_STAR BIGINT unsigned not null,"
"SUM_TIMER_WAIT BIGINT unsigned not null,"
@@ -75,7 +75,8 @@ table_esms_by_user_by_event_name::m_share=
"SUM_SORT_ROWS BIGINT unsigned not null,"
"SUM_SORT_SCAN BIGINT unsigned not null,"
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
- "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") }
+ "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -93,6 +94,12 @@ table_esms_by_user_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esms_by_user_by_event_name::get_row_count(void)
+{
+ return global_user_container.get_row_count() * statement_class_max;
+}
+
table_esms_by_user_by_event_name::table_esms_by_user_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -114,13 +121,14 @@ int table_esms_by_user_by_event_name::rnd_next(void)
{
PFS_user *user;
PFS_statement_class *statement_class;
+ bool has_more_user= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_user();
+ has_more_user;
m_pos.next_user())
{
- user= &user_array[m_pos.m_index_1];
- if (user->m_lock.is_populated())
+ user= global_user_container.get(m_pos.m_index_1, & has_more_user);
+ if (user != NULL)
{
statement_class= find_statement_class(m_pos.m_index_2);
if (statement_class)
@@ -142,17 +150,16 @@ table_esms_by_user_by_event_name::rnd_pos(const void *pos)
PFS_statement_class *statement_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < user_max);
- user= &user_array[m_pos.m_index_1];
- if (! user->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- statement_class= find_statement_class(m_pos.m_index_2);
- if (statement_class)
+ user= global_user_container.get(m_pos.m_index_1);
+ if (user != NULL)
{
- make_row(user, statement_class);
- return 0;
+ statement_class= find_statement_class(m_pos.m_index_2);
+ if (statement_class)
+ {
+ make_row(user, statement_class);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -161,7 +168,7 @@ table_esms_by_user_by_event_name::rnd_pos(const void *pos)
void table_esms_by_user_by_event_name
::make_row(PFS_user *user, PFS_statement_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
if (klass->is_mutable())
@@ -175,7 +182,11 @@ void table_esms_by_user_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_statement_visitor visitor(klass);
- PFS_connection_iterator::visit_user(user, true, true, & visitor);
+ PFS_connection_iterator::visit_user(user,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! user->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_esms_by_user_by_event_name.h b/storage/perfschema/table_esms_by_user_by_event_name.h
index d1d1e5df85d..0ed9899dcf5 100644
--- a/storage/perfschema/table_esms_by_user_by_event_name.h
+++ b/storage/perfschema/table_esms_by_user_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -73,9 +73,6 @@ struct pos_esms_by_user_by_event_name
m_index_2= 1;
}
- inline bool has_more_user(void)
- { return (m_index_1 < user_max); }
-
inline void next_user(void)
{
m_index_1++;
@@ -91,6 +88,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_esms_global_by_event_name.cc b/storage/perfschema/table_esms_global_by_event_name.cc
index 7d9584752b0..6e2408be26a 100644
--- a/storage/perfschema/table_esms_global_by_event_name.cc
+++ b/storage/perfschema/table_esms_global_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -35,6 +35,7 @@
#include "pfs_instr.h"
#include "pfs_timer.h"
#include "pfs_visitor.h"
+#include "field.h"
THR_LOCK table_esms_global_by_event_name::m_table_lock;
@@ -46,8 +47,7 @@ table_esms_global_by_event_name::m_share=
table_esms_global_by_event_name::create,
NULL, /* write_row */
table_esms_global_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_esms_global_by_event_name::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_summary_global_by_event_name("
@@ -75,7 +75,8 @@ table_esms_global_by_event_name::m_share=
"SUM_SORT_ROWS BIGINT unsigned not null,"
"SUM_SORT_SCAN BIGINT unsigned not null,"
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
- "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") }
+ "SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -95,6 +96,12 @@ table_esms_global_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_esms_global_by_event_name::get_row_count(void)
+{
+ return statement_class_max;
+}
+
table_esms_global_by_event_name::table_esms_global_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(1), m_next_pos(1)
@@ -164,9 +171,12 @@ void table_esms_global_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_statement_visitor visitor(klass);
- PFS_connection_iterator::visit_global(true, /* hosts */
+ PFS_connection_iterator::visit_global(true, /* hosts */
false, /* users */
- true, true, & visitor);
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
m_row.m_stat.set(m_normalizer, & visitor.m_stat);
m_row_exists= true;
diff --git a/storage/perfschema/table_esms_global_by_event_name.h b/storage/perfschema/table_esms_global_by_event_name.h
index b90c14c0c0f..d4e34b7cc18 100644
--- a/storage/perfschema/table_esms_global_by_event_name.h
+++ b/storage/perfschema/table_esms_global_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -59,6 +59,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_ets_by_account_by_event_name.cc b/storage/perfschema/table_ets_by_account_by_event_name.cc
new file mode 100644
index 00000000000..f951be2104a
--- /dev/null
+++ b/storage/perfschema/table_ets_by_account_by_event_name.cc
@@ -0,0 +1,225 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/table_ets_by_account_by_event_name.cc
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_ets_by_account_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_ets_by_account_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_ets_by_account_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_summary_by_account_by_event_name") },
+ &pfs_truncatable_acl,
+ table_ets_by_account_by_event_name::create,
+ NULL, /* write_row */
+ table_ets_by_account_by_event_name::delete_all_rows,
+ table_ets_by_account_by_event_name::get_row_count,
+ sizeof(pos_ets_by_account_by_event_name),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_summary_by_account_by_event_name("
+ "USER CHAR(32) collate utf8_bin default null,"
+ "HOST CHAR(60) collate utf8_bin default null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_STAR BIGINT unsigned not null,"
+ "SUM_TIMER_WAIT BIGINT unsigned not null,"
+ "MIN_TIMER_WAIT BIGINT unsigned not null,"
+ "AVG_TIMER_WAIT BIGINT unsigned not null,"
+ "MAX_TIMER_WAIT BIGINT unsigned not null,"
+ "COUNT_READ_WRITE BIGINT unsigned not null,"
+ "SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "COUNT_READ_ONLY BIGINT unsigned not null,"
+ "SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MAX_TIMER_READ_ONLY BIGINT unsigned not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_ets_by_account_by_event_name::create(void)
+{
+ return new table_ets_by_account_by_event_name();
+}
+
+int
+table_ets_by_account_by_event_name::delete_all_rows(void)
+{
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ return 0;
+}
+
+ha_rows
+table_ets_by_account_by_event_name::get_row_count(void)
+{
+ return global_account_container.get_row_count() * transaction_class_max;
+}
+
+table_ets_by_account_by_event_name::table_ets_by_account_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_ets_by_account_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_ets_by_account_by_event_name::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_ets_by_account_by_event_name::rnd_next(void)
+{
+ PFS_account *account;
+ PFS_transaction_class *transaction_class;
+ bool has_more_account= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_account;
+ m_pos.next_account())
+ {
+ account= global_account_container.get(m_pos.m_index_1, & has_more_account);
+ if (account != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(account, transaction_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_ets_by_account_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_account *account;
+ PFS_transaction_class *transaction_class;
+
+ set_position(pos);
+
+ account= global_account_container.get(m_pos.m_index_1);
+ if (account != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(account, transaction_class);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_ets_by_account_by_event_name
+::make_row(PFS_account *account, PFS_transaction_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ account->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_account.make_row(account))
+ return;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_transaction_visitor visitor(klass);
+ PFS_connection_iterator::visit_account(account,
+ true, /* threads */
+ false, /* THDs */
+ &visitor);
+
+ if (! account->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(m_normalizer, &visitor.m_stat);
+}
+
+int table_ets_by_account_by_event_name
+::read_row_values(TABLE *table, unsigned char *buf, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* USER */
+ case 1: /* HOST */
+ m_row.m_account.set_field(f->field_index, f);
+ break;
+ case 2: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default:
+ /**
+ COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ m_row.m_stat.set_field(f->field_index-3, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_ets_by_account_by_event_name.h b/storage/perfschema/table_ets_by_account_by_event_name.h
new file mode 100644
index 00000000000..98fb45f79dd
--- /dev/null
+++ b/storage/perfschema/table_ets_by_account_by_event_name.h
@@ -0,0 +1,134 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_ETS_BY_ACCOUNT_BY_EVENT_NAME_H
+#define TABLE_ETS_BY_ACCOUNT_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_ets_by_account_by_event_name.h
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_account.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
+*/
+struct row_ets_by_account_by_event_name
+{
+ /** Columns USER, HOST. */
+ PFS_account_row m_account;
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /**
+ Columns COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ PFS_transaction_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
+ Index 1 on account (0 based)
+ Index 2 on transaction class (1 based)
+*/
+struct pos_ets_by_account_by_event_name
+: public PFS_double_index
+{
+ pos_ets_by_account_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_account(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME. */
+class table_ets_by_account_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_ets_by_account_by_event_name();
+
+public:
+ ~table_ets_by_account_by_event_name()
+ {}
+
+protected:
+ void make_row(PFS_account *account, PFS_transaction_class *klass);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_ets_by_account_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_ets_by_account_by_event_name m_pos;
+ /** Next position. */
+ pos_ets_by_account_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_ets_by_host_by_event_name.cc b/storage/perfschema/table_ets_by_host_by_event_name.cc
new file mode 100644
index 00000000000..f02936241a0
--- /dev/null
+++ b/storage/perfschema/table_ets_by_host_by_event_name.cc
@@ -0,0 +1,226 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/table_ets_by_host_by_event_name.cc
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_ets_by_host_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_account.h"
+#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_ets_by_host_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_ets_by_host_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_summary_by_host_by_event_name") },
+ &pfs_truncatable_acl,
+ table_ets_by_host_by_event_name::create,
+ NULL, /* write_row */
+ table_ets_by_host_by_event_name::delete_all_rows,
+ table_ets_by_host_by_event_name::get_row_count,
+ sizeof(pos_ets_by_host_by_event_name),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_summary_by_host_by_event_name("
+ "HOST CHAR(60) collate utf8_bin default null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_STAR BIGINT unsigned not null,"
+ "SUM_TIMER_WAIT BIGINT unsigned not null,"
+ "MIN_TIMER_WAIT BIGINT unsigned not null,"
+ "AVG_TIMER_WAIT BIGINT unsigned not null,"
+ "MAX_TIMER_WAIT BIGINT unsigned not null,"
+ "COUNT_READ_WRITE BIGINT unsigned not null,"
+ "SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "COUNT_READ_ONLY BIGINT unsigned not null,"
+ "SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MAX_TIMER_READ_ONLY BIGINT unsigned not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_ets_by_host_by_event_name::create(void)
+{
+ return new table_ets_by_host_by_event_name();
+}
+
+int
+table_ets_by_host_by_event_name::delete_all_rows(void)
+{
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ reset_events_transactions_by_host();
+ return 0;
+}
+
+ha_rows
+table_ets_by_host_by_event_name::get_row_count(void)
+{
+ return global_host_container.get_row_count() * transaction_class_max;
+}
+
+table_ets_by_host_by_event_name::table_ets_by_host_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_ets_by_host_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_ets_by_host_by_event_name::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_ets_by_host_by_event_name::rnd_next(void)
+{
+ PFS_host *host;
+ PFS_transaction_class *transaction_class;
+ bool has_more_host= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_host;
+ m_pos.next_host())
+ {
+ host= global_host_container.get(m_pos.m_index_1, & has_more_host);
+ if (host != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(host, transaction_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_ets_by_host_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_host *host;
+ PFS_transaction_class *transaction_class;
+
+ set_position(pos);
+
+ host= global_host_container.get(m_pos.m_index_1);
+ if (host != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(host, transaction_class);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_ets_by_host_by_event_name
+::make_row(PFS_host *host, PFS_transaction_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ host->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_host.make_row(host))
+ return;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_transaction_visitor visitor(klass);
+ PFS_connection_iterator::visit_host(host,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
+
+ if (! host->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(m_normalizer, & visitor.m_stat);
+}
+
+int table_ets_by_host_by_event_name
+::read_row_values(TABLE *table, unsigned char *buf, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* HOST */
+ m_row.m_host.set_field(f);
+ break;
+ case 1: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default:
+ /**
+ COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ m_row.m_stat.set_field(f->field_index-2, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_ets_by_host_by_event_name.h b/storage/perfschema/table_ets_by_host_by_event_name.h
new file mode 100644
index 00000000000..341c3878253
--- /dev/null
+++ b/storage/perfschema/table_ets_by_host_by_event_name.h
@@ -0,0 +1,134 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_ETS_BY_HOST_BY_EVENT_NAME_H
+#define TABLE_ETS_BY_HOST_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_ets_by_host_by_event_name.h
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_host.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME.
+*/
+struct row_ets_by_host_by_event_name
+{
+ /** Column HOST */
+ PFS_host_row m_host;
+ /** Column EVENT_NAME */
+ PFS_event_name_row m_event_name;
+ /**
+ Columns COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ PFS_transaction_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME.
+ Index 1 on host (0 based)
+ Index 2 on transaction class (1 based)
+*/
+struct pos_ets_by_host_by_event_name
+: public PFS_double_index
+{
+ pos_ets_by_host_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_host(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME. */
+class table_ets_by_host_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_ets_by_host_by_event_name();
+
+public:
+ ~table_ets_by_host_by_event_name()
+ {}
+
+protected:
+ void make_row(PFS_host *host, PFS_transaction_class *klass);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_ets_by_host_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_ets_by_host_by_event_name m_pos;
+ /** Next position. */
+ pos_ets_by_host_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_ets_by_thread_by_event_name.cc b/storage/perfschema/table_ets_by_thread_by_event_name.cc
new file mode 100644
index 00000000000..81ebf23bbfb
--- /dev/null
+++ b/storage/perfschema/table_ets_by_thread_by_event_name.cc
@@ -0,0 +1,218 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_ets_by_thread_by_event_name.cc
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_HOST_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_ets_by_thread_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_ets_by_thread_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_ets_by_thread_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_summary_by_thread_by_event_name") },
+ &pfs_truncatable_acl,
+ table_ets_by_thread_by_event_name::create,
+ NULL, /* write_row */
+ table_ets_by_thread_by_event_name::delete_all_rows,
+ table_ets_by_thread_by_event_name::get_row_count,
+ sizeof(pos_ets_by_thread_by_event_name),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_summary_by_thread_by_event_name("
+ "THREAD_ID BIGINT unsigned not null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_STAR BIGINT unsigned not null,"
+ "SUM_TIMER_WAIT BIGINT unsigned not null,"
+ "MIN_TIMER_WAIT BIGINT unsigned not null,"
+ "AVG_TIMER_WAIT BIGINT unsigned not null,"
+ "MAX_TIMER_WAIT BIGINT unsigned not null,"
+ "COUNT_READ_WRITE BIGINT unsigned not null,"
+ "SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "COUNT_READ_ONLY BIGINT unsigned not null,"
+ "SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MAX_TIMER_READ_ONLY BIGINT unsigned not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_ets_by_thread_by_event_name::create(void)
+{
+ return new table_ets_by_thread_by_event_name();
+}
+
+int
+table_ets_by_thread_by_event_name::delete_all_rows(void)
+{
+ reset_events_transactions_by_thread();
+ return 0;
+}
+
+ha_rows
+table_ets_by_thread_by_event_name::get_row_count(void)
+{
+ return global_thread_container.get_row_count() * transaction_class_max;
+}
+
+table_ets_by_thread_by_event_name::table_ets_by_thread_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_ets_by_thread_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_ets_by_thread_by_event_name::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_ets_by_thread_by_event_name::rnd_next(void)
+{
+ PFS_thread *thread;
+ PFS_transaction_class *transaction_class;
+ bool has_more_thread= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next_thread())
+ {
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(thread, transaction_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_ets_by_thread_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_thread *thread;
+ PFS_transaction_class *transaction_class;
+
+ set_position(pos);
+
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(thread, transaction_class);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_ets_by_thread_by_event_name
+::make_row(PFS_thread *thread, PFS_transaction_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_thread_internal_id= thread->m_thread_internal_id;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_transaction_visitor visitor(klass);
+ PFS_connection_iterator::visit_thread(thread, &visitor);
+
+ if (! thread->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(m_normalizer, &visitor.m_stat);
+}
+
+int table_ets_by_thread_by_event_name
+::read_row_values(TABLE *table, unsigned char *, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 0);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* THREAD_ID */
+ set_field_ulonglong(f, m_row.m_thread_internal_id);
+ break;
+ case 1: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default:
+ /**
+ COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ m_row.m_stat.set_field(f->field_index-2, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_ets_by_thread_by_event_name.h b/storage/perfschema/table_ets_by_thread_by_event_name.h
new file mode 100644
index 00000000000..ad63efa3f1a
--- /dev/null
+++ b/storage/perfschema/table_ets_by_thread_by_event_name.h
@@ -0,0 +1,138 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_ETS_BY_THREAD_BY_EVENT_NAME_H
+#define TABLE_ETS_BY_THREAD_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_ets_by_thread_by_event_name.h
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME.
+*/
+struct row_ets_by_thread_by_event_name
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /**
+ Columns COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ PFS_transaction_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME.
+ Index 1 on thread (0 based).
+ Index 2 on transaction class (1 based).
+*/
+struct pos_ets_by_thread_by_event_name
+: public PFS_double_index, public PFS_instrument_view_constants
+{
+ pos_ets_by_thread_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_thread(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+
+ inline void next_transaction(void)
+ {
+ m_index_2++;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_THREAD_BY_EVENT_NAME. */
+class table_ets_by_thread_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_ets_by_thread_by_event_name();
+
+public:
+ ~table_ets_by_thread_by_event_name()
+ {}
+
+protected:
+ void make_row(PFS_thread *thread, PFS_transaction_class *klass);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_ets_by_thread_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_ets_by_thread_by_event_name m_pos;
+ /** Next position. */
+ pos_ets_by_thread_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_ets_by_user_by_event_name.cc b/storage/perfschema/table_ets_by_user_by_event_name.cc
new file mode 100644
index 00000000000..66aae431782
--- /dev/null
+++ b/storage/perfschema/table_ets_by_user_by_event_name.cc
@@ -0,0 +1,225 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/table_ets_by_user_by_event_name.cc
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_ets_by_user_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_ets_by_user_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_ets_by_user_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_summary_by_user_by_event_name") },
+ &pfs_truncatable_acl,
+ table_ets_by_user_by_event_name::create,
+ NULL, /* write_row */
+ table_ets_by_user_by_event_name::delete_all_rows,
+ table_ets_by_user_by_event_name::get_row_count,
+ sizeof(pos_ets_by_user_by_event_name),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_summary_by_user_by_event_name("
+ "USER CHAR(32) collate utf8_bin default null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_STAR BIGINT unsigned not null,"
+ "SUM_TIMER_WAIT BIGINT unsigned not null,"
+ "MIN_TIMER_WAIT BIGINT unsigned not null,"
+ "AVG_TIMER_WAIT BIGINT unsigned not null,"
+ "MAX_TIMER_WAIT BIGINT unsigned not null,"
+ "COUNT_READ_WRITE BIGINT unsigned not null,"
+ "SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "COUNT_READ_ONLY BIGINT unsigned not null,"
+ "SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MAX_TIMER_READ_ONLY BIGINT unsigned not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_ets_by_user_by_event_name::create(void)
+{
+ return new table_ets_by_user_by_event_name();
+}
+
+int
+table_ets_by_user_by_event_name::delete_all_rows(void)
+{
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ reset_events_transactions_by_user();
+ return 0;
+}
+
+ha_rows
+table_ets_by_user_by_event_name::get_row_count(void)
+{
+ return global_user_container.get_row_count() * transaction_class_max;
+}
+
+table_ets_by_user_by_event_name::table_ets_by_user_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_ets_by_user_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_ets_by_user_by_event_name::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_ets_by_user_by_event_name::rnd_next(void)
+{
+ PFS_user *user;
+ PFS_transaction_class *transaction_class;
+ bool has_more_user= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_user;
+ m_pos.next_user())
+ {
+ user= global_user_container.get(m_pos.m_index_1, & has_more_user);
+ if (user != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(user, transaction_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_ets_by_user_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_user *user;
+ PFS_transaction_class *transaction_class;
+
+ set_position(pos);
+
+ user= global_user_container.get(m_pos.m_index_1);
+ if (user != NULL)
+ {
+ transaction_class= find_transaction_class(m_pos.m_index_2);
+ if (transaction_class)
+ {
+ make_row(user, transaction_class);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_ets_by_user_by_event_name
+::make_row(PFS_user *user, PFS_transaction_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ user->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_user.make_row(user))
+ return;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_transaction_visitor visitor(klass);
+ PFS_connection_iterator::visit_user(user,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
+
+ if (! user->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(m_normalizer, & visitor.m_stat);
+}
+
+int table_ets_by_user_by_event_name
+::read_row_values(TABLE *table, unsigned char *buf, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* USER */
+ m_row.m_user.set_field(f);
+ break;
+ case 1: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default:
+ /**
+ COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ m_row.m_stat.set_field(f->field_index-2, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_ets_by_user_by_event_name.h b/storage/perfschema/table_ets_by_user_by_event_name.h
new file mode 100644
index 00000000000..c3a1d0b5c0a
--- /dev/null
+++ b/storage/perfschema/table_ets_by_user_by_event_name.h
@@ -0,0 +1,134 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_ETS_BY_USER_BY_EVENT_NAME_H
+#define TABLE_ETS_BY_USER_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_ets_by_user_by_event_name.h
+ Table EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_user.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME.
+*/
+struct row_ets_by_user_by_event_name
+{
+ /** Column USER */
+ PFS_user_row m_user;
+ /** Column EVENT_NAME */
+ PFS_event_name_row m_event_name;
+ /**
+ Columns COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ PFS_transaction_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME.
+ Index 1 on user (0 based)
+ Index 2 on transaction class (1 based)
+*/
+struct pos_ets_by_user_by_event_name
+: public PFS_double_index
+{
+ pos_ets_by_user_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_user(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME. */
+class table_ets_by_user_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_ets_by_user_by_event_name();
+
+public:
+ ~table_ets_by_user_by_event_name()
+ {}
+
+protected:
+ void make_row(PFS_user *user, PFS_transaction_class *klass);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_ets_by_user_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_ets_by_user_by_event_name m_pos;
+ /** Next position. */
+ pos_ets_by_user_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_ets_global_by_event_name.cc b/storage/perfschema/table_ets_global_by_event_name.cc
new file mode 100644
index 00000000000..6c13871a746
--- /dev/null
+++ b/storage/perfschema/table_ets_global_by_event_name.cc
@@ -0,0 +1,200 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_ets_global_by_event_name.cc
+ Table EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_ets_global_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_instr.h"
+#include "pfs_timer.h"
+#include "pfs_visitor.h"
+#include "field.h"
+
+THR_LOCK table_ets_global_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_ets_global_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_summary_global_by_event_name") },
+ &pfs_truncatable_acl,
+ table_ets_global_by_event_name::create,
+ NULL, /* write_row */
+ table_ets_global_by_event_name::delete_all_rows,
+ table_ets_global_by_event_name::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_summary_global_by_event_name("
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_STAR BIGINT unsigned not null,"
+ "SUM_TIMER_WAIT BIGINT unsigned not null,"
+ "MIN_TIMER_WAIT BIGINT unsigned not null,"
+ "AVG_TIMER_WAIT BIGINT unsigned not null,"
+ "MAX_TIMER_WAIT BIGINT unsigned not null,"
+ "COUNT_READ_WRITE BIGINT unsigned not null,"
+ "SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
+ "COUNT_READ_ONLY BIGINT unsigned not null,"
+ "SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
+ "MAX_TIMER_READ_ONLY BIGINT unsigned not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_ets_global_by_event_name::create(void)
+{
+ return new table_ets_global_by_event_name();
+}
+
+int
+table_ets_global_by_event_name::delete_all_rows(void)
+{
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ reset_events_transactions_by_user();
+ reset_events_transactions_by_host();
+ reset_events_transactions_global();
+ return 0;
+}
+
+ha_rows
+table_ets_global_by_event_name::get_row_count(void)
+{
+ return transaction_class_max;
+}
+
+table_ets_global_by_event_name::table_ets_global_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(1), m_next_pos(1)
+{}
+
+void table_ets_global_by_event_name::reset_position(void)
+{
+ m_pos= 1;
+ m_next_pos= 1;
+}
+
+int table_ets_global_by_event_name::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_ets_global_by_event_name::rnd_next(void)
+{
+ PFS_transaction_class *transaction_class;
+
+ m_pos.set_at(&m_next_pos);
+
+ transaction_class= find_transaction_class(m_pos.m_index);
+ if (transaction_class)
+ {
+ make_row(transaction_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_ets_global_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_transaction_class *transaction_class;
+
+ set_position(pos);
+
+ transaction_class=find_transaction_class(m_pos.m_index);
+ if (transaction_class)
+ {
+ make_row(transaction_class);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+
+void table_ets_global_by_event_name
+::make_row(PFS_transaction_class *klass)
+{
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_transaction_visitor visitor(klass);
+ PFS_connection_iterator::visit_global(true, /* hosts */
+ false, /* users */
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
+
+ m_row.m_stat.set(m_normalizer, & visitor.m_stat);
+ m_row_exists= true;
+}
+
+int table_ets_global_by_event_name
+::read_row_values(TABLE *table, unsigned char *, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 0);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default:
+ /**
+ Columns COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ m_row.m_stat.set_field(f->field_index - 1, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_ets_global_by_event_name.h b/storage/perfschema/table_ets_global_by_event_name.h
new file mode 100644
index 00000000000..47c8828cb47
--- /dev/null
+++ b/storage/perfschema/table_ets_global_by_event_name.h
@@ -0,0 +1,105 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_ETS_GLOBAL_BY_EVENT_NAME_H
+#define TABLE_ETS_GLOBAL_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_ets_global_by_event_name.h
+ Table EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME.
+*/
+struct row_ets_global_by_event_name
+{
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /**
+ Columns COUNT_STAR, SUM/MIN/AVG/MAX_TIMER_WAIT,
+ COUNT_READ_WRITE, SUM/MIN/AVG/MAX_TIMER_READ_WRITE,
+ COUNT_READ_ONLY, SUM/MIN/AVG/MAX_TIMER_READ_ONLY
+ */
+ PFS_transaction_stat_row m_stat;
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_SUMMARY_GLOBAL_BY_EVENT_NAME. */
+class table_ets_global_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_ets_global_by_event_name();
+
+public:
+ ~table_ets_global_by_event_name()
+ {}
+
+protected:
+ void make_row(PFS_transaction_class *klass);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_ets_global_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_events_stages.cc b/storage/perfschema/table_events_stages.cc
index 95e7f187d24..cd6c79df36c 100644
--- a/storage/perfschema/table_events_stages.cc
+++ b/storage/perfschema/table_events_stages.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2018, 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, version 2.0,
@@ -26,12 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_events_stages.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
#include "pfs_events_stages.h"
#include "pfs_timer.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_events_stages_current::m_table_lock;
@@ -40,11 +42,10 @@ table_events_stages_current::m_share=
{
{ C_STRING_WITH_LEN("events_stages_current") },
&pfs_truncatable_acl,
- &table_events_stages_current::create,
+ table_events_stages_current::create,
NULL, /* write_row */
- &table_events_stages_current::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_stages_current::delete_all_rows,
+ table_events_stages_current::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_current("
@@ -56,8 +57,11 @@ table_events_stages_current::m_share=
"TIMER_START BIGINT unsigned,"
"TIMER_END BIGINT unsigned,"
"TIMER_WAIT BIGINT unsigned,"
+ "WORK_COMPLETED BIGINT unsigned,"
+ "WORK_ESTIMATED BIGINT unsigned,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'))") }
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'))") },
+ false /* perpetual */
};
THR_LOCK table_events_stages_history::m_table_lock;
@@ -67,11 +71,10 @@ table_events_stages_history::m_share=
{
{ C_STRING_WITH_LEN("events_stages_history") },
&pfs_truncatable_acl,
- &table_events_stages_history::create,
+ table_events_stages_history::create,
NULL, /* write_row */
- &table_events_stages_history::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_stages_history::delete_all_rows,
+ table_events_stages_history::get_row_count,
sizeof(pos_events_stages_history), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_history("
@@ -83,8 +86,11 @@ table_events_stages_history::m_share=
"TIMER_START BIGINT unsigned,"
"TIMER_END BIGINT unsigned,"
"TIMER_WAIT BIGINT unsigned,"
+ "WORK_COMPLETED BIGINT unsigned,"
+ "WORK_ESTIMATED BIGINT unsigned,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'))") }
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'))") },
+ false /* perpetual */
};
THR_LOCK table_events_stages_history_long::m_table_lock;
@@ -94,11 +100,10 @@ table_events_stages_history_long::m_share=
{
{ C_STRING_WITH_LEN("events_stages_history_long") },
&pfs_truncatable_acl,
- &table_events_stages_history_long::create,
+ table_events_stages_history_long::create,
NULL, /* write_row */
- &table_events_stages_history_long::delete_all_rows,
- NULL, /* get_row_count */
- 10000, /* records */
+ table_events_stages_history_long::delete_all_rows,
+ table_events_stages_history_long::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_stages_history_long("
@@ -110,8 +115,11 @@ table_events_stages_history_long::m_share=
"TIMER_START BIGINT unsigned,"
"TIMER_END BIGINT unsigned,"
"TIMER_WAIT BIGINT unsigned,"
+ "WORK_COMPLETED BIGINT unsigned,"
+ "WORK_ESTIMATED BIGINT unsigned,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'))") }
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'))") },
+ false /* perpetual */
};
table_events_stages_common::table_events_stages_common
@@ -126,8 +134,6 @@ table_events_stages_common::table_events_stages_common
*/
void table_events_stages_common::make_row(PFS_events_stages *stage)
{
- const char *base;
- const char *safe_source_file;
ulonglong timer_end;
m_row_exists= false;
@@ -158,15 +164,19 @@ void table_events_stages_common::make_row(PFS_events_stages *stage)
m_row.m_name= klass->m_name;
m_row.m_name_length= klass->m_name_length;
- safe_source_file= stage->m_source_file;
- if (unlikely(safe_source_file == NULL))
- return;
+ /* Disable source file and line to avoid stale __FILE__ pointers. */
+ m_row.m_source_length= 0;
- base= base_name(safe_source_file);
- m_row.m_source_length= (uint)my_snprintf(m_row.m_source, sizeof(m_row.m_source),
- "%s:%d", base, stage->m_source_line);
- if (m_row.m_source_length > sizeof(m_row.m_source))
- m_row.m_source_length= sizeof(m_row.m_source);
+ if (klass->is_progress())
+ {
+ m_row.m_progress= true;
+ m_row.m_work_completed= stage->m_progress.m_work_completed;
+ m_row.m_work_estimated= stage->m_progress.m_work_estimated;
+ }
+ else
+ {
+ m_row.m_progress= false;
+ }
m_row_exists= true;
return;
@@ -183,8 +193,9 @@ int table_events_stages_common::read_row_values(TABLE *table,
return HA_ERR_RECORD_DELETED;
/* Set the null bits */
- DBUG_ASSERT(table->s->null_bytes == 1);
+ DBUG_ASSERT(table->s->null_bytes == 2);
buf[0]= 0;
+ buf[1]= 0;
for (; (f= *fields) ; fields++)
{
@@ -228,13 +239,25 @@ int table_events_stages_common::read_row_values(TABLE *table,
else
f->set_null();
break;
- case 8: /* NESTING_EVENT_ID */
+ case 8: /* WORK_COMPLETED */
+ if (m_row.m_progress)
+ set_field_ulonglong(f, m_row.m_work_completed);
+ else
+ f->set_null();
+ break;
+ case 9: /* WORK_ESTIMATED */
+ if (m_row.m_progress)
+ set_field_ulonglong(f, m_row.m_work_estimated);
+ else
+ f->set_null();
+ break;
+ case 10: /* NESTING_EVENT_ID */
if (m_row.m_nesting_event_id != 0)
set_field_ulonglong(f, m_row.m_nesting_event_id);
else
f->set_null();
break;
- case 9: /* NESTING_EVENT_TYPE */
+ case 11: /* NESTING_EVENT_TYPE */
if (m_row.m_nesting_event_id != 0)
set_field_enum(f, m_row.m_nesting_event_type);
else
@@ -275,20 +298,12 @@ int table_events_stages_current::rnd_next(void)
PFS_thread *pfs_thread;
PFS_events_stages *stage;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < thread_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_thread_iterator it= global_thread_container.iterate(m_pos.m_index);
+ pfs_thread= it.scan_next(& m_pos.m_index);
+ if (pfs_thread != NULL)
{
- pfs_thread= &thread_array[m_pos.m_index];
-
- if (! pfs_thread->m_lock.is_populated())
- {
- /* This thread does not exist */
- continue;
- }
-
stage= &pfs_thread->m_stage_current;
-
make_row(stage);
m_next_pos.set_after(&m_pos);
return 0;
@@ -303,15 +318,16 @@ int table_events_stages_current::rnd_pos(const void *pos)
PFS_events_stages *stage;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < thread_max);
- pfs_thread= &thread_array[m_pos.m_index];
- if (! pfs_thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
+ pfs_thread= global_thread_container.get(m_pos.m_index);
+ if (pfs_thread != NULL)
+ {
+ stage= &pfs_thread->m_stage_current;
+ make_row(stage);
+ return 0;
+ }
- stage= &pfs_thread->m_stage_current;
- make_row(stage);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
int table_events_stages_current::delete_all_rows(void)
@@ -320,6 +336,12 @@ int table_events_stages_current::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_stages_current::get_row_count(void)
+{
+ return global_thread_container.get_row_count();
+}
+
PFS_engine_table* table_events_stages_history::create(void)
{
return new table_events_stages_history();
@@ -346,43 +368,40 @@ int table_events_stages_history::rnd_next(void)
{
PFS_thread *pfs_thread;
PFS_events_stages *stage;
+ bool has_more_thread= true;
if (events_stages_history_per_thread == 0)
return HA_ERR_END_OF_FILE;
for (m_pos.set_at(&m_next_pos);
- m_pos.m_index_1 < thread_max;
+ has_more_thread;
m_pos.next_thread())
{
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
- {
- /* This thread does not exist */
- continue;
- }
-
- if (m_pos.m_index_2 >= events_stages_history_per_thread)
+ pfs_thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (pfs_thread != NULL)
{
- /* This thread does not have more (full) history */
- continue;
- }
+ if (m_pos.m_index_2 >= events_stages_history_per_thread)
+ {
+ /* This thread does not have more (full) history */
+ continue;
+ }
- if ( ! pfs_thread->m_stages_history_full &&
- (m_pos.m_index_2 >= pfs_thread->m_stages_history_index))
- {
- /* This thread does not have more (not full) history */
- continue;
- }
+ if ( ! pfs_thread->m_stages_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_stages_history_index))
+ {
+ /* This thread does not have more (not full) history */
+ continue;
+ }
- stage= &pfs_thread->m_stages_history[m_pos.m_index_2];
+ stage= &pfs_thread->m_stages_history[m_pos.m_index_2];
- if (stage->m_class != NULL)
- {
- make_row(stage);
- /* Next iteration, look for the next history in this thread */
- m_next_pos.set_after(&m_pos);
- return 0;
+ if (stage->m_class != NULL)
+ {
+ make_row(stage);
+ /* Next iteration, look for the next history in this thread */
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
}
@@ -396,25 +415,26 @@ int table_events_stages_history::rnd_pos(const void *pos)
DBUG_ASSERT(events_stages_history_per_thread != 0);
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
DBUG_ASSERT(m_pos.m_index_2 < events_stages_history_per_thread);
- if ( ! pfs_thread->m_stages_history_full &&
- (m_pos.m_index_2 >= pfs_thread->m_stages_history_index))
- return HA_ERR_RECORD_DELETED;
+ pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ if (pfs_thread != NULL)
+ {
+ if ( ! pfs_thread->m_stages_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_stages_history_index))
+ return HA_ERR_RECORD_DELETED;
- stage= &pfs_thread->m_stages_history[m_pos.m_index_2];
+ stage= &pfs_thread->m_stages_history[m_pos.m_index_2];
- if (stage->m_class == NULL)
- return HA_ERR_RECORD_DELETED;
+ if (stage->m_class != NULL)
+ {
+ make_row(stage);
+ return 0;
+ }
+ }
- make_row(stage);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
int table_events_stages_history::delete_all_rows(void)
@@ -423,6 +443,12 @@ int table_events_stages_history::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_stages_history::get_row_count(void)
+{
+ return events_stages_history_per_thread * global_thread_container.get_row_count();
+}
+
PFS_engine_table* table_events_stages_history_long::create(void)
{
return new table_events_stages_history_long();
@@ -456,7 +482,7 @@ int table_events_stages_history_long::rnd_next(void)
if (events_stages_history_long_full)
limit= events_stages_history_long_size;
else
- limit= events_stages_history_long_index % events_stages_history_long_size;
+ limit= events_stages_history_long_index.m_u32 % events_stages_history_long_size;
for (m_pos.set_at(&m_next_pos); m_pos.m_index < limit; m_pos.next())
{
@@ -487,7 +513,7 @@ int table_events_stages_history_long::rnd_pos(const void *pos)
if (events_stages_history_long_full)
limit= events_stages_history_long_size;
else
- limit= events_stages_history_long_index % events_stages_history_long_size;
+ limit= events_stages_history_long_index.m_u32 % events_stages_history_long_size;
if (m_pos.m_index > limit)
return HA_ERR_RECORD_DELETED;
@@ -507,3 +533,9 @@ int table_events_stages_history_long::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_stages_history_long::get_row_count(void)
+{
+ return events_stages_history_long_size;
+}
+
diff --git a/storage/perfschema/table_events_stages.h b/storage/perfschema/table_events_stages.h
index ae8760cd953..16e3fc9651a 100644
--- a/storage/perfschema/table_events_stages.h
+++ b/storage/perfschema/table_events_stages.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -66,6 +66,11 @@ struct row_events_stages
char m_source[COL_SOURCE_SIZE];
/** Length in bytes of @c m_source. */
uint m_source_length;
+ bool m_progress;
+ /** Column WORK_COMPLETED. */
+ ulonglong m_work_completed;
+ /** Column WORK_ESTIMATED. */
+ ulonglong m_work_estimated;
};
/** Position of a cursor on PERFORMANCE_SCHEMA.EVENTS_STAGES_HISTORY. */
@@ -121,6 +126,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
@@ -155,6 +161,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
@@ -186,6 +193,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_events_statements.cc b/storage/perfschema/table_events_statements.cc
index 16fc58d626d..c3667f061fd 100644
--- a/storage/perfschema/table_events_statements.cc
+++ b/storage/perfschema/table_events_statements.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2018, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_events_statements.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
@@ -35,6 +35,7 @@
#include "sp_head.h" /* TYPE_ENUM_FUNCTION, ... */
#include "table_helper.h"
#include "my_md5.h"
+#include "pfs_buffer_container.h"
THR_LOCK table_events_statements_current::m_table_lock;
@@ -43,11 +44,10 @@ table_events_statements_current::m_share=
{
{ C_STRING_WITH_LEN("events_statements_current") },
&pfs_truncatable_acl,
- &table_events_statements_current::create,
+ table_events_statements_current::create,
NULL, /* write_row */
- &table_events_statements_current::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_statements_current::delete_all_rows,
+ table_events_statements_current::get_row_count,
sizeof(pos_events_statements_current), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_current("
@@ -90,7 +90,9 @@ table_events_statements_current::m_share=
"NO_INDEX_USED BIGINT unsigned not null,"
"NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'))") }
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'),"
+ "NESTING_EVENT_LEVEL INT)") },
+ false /* perpetual */
};
THR_LOCK table_events_statements_history::m_table_lock;
@@ -100,11 +102,10 @@ table_events_statements_history::m_share=
{
{ C_STRING_WITH_LEN("events_statements_history") },
&pfs_truncatable_acl,
- &table_events_statements_history::create,
+ table_events_statements_history::create,
NULL, /* write_row */
- &table_events_statements_history::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_statements_history::delete_all_rows,
+ table_events_statements_history::get_row_count,
sizeof(pos_events_statements_history), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_history("
@@ -147,7 +148,9 @@ table_events_statements_history::m_share=
"NO_INDEX_USED BIGINT unsigned not null,"
"NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'))") }
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'),"
+ "NESTING_EVENT_LEVEL INT)") },
+ false /* perpetual */
};
THR_LOCK table_events_statements_history_long::m_table_lock;
@@ -157,11 +160,10 @@ table_events_statements_history_long::m_share=
{
{ C_STRING_WITH_LEN("events_statements_history_long") },
&pfs_truncatable_acl,
- &table_events_statements_history_long::create,
+ table_events_statements_history_long::create,
NULL, /* write_row */
- &table_events_statements_history_long::delete_all_rows,
- NULL, /* get_row_count */
- 10000, /* records */
+ table_events_statements_history_long::delete_all_rows,
+ table_events_statements_history_long::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_statements_history_long("
@@ -204,7 +206,9 @@ table_events_statements_history_long::m_share=
"NO_INDEX_USED BIGINT unsigned not null,"
"NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'))") }
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'),"
+ "NESTING_EVENT_LEVEL INT)") },
+ false /* perpetual */
};
table_events_statements_common::table_events_statements_common
@@ -220,8 +224,6 @@ table_events_statements_common::table_events_statements_common
void table_events_statements_common::make_row_part_1(PFS_events_statements *statement,
sql_digest_storage *digest)
{
- const char *base;
- const char *safe_source_file;
ulonglong timer_end;
m_row_exists= false;
@@ -236,6 +238,7 @@ void table_events_statements_common::make_row_part_1(PFS_events_statements *stat
m_row.m_end_event_id= statement->m_end_event_id;
m_row.m_nesting_event_id= statement->m_nesting_event_id;
m_row.m_nesting_event_type= statement->m_nesting_event_type;
+ m_row.m_nesting_event_level= statement->m_nesting_event_level;
if (m_row.m_end_event_id == 0)
{
@@ -287,15 +290,18 @@ void table_events_statements_common::make_row_part_1(PFS_events_statements *stat
if (m_row.m_current_schema_name_length > 0)
memcpy(m_row.m_current_schema_name, statement->m_current_schema_name, m_row.m_current_schema_name_length);
- safe_source_file= statement->m_source_file;
- if (unlikely(safe_source_file == NULL))
- return;
+ m_row.m_object_type= statement->m_sp_type;
+
+ m_row.m_schema_name_length= statement->m_schema_name_length;
+ if (m_row.m_schema_name_length > 0)
+ memcpy(m_row.m_schema_name, statement->m_schema_name, m_row.m_schema_name_length);
- base= base_name(safe_source_file);
- m_row.m_source_length= (uint)my_snprintf(m_row.m_source, sizeof(m_row.m_source),
- "%s:%d", base, statement->m_source_line);
- if (m_row.m_source_length > sizeof(m_row.m_source))
- m_row.m_source_length= sizeof(m_row.m_source);
+ m_row.m_object_name_length= statement->m_object_name_length;
+ if (m_row.m_object_name_length > 0)
+ memcpy(m_row.m_object_name, statement->m_object_name, m_row.m_object_name_length);
+
+ /* Disable source file and line to avoid stale __FILE__ pointers. */
+ m_row.m_source_length= 0;
memcpy(m_row.m_message_text, statement->m_message_text, sizeof(m_row.m_message_text));
m_row.m_sql_errno= statement->m_sql_errno;
@@ -319,6 +325,7 @@ void table_events_statements_common::make_row_part_1(PFS_events_statements *stat
m_row.m_sort_scan= statement->m_sort_scan;
m_row.m_no_index_used= statement->m_no_index_used;
m_row.m_no_good_index_used= statement->m_no_good_index_used;
+
/*
Making a copy of digest storage.
*/
@@ -328,7 +335,6 @@ void table_events_statements_common::make_row_part_1(PFS_events_statements *stat
return;
}
-
void table_events_statements_common::make_row_part_2(const sql_digest_storage *digest)
{
/*
@@ -445,18 +451,30 @@ int table_events_statements_common::read_row_values(TABLE *table,
break;
case 12: /* CURRENT_SCHEMA */
if (m_row.m_current_schema_name_length)
- set_field_varchar_utf8(f, m_row.m_current_schema_name, m_row.m_current_schema_name_length);
+ set_field_varchar_utf8(f, m_row.m_current_schema_name,
+ m_row.m_current_schema_name_length);
else
f->set_null();
break;
- case 13: /* OBJECT_TYPE */
- f->set_null();
+ case 13: /* OBJECT_TYPE */
+ if (m_row.m_object_name_length > 0)
+ set_field_object_type(f, m_row.m_object_type);
+ else
+ f->set_null();
break;
case 14: /* OBJECT_SCHEMA */
- f->set_null();
+ if (m_row.m_schema_name_length)
+ set_field_varchar_utf8(f, m_row.m_schema_name,
+ m_row.m_schema_name_length);
+ else
+ f->set_null();
break;
case 15: /* OBJECT_NAME */
- f->set_null();
+ if (m_row.m_object_name_length)
+ set_field_varchar_utf8(f, m_row.m_object_name,
+ m_row.m_object_name_length);
+ else
+ f->set_null();
break;
case 16: /* OBJECT_INSTANCE_BEGIN */
f->set_null();
@@ -471,7 +489,7 @@ int table_events_statements_common::read_row_values(TABLE *table,
f->set_null();
break;
case 19: /* MESSAGE_TEXT */
- len= (uint)strlen(m_row.m_message_text);
+ len= static_cast<uint>(strlen(m_row.m_message_text));
if (len)
set_field_varchar_utf8(f, m_row.m_message_text, len);
else
@@ -543,6 +561,9 @@ int table_events_statements_common::read_row_values(TABLE *table,
else
f->set_null();
break;
+ case 40: /* NESTING_EVENT_LEVEL */
+ set_field_ulong(f, m_row.m_nesting_event_level);
+ break;
default:
DBUG_ASSERT(false);
}
@@ -577,39 +598,36 @@ int table_events_statements_current::rnd_next(void)
{
PFS_thread *pfs_thread;
PFS_events_statements *statement;
+ bool has_more_thread= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.m_index_1 < thread_max;
+ has_more_thread;
m_pos.next_thread())
{
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
+ pfs_thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (pfs_thread != NULL)
{
- /* This thread does not exist */
- continue;
- }
-
- uint safe_events_statements_count= pfs_thread->m_events_statements_count;
+ uint safe_events_statements_count= pfs_thread->m_events_statements_count;
- if (safe_events_statements_count == 0)
- {
- /* Display the last top level statement, when completed */
- if (m_pos.m_index_2 >= 1)
- continue;
- }
- else
- {
- /* Display all pending statements, when in progress */
- if (m_pos.m_index_2 >= safe_events_statements_count)
- continue;
- }
+ if (safe_events_statements_count == 0)
+ {
+ /* Display the last top level statement, when completed */
+ if (m_pos.m_index_2 >= 1)
+ continue;
+ }
+ else
+ {
+ /* Display all pending statements, when in progress */
+ if (m_pos.m_index_2 >= safe_events_statements_count)
+ continue;
+ }
- statement= &pfs_thread->m_statement_stack[m_pos.m_index_2];
+ statement= &pfs_thread->m_statement_stack[m_pos.m_index_2];
- make_row(pfs_thread, statement);
- m_next_pos.set_after(&m_pos);
- return 0;
+ make_row(pfs_thread, statement);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
return HA_ERR_END_OF_FILE;
@@ -621,44 +639,45 @@ int table_events_statements_current::rnd_pos(const void *pos)
PFS_events_statements *statement;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- uint safe_events_statements_count= pfs_thread->m_events_statements_count;
- if (safe_events_statements_count == 0)
- {
- /* Display the last top level statement, when completed */
- if (m_pos.m_index_2 >= 1)
- return HA_ERR_RECORD_DELETED;
- }
- else
+ pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ if (pfs_thread != NULL)
{
- /* Display all pending statements, when in progress */
- if (m_pos.m_index_2 >= safe_events_statements_count)
- return HA_ERR_RECORD_DELETED;
- }
+ uint safe_events_statements_count= pfs_thread->m_events_statements_count;
- DBUG_ASSERT(m_pos.m_index_2 < statement_stack_max);
+ if (safe_events_statements_count == 0)
+ {
+ /* Display the last top level statement, when completed */
+ if (m_pos.m_index_2 >= 1)
+ return HA_ERR_RECORD_DELETED;
+ }
+ else
+ {
+ /* Display all pending statements, when in progress */
+ if (m_pos.m_index_2 >= safe_events_statements_count)
+ return HA_ERR_RECORD_DELETED;
+ }
- statement= &pfs_thread->m_statement_stack[m_pos.m_index_2];
+ DBUG_ASSERT(m_pos.m_index_2 < statement_stack_max);
- if (statement->m_class == NULL)
- return HA_ERR_RECORD_DELETED;
+ statement= &pfs_thread->m_statement_stack[m_pos.m_index_2];
- make_row(pfs_thread, statement);
- return 0;
+ if (statement->m_class != NULL)
+ {
+ make_row(pfs_thread, statement);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
}
void table_events_statements_current::make_row(PFS_thread *pfs_thread,
PFS_events_statements *statement)
{
sql_digest_storage digest;
- pfs_lock lock;
- pfs_lock stmt_lock;
+ pfs_optimistic_state lock;
+ pfs_optimistic_state stmt_lock;
digest.reset(m_token_array, MAX_DIGEST_STORAGE_SIZE);
/* Protect this reader against thread termination. */
@@ -684,6 +703,12 @@ int table_events_statements_current::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_statements_current::get_row_count(void)
+{
+ return global_thread_container.get_row_count() * statement_stack_max;
+}
+
PFS_engine_table* table_events_statements_history::create(void)
{
return new table_events_statements_history();
@@ -710,43 +735,40 @@ int table_events_statements_history::rnd_next(void)
{
PFS_thread *pfs_thread;
PFS_events_statements *statement;
+ bool has_more_thread= true;
if (events_statements_history_per_thread == 0)
return HA_ERR_END_OF_FILE;
for (m_pos.set_at(&m_next_pos);
- m_pos.m_index_1 < thread_max;
+ has_more_thread;
m_pos.next_thread())
{
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
- {
- /* This thread does not exist */
- continue;
- }
-
- if (m_pos.m_index_2 >= events_statements_history_per_thread)
+ pfs_thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (pfs_thread != NULL)
{
- /* This thread does not have more (full) history */
- continue;
- }
+ if (m_pos.m_index_2 >= events_statements_history_per_thread)
+ {
+ /* This thread does not have more (full) history */
+ continue;
+ }
- if ( ! pfs_thread->m_statements_history_full &&
- (m_pos.m_index_2 >= pfs_thread->m_statements_history_index))
- {
- /* This thread does not have more (not full) history */
- continue;
- }
+ if ( ! pfs_thread->m_statements_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_statements_history_index))
+ {
+ /* This thread does not have more (not full) history */
+ continue;
+ }
- statement= &pfs_thread->m_statements_history[m_pos.m_index_2];
+ statement= &pfs_thread->m_statements_history[m_pos.m_index_2];
- if (statement->m_class != NULL)
- {
- make_row(pfs_thread, statement);
- /* Next iteration, look for the next history in this thread */
- m_next_pos.set_after(&m_pos);
- return 0;
+ if (statement->m_class != NULL)
+ {
+ make_row(pfs_thread, statement);
+ /* Next iteration, look for the next history in this thread */
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
}
@@ -760,32 +782,32 @@ int table_events_statements_history::rnd_pos(const void *pos)
DBUG_ASSERT(events_statements_history_per_thread != 0);
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- pfs_thread= &thread_array[m_pos.m_index_1];
- if (! pfs_thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
- DBUG_ASSERT(m_pos.m_index_2 < events_statements_history_per_thread);
-
- if ( ! pfs_thread->m_statements_history_full &&
- (m_pos.m_index_2 >= pfs_thread->m_statements_history_index))
- return HA_ERR_RECORD_DELETED;
+ pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ if (pfs_thread != NULL)
+ {
+ DBUG_ASSERT(m_pos.m_index_2 < events_statements_history_per_thread);
- statement= &pfs_thread->m_statements_history[m_pos.m_index_2];
+ if ( ! pfs_thread->m_statements_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_statements_history_index))
+ return HA_ERR_RECORD_DELETED;
- if (statement->m_class == NULL)
- return HA_ERR_RECORD_DELETED;
+ statement= &pfs_thread->m_statements_history[m_pos.m_index_2];
+ if (statement->m_class != NULL)
+ {
+ make_row(pfs_thread, statement);
+ return 0;
+ }
+ }
- make_row(pfs_thread, statement);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
void table_events_statements_history::make_row(PFS_thread *pfs_thread,
PFS_events_statements *statement)
{
sql_digest_storage digest;
- pfs_lock lock;
+ pfs_optimistic_state lock;
digest.reset(m_token_array, MAX_DIGEST_STORAGE_SIZE);
/* Protect this reader against thread termination. */
@@ -799,15 +821,22 @@ void table_events_statements_history::make_row(PFS_thread *pfs_thread,
return;
}
table_events_statements_common::make_row_part_2(&digest);
- return;
+ return;
}
+
int table_events_statements_history::delete_all_rows(void)
{
reset_events_statements_history();
return 0;
}
+ha_rows
+table_events_statements_history::get_row_count(void)
+{
+ return events_statements_history_per_thread * global_thread_container.get_row_count();
+}
+
PFS_engine_table* table_events_statements_history_long::create(void)
{
return new table_events_statements_history_long();
@@ -833,15 +862,15 @@ int table_events_statements_history_long::rnd_init(bool scan)
int table_events_statements_history_long::rnd_next(void)
{
PFS_events_statements *statement;
- size_t limit;
+ uint limit;
if (events_statements_history_long_size == 0)
return HA_ERR_END_OF_FILE;
if (events_statements_history_long_full)
- limit= events_statements_history_long_size;
+ limit= static_cast<uint>(events_statements_history_long_size);
else
- limit= events_statements_history_long_index % events_statements_history_long_size;
+ limit= events_statements_history_long_index.m_u32 % events_statements_history_long_size;
for (m_pos.set_at(&m_next_pos); m_pos.m_index < limit; m_pos.next())
{
@@ -862,7 +891,7 @@ int table_events_statements_history_long::rnd_next(void)
int table_events_statements_history_long::rnd_pos(const void *pos)
{
PFS_events_statements *statement;
- size_t limit;
+ uint limit;
if (events_statements_history_long_size == 0)
return HA_ERR_RECORD_DELETED;
@@ -870,9 +899,9 @@ int table_events_statements_history_long::rnd_pos(const void *pos)
set_position(pos);
if (events_statements_history_long_full)
- limit= events_statements_history_long_size;
+ limit= static_cast<uint>(events_statements_history_long_size);
else
- limit= events_statements_history_long_index % events_statements_history_long_size;
+ limit= events_statements_history_long_index.m_u32 % events_statements_history_long_size;
if (m_pos.m_index >= limit)
return HA_ERR_RECORD_DELETED;
@@ -903,3 +932,9 @@ int table_events_statements_history_long::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_statements_history_long::get_row_count(void)
+{
+ return events_statements_history_long_size;
+}
+
diff --git a/storage/perfschema/table_events_statements.h b/storage/perfschema/table_events_statements.h
index cec28628f3e..02127cadecc 100644
--- a/storage/perfschema/table_events_statements.h
+++ b/storage/perfschema/table_events_statements.h
@@ -53,6 +53,8 @@ struct row_events_statements
ulonglong m_nesting_event_id;
/** Column NESTING_EVENT_TYPE. */
enum_event_type m_nesting_event_type;
+ /** Column NESTING_EVENT_LEVEL. */
+ uint m_nesting_event_level;
/** Column EVENT_NAME. */
const char *m_name;
/** Length in bytes of @c m_name. */
@@ -73,11 +75,23 @@ struct row_events_statements
String m_sqltext;
/** Column DIGEST and DIGEST_TEXT. */
PFS_digest_row m_digest;
- /** Column CURRENT_SCHEMA. */
+ /** Column CURRENT_SCHEMA. */
char m_current_schema_name[NAME_LEN];
/** Length in bytes of @c m_current_schema_name. */
uint m_current_schema_name_length;
+ /** Column OBJECT_TYPE. */
+ enum_object_type m_object_type;
+ /** Column OBJECT_SCHEMA. */
+ char m_schema_name[NAME_LEN];
+ /** Length in bytes of @c m_schema_name. */
+ uint m_schema_name_length;
+ /** Column OBJECT_NAME. */
+ char m_object_name[NAME_LEN];
+ /** Length in bytes of @c m_object_name. */
+ uint m_object_name_length;
+
+
/** Column MESSAGE_TEXT. */
char m_message_text[MYSQL_ERRMSG_SIZE+1];
/** Column MYSQL_ERRNO. */
@@ -199,6 +213,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
@@ -235,6 +250,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
@@ -268,6 +284,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_events_transactions.cc b/storage/perfschema/table_events_transactions.cc
new file mode 100644
index 00000000000..1d717979a2f
--- /dev/null
+++ b/storage/perfschema/table_events_transactions.cc
@@ -0,0 +1,718 @@
+/* Copyright (c) 2010, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_events_transactions.cc
+ Table EVENTS_TRANSACTIONS_xxx (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "table_events_transactions.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_events_transactions.h"
+#include "pfs_timer.h"
+#include "table_helper.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+//#include "xa.h"
+
+THR_LOCK table_events_transactions_current::m_table_lock;
+
+PFS_engine_table_share
+table_events_transactions_current::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_current") },
+ &pfs_truncatable_acl,
+ table_events_transactions_current::create,
+ NULL, /* write_row */
+ table_events_transactions_current::delete_all_rows,
+ table_events_transactions_current::get_row_count,
+ sizeof(PFS_simple_index), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_current("
+ "THREAD_ID BIGINT unsigned not null,"
+ "EVENT_ID BIGINT unsigned not null,"
+ "END_EVENT_ID BIGINT unsigned,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "STATE ENUM('ACTIVE', 'COMMITTED', 'ROLLED BACK'),"
+ "TRX_ID BIGINT unsigned,"
+ "GTID VARCHAR(64),"
+ "XID_FORMAT_ID INTEGER,"
+ "XID_GTRID VARCHAR(130),"
+ "XID_BQUAL VARCHAR(130),"
+ "XA_STATE VARCHAR(64),"
+ "SOURCE VARCHAR(64),"
+ "TIMER_START BIGINT unsigned,"
+ "TIMER_END BIGINT unsigned,"
+ "TIMER_WAIT BIGINT unsigned,"
+ "ACCESS_MODE ENUM('READ ONLY', 'READ WRITE'),"
+ "ISOLATION_LEVEL VARCHAR(64),"
+ "AUTOCOMMIT ENUM('YES','NO') not null,"
+ "NUMBER_OF_SAVEPOINTS BIGINT unsigned,"
+ "NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT unsigned,"
+ "NUMBER_OF_RELEASE_SAVEPOINT BIGINT unsigned,"
+ "OBJECT_INSTANCE_BEGIN BIGINT unsigned,"
+ "NESTING_EVENT_ID BIGINT unsigned,"
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'))")},
+ false /* perpetual */
+};
+
+THR_LOCK table_events_transactions_history::m_table_lock;
+
+PFS_engine_table_share
+table_events_transactions_history::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_history") },
+ &pfs_truncatable_acl,
+ table_events_transactions_history::create,
+ NULL, /* write_row */
+ table_events_transactions_history::delete_all_rows,
+ table_events_transactions_history::get_row_count,
+ sizeof(pos_events_transactions_history), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_history("
+ "THREAD_ID BIGINT unsigned not null,"
+ "EVENT_ID BIGINT unsigned not null,"
+ "END_EVENT_ID BIGINT unsigned,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "STATE ENUM('ACTIVE', 'COMMITTED', 'ROLLED BACK'),"
+ "TRX_ID BIGINT unsigned,"
+ "GTID VARCHAR(64),"
+ "XID_FORMAT_ID INTEGER,"
+ "XID_GTRID VARCHAR(130),"
+ "XID_BQUAL VARCHAR(130),"
+ "XA_STATE VARCHAR(64),"
+ "SOURCE VARCHAR(64),"
+ "TIMER_START BIGINT unsigned,"
+ "TIMER_END BIGINT unsigned,"
+ "TIMER_WAIT BIGINT unsigned,"
+ "ACCESS_MODE ENUM('READ ONLY', 'READ WRITE'),"
+ "ISOLATION_LEVEL VARCHAR(64),"
+ "AUTOCOMMIT ENUM('YES','NO') not null,"
+ "NUMBER_OF_SAVEPOINTS BIGINT unsigned,"
+ "NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT unsigned,"
+ "NUMBER_OF_RELEASE_SAVEPOINT BIGINT unsigned,"
+ "OBJECT_INSTANCE_BEGIN BIGINT unsigned,"
+ "NESTING_EVENT_ID BIGINT unsigned,"
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'))")},
+ false /* perpetual */
+};
+
+THR_LOCK table_events_transactions_history_long::m_table_lock;
+
+PFS_engine_table_share
+table_events_transactions_history_long::m_share=
+{
+ { C_STRING_WITH_LEN("events_transactions_history_long") },
+ &pfs_truncatable_acl,
+ table_events_transactions_history_long::create,
+ NULL, /* write_row */
+ table_events_transactions_history_long::delete_all_rows,
+ table_events_transactions_history_long::get_row_count,
+ sizeof(PFS_simple_index), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE events_transactions_history_long("
+ "THREAD_ID BIGINT unsigned not null,"
+ "EVENT_ID BIGINT unsigned not null,"
+ "END_EVENT_ID BIGINT unsigned,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "STATE ENUM('ACTIVE', 'COMMITTED', 'ROLLED BACK'),"
+ "TRX_ID BIGINT unsigned,"
+ "GTID VARCHAR(64),"
+ "XID_FORMAT_ID INTEGER,"
+ "XID_GTRID VARCHAR(130),"
+ "XID_BQUAL VARCHAR(130),"
+ "XA_STATE VARCHAR(64),"
+ "SOURCE VARCHAR(64),"
+ "TIMER_START BIGINT unsigned,"
+ "TIMER_END BIGINT unsigned,"
+ "TIMER_WAIT BIGINT unsigned,"
+ "ACCESS_MODE ENUM('READ ONLY', 'READ WRITE'),"
+ "ISOLATION_LEVEL VARCHAR(64),"
+ "AUTOCOMMIT ENUM('YES','NO') not null,"
+ "NUMBER_OF_SAVEPOINTS BIGINT unsigned,"
+ "NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT unsigned,"
+ "NUMBER_OF_RELEASE_SAVEPOINT BIGINT unsigned,"
+ "OBJECT_INSTANCE_BEGIN BIGINT unsigned,"
+ "NESTING_EVENT_ID BIGINT unsigned,"
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'))")},
+ false /* perpetual */
+};
+
+table_events_transactions_common::table_events_transactions_common
+(const PFS_engine_table_share *share, void *pos)
+ : PFS_engine_table(share, pos),
+ m_row_exists(false)
+{}
+
+/**
+ Build a row.
+ @param transaction the transaction the cursor is reading
+*/
+void table_events_transactions_common::make_row(PFS_events_transactions *transaction)
+{
+ ulonglong timer_end;
+
+ m_row_exists= false;
+
+ PFS_transaction_class *unsafe= (PFS_transaction_class*) transaction->m_class;
+ PFS_transaction_class *klass= sanitize_transaction_class(unsafe);
+ if (unlikely(klass == NULL))
+ return;
+
+ m_row.m_thread_internal_id= transaction->m_thread_internal_id;
+ m_row.m_event_id= transaction->m_event_id;
+ m_row.m_end_event_id= transaction->m_end_event_id;
+ m_row.m_nesting_event_id= transaction->m_nesting_event_id;
+ m_row.m_nesting_event_type= transaction->m_nesting_event_type;
+
+ if (m_row.m_end_event_id == 0)
+ {
+ timer_end= get_timer_raw_value(transaction_timer);
+ }
+ else
+ {
+ timer_end= transaction->m_timer_end;
+ }
+
+ m_normalizer->to_pico(transaction->m_timer_start, timer_end,
+ &m_row.m_timer_start, &m_row.m_timer_end, &m_row.m_timer_wait);
+ m_row.m_name= klass->m_name;
+ m_row.m_name_length= klass->m_name_length;
+
+ /* Disable source file and line to avoid stale __FILE__ pointers. */
+ m_row.m_source_length= 0;
+
+ /* A GTID consists of the SID (source id) and GNO (transaction number).
+ The SID is stored in transaction->m_sid and the GNO is stored in
+ transaction->m_gtid_spec.gno.
+
+ On a master, the GTID is assigned when the transaction commit.
+ On a slave, the GTID is assigned before the transaction starts.
+ If GTID_MODE = OFF, all transactions have the special GTID
+ 'ANONYMOUS'.
+
+ Therefore, a transaction can be in three different states wrt GTIDs:
+ - Before the GTID has been assigned, the state is 'AUTOMATIC'.
+ On a master, this is the state until the transaction commits.
+ On a slave, this state does not appear.
+ - If GTID_MODE = ON, and a GTID is assigned, the GTID is a string
+ of the form 'UUID:NUMBER'.
+ - If GTID_MODE = OFF, and a GTID is assigned, the GTID is a string
+ of the form 'ANONYMOUS'.
+
+ The Gtid_specification contains the GNO, as well as a type code
+ that specifies which of the three modes is currently in effect.
+ Given a SID, it can generate the textual representation of the
+ GTID.
+ */
+ //rpl_sid *sid= &transaction->m_sid;
+ Gtid_specification *gtid_spec= &transaction->m_gtid_spec;
+ m_row.m_gtid_length= static_cast<uint>(gtid_spec->to_string(m_row.m_gtid));
+
+ m_row.m_xid= transaction->m_xid;
+ m_row.m_isolation_level= transaction->m_isolation_level;
+ m_row.m_read_only= transaction->m_read_only;
+ m_row.m_trxid= transaction->m_trxid;
+ m_row.m_state= transaction->m_state;
+ m_row.m_xa_state= transaction->m_xa_state;
+ m_row.m_xa= transaction->m_xa;
+ m_row.m_autocommit= transaction->m_autocommit;
+ m_row.m_savepoint_count= transaction->m_savepoint_count;
+ m_row.m_rollback_to_savepoint_count= transaction->m_rollback_to_savepoint_count;
+ m_row.m_release_savepoint_count= transaction->m_release_savepoint_count;
+ m_row_exists= true;
+ return;
+}
+
+/** Size of XID converted to null-terminated hex string prefixed with 0x. */
+static const ulong XID_BUFFER_SIZE= XIDDATASIZE*2 + 2 + 1;
+
+/**
+ Convert the XID to HEX string prefixed by '0x'
+
+ @param[out] buf output hex string buffer, null-terminated
+ @param buf_len size of buffer, must be at least @c XID_BUFFER_SIZE
+ @param xid XID structure
+ @param offset offset into XID.data[]
+ @param length number of bytes to process
+ @return number of bytes in hex string
+*/
+static size_t xid_to_hex(char *buf, size_t buf_len, PSI_xid *xid, size_t offset, size_t length)
+{
+ DBUG_ASSERT(buf_len >= XID_BUFFER_SIZE);
+ DBUG_ASSERT(offset + length <= XIDDATASIZE);
+ *buf++= '0';
+ *buf++= 'x';
+ return bin_to_hex_str(buf, buf_len-2, (char*)(xid->data + offset), length) + 2;
+}
+
+/**
+ Store the XID in printable format if possible, otherwise convert
+ to a string of hex digits.
+
+ @param field Record field
+ @param xid XID structure
+ @param offset offset into XID.data[]
+ @param length number of bytes to process
+*/
+static void xid_store(Field *field, PSI_xid *xid, size_t offset, size_t length)
+{
+ DBUG_ASSERT(!xid->is_null());
+ if (xid_printable(xid, offset, length))
+ {
+ field->store(xid->data + offset, length, &my_charset_bin);
+ }
+ else
+ {
+ /*
+ xid_buf contains enough space for 0x followed by hex representation of
+ the binary XID data and one null termination character.
+ */
+ char xid_buf[XID_BUFFER_SIZE];
+
+ size_t xid_str_len= xid_to_hex(xid_buf, sizeof(xid_buf), xid, offset, length);
+ field->store(xid_buf, xid_str_len, &my_charset_bin);
+ }
+}
+
+static void xid_store_bqual(Field *field, PSI_xid *xid)
+{
+ xid_store(field, xid, xid->gtrid_length, xid->bqual_length);
+}
+
+static void xid_store_gtrid(Field *field, PSI_xid *xid)
+{
+ xid_store(field, xid, 0, xid->gtrid_length);
+}
+
+int table_events_transactions_common::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 3);
+ buf[0]= 0;
+ buf[1]= 0;
+ buf[2]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* THREAD_ID */
+ set_field_ulonglong(f, m_row.m_thread_internal_id);
+ break;
+ case 1: /* EVENT_ID */
+ set_field_ulonglong(f, m_row.m_event_id);
+ break;
+ case 2: /* END_EVENT_ID */
+ if (m_row.m_end_event_id > 0)
+ set_field_ulonglong(f, m_row.m_end_event_id - 1);
+ else
+ f->set_null();
+ break;
+ case 3: /* EVENT_NAME */
+ set_field_varchar_utf8(f, m_row.m_name, m_row.m_name_length);
+ break;
+ case 4: /* STATE */
+ set_field_enum(f, m_row.m_state);
+ break;
+ case 5: /* TRX_ID */
+ if (m_row.m_trxid != 0)
+ set_field_ulonglong(f, m_row.m_trxid);
+ else
+ f->set_null();
+ break;
+ case 6: /* GTID */
+ set_field_varchar_utf8(f, m_row.m_gtid, m_row.m_gtid_length);
+ break;
+ case 7: /* XID_FORMAT_ID */
+ if (!m_row.m_xa || m_row.m_xid.is_null())
+ f->set_null();
+ else
+ set_field_long(f, m_row.m_xid.formatID);
+ break;
+ case 8: /* XID_GTRID */
+ if (!m_row.m_xa || m_row.m_xid.is_null() || m_row.m_xid.gtrid_length <= 0)
+ f->set_null();
+ else
+ xid_store_gtrid(f, &m_row.m_xid);
+ break;
+ case 9: /* XID_BQUAL */
+ if (!m_row.m_xa || m_row.m_xid.is_null() || m_row.m_xid.bqual_length <= 0)
+ f->set_null();
+ else
+ xid_store_bqual(f, &m_row.m_xid);
+ break;
+ case 10: /* XA STATE */
+ if (!m_row.m_xa || m_row.m_xid.is_null())
+ f->set_null();
+ else
+ set_field_xa_state(f, m_row.m_xa_state);
+ break;
+ case 11: /* SOURCE */
+ set_field_varchar_utf8(f, m_row.m_source, m_row.m_source_length);
+ break;
+ case 12: /* TIMER_START */
+ if (m_row.m_timer_start != 0)
+ set_field_ulonglong(f, m_row.m_timer_start);
+ else
+ f->set_null();
+ break;
+ case 13: /* TIMER_END */
+ if (m_row.m_timer_end != 0)
+ set_field_ulonglong(f, m_row.m_timer_end);
+ else
+ f->set_null();
+ break;
+ case 14: /* TIMER_WAIT */
+ if (m_row.m_timer_wait != 0)
+ set_field_ulonglong(f, m_row.m_timer_wait);
+ else
+ f->set_null();
+ break;
+ case 15: /* ACCESS_MODE */
+ set_field_enum(f, m_row.m_read_only ? TRANS_MODE_READ_ONLY
+ : TRANS_MODE_READ_WRITE);
+ break;
+ case 16: /* ISOLATION_LEVEL */
+ set_field_isolation_level(f, m_row.m_isolation_level);
+ break;
+ case 17: /* AUTOCOMMIT */
+ set_field_enum(f, m_row.m_autocommit ? ENUM_YES : ENUM_NO);
+ break;
+ case 18: /* NUMBER_OF_SAVEPOINTS */
+ set_field_ulonglong(f, m_row.m_savepoint_count);
+ break;
+ case 19: /* NUMBER_OF_ROLLBACK_TO_SAVEPOINT */
+ set_field_ulonglong(f, m_row.m_rollback_to_savepoint_count);
+ break;
+ case 20: /* NUMBER_OF_RELEASE_SAVEPOINT */
+ set_field_ulonglong(f, m_row.m_release_savepoint_count);
+ break;
+ case 21: /* OBJECT_INSTANCE_BEGIN */
+ f->set_null();
+ break;
+ case 22: /* NESTING_EVENT_ID */
+ if (m_row.m_nesting_event_id != 0)
+ set_field_ulonglong(f, m_row.m_nesting_event_id);
+ else
+ f->set_null();
+ break;
+ case 23: /* NESTING_EVENT_TYPE */
+ if (m_row.m_nesting_event_id != 0)
+ set_field_enum(f, m_row.m_nesting_event_type);
+ else
+ f->set_null();
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
+
+PFS_engine_table* table_events_transactions_current::create(void)
+{
+ return new table_events_transactions_current();
+}
+
+table_events_transactions_current::table_events_transactions_current()
+ : table_events_transactions_common(&m_share, &m_pos),
+ m_pos(0), m_next_pos(0)
+{}
+
+void table_events_transactions_current::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+int table_events_transactions_current::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_events_transactions_current::rnd_next(void)
+{
+ PFS_thread *pfs_thread;
+ PFS_events_transactions *transaction;
+ bool has_more_thread= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next())
+ {
+ pfs_thread= global_thread_container.get(m_pos.m_index, & has_more_thread);
+ if (pfs_thread != NULL)
+ {
+ transaction= &pfs_thread->m_transaction_current;
+ make_row(transaction);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_events_transactions_current::rnd_pos(const void *pos)
+{
+ PFS_thread *pfs_thread;
+ PFS_events_transactions *transaction;
+
+ set_position(pos);
+
+ pfs_thread= global_thread_container.get(m_pos.m_index);
+ if (pfs_thread != NULL)
+ {
+ transaction= &pfs_thread->m_transaction_current;
+ if (transaction->m_class != NULL)
+ {
+ make_row(transaction);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+int table_events_transactions_current::delete_all_rows(void)
+{
+ reset_events_transactions_current();
+ return 0;
+}
+
+ha_rows
+table_events_transactions_current::get_row_count(void)
+{
+ return global_thread_container.get_row_count();
+}
+
+PFS_engine_table* table_events_transactions_history::create(void)
+{
+ return new table_events_transactions_history();
+}
+
+table_events_transactions_history::table_events_transactions_history()
+ : table_events_transactions_common(&m_share, &m_pos),
+ m_pos(), m_next_pos()
+{}
+
+void table_events_transactions_history::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_events_transactions_history::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_events_transactions_history::rnd_next(void)
+{
+ PFS_thread *pfs_thread;
+ PFS_events_transactions *transaction;
+ bool has_more_thread= true;
+
+ if (events_transactions_history_per_thread == 0)
+ return HA_ERR_END_OF_FILE;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next_thread())
+ {
+ pfs_thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (pfs_thread != NULL)
+ {
+ if (m_pos.m_index_2 >= events_transactions_history_per_thread)
+ {
+ /* This thread does not have more (full) history */
+ continue;
+ }
+
+ if ( ! pfs_thread->m_transactions_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_transactions_history_index))
+ {
+ /* This thread does not have more (not full) history */
+ continue;
+ }
+
+ transaction= &pfs_thread->m_transactions_history[m_pos.m_index_2];
+ if (transaction->m_class != NULL)
+ {
+ make_row(transaction);
+ /* Next iteration, look for the next history in this thread */
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_events_transactions_history::rnd_pos(const void *pos)
+{
+ PFS_thread *pfs_thread;
+ PFS_events_transactions *transaction;
+
+ DBUG_ASSERT(events_transactions_history_per_thread != 0);
+ set_position(pos);
+
+ DBUG_ASSERT(m_pos.m_index_2 < events_transactions_history_per_thread);
+
+ pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ if (pfs_thread != NULL)
+ {
+ if ( ! pfs_thread->m_transactions_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_transactions_history_index))
+ return HA_ERR_RECORD_DELETED;
+
+ transaction= &pfs_thread->m_transactions_history[m_pos.m_index_2];
+ if (transaction->m_class != NULL)
+ {
+ make_row(transaction);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+int table_events_transactions_history::delete_all_rows(void)
+{
+ reset_events_transactions_history();
+ return 0;
+}
+
+ha_rows
+table_events_transactions_history::get_row_count(void)
+{
+ return events_transactions_history_per_thread * global_thread_container.get_row_count();
+}
+
+PFS_engine_table* table_events_transactions_history_long::create(void)
+{
+ return new table_events_transactions_history_long();
+}
+
+table_events_transactions_history_long::table_events_transactions_history_long()
+ : table_events_transactions_common(&m_share, &m_pos),
+ m_pos(0), m_next_pos(0)
+{}
+
+void table_events_transactions_history_long::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+int table_events_transactions_history_long::rnd_init(bool scan)
+{
+ m_normalizer= time_normalizer::get(transaction_timer);
+ return 0;
+}
+
+int table_events_transactions_history_long::rnd_next(void)
+{
+ PFS_events_transactions *transaction;
+ uint limit;
+
+ if (events_transactions_history_long_size == 0)
+ return HA_ERR_END_OF_FILE;
+
+ if (events_transactions_history_long_full)
+ limit= events_transactions_history_long_size;
+ else
+ limit= events_transactions_history_long_index.m_u32 % events_transactions_history_long_size;
+
+ for (m_pos.set_at(&m_next_pos); m_pos.m_index < limit; m_pos.next())
+ {
+ transaction= &events_transactions_history_long_array[m_pos.m_index];
+
+ if (transaction->m_class != NULL)
+ {
+ make_row(transaction);
+ /* Next iteration, look for the next entry */
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_events_transactions_history_long::rnd_pos(const void *pos)
+{
+ PFS_events_transactions *transaction;
+ uint limit;
+
+ if (events_transactions_history_long_size == 0)
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+
+ if (events_transactions_history_long_full)
+ limit= events_transactions_history_long_size;
+ else
+ limit= events_transactions_history_long_index.m_u32 % events_transactions_history_long_size;
+
+ if (m_pos.m_index >= limit)
+ return HA_ERR_RECORD_DELETED;
+
+ transaction= &events_transactions_history_long_array[m_pos.m_index];
+
+ if (transaction->m_class == NULL)
+ return HA_ERR_RECORD_DELETED;
+
+ make_row(transaction);
+ return 0;
+}
+
+int table_events_transactions_history_long::delete_all_rows(void)
+{
+ reset_events_transactions_history_long();
+ return 0;
+}
+
+ha_rows
+table_events_transactions_history_long::get_row_count(void)
+{
+ return events_transactions_history_long_size;
+}
+
diff --git a/storage/perfschema/table_events_transactions.h b/storage/perfschema/table_events_transactions.h
new file mode 100644
index 00000000000..9987319abb2
--- /dev/null
+++ b/storage/perfschema/table_events_transactions.h
@@ -0,0 +1,254 @@
+/* Copyright (c) 2010, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_EVENTS_TRANSACTIONS_H
+#define TABLE_EVENTS_TRANSACTIONS_H
+
+/**
+ @file storage/perfschema/table_events_HA_ERR_WRONG_COMMAND.h
+ Table EVENTS_TRANSACTIONS_xxx (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_events_transactions.h"
+#include "table_helper.h"
+#include "rpl_gtid.h"
+
+struct PFS_thread;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of table_events_transactions_common. */
+struct row_events_transactions
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column EVENT_ID. */
+ ulonglong m_event_id;
+ /** Column END_EVENT_ID. */
+ ulonglong m_end_event_id;
+ /** Column NESTING_EVENT_ID. */
+ ulonglong m_nesting_event_id;
+ /** Column NESTING_EVENT_TYPE. */
+ enum_event_type m_nesting_event_type;
+ /** Column EVENT_NAME. */
+ const char *m_name;
+ /** Length in bytes of @c m_name. */
+ uint m_name_length;
+ /** Column TIMER_START. */
+ ulonglong m_timer_start;
+ /** Column TIMER_END. */
+ ulonglong m_timer_end;
+ /** Column TIMER_WAIT. */
+ ulonglong m_timer_wait;
+ /** Column SOURCE. */
+ char m_source[COL_SOURCE_SIZE];
+ /** Length in bytes of @c m_source. */
+ uint m_source_length;
+ /** InnoDB transaction id. */
+ ulonglong m_trxid;
+ /** Transaction state. */
+ enum_transaction_state m_state;
+ /** Global Transaction ID. */
+ char m_gtid[GTID_MAX_STR_LENGTH + 1];
+ /** GTID length in bytes*/
+ int m_gtid_length;
+ /** XA transaction ID. */
+ PSI_xid m_xid;
+ /** XA transaction state. */
+ enum_xa_transaction_state m_xa_state;
+ /** True if XA transaction. */
+ bool m_xa;
+ /** True if autocommit transaction. */
+ bool m_autocommit;
+ /** Isolation level. */
+ enum_isolation_level m_isolation_level;
+ /** True if read-only, read-write otherwise. */
+ bool m_read_only;
+ /** Column NUMBER_OF_SAVEPOINTS. */
+ ulonglong m_savepoint_count;
+ /** Column NUMBER_OF_ROLLBACK_TO_SAVEPOINT. */
+ ulonglong m_rollback_to_savepoint_count;
+ /** Column NUMBER_OF_RELEASE_SAVEPOINT. */
+ ulonglong m_release_savepoint_count;
+};
+
+/**
+ Position of a cursor on PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_HISTORY.
+ Index 1 on thread (0 based)
+ Index 2 on transaction event record in thread history (0 based)
+*/
+struct pos_events_transactions_history : public PFS_double_index
+{
+ pos_events_transactions_history()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline void next_thread(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/**
+ Adapter, for table sharing the structure of
+ PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_CURRENT.
+*/
+class table_events_transactions_common : public PFS_engine_table
+{
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_events_transactions_common(const PFS_engine_table_share *share, void *pos);
+
+ ~table_events_transactions_common()
+ {}
+
+ void make_row(PFS_events_transactions *statement);
+
+ /** Current row. */
+ row_events_transactions m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_CURRENT. */
+class table_events_transactions_current : public table_events_transactions_common
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ table_events_transactions_current();
+
+public:
+ ~table_events_transactions_current()
+ {}
+
+private:
+ friend class table_events_transactions_history;
+ friend class table_events_transactions_history_long;
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /**
+ Fields definition.
+ Also used by table_events_transactions_history
+ and table_events_transactions_history_long.
+ */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_HISTORY. */
+class table_events_transactions_history : public table_events_transactions_common
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ table_events_transactions_history();
+
+public:
+ ~table_events_transactions_history()
+ {}
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+
+ /** Current position. */
+ pos_events_transactions_history m_pos;
+ /** Next position. */
+ pos_events_transactions_history m_next_pos;
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_TRANSACTIONS_HISTORY_LONG. */
+class table_events_transactions_history_long : public table_events_transactions_common
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ table_events_transactions_history_long();
+
+public:
+ ~table_events_transactions_history_long()
+ {}
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_events_waits.cc b/storage/perfschema/table_events_waits.cc
index 6cfc754f8c2..aa73344fff7 100644
--- a/storage/perfschema/table_events_waits.cc
+++ b/storage/perfschema/table_events_waits.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2018, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_events_waits.h"
#include "pfs_global.h"
#include "pfs_instr_class.h"
@@ -34,6 +34,8 @@
#include "pfs_events_waits.h"
#include "pfs_timer.h"
#include "m_string.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_events_waits_current::m_table_lock;
@@ -42,11 +44,10 @@ table_events_waits_current::m_share=
{
{ C_STRING_WITH_LEN("events_waits_current") },
&pfs_truncatable_acl,
- &table_events_waits_current::create,
+ table_events_waits_current::create,
NULL, /* write_row */
- &table_events_waits_current::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_waits_current::delete_all_rows,
+ table_events_waits_current::get_row_count,
sizeof(pos_events_waits_current), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_current("
@@ -65,10 +66,11 @@ table_events_waits_current::m_share=
"OBJECT_TYPE VARCHAR(64),"
"OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'),"
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'),"
"OPERATION VARCHAR(32) not null,"
"NUMBER_OF_BYTES BIGINT,"
- "FLAGS INTEGER unsigned)") }
+ "FLAGS INTEGER unsigned)") },
+ false /* perpetual */
};
THR_LOCK table_events_waits_history::m_table_lock;
@@ -78,11 +80,10 @@ table_events_waits_history::m_share=
{
{ C_STRING_WITH_LEN("events_waits_history") },
&pfs_truncatable_acl,
- &table_events_waits_history::create,
+ table_events_waits_history::create,
NULL, /* write_row */
- &table_events_waits_history::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_waits_history::delete_all_rows,
+ table_events_waits_history::get_row_count,
sizeof(pos_events_waits_history), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_history("
@@ -101,10 +102,11 @@ table_events_waits_history::m_share=
"OBJECT_TYPE VARCHAR(64),"
"OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'),"
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'),"
"OPERATION VARCHAR(32) not null,"
"NUMBER_OF_BYTES BIGINT,"
- "FLAGS INTEGER unsigned)") }
+ "FLAGS INTEGER unsigned)") },
+ false /* perpetual */
};
THR_LOCK table_events_waits_history_long::m_table_lock;
@@ -114,11 +116,10 @@ table_events_waits_history_long::m_share=
{
{ C_STRING_WITH_LEN("events_waits_history_long") },
&pfs_truncatable_acl,
- &table_events_waits_history_long::create,
+ table_events_waits_history_long::create,
NULL, /* write_row */
- &table_events_waits_history_long::delete_all_rows,
- NULL, /* get_row_count */
- 10000, /* records */
+ table_events_waits_history_long::delete_all_rows,
+ table_events_waits_history_long::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_history_long("
@@ -137,10 +138,11 @@ table_events_waits_history_long::m_share=
"OBJECT_TYPE VARCHAR(64),"
"OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'),"
+ "NESTING_EVENT_TYPE ENUM('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT'),"
"OPERATION VARCHAR(32) not null,"
"NUMBER_OF_BYTES BIGINT,"
- "FLAGS INTEGER unsigned)") }
+ "FLAGS INTEGER unsigned)") },
+ false /* perpetual */
};
table_events_waits_common::table_events_waits_common
@@ -151,15 +153,13 @@ table_events_waits_common::table_events_waits_common
void table_events_waits_common::clear_object_columns()
{
- m_row.m_object_type= NULL;
m_row.m_object_type_length= 0;
m_row.m_object_schema_length= 0;
m_row.m_object_name_length= 0;
m_row.m_index_name_length= 0;
- m_row.m_object_instance_addr= 0;
}
-int table_events_waits_common::make_table_object_columns(volatile PFS_events_waits *wait)
+int table_events_waits_common::make_table_object_columns(PFS_events_waits *wait)
{
uint safe_index;
PFS_table_share *safe_table_share;
@@ -200,15 +200,28 @@ int table_events_waits_common::make_table_object_columns(volatile PFS_events_wai
uint safe_key_count= sanitize_index_count(safe_table_share->m_key_count);
if (safe_index < safe_key_count)
{
- PFS_table_key *key= & safe_table_share->m_keys[safe_index];
- m_row.m_index_name_length= key->m_name_length;
- if (unlikely((m_row.m_index_name_length == 0) ||
- (m_row.m_index_name_length > sizeof(m_row.m_index_name))))
- return 1;
- memcpy(m_row.m_index_name, key->m_name, m_row.m_index_name_length);
+ PFS_table_share_index *index_stat;
+ index_stat= safe_table_share->find_index_stat(safe_index);
+
+ if (index_stat != NULL)
+ {
+ m_row.m_index_name_length= index_stat->m_key.m_name_length;
+
+ if (unlikely((m_row.m_index_name_length == 0) ||
+ (m_row.m_index_name_length > sizeof(m_row.m_index_name))))
+ return 1;
+
+ memcpy(m_row.m_index_name, index_stat->m_key.m_name, m_row.m_index_name_length);
+ }
+ else
+ {
+ m_row.m_index_name_length= 0;
+ }
}
else
+ {
m_row.m_index_name_length= 0;
+ }
}
else
{
@@ -221,7 +234,7 @@ int table_events_waits_common::make_table_object_columns(volatile PFS_events_wai
return 0;
}
-int table_events_waits_common::make_file_object_columns(volatile PFS_events_waits *wait)
+int table_events_waits_common::make_file_object_columns(PFS_events_waits *wait)
{
PFS_file *safe_file;
@@ -253,7 +266,7 @@ int table_events_waits_common::make_file_object_columns(volatile PFS_events_wait
return 0;
}
-int table_events_waits_common::make_socket_object_columns(volatile PFS_events_waits *wait)
+int table_events_waits_common::make_socket_object_columns(PFS_events_waits *wait)
{
PFS_socket *safe_socket;
@@ -286,10 +299,10 @@ int table_events_waits_common::make_socket_object_columns(volatile PFS_events_wa
safe_socket->m_addr_len);
/* Convert port number to a string (length includes ':') */
- int port_len= (int)(int10_to_str(port, (port_str+1), 10) - port_str + 1);
+ size_t port_len= int10_to_str(port, (port_str+1), 10) - port_str + 1;
/* OBJECT NAME */
- m_row.m_object_name_length= ip_length + port_len;
+ m_row.m_object_name_length= ip_length + static_cast<uint>(port_len);
if (unlikely((m_row.m_object_name_length == 0) ||
(m_row.m_object_name_length > sizeof(m_row.m_object_name))))
@@ -309,33 +322,122 @@ int table_events_waits_common::make_socket_object_columns(volatile PFS_events_wa
return 0;
}
+int table_events_waits_common::make_metadata_lock_object_columns(PFS_events_waits *wait)
+{
+ PFS_metadata_lock *safe_metadata_lock;
+
+ safe_metadata_lock= sanitize_metadata_lock(wait->m_weak_metadata_lock);
+ if (unlikely(safe_metadata_lock == NULL))
+ return 1;
+
+ if (safe_metadata_lock->get_version() == wait->m_weak_version)
+ {
+ MDL_key *mdl= & safe_metadata_lock->m_mdl_key;
+ MDL_key user_lock_workaround;
+
+ switch(mdl->mdl_namespace())
+ {
+ case MDL_key::BACKUP:
+ m_row.m_object_type= "BACKUP";
+ m_row.m_object_type_length= 6;
+ m_row.m_object_schema_length= 0;
+ m_row.m_object_name_length= 0;
+ break;
+ case MDL_key::SCHEMA:
+ m_row.m_object_type= "SCHEMA";
+ m_row.m_object_type_length= 6;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= 0;
+ break;
+ case MDL_key::TABLE:
+ m_row.m_object_type= "TABLE";
+ m_row.m_object_type_length= 5;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::FUNCTION:
+ m_row.m_object_type= "FUNCTION";
+ m_row.m_object_type_length= 8;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::PROCEDURE:
+ m_row.m_object_type= "PROCEDURE";
+ m_row.m_object_type_length= 9;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::PACKAGE_BODY:
+ m_row.m_object_type= "PACKAGE_BODY";
+ m_row.m_object_type_length= 12;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::TRIGGER:
+ m_row.m_object_type= "TRIGGER";
+ m_row.m_object_type_length= 7;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::EVENT:
+ m_row.m_object_type= "EVENT";
+ m_row.m_object_type_length= 5;
+ m_row.m_object_schema_length= mdl->db_name_length();
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::USER_LOCK:
+ m_row.m_object_type= "USER LEVEL LOCK";
+ m_row.m_object_type_length= 15;
+ user_lock_workaround.mdl_key_init(MDL_key::USER_LOCK, "", mdl->db_name());
+ mdl=& user_lock_workaround;
+ m_row.m_object_schema_length= 0;
+ m_row.m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::NAMESPACE_END:
+ default:
+ m_row.m_object_type_length= 0;
+ m_row.m_object_schema_length= 0;
+ m_row.m_object_name_length= 0;
+ break;
+ }
+
+ if (m_row.m_object_schema_length > sizeof(m_row.m_object_schema))
+ return 1;
+ if (m_row.m_object_schema_length > 0)
+ memcpy(m_row.m_object_schema, mdl->db_name(), m_row.m_object_schema_length);
+
+ if (m_row.m_object_name_length > sizeof(m_row.m_object_name))
+ return 1;
+ if (m_row.m_object_name_length > 0)
+ memcpy(m_row.m_object_name, mdl->name(), m_row.m_object_name_length);
+
+ m_row.m_object_instance_addr= (intptr) wait->m_object_instance_addr;
+ }
+ else
+ {
+ m_row.m_object_type_length= 0;
+ m_row.m_object_schema_length= 0;
+ m_row.m_object_name_length= 0;
+ m_row.m_object_instance_addr= 0;
+ }
+
+ /* INDEX NAME */
+ m_row.m_index_name_length= 0;
+
+ return 0;
+}
+
/**
Build a row.
- @param thread_own_wait True if the memory for the wait
- is owned by pfs_thread
- @param pfs_thread the thread the cursor is reading
@param wait the wait the cursor is reading
*/
-void table_events_waits_common::make_row(bool thread_own_wait,
- PFS_thread *pfs_thread,
- volatile PFS_events_waits *wait)
+void table_events_waits_common::make_row(PFS_events_waits *wait)
{
- pfs_lock lock;
- PFS_thread *safe_thread;
PFS_instr_class *safe_class;
- const char *base;
- const char *safe_source_file;
enum_timer_name timer_name= wait_timer;
ulonglong timer_end;
m_row_exists= false;
- safe_thread= sanitize_thread(pfs_thread);
- if (unlikely(safe_thread == NULL))
- return;
-
- /* Protect this reader against a thread termination */
- if (thread_own_wait)
- safe_thread->m_lock.begin_optimistic_lock(&lock);
/*
Design choice:
@@ -362,21 +464,30 @@ void table_events_waits_common::make_row(bool thread_own_wait,
*/
switch (wait->m_wait_class)
{
+ case WAIT_CLASS_METADATA:
+ if (make_metadata_lock_object_columns(wait))
+ return;
+ safe_class= sanitize_metadata_class(wait->m_class);
+ break;
case WAIT_CLASS_IDLE:
clear_object_columns();
+ m_row.m_object_instance_addr= 0;
safe_class= sanitize_idle_class(wait->m_class);
timer_name= idle_timer;
break;
case WAIT_CLASS_MUTEX:
clear_object_columns();
+ m_row.m_object_instance_addr= (intptr) wait->m_object_instance_addr;
safe_class= sanitize_mutex_class((PFS_mutex_class*) wait->m_class);
break;
case WAIT_CLASS_RWLOCK:
clear_object_columns();
+ m_row.m_object_instance_addr= (intptr) wait->m_object_instance_addr;
safe_class= sanitize_rwlock_class((PFS_rwlock_class*) wait->m_class);
break;
case WAIT_CLASS_COND:
clear_object_columns();
+ m_row.m_object_instance_addr= (intptr) wait->m_object_instance_addr;
safe_class= sanitize_cond_class((PFS_cond_class*) wait->m_class);
break;
case WAIT_CLASS_TABLE:
@@ -402,7 +513,7 @@ void table_events_waits_common::make_row(bool thread_own_wait,
if (unlikely(safe_class == NULL))
return;
- m_row.m_thread_internal_id= safe_thread->m_thread_internal_id;
+ m_row.m_thread_internal_id= wait->m_thread_internal_id;
m_row.m_event_id= wait->m_event_id;
m_row.m_end_event_id= wait->m_end_event_id;
m_row.m_nesting_event_id= wait->m_nesting_event_id;
@@ -425,39 +536,14 @@ void table_events_waits_common::make_row(bool thread_own_wait,
m_row.m_name= safe_class->m_name;
m_row.m_name_length= safe_class->m_name_length;
- /*
- We are assuming this pointer is sane,
- since it comes from __FILE__.
- */
- safe_source_file= wait->m_source_file;
- if (unlikely(safe_source_file == NULL))
- return;
+ /* Disable source file and line to avoid stale __FILE__ pointers. */
+ m_row.m_source_length= 0;
- base= base_name(wait->m_source_file);
- m_row.m_source_length= (uint)my_snprintf(m_row.m_source, sizeof(m_row.m_source),
- "%s:%d", base, wait->m_source_line);
- if (m_row.m_source_length > sizeof(m_row.m_source))
- m_row.m_source_length= sizeof(m_row.m_source);
m_row.m_operation= wait->m_operation;
m_row.m_number_of_bytes= wait->m_number_of_bytes;
m_row.m_flags= wait->m_flags;
- if (thread_own_wait)
- {
- if (safe_thread->m_lock.end_optimistic_lock(&lock))
- m_row_exists= true;
- }
- else
- {
- /*
- For EVENTS_WAITS_HISTORY_LONG (thread_own_wait is false),
- the wait record is always valid, because it is not stored
- in memory owned by pfs_thread.
- Even when the thread terminated, the record is mostly readable,
- so this record is displayed.
- */
- m_row_exists= true;
- }
+ m_row_exists= true;
}
/**
@@ -474,12 +560,20 @@ static const LEX_STRING operation_names_map[]=
{ C_STRING_WITH_LEN("lock") },
{ C_STRING_WITH_LEN("try_lock") },
- /* RWLock operations */
+ /* RWLock operations (RW-lock) */
{ C_STRING_WITH_LEN("read_lock") },
{ C_STRING_WITH_LEN("write_lock") },
{ C_STRING_WITH_LEN("try_read_lock") },
{ C_STRING_WITH_LEN("try_write_lock") },
+ /* RWLock operations (SX-lock) */
+ { C_STRING_WITH_LEN("shared_lock") },
+ { C_STRING_WITH_LEN("shared_exclusive_lock") },
+ { C_STRING_WITH_LEN("exclusive_lock") },
+ { C_STRING_WITH_LEN("try_shared_lock") },
+ { C_STRING_WITH_LEN("try_shared_exclusive_lock") },
+ { C_STRING_WITH_LEN("try_exclusive_lock") },
+
/* Condition operations */
{ C_STRING_WITH_LEN("wait") },
{ C_STRING_WITH_LEN("timed_wait") },
@@ -540,7 +634,10 @@ static const LEX_STRING operation_names_map[]=
{ C_STRING_WITH_LEN("select") },
/* Idle operations */
- { C_STRING_WITH_LEN("idle") }
+ { C_STRING_WITH_LEN("idle") },
+
+ /* Medatada lock operations */
+ { C_STRING_WITH_LEN("metadata lock") }
};
@@ -644,7 +741,7 @@ int table_events_waits_common::read_row_values(TABLE *table,
f->set_null();
break;
case 12: /* OBJECT_TYPE */
- if (m_row.m_object_type)
+ if (m_row.m_object_type_length > 0)
{
set_field_varchar_utf8(f, m_row.m_object_type,
m_row.m_object_type_length);
@@ -671,14 +768,18 @@ int table_events_waits_common::read_row_values(TABLE *table,
operation= &operation_names_map[(int) m_row.m_operation - 1];
set_field_varchar_utf8(f, operation->str, (uint)operation->length);
break;
- case 17: /* NUMBER_OF_BYTES */
+ case 17: /* NUMBER_OF_BYTES (also used for ROWS) */
if ((m_row.m_operation == OPERATION_TYPE_FILEREAD) ||
(m_row.m_operation == OPERATION_TYPE_FILEWRITE) ||
(m_row.m_operation == OPERATION_TYPE_FILECHSIZE) ||
(m_row.m_operation == OPERATION_TYPE_SOCKETSEND) ||
(m_row.m_operation == OPERATION_TYPE_SOCKETRECV) ||
(m_row.m_operation == OPERATION_TYPE_SOCKETSENDTO) ||
- (m_row.m_operation == OPERATION_TYPE_SOCKETRECVFROM))
+ (m_row.m_operation == OPERATION_TYPE_SOCKETRECVFROM) ||
+ (m_row.m_operation == OPERATION_TYPE_TABLE_FETCH) ||
+ (m_row.m_operation == OPERATION_TYPE_TABLE_WRITE_ROW) ||
+ (m_row.m_operation == OPERATION_TYPE_TABLE_UPDATE_ROW) ||
+ (m_row.m_operation == OPERATION_TYPE_TABLE_DELETE_ROW))
set_field_ulonglong(f, m_row.m_number_of_bytes);
else
f->set_null();
@@ -714,28 +815,77 @@ int table_events_waits_current::rnd_next(void)
{
PFS_thread *pfs_thread;
PFS_events_waits *wait;
+ bool has_more_thread= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.m_index_1 < thread_max;
+ has_more_thread;
m_pos.next_thread())
{
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
+ pfs_thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (pfs_thread != NULL)
{
- /* This thread does not exist */
- continue;
+ /*
+ We do not show nested events for now,
+ this will be revised with TABLE io
+ */
+// #define ONLY_SHOW_ONE_WAIT
+
+#ifdef ONLY_SHOW_ONE_WAIT
+ if (m_pos.m_index_2 >= 1)
+ continue;
+#else
+ /* m_events_waits_stack[0] is a dummy record */
+ PFS_events_waits *top_wait = &pfs_thread->m_events_waits_stack[WAIT_STACK_BOTTOM];
+ wait= &pfs_thread->m_events_waits_stack[m_pos.m_index_2 + WAIT_STACK_BOTTOM];
+
+ PFS_events_waits *safe_current = pfs_thread->m_events_waits_current;
+
+ if (safe_current == top_wait)
+ {
+ /* Display the last top level wait, when completed */
+ if (m_pos.m_index_2 >= 1)
+ continue;
+ }
+ else
+ {
+ /* Display all pending waits, when in progress */
+ if (wait >= safe_current)
+ continue;
+ }
+#endif
+
+ if (wait->m_wait_class == NO_WAIT_CLASS)
+ {
+ /*
+ This locker does not exist.
+ There can not be more lockers in the stack, skip to the next thread
+ */
+ continue;
+ }
+
+ make_row(pfs_thread, wait);
+ /* Next iteration, look for the next locker in this thread */
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
+ }
- /*
- We do not show nested events for now,
- this will be revised with TABLE io
- */
-// #define ONLY_SHOW_ONE_WAIT
+ return HA_ERR_END_OF_FILE;
+}
+int table_events_waits_current::rnd_pos(const void *pos)
+{
+ PFS_thread *pfs_thread;
+ PFS_events_waits *wait;
+
+ set_position(pos);
+
+ pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ if (pfs_thread != NULL)
+ {
#ifdef ONLY_SHOW_ONE_WAIT
if (m_pos.m_index_2 >= 1)
- continue;
+ return HA_ERR_RECORD_DELETED;
#else
/* m_events_waits_stack[0] is a dummy record */
PFS_events_waits *top_wait = &pfs_thread->m_events_waits_stack[WAIT_STACK_BOTTOM];
@@ -747,77 +897,39 @@ int table_events_waits_current::rnd_next(void)
{
/* Display the last top level wait, when completed */
if (m_pos.m_index_2 >= 1)
- continue;
+ return HA_ERR_RECORD_DELETED;
}
else
{
/* Display all pending waits, when in progress */
if (wait >= safe_current)
- continue;
+ return HA_ERR_RECORD_DELETED;
}
#endif
- if (wait->m_wait_class == NO_WAIT_CLASS)
+ DBUG_ASSERT(m_pos.m_index_2 < WAIT_STACK_LOGICAL_SIZE);
+
+ if (wait->m_wait_class != NO_WAIT_CLASS)
{
- /*
- This locker does not exist.
- There can not be more lockers in the stack, skip to the next thread
- */
- continue;
+ make_row(pfs_thread, wait);
+ return 0;
}
-
- make_row(true, pfs_thread, wait);
- /* Next iteration, look for the next locker in this thread */
- m_next_pos.set_after(&m_pos);
- return 0;
}
- return HA_ERR_END_OF_FILE;
+ return HA_ERR_RECORD_DELETED;
}
-int table_events_waits_current::rnd_pos(const void *pos)
+void table_events_waits_current::make_row(PFS_thread *thread, PFS_events_waits *wait)
{
- PFS_thread *pfs_thread;
- PFS_events_waits *wait;
-
- set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
-
-#ifdef ONLY_SHOW_ONE_WAIT
- if (m_pos.m_index_2 >= 1)
- return HA_ERR_RECORD_DELETED;
-#else
- /* m_events_waits_stack[0] is a dummy record */
- PFS_events_waits *top_wait = &pfs_thread->m_events_waits_stack[WAIT_STACK_BOTTOM];
- wait= &pfs_thread->m_events_waits_stack[m_pos.m_index_2 + WAIT_STACK_BOTTOM];
-
- PFS_events_waits *safe_current = pfs_thread->m_events_waits_current;
-
- if (safe_current == top_wait)
- {
- /* Display the last top level wait, when completed */
- if (m_pos.m_index_2 >= 1)
- return HA_ERR_RECORD_DELETED;
- }
- else
- {
- /* Display all pending waits, when in progress */
- if (wait >= safe_current)
- return HA_ERR_RECORD_DELETED;
- }
-#endif
+ pfs_optimistic_state lock;
- DBUG_ASSERT(m_pos.m_index_2 < WAIT_STACK_LOGICAL_SIZE);
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
- if (wait->m_wait_class == NO_WAIT_CLASS)
- return HA_ERR_RECORD_DELETED;
+ table_events_waits_common::make_row(wait);
- make_row(true, pfs_thread, wait);
- return 0;
+ if (! thread->m_lock.end_optimistic_lock(&lock))
+ m_row_exists= false;
}
int table_events_waits_current::delete_all_rows(void)
@@ -826,6 +938,12 @@ int table_events_waits_current::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_waits_current::get_row_count(void)
+{
+ return WAIT_STACK_SIZE * global_thread_container.get_row_count();
+}
+
PFS_engine_table* table_events_waits_history::create(void)
{
return new table_events_waits_history();
@@ -846,51 +964,40 @@ int table_events_waits_history::rnd_next(void)
{
PFS_thread *pfs_thread;
PFS_events_waits *wait;
+ bool has_more_thread= true;
if (events_waits_history_per_thread == 0)
return HA_ERR_END_OF_FILE;
for (m_pos.set_at(&m_next_pos);
- m_pos.m_index_1 < thread_max;
+ has_more_thread;
m_pos.next_thread())
{
- pfs_thread= &thread_array[m_pos.m_index_1];
-
- if (! pfs_thread->m_lock.is_populated())
+ pfs_thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (pfs_thread != NULL)
{
- /* This thread does not exist */
- continue;
- }
-
- if (m_pos.m_index_2 >= events_waits_history_per_thread)
- {
- /* This thread does not have more (full) history */
- continue;
- }
+ if (m_pos.m_index_2 >= events_waits_history_per_thread)
+ {
+ /* This thread does not have more (full) history */
+ continue;
+ }
- if ( ! pfs_thread->m_waits_history_full &&
- (m_pos.m_index_2 >= pfs_thread->m_waits_history_index))
- {
- /* This thread does not have more (not full) history */
- continue;
- }
+ if ( ! pfs_thread->m_waits_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_waits_history_index))
+ {
+ /* This thread does not have more (not full) history */
+ continue;
+ }
- if (pfs_thread->m_waits_history[m_pos.m_index_2].m_wait_class
- == NO_WAIT_CLASS)
- {
- /*
- This locker does not exist.
- There can not be more lockers in the stack, skip to the next thread
- */
- continue;
+ wait= &pfs_thread->m_waits_history[m_pos.m_index_2];
+ if (wait->m_wait_class != NO_WAIT_CLASS)
+ {
+ make_row(pfs_thread, wait);
+ /* Next iteration, look for the next history in this thread */
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
-
- wait= &pfs_thread->m_waits_history[m_pos.m_index_2];
-
- make_row(true, pfs_thread, wait);
- /* Next iteration, look for the next history in this thread */
- m_next_pos.set_after(&m_pos);
- return 0;
}
return HA_ERR_END_OF_FILE;
@@ -903,25 +1010,39 @@ int table_events_waits_history::rnd_pos(const void *pos)
DBUG_ASSERT(events_waits_history_per_thread != 0);
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
- pfs_thread= &thread_array[m_pos.m_index_1];
- if (! pfs_thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
+ pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ if (pfs_thread != NULL)
+ {
+ DBUG_ASSERT(m_pos.m_index_2 < events_waits_history_per_thread);
+
+ if ( ! pfs_thread->m_waits_history_full &&
+ (m_pos.m_index_2 >= pfs_thread->m_waits_history_index))
+ return HA_ERR_RECORD_DELETED;
- DBUG_ASSERT(m_pos.m_index_2 < events_waits_history_per_thread);
+ wait= &pfs_thread->m_waits_history[m_pos.m_index_2];
- if ( ! pfs_thread->m_waits_history_full &&
- (m_pos.m_index_2 >= pfs_thread->m_waits_history_index))
- return HA_ERR_RECORD_DELETED;
+ if (wait->m_wait_class != NO_WAIT_CLASS)
+ {
+ make_row(pfs_thread, wait);
+ return 0;
+ }
+ }
- wait= &pfs_thread->m_waits_history[m_pos.m_index_2];
+ return HA_ERR_RECORD_DELETED;
+}
- if (wait->m_wait_class == NO_WAIT_CLASS)
- return HA_ERR_RECORD_DELETED;
+void table_events_waits_history::make_row(PFS_thread *thread, PFS_events_waits *wait)
+{
+ pfs_optimistic_state lock;
- make_row(true, pfs_thread, wait);
- return 0;
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
+
+ table_events_waits_common::make_row(wait);
+
+ if (! thread->m_lock.end_optimistic_lock(&lock))
+ m_row_exists= false;
}
int table_events_waits_history::delete_all_rows(void)
@@ -930,6 +1051,12 @@ int table_events_waits_history::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_waits_history::get_row_count(void)
+{
+ return events_waits_history_per_thread * global_thread_container.get_row_count();
+}
+
PFS_engine_table* table_events_waits_history_long::create(void)
{
return new table_events_waits_history_long();
@@ -957,7 +1084,7 @@ int table_events_waits_history_long::rnd_next(void)
if (events_waits_history_long_full)
limit= events_waits_history_long_size;
else
- limit= events_waits_history_long_index % events_waits_history_long_size;
+ limit= events_waits_history_long_index.m_u32 % events_waits_history_long_size;
for (m_pos.set_at(&m_next_pos); m_pos.m_index < limit; m_pos.next())
{
@@ -965,7 +1092,7 @@ int table_events_waits_history_long::rnd_next(void)
if (wait->m_wait_class != NO_WAIT_CLASS)
{
- make_row(false, wait->m_thread, wait);
+ make_row(wait);
/* Next iteration, look for the next entry */
m_next_pos.set_after(&m_pos);
return 0;
@@ -988,7 +1115,7 @@ int table_events_waits_history_long::rnd_pos(const void *pos)
if (events_waits_history_long_full)
limit= events_waits_history_long_size;
else
- limit= events_waits_history_long_index % events_waits_history_long_size;
+ limit= events_waits_history_long_index.m_u32 % events_waits_history_long_size;
if (m_pos.m_index >= limit)
return HA_ERR_RECORD_DELETED;
@@ -998,7 +1125,7 @@ int table_events_waits_history_long::rnd_pos(const void *pos)
if (wait->m_wait_class == NO_WAIT_CLASS)
return HA_ERR_RECORD_DELETED;
- make_row(false, wait->m_thread, wait);
+ make_row(wait);
return 0;
}
@@ -1008,3 +1135,9 @@ int table_events_waits_history_long::delete_all_rows(void)
return 0;
}
+ha_rows
+table_events_waits_history_long::get_row_count(void)
+{
+ return events_waits_history_long_size;
+}
+
diff --git a/storage/perfschema/table_events_waits.h b/storage/perfschema/table_events_waits.h
index 90c1d341e5d..9173ec30594 100644
--- a/storage/perfschema/table_events_waits.h
+++ b/storage/perfschema/table_events_waits.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -150,12 +150,12 @@ protected:
{}
void clear_object_columns();
- int make_table_object_columns(volatile PFS_events_waits *wait);
- int make_file_object_columns(volatile PFS_events_waits *wait);
- int make_socket_object_columns(volatile PFS_events_waits *wait);
+ int make_table_object_columns(PFS_events_waits *wait);
+ int make_file_object_columns(PFS_events_waits *wait);
+ int make_socket_object_columns(PFS_events_waits *wait);
+ int make_metadata_lock_object_columns(PFS_events_waits *wait);
- void make_row(bool thread_own_wait, PFS_thread *pfs_thread,
- volatile PFS_events_waits *wait);
+ void make_row(PFS_events_waits *wait);
/** Current row. */
row_events_waits m_row;
@@ -171,6 +171,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -190,6 +191,8 @@ private:
/** Table share lock. */
static THR_LOCK m_table_lock;
+ void make_row(PFS_thread *thread, PFS_events_waits *wait);
+
/** Current position. */
pos_events_waits_current m_pos;
/** Next position. */
@@ -204,6 +207,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -220,6 +224,8 @@ private:
/** Table share lock. */
static THR_LOCK m_table_lock;
+ void make_row(PFS_thread *thread, PFS_events_waits *wait);
+
/** Current position. */
pos_events_waits_history m_pos;
/** Next position. */
@@ -234,6 +240,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_events_waits_summary.cc b/storage/perfschema/table_events_waits_summary.cc
index 03477f6d542..71ae6eae685 100644
--- a/storage/perfschema/table_events_waits_summary.cc
+++ b/storage/perfschema/table_events_waits_summary.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,12 +26,13 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_events_waits_summary.h"
#include "pfs_global.h"
+#include "field.h"
THR_LOCK table_events_waits_summary_by_instance::m_table_lock;
@@ -40,11 +41,10 @@ table_events_waits_summary_by_instance::m_share=
{
{ C_STRING_WITH_LEN("events_waits_summary_by_instance") },
&pfs_truncatable_acl,
- &table_events_waits_summary_by_instance::create,
+ table_events_waits_summary_by_instance::create,
NULL, /* write_row */
- &table_events_waits_summary_by_instance::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_events_waits_summary_by_instance::delete_all_rows,
+ table_all_instr::get_row_count,
sizeof(pos_all_instr),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_summary_by_instance("
@@ -54,7 +54,8 @@ table_events_waits_summary_by_instance::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_events_waits_summary_by_instance::create(void)
@@ -78,7 +79,7 @@ void table_events_waits_summary_by_instance
const void *object_instance_begin,
PFS_single_stat *pfs_stat)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
/*
diff --git a/storage/perfschema/table_events_waits_summary.h b/storage/perfschema/table_events_waits_summary.h
index 53f1bed7987..51d8a62e02d 100644
--- a/storage/perfschema/table_events_waits_summary.h
+++ b/storage/perfschema/table_events_waits_summary.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_ews_by_account_by_event_name.cc b/storage/perfschema/table_ews_by_account_by_event_name.cc
index fa6258ec9ac..062450f3dbf 100644
--- a/storage/perfschema/table_ews_by_account_by_event_name.cc
+++ b/storage/perfschema/table_ews_by_account_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_ews_by_account_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_ews_by_account_by_event_name::m_table_lock;
@@ -44,19 +46,19 @@ table_ews_by_account_by_event_name::m_share=
table_ews_by_account_by_event_name::create,
NULL, /* write_row */
table_ews_by_account_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_ews_by_account_by_event_name::get_row_count,
sizeof(pos_ews_by_account_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_summary_by_account_by_event_name("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"HOST CHAR(60) collate utf8_bin default null,"
"EVENT_NAME VARCHAR(128) not null,"
"COUNT_STAR BIGINT unsigned not null,"
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -73,6 +75,12 @@ table_ews_by_account_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_ews_by_account_by_event_name::get_row_count(void)
+{
+ return global_account_container.get_row_count() * wait_class_max;
+}
+
table_ews_by_account_by_event_name::table_ews_by_account_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -88,13 +96,14 @@ int table_ews_by_account_by_event_name::rnd_next(void)
{
PFS_account *account;
PFS_instr_class *instr_class;
+ bool has_more_account= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_account();
+ has_more_account;
m_pos.next_account())
{
- account= &account_array[m_pos.m_index_1];
- if (account->m_lock.is_populated())
+ account= global_account_container.get(m_pos.m_index_1, & has_more_account);
+ if (account != NULL)
{
for ( ;
m_pos.has_more_view();
@@ -123,6 +132,9 @@ int table_ews_by_account_by_event_name::rnd_next(void)
case pos_ews_by_account_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_account_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
instr_class= NULL;
DBUG_ASSERT(false);
@@ -149,10 +161,9 @@ table_ews_by_account_by_event_name::rnd_pos(const void *pos)
PFS_instr_class *instr_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < account_max);
- account= &account_array[m_pos.m_index_1];
- if (! account->m_lock.is_populated())
+ account= global_account_container.get(m_pos.m_index_1);
+ if (account == NULL)
return HA_ERR_RECORD_DELETED;
switch (m_pos.m_index_2)
@@ -178,6 +189,9 @@ table_ews_by_account_by_event_name::rnd_pos(const void *pos)
case pos_ews_by_account_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_account_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
instr_class= NULL;
DBUG_ASSERT(false);
@@ -194,7 +208,7 @@ table_ews_by_account_by_event_name::rnd_pos(const void *pos)
void table_ews_by_account_by_event_name
::make_row(PFS_account *account, PFS_instr_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
account->m_lock.begin_optimistic_lock(&lock);
@@ -205,7 +219,10 @@ void table_ews_by_account_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_wait_visitor visitor(klass);
- PFS_connection_iterator::visit_account(account, true, & visitor);
+ PFS_connection_iterator::visit_account(account,
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! account->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_ews_by_account_by_event_name.h b/storage/perfschema/table_ews_by_account_by_event_name.h
index 7cde09183e3..e64a61b229c 100644
--- a/storage/perfschema/table_ews_by_account_by_event_name.h
+++ b/storage/perfschema/table_ews_by_account_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -57,7 +57,7 @@ struct row_ews_by_account_by_event_name
/**
Position of a cursor on
PERFORMANCE_SCHEMA.EVENTS_WAITS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
- Index 1 on user@host (0 based)
+ Index 1 on account (0 based)
Index 2 on instrument view
Index 3 on instrument class (1 based)
*/
@@ -75,9 +75,6 @@ struct pos_ews_by_account_by_event_name
m_index_3= 1;
}
- inline bool has_more_account(void)
- { return (m_index_1 < account_max); }
-
inline void next_account(void)
{
m_index_1++;
@@ -103,6 +100,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_ews_by_host_by_event_name.cc b/storage/perfschema/table_ews_by_host_by_event_name.cc
index e3ef7ca3720..25f0edc900c 100644
--- a/storage/perfschema/table_ews_by_host_by_event_name.cc
+++ b/storage/perfschema/table_ews_by_host_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -34,6 +34,8 @@
#include "pfs_global.h"
#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_ews_by_host_by_event_name::m_table_lock;
@@ -45,8 +47,7 @@ table_ews_by_host_by_event_name::m_share=
table_ews_by_host_by_event_name::create,
NULL, /* write_row */
table_ews_by_host_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_ews_by_host_by_event_name::get_row_count,
sizeof(pos_ews_by_host_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_summary_by_host_by_event_name("
@@ -56,7 +57,8 @@ table_ews_by_host_by_event_name::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -74,6 +76,12 @@ table_ews_by_host_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_ews_by_host_by_event_name::get_row_count(void)
+{
+ return global_host_container.get_row_count() * wait_class_max;
+}
+
table_ews_by_host_by_event_name::table_ews_by_host_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -89,13 +97,14 @@ int table_ews_by_host_by_event_name::rnd_next(void)
{
PFS_host *host;
PFS_instr_class *instr_class;
+ bool has_more_host= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_host();
+ has_more_host;
m_pos.next_host())
{
- host= &host_array[m_pos.m_index_1];
- if (host->m_lock.is_populated())
+ host= global_host_container.get(m_pos.m_index_1, & has_more_host);
+ if (host != NULL)
{
for ( ;
m_pos.has_more_view();
@@ -124,6 +133,9 @@ int table_ews_by_host_by_event_name::rnd_next(void)
case pos_ews_by_host_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_host_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
instr_class= NULL;
DBUG_ASSERT(false);
@@ -150,10 +162,9 @@ table_ews_by_host_by_event_name::rnd_pos(const void *pos)
PFS_instr_class *instr_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < host_max);
- host= &host_array[m_pos.m_index_1];
- if (! host->m_lock.is_populated())
+ host= global_host_container.get(m_pos.m_index_1);
+ if (host == NULL)
return HA_ERR_RECORD_DELETED;
switch (m_pos.m_index_2)
@@ -179,6 +190,9 @@ table_ews_by_host_by_event_name::rnd_pos(const void *pos)
case pos_ews_by_host_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_host_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
instr_class= NULL;
DBUG_ASSERT(false);
@@ -196,7 +210,7 @@ table_ews_by_host_by_event_name::rnd_pos(const void *pos)
void table_ews_by_host_by_event_name
::make_row(PFS_host *host, PFS_instr_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
host->m_lock.begin_optimistic_lock(&lock);
@@ -207,7 +221,11 @@ void table_ews_by_host_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_wait_visitor visitor(klass);
- PFS_connection_iterator::visit_host(host, true, true, & visitor);
+ PFS_connection_iterator::visit_host(host,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! host->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_ews_by_host_by_event_name.h b/storage/perfschema/table_ews_by_host_by_event_name.h
index 8ce44a96617..074ec0be822 100644
--- a/storage/perfschema/table_ews_by_host_by_event_name.h
+++ b/storage/perfschema/table_ews_by_host_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -75,9 +75,6 @@ struct pos_ews_by_host_by_event_name
m_index_3= 1;
}
- inline bool has_more_host(void)
- { return (m_index_1 < host_max); }
-
inline void next_host(void)
{
m_index_1++;
@@ -103,6 +100,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_ews_by_thread_by_event_name.cc b/storage/perfschema/table_ews_by_thread_by_event_name.cc
index 33f9765310b..11b8a84dd46 100644
--- a/storage/perfschema/table_ews_by_thread_by_event_name.cc
+++ b/storage/perfschema/table_ews_by_thread_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_ews_by_thread_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_ews_by_thread_by_event_name::m_table_lock;
@@ -44,8 +46,7 @@ table_ews_by_thread_by_event_name::m_share=
table_ews_by_thread_by_event_name::create,
NULL, /* write_row */
table_ews_by_thread_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_ews_by_thread_by_event_name::get_row_count,
sizeof(pos_ews_by_thread_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_summary_by_thread_by_event_name("
@@ -55,7 +56,8 @@ table_ews_by_thread_by_event_name::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -71,6 +73,12 @@ table_ews_by_thread_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_ews_by_thread_by_event_name::get_row_count(void)
+{
+ return global_thread_container.get_row_count() * wait_class_max;
+}
+
table_ews_by_thread_by_event_name::table_ews_by_thread_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -86,18 +94,14 @@ int table_ews_by_thread_by_event_name::rnd_next(void)
{
PFS_thread *thread;
PFS_instr_class *instr_class;
+ bool has_more_thread= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_thread();
+ has_more_thread;
m_pos.next_thread())
{
- thread= &thread_array[m_pos.m_index_1];
-
- /*
- Important note: the thread scan is the outer loop (index 1),
- to minimize the number of calls to atomic operations.
- */
- if (thread->m_lock.is_populated())
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
{
for ( ;
m_pos.has_more_view();
@@ -126,6 +130,9 @@ int table_ews_by_thread_by_event_name::rnd_next(void)
case pos_ews_by_thread_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_thread_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
DBUG_ASSERT(false);
instr_class= NULL;
@@ -152,52 +159,55 @@ table_ews_by_thread_by_event_name::rnd_pos(const void *pos)
PFS_instr_class *instr_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < thread_max);
-
- thread= &thread_array[m_pos.m_index_1];
- if (! thread->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
- switch (m_pos.m_index_2)
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
{
- case pos_ews_by_thread_by_event_name::VIEW_MUTEX:
- instr_class= find_mutex_class(m_pos.m_index_3);
- break;
- case pos_ews_by_thread_by_event_name::VIEW_RWLOCK:
- instr_class= find_rwlock_class(m_pos.m_index_3);
- break;
- case pos_ews_by_thread_by_event_name::VIEW_COND:
- instr_class= find_cond_class(m_pos.m_index_3);
- break;
- case pos_ews_by_thread_by_event_name::VIEW_FILE:
- instr_class= find_file_class(m_pos.m_index_3);
- break;
- case pos_ews_by_thread_by_event_name::VIEW_TABLE:
- instr_class= find_table_class(m_pos.m_index_3);
- break;
- case pos_ews_by_thread_by_event_name::VIEW_SOCKET:
- instr_class= find_socket_class(m_pos.m_index_3);
- break;
- case pos_ews_by_thread_by_event_name::VIEW_IDLE:
- instr_class= find_idle_class(m_pos.m_index_3);
- break;
- default:
- DBUG_ASSERT(false);
- instr_class= NULL;
- }
+ switch (m_pos.m_index_2)
+ {
+ case pos_ews_by_thread_by_event_name::VIEW_MUTEX:
+ instr_class= find_mutex_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_RWLOCK:
+ instr_class= find_rwlock_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_COND:
+ instr_class= find_cond_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_FILE:
+ instr_class= find_file_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_TABLE:
+ instr_class= find_table_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_SOCKET:
+ instr_class= find_socket_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_IDLE:
+ instr_class= find_idle_class(m_pos.m_index_3);
+ break;
+ case pos_ews_by_thread_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ instr_class= NULL;
+ }
- if (instr_class)
- {
- make_row(thread, instr_class);
- return 0;
+ if (instr_class)
+ {
+ make_row(thread, instr_class);
+ return 0;
+ }
}
+
return HA_ERR_RECORD_DELETED;
}
void table_ews_by_thread_by_event_name
::make_row(PFS_thread *thread, PFS_instr_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
/* Protect this reader against a thread termination */
@@ -211,9 +221,9 @@ void table_ews_by_thread_by_event_name
PFS_connection_iterator::visit_thread(thread, &visitor);
/*
- If the aggregation for this class is deferred, then we must pull the
- current wait stats from the instances associated with this thread.
- */
+ If the aggregation for this class is deferred, then we must pull the
+ current wait stats from the instances associated with this thread.
+ */
if (klass->is_deferred())
{
/* Visit instances owned by this thread. Do not visit the class. */
diff --git a/storage/perfschema/table_ews_by_thread_by_event_name.h b/storage/perfschema/table_ews_by_thread_by_event_name.h
index b67664bfced..d3850e93c0a 100644
--- a/storage/perfschema/table_ews_by_thread_by_event_name.h
+++ b/storage/perfschema/table_ews_by_thread_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -74,9 +74,6 @@ struct pos_ews_by_thread_by_event_name
m_index_3= 1;
}
- inline bool has_more_thread(void)
- { return (m_index_1 < thread_max); }
-
inline void next_thread(void)
{
m_index_1++;
@@ -102,6 +99,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_ews_by_user_by_event_name.cc b/storage/perfschema/table_ews_by_user_by_event_name.cc
index cb99f749a9c..5425d773f85 100644
--- a/storage/perfschema/table_ews_by_user_by_event_name.cc
+++ b/storage/perfschema/table_ews_by_user_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,14 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_ews_by_user_by_event_name.h"
#include "pfs_global.h"
-#include "pfs_account.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_ews_by_user_by_event_name::m_table_lock;
@@ -45,18 +46,18 @@ table_ews_by_user_by_event_name::m_share=
table_ews_by_user_by_event_name::create,
NULL, /* write_row */
table_ews_by_user_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_ews_by_user_by_event_name::get_row_count,
sizeof(pos_ews_by_user_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_summary_by_user_by_event_name("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"EVENT_NAME VARCHAR(128) not null,"
"COUNT_STAR BIGINT unsigned not null,"
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -74,6 +75,12 @@ table_ews_by_user_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_ews_by_user_by_event_name::get_row_count(void)
+{
+ return global_user_container.get_row_count() * wait_class_max;
+}
+
table_ews_by_user_by_event_name::table_ews_by_user_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -89,13 +96,14 @@ int table_ews_by_user_by_event_name::rnd_next(void)
{
PFS_user *user;
PFS_instr_class *instr_class;
+ bool has_more_user= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_user();
+ has_more_user;
m_pos.next_user())
{
- user= &user_array[m_pos.m_index_1];
- if (user->m_lock.is_populated())
+ user= global_user_container.get(m_pos.m_index_1, & has_more_user);
+ if (user != NULL)
{
for ( ;
m_pos.has_more_view();
@@ -124,6 +132,9 @@ int table_ews_by_user_by_event_name::rnd_next(void)
case pos_ews_by_user_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_user_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
instr_class= NULL;
DBUG_ASSERT(false);
@@ -150,10 +161,9 @@ table_ews_by_user_by_event_name::rnd_pos(const void *pos)
PFS_instr_class *instr_class;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index_1 < user_max);
- user= &user_array[m_pos.m_index_1];
- if (! user->m_lock.is_populated())
+ user= global_user_container.get(m_pos.m_index_1);
+ if (user == NULL)
return HA_ERR_RECORD_DELETED;
switch (m_pos.m_index_2)
@@ -179,6 +189,9 @@ table_ews_by_user_by_event_name::rnd_pos(const void *pos)
case pos_ews_by_user_by_event_name::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_3);
break;
+ case pos_ews_by_user_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_3);
+ break;
default:
instr_class= NULL;
DBUG_ASSERT(false);
@@ -196,7 +209,7 @@ table_ews_by_user_by_event_name::rnd_pos(const void *pos)
void table_ews_by_user_by_event_name
::make_row(PFS_user *user, PFS_instr_class *klass)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
user->m_lock.begin_optimistic_lock(&lock);
@@ -207,7 +220,11 @@ void table_ews_by_user_by_event_name
m_row.m_event_name.make_row(klass);
PFS_connection_wait_visitor visitor(klass);
- PFS_connection_iterator::visit_user(user, true, true, & visitor);
+ PFS_connection_iterator::visit_user(user,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! user->m_lock.end_optimistic_lock(&lock))
return;
diff --git a/storage/perfschema/table_ews_by_user_by_event_name.h b/storage/perfschema/table_ews_by_user_by_event_name.h
index f4f29534be4..b088c8e2015 100644
--- a/storage/perfschema/table_ews_by_user_by_event_name.h
+++ b/storage/perfschema/table_ews_by_user_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -75,9 +75,6 @@ struct pos_ews_by_user_by_event_name
m_index_3= 1;
}
- inline bool has_more_user(void)
- { return (m_index_1 < user_max); }
-
inline void next_user(void)
{
m_index_1++;
@@ -103,6 +100,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_ews_global_by_event_name.cc b/storage/perfschema/table_ews_global_by_event_name.cc
index 7420c6351fd..13839ddba2b 100644
--- a/storage/perfschema/table_ews_global_by_event_name.cc
+++ b/storage/perfschema/table_ews_global_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -35,6 +35,7 @@
#include "pfs_instr.h"
#include "pfs_timer.h"
#include "pfs_visitor.h"
+#include "field.h"
THR_LOCK table_ews_global_by_event_name::m_table_lock;
@@ -46,8 +47,7 @@ table_ews_global_by_event_name::m_share=
table_ews_global_by_event_name::create,
NULL, /* write_row */
table_ews_global_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_ews_global_by_event_name::get_row_count,
sizeof(pos_ews_global_by_event_name),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE events_waits_summary_global_by_event_name("
@@ -56,7 +56,8 @@ table_ews_global_by_event_name::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -75,6 +76,12 @@ table_ews_global_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_ews_global_by_event_name::get_row_count(void)
+{
+ return wait_class_max;
+}
+
table_ews_global_by_event_name::table_ews_global_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -169,6 +176,15 @@ int table_ews_global_by_event_name::rnd_next(void)
return 0;
}
break;
+ case pos_ews_global_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_2);
+ if (instr_class)
+ {
+ make_metadata_row(instr_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ break;
default:
break;
}
@@ -247,6 +263,17 @@ table_ews_global_by_event_name::rnd_pos(const void *pos)
return 0;
}
break;
+ case pos_ews_global_by_event_name::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_2);
+ if (instr_class)
+ {
+ make_metadata_row(instr_class);
+ return 0;
+ }
+ break;
+ default:
+ DBUG_ASSERT(false);
+ break;
}
return HA_ERR_RECORD_DELETED;
@@ -324,7 +351,7 @@ void table_ews_global_by_event_name
PFS_table_lock_wait_visitor visitor;
PFS_object_iterator::visit_all_tables(& visitor);
-
+
get_normalizer(klass);
m_row.m_stat.set(m_normalizer, & visitor.m_stat);
m_row_exists= true;
@@ -351,8 +378,27 @@ void table_ews_global_by_event_name
PFS_connection_wait_visitor visitor(klass);
PFS_connection_iterator::visit_global(false, /* hosts */
false, /* users */
- false, /* accts */
- true, /* threads */ &visitor);
+ false, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ &visitor);
+ get_normalizer(klass);
+ m_row.m_stat.set(m_normalizer, &visitor.m_stat);
+ m_row_exists= true;
+}
+
+void table_ews_global_by_event_name
+::make_metadata_row(PFS_instr_class *klass)
+{
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_wait_visitor visitor(klass);
+ PFS_connection_iterator::visit_global(false, /* hosts */
+ true, /* users */
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ &visitor);
get_normalizer(klass);
m_row.m_stat.set(m_normalizer, &visitor.m_stat);
m_row_exists= true;
diff --git a/storage/perfschema/table_ews_global_by_event_name.h b/storage/perfschema/table_ews_global_by_event_name.h
index 8157d274112..a9deb97a52d 100644
--- a/storage/perfschema/table_ews_global_by_event_name.h
+++ b/storage/perfschema/table_ews_global_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -88,6 +88,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -114,6 +115,7 @@ protected:
void make_table_lock_row(PFS_instr_class *klass);
void make_socket_row(PFS_socket_class *klass);
void make_idle_row(PFS_instr_class *klass);
+ void make_metadata_row(PFS_instr_class *klass);
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_file_instances.cc b/storage/perfschema/table_file_instances.cc
index b323df83ad2..ca77b606200 100644
--- a/storage/perfschema/table_file_instances.cc
+++ b/storage/perfschema/table_file_instances.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,12 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_file_instances.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_file_instances::m_table_lock;
@@ -40,17 +42,17 @@ table_file_instances::m_share=
{
{ C_STRING_WITH_LEN("file_instances") },
&pfs_readonly_acl,
- &table_file_instances::create,
+ table_file_instances::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ table_file_instances::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE file_instances("
"FILE_NAME VARCHAR(512) not null,"
"EVENT_NAME VARCHAR(128) not null,"
- "OPEN_COUNT INTEGER unsigned not null)") }
+ "OPEN_COUNT INTEGER unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_file_instances::create(void)
@@ -58,6 +60,12 @@ PFS_engine_table* table_file_instances::create(void)
return new table_file_instances();
}
+ha_rows
+table_file_instances::get_row_count(void)
+{
+ return global_file_container.get_row_count();
+}
+
table_file_instances::table_file_instances()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -73,17 +81,14 @@ int table_file_instances::rnd_next(void)
{
PFS_file *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < file_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_file_iterator it= global_file_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &file_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -94,19 +99,20 @@ int table_file_instances::rnd_pos(const void *pos)
PFS_file *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < file_max);
- pfs= &file_array[m_pos.m_index];
- if (! pfs->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
+ pfs= global_file_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
- make_row(pfs);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
void table_file_instances::make_row(PFS_file *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_file_class *safe_class;
m_row_exists= false;
diff --git a/storage/perfschema/table_file_instances.h b/storage/perfschema/table_file_instances.h
index 5b44e63028e..cb3d39d46fb 100644
--- a/storage/perfschema/table_file_instances.h
+++ b/storage/perfschema/table_file_instances.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -58,6 +58,7 @@ public:
/** Table share */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_file_summary_by_event_name.cc b/storage/perfschema/table_file_summary_by_event_name.cc
index 459b2bf99a6..404b58187ff 100644
--- a/storage/perfschema/table_file_summary_by_event_name.cc
+++ b/storage/perfschema/table_file_summary_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -21,18 +21,19 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
/**
- @file storage/perfschema/table_file_summary.cc
+ @file storage/perfschema/table_file_summary_by_event_name.cc
Table FILE_SUMMARY_BY_EVENT_NAME(implementation).
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_file_summary_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "field.h"
THR_LOCK table_file_summary_by_event_name::m_table_lock;
@@ -41,11 +42,10 @@ table_file_summary_by_event_name::m_share=
{
{ C_STRING_WITH_LEN("file_summary_by_event_name") },
&pfs_truncatable_acl,
- &table_file_summary_by_event_name::create,
+ table_file_summary_by_event_name::create,
NULL, /* write_row */
table_file_summary_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_file_summary_by_event_name::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE file_summary_by_event_name("
@@ -71,7 +71,8 @@ table_file_summary_by_event_name::m_share=
"SUM_TIMER_MISC BIGINT unsigned not null,"
"MIN_TIMER_MISC BIGINT unsigned not null,"
"AVG_TIMER_MISC BIGINT unsigned not null,"
- "MAX_TIMER_MISC BIGINT unsigned not null)") }
+ "MAX_TIMER_MISC BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_file_summary_by_event_name::create(void)
@@ -86,6 +87,12 @@ int table_file_summary_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_file_summary_by_event_name::get_row_count(void)
+{
+ return file_class_max;
+}
+
table_file_summary_by_event_name::table_file_summary_by_event_name()
: PFS_engine_table(&m_share, &m_pos),
m_pos(1), m_next_pos(1)
@@ -132,7 +139,7 @@ int table_file_summary_by_event_name::rnd_pos(const void *pos)
/**
Build a row.
- @param klass the file class the cursor is reading
+ @param file_class the file class the cursor is reading
*/
void table_file_summary_by_event_name::make_row(PFS_file_class *file_class)
{
@@ -142,7 +149,7 @@ void table_file_summary_by_event_name::make_row(PFS_file_class *file_class)
PFS_instance_iterator::visit_file_instances(file_class, &visitor);
time_normalizer *normalizer= time_normalizer::get(wait_timer);
-
+
/* Collect timer and byte count stats */
m_row.m_io_stat.set(normalizer, &visitor.m_file_io_stat);
m_row_exists= true;
diff --git a/storage/perfschema/table_file_summary_by_event_name.h b/storage/perfschema/table_file_summary_by_event_name.h
index b8cb293cb07..ae2124fe763 100644
--- a/storage/perfschema/table_file_summary_by_event_name.h
+++ b/storage/perfschema/table_file_summary_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -59,6 +59,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_file_summary_by_instance.cc b/storage/perfschema/table_file_summary_by_instance.cc
index 3a30984405c..b05d1f24b60 100644
--- a/storage/perfschema/table_file_summary_by_instance.cc
+++ b/storage/perfschema/table_file_summary_by_instance.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -21,17 +21,19 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
/**
- @file storage/perfschema/table_file_summary.cc
+ @file storage/perfschema/table_file_summary_by_instance.cc
Table FILE_SUMMARY_BY_INSTANCE (implementation).
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_file_summary_by_instance.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_file_summary_by_instance::m_table_lock;
@@ -40,11 +42,10 @@ table_file_summary_by_instance::m_share=
{
{ C_STRING_WITH_LEN("file_summary_by_instance") },
&pfs_truncatable_acl,
- &table_file_summary_by_instance::create,
+ table_file_summary_by_instance::create,
NULL, /* write_row */
table_file_summary_by_instance::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_file_summary_by_instance::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE file_summary_by_instance("
@@ -72,7 +73,8 @@ table_file_summary_by_instance::m_share=
"SUM_TIMER_MISC BIGINT unsigned not null,"
"MIN_TIMER_MISC BIGINT unsigned not null,"
"AVG_TIMER_MISC BIGINT unsigned not null,"
- "MAX_TIMER_MISC BIGINT unsigned not null)") }
+ "MAX_TIMER_MISC BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_file_summary_by_instance::create(void)
@@ -86,6 +88,12 @@ int table_file_summary_by_instance::delete_all_rows(void)
return 0;
}
+ha_rows
+table_file_summary_by_instance::get_row_count(void)
+{
+ return global_file_container.get_row_count();
+}
+
table_file_summary_by_instance::table_file_summary_by_instance()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -101,17 +109,14 @@ int table_file_summary_by_instance::rnd_next(void)
{
PFS_file *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < file_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_file_iterator it= global_file_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &file_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -122,14 +127,15 @@ int table_file_summary_by_instance::rnd_pos(const void *pos)
PFS_file *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < file_max);
- pfs= &file_array[m_pos.m_index];
- if (! pfs->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
+ pfs= global_file_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
- make_row(pfs);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
/**
@@ -138,7 +144,7 @@ int table_file_summary_by_instance::rnd_pos(const void *pos)
*/
void table_file_summary_by_instance::make_row(PFS_file *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_file_class *safe_class;
m_row_exists= false;
diff --git a/storage/perfschema/table_file_summary_by_instance.h b/storage/perfschema/table_file_summary_by_instance.h
index 0e7ce6958b2..7ea90bac056 100644
--- a/storage/perfschema/table_file_summary_by_instance.h
+++ b/storage/perfschema/table_file_summary_by_instance.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011 Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -67,6 +67,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_global_status.cc b/storage/perfschema/table_global_status.cc
new file mode 100644
index 00000000000..a8d5bacf2f3
--- /dev/null
+++ b/storage/perfschema/table_global_status.cc
@@ -0,0 +1,190 @@
+/* Copyright (c) 2015, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_global_status.cc
+ Table global_status (implementation).
+*/
+
+#include "my_global.h"
+#include "table_global_status.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+
+THR_LOCK table_global_status::m_table_lock;
+
+PFS_engine_table_share
+table_global_status::m_share=
+{
+ { C_STRING_WITH_LEN("global_status") },
+ &pfs_truncatable_world_acl,
+ table_global_status::create,
+ NULL, /* write_row */
+ table_global_status::delete_all_rows,
+ table_global_status::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE global_status("
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ true /* perpetual */
+};
+
+PFS_engine_table*
+table_global_status::create(void)
+{
+ return new table_global_status();
+}
+
+int table_global_status::delete_all_rows(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ reset_status_by_thread();
+ reset_status_by_account();
+ reset_status_by_user();
+ reset_status_by_host();
+ reset_global_status();
+ mysql_mutex_unlock(&LOCK_status);
+ return 0;
+}
+
+ha_rows table_global_status::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ ha_rows status_var_count= all_status_vars.elements;
+ mysql_mutex_unlock(&LOCK_status);
+ return status_var_count;
+}
+
+table_global_status::table_global_status()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_status_cache(false), m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_global_status::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+int table_global_status::rnd_init(bool scan)
+{
+ /* Build a cache of all global status variables. Sum across threads. */
+ m_status_cache.materialize_global();
+
+ /* Record the current number of status variables to detect subsequent changes. */
+ ulonglong status_version= m_status_cache.get_status_array_version();
+
+ /*
+ The table context holds the current version of the global status array.
+ If scan == true, then allocate a new context from mem_root and store in TLS.
+ If scan == false, then restore from TLS.
+ */
+ m_context= (table_global_status_context *)current_thd->alloc(sizeof(table_global_status_context));
+ new(m_context) table_global_status_context(status_version, !scan);
+ return 0;
+}
+
+int table_global_status::rnd_next(void)
+{
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < m_status_cache.size();
+ m_pos.next())
+ {
+ const Status_variable *status_var= m_status_cache.get(m_pos.m_index);
+ if (status_var != NULL)
+ {
+ make_row(status_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_global_status::rnd_pos(const void *pos)
+{
+ /* If global status array has changed, do nothing. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+ const Status_variable *status_var= m_status_cache.get(m_pos.m_index);
+ if (status_var != NULL)
+ {
+ make_row(status_var);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_global_status
+::make_row(const Status_variable *status_var)
+{
+ m_row_exists= false;
+ if (status_var->is_null())
+ return;
+ m_row.m_variable_name.make_row(status_var->m_name, status_var->m_name_length);
+ m_row.m_variable_value.make_row(status_var);
+ m_row_exists= true;
+}
+
+int table_global_status
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 1: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_global_status.h b/storage/perfschema/table_global_status.h
new file mode 100644
index 00000000000..a97ea9d0041
--- /dev/null
+++ b/storage/perfschema/table_global_status.h
@@ -0,0 +1,118 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_GLOBAL_STATUS_H
+#define TABLE_GLOBAL_STATUS_H
+
+/**
+ @file storage/perfschema/table_global_status.h
+ Table global_status (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_variable.h"
+#include "table_helper.h"
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.GLOBAL_STATUS.
+*/
+struct row_global_status
+{
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Store and retrieve table state information for queries that reinstantiate
+ the table object.
+*/
+class table_global_status_context : public PFS_table_context
+{
+public:
+ table_global_status_context(ulonglong current_version, bool restore) :
+ PFS_table_context(current_version, restore, THR_PFS_SG) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.GLOBAL_STATUS. */
+class table_global_status : public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_global_status();
+
+public:
+ ~table_global_status()
+ {}
+
+protected:
+ void make_row(const Status_variable *system_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD variables. */
+ PFS_status_variable_cache m_status_cache;
+ /** Current row. */
+ row_global_status m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with global status array version. */
+ table_global_status_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_global_variables.cc b/storage/perfschema/table_global_variables.cc
new file mode 100644
index 00000000000..117e06e36bf
--- /dev/null
+++ b/storage/perfschema/table_global_variables.cc
@@ -0,0 +1,184 @@
+/* Copyright (c) 2015, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_global_variables.cc
+ Table GLOBAL_VARIABLES (implementation).
+*/
+
+#include "my_global.h"
+#include "table_global_variables.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+
+THR_LOCK table_global_variables::m_table_lock;
+
+PFS_engine_table_share
+table_global_variables::m_share=
+{
+ { C_STRING_WITH_LEN("global_variables") },
+ &pfs_readonly_world_acl,
+ table_global_variables::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_global_variables::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE global_variables("
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ true /* perpetual */
+};
+
+PFS_engine_table*
+table_global_variables::create(void)
+{
+ return new table_global_variables();
+}
+
+ha_rows table_global_variables::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_plugin_delete);
+ mysql_prlock_rdlock(&LOCK_system_variables_hash);
+ ha_rows system_var_count= get_system_variable_hash_records();
+ mysql_prlock_unlock(&LOCK_system_variables_hash);
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return system_var_count;
+}
+
+table_global_variables::table_global_variables()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_sysvar_cache(false), m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_global_variables::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+int table_global_variables::rnd_init(bool scan)
+{
+ /*
+ Build a list of system variables from the global system variable hash.
+ Filter by scope.
+ */
+ m_sysvar_cache.materialize_global();
+
+ /* Record the version of the system variable hash. */
+ ulonglong hash_version= m_sysvar_cache.get_sysvar_hash_version();
+
+ /*
+ The table context holds the current version of the system variable hash.
+ If scan == true, then allocate a new context from mem_root and store in TLS.
+ If scan == false, then restore from TLS.
+ */
+ m_context= (table_global_variables_context *)current_thd->alloc(sizeof(table_global_variables_context));
+ new(m_context) table_global_variables_context(hash_version, !scan);
+ return 0;
+}
+
+int table_global_variables::rnd_next(void)
+{
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < m_sysvar_cache.size();
+ m_pos.next())
+ {
+ const System_variable *system_var= m_sysvar_cache.get(m_pos.m_index);
+ if (system_var != NULL)
+ {
+ make_row(system_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_global_variables::rnd_pos(const void *pos)
+{
+ /* If system variable hash changes, do nothing. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index < m_sysvar_cache.size());
+
+ const System_variable *system_var= m_sysvar_cache.get(m_pos.m_index);
+ if (system_var != NULL)
+ {
+ make_row(system_var);
+ return 0;
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_global_variables
+::make_row(const System_variable *system_var)
+{
+ m_row_exists= false;
+ if (system_var->is_null() || system_var->is_ignored())
+ return;
+ m_row.m_variable_name.make_row(system_var->m_name, system_var->m_name_length);
+ m_row.m_variable_value.make_row(system_var);
+ m_row_exists= true;
+}
+
+int table_global_variables
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 1: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_global_variables.h b/storage/perfschema/table_global_variables.h
new file mode 100644
index 00000000000..b9124e76f65
--- /dev/null
+++ b/storage/perfschema/table_global_variables.h
@@ -0,0 +1,117 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_GLOBAL_VARIABLES_H
+#define TABLE_GLOBAL_VARIABLES_H
+
+/**
+ @file storage/perfschema/table_global_variables.h
+ Table GLOBAL_VARIABLES (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_variable.h"
+#include "table_helper.h"
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ Store and retrieve table state information during queries that reinstantiate
+ the table object.
+*/
+class table_global_variables_context : public PFS_table_context
+{
+public:
+ table_global_variables_context(ulonglong hash_version, bool restore) :
+ PFS_table_context(hash_version, restore, THR_PFS_VG) {}
+};
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.GLOBAL_VARIABLES.
+*/
+struct row_global_variables
+{
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/** Table PERFORMANCE_SCHEMA.GLOBAL_VARIABLES. */
+class table_global_variables : public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_global_variables();
+
+public:
+ ~table_global_variables()
+ {}
+
+protected:
+ void make_row(const System_variable *system_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD variables. */
+ PFS_system_variable_cache m_sysvar_cache;
+ /** Current row. */
+ row_global_variables m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with system variable hash version. */
+ table_global_variables_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_helper.cc b/storage/perfschema/table_helper.cc
index d6bdd894483..55b1397143e 100644
--- a/storage/perfschema/table_helper.cc
+++ b/storage/perfschema/table_helper.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2016, 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, version 2.0,
@@ -26,13 +26,16 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_engine_table.h"
#include "table_helper.h"
#include "pfs_host.h"
#include "pfs_user.h"
#include "pfs_account.h"
#include "pfs_instr.h"
+#include "pfs_program.h"
+#include "field.h"
+#include "pfs_variable.h"
int PFS_host_row::make_row(PFS_host *pfs)
{
@@ -147,7 +150,6 @@ int PFS_digest_row::make_row(PFS_statements_digest_stat* pfs)
else
{
m_digest_length= 0;
- m_digest_text.length(0);
}
return 0;
@@ -203,6 +205,98 @@ int PFS_object_row::make_row(PFS_table_share *pfs)
return 0;
}
+int PFS_object_row::make_row(PFS_program *pfs)
+{
+ m_object_type= pfs->m_type;
+
+ m_schema_name_length= pfs->m_schema_name_length;
+ if (m_schema_name_length > sizeof(m_schema_name))
+ return 1;
+ if (m_schema_name_length > 0)
+ memcpy(m_schema_name, pfs->m_schema_name, sizeof(m_schema_name));
+
+ m_object_name_length= pfs->m_object_name_length;
+ if (m_object_name_length > sizeof(m_object_name))
+ return 1;
+ if (m_object_name_length > 0)
+ memcpy(m_object_name, pfs->m_object_name, sizeof(m_object_name));
+
+ return 0;
+}
+
+int PFS_object_row::make_row(const MDL_key *mdl)
+{
+ MDL_key user_lock_workaround;
+ switch(mdl->mdl_namespace())
+ {
+ case MDL_key::BACKUP:
+ m_object_type= OBJECT_TYPE_BACKUP;
+ m_schema_name_length= 0;
+ m_object_name_length= 0;
+ break;
+ case MDL_key::SCHEMA:
+ m_object_type= OBJECT_TYPE_SCHEMA;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= 0;
+ break;
+ case MDL_key::TABLE:
+ m_object_type= OBJECT_TYPE_TABLE;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::FUNCTION:
+ m_object_type= OBJECT_TYPE_FUNCTION;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::PROCEDURE:
+ m_object_type= OBJECT_TYPE_PROCEDURE;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::PACKAGE_BODY:
+ m_object_type= OBJECT_TYPE_PACKAGE_BODY;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::TRIGGER:
+ m_object_type= OBJECT_TYPE_TRIGGER;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::EVENT:
+ m_object_type= OBJECT_TYPE_EVENT;
+ m_schema_name_length= mdl->db_name_length();
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::USER_LOCK:
+ m_object_type= OBJECT_TYPE_USER_LEVEL_LOCK;
+ user_lock_workaround.mdl_key_init(MDL_key::USER_LOCK, "", mdl->db_name());
+ mdl=& user_lock_workaround;
+ m_schema_name_length= 0;
+ m_object_name_length= mdl->name_length();
+ break;
+ case MDL_key::NAMESPACE_END:
+ default:
+ m_object_type= NO_OBJECT_TYPE;
+ m_schema_name_length= 0;
+ m_object_name_length= 0;
+ break;
+ }
+
+ if (m_schema_name_length > sizeof(m_schema_name))
+ return 1;
+ if (m_schema_name_length > 0)
+ memcpy(m_schema_name, mdl->db_name(), m_schema_name_length);
+
+ if (m_object_name_length > sizeof(m_object_name))
+ return 1;
+ if (m_object_name_length > 0)
+ memcpy(m_object_name, mdl->name(), m_object_name_length);
+
+ return 0;
+}
+
void PFS_object_row::set_field(uint index, Field *f)
{
switch(index)
@@ -221,21 +315,65 @@ void PFS_object_row::set_field(uint index, Field *f)
}
}
-int PFS_index_row::make_row(PFS_table_share *pfs, uint table_index)
+void PFS_object_row::set_nullable_field(uint index, Field *f)
+{
+ switch(index)
+ {
+ case 0: /* OBJECT_TYPE */
+ if (m_object_type != NO_OBJECT_TYPE)
+ set_field_object_type(f, m_object_type);
+ else
+ f->set_null();
+ break;
+ case 1: /* SCHEMA_NAME */
+ if (m_schema_name_length > 0)
+ PFS_engine_table::set_field_varchar_utf8(f, m_schema_name, m_schema_name_length);
+ else
+ f->set_null();
+ break;
+ case 2: /* OBJECT_NAME */
+ if (m_object_name_length > 0)
+ PFS_engine_table::set_field_varchar_utf8(f, m_object_name, m_object_name_length);
+ else
+ f->set_null();
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+}
+
+int PFS_index_row::make_row(PFS_table_share *pfs,
+ PFS_table_share_index *pfs_index,
+ uint table_index)
{
if (m_object_row.make_row(pfs))
return 1;
+ if (pfs_index == NULL)
+ {
+ if (table_index < MAX_INDEXES)
+ {
+ m_index_name_length= sprintf(m_index_name, "(index %d)", table_index);
+ }
+ else
+ {
+ m_index_name_length= 0;
+ }
+ return 0;
+ }
+
if (table_index < MAX_INDEXES)
{
- PFS_table_key *key= &pfs->m_keys[table_index];
- m_index_name_length= key->m_name_length;
+ m_index_name_length= pfs_index->m_key.m_name_length;
if (m_index_name_length > sizeof(m_index_name))
return 1;
- memcpy(m_index_name, key->m_name, sizeof(m_index_name));
+
+ memcpy(m_index_name, pfs_index->m_key.m_name, sizeof(m_index_name));
}
else
+ {
m_index_name_length= 0;
+ }
return 0;
}
@@ -334,6 +472,37 @@ void PFS_statement_stat_row::set_field(uint index, Field *f)
}
}
+void PFS_transaction_stat_row::set_field(uint index, Field *f)
+{
+ switch (index)
+ {
+ case 0: /* COUNT_STAR */
+ case 1: /* SUM_TIMER_WAIT */
+ case 2: /* MIN_TIMER_WAIT */
+ case 3: /* AVG_TIMER_WAIT */
+ case 4: /* MAX_TIMER_WAIT */
+ m_timer1_row.set_field(index, f);
+ break;
+ case 5: /* COUNT_READ_WRITE */
+ case 6: /* SUM_TIMER_READ_WRITE */
+ case 7: /* MIN_TIMER_READ_WRITE */
+ case 8: /* AVG_TIMER_READ_WRITE */
+ case 9: /* MAX_TIMER_READ_WRITE */
+ m_read_write_row.set_field(index-5, f);
+ break;
+ case 10: /* COUNT_READ_ONLY */
+ case 11: /* SUM_TIMER_READ_ONLY */
+ case 12: /* MIN_TIMER_READ_ONLY */
+ case 13: /* AVG_TIMER_READ_ONLY */
+ case 14: /* MAX_TIMER_READ_ONLY */
+ m_read_only_row.set_field(index-10, f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ break;
+ }
+}
+
void PFS_connection_stat_row::set_field(uint index, Field *f)
{
switch (index)
@@ -354,14 +523,374 @@ void set_field_object_type(Field *f, enum_object_type object_type)
{
switch (object_type)
{
+ case OBJECT_TYPE_EVENT:
+ PFS_engine_table::set_field_varchar_utf8(f, "EVENT", 5);
+ break;
+ case OBJECT_TYPE_FUNCTION:
+ PFS_engine_table::set_field_varchar_utf8(f, "FUNCTION", 8);
+ break;
+ case OBJECT_TYPE_PROCEDURE:
+ PFS_engine_table::set_field_varchar_utf8(f, "PROCEDURE", 9);
+ break;
case OBJECT_TYPE_TABLE:
PFS_engine_table::set_field_varchar_utf8(f, "TABLE", 5);
break;
case OBJECT_TYPE_TEMPORARY_TABLE:
PFS_engine_table::set_field_varchar_utf8(f, "TEMPORARY TABLE", 15);
break;
+ case OBJECT_TYPE_TRIGGER:
+ PFS_engine_table::set_field_varchar_utf8(f, "TRIGGER", 7);
+ break;
+ case OBJECT_TYPE_BACKUP:
+ PFS_engine_table::set_field_varchar_utf8(f, "BACKUP", 6);
+ break;
+ case OBJECT_TYPE_SCHEMA:
+ PFS_engine_table::set_field_varchar_utf8(f, "SCHEMA", 6);
+ break;
+ case OBJECT_TYPE_PACKAGE_BODY:
+ PFS_engine_table::set_field_varchar_utf8(f, "PACKAGE BODY", 12);
+ break;
+ case OBJECT_TYPE_USER_LEVEL_LOCK:
+ PFS_engine_table::set_field_varchar_utf8(f, "USER LEVEL LOCK", 15);
+ break;
+ case NO_OBJECT_TYPE:
default:
DBUG_ASSERT(false);
+ PFS_engine_table::set_field_varchar_utf8(f, "", 0);
+ break;
+ }
+}
+
+void set_field_lock_type(Field *f, PFS_TL_LOCK_TYPE lock_type)
+{
+ switch (lock_type)
+ {
+ case PFS_TL_READ:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ", 4);
+ break;
+ case PFS_TL_READ_WITH_SHARED_LOCKS:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ WITH SHARED LOCKS", 22);
+ break;
+ case PFS_TL_READ_HIGH_PRIORITY:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ HIGH PRIORITY", 18);
+ break;
+ case PFS_TL_READ_NO_INSERT:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ NO INSERT", 14);
+ break;
+ case PFS_TL_WRITE_ALLOW_WRITE:
+ PFS_engine_table::set_field_varchar_utf8(f, "WRITE ALLOW WRITE", 17);
+ break;
+ case PFS_TL_WRITE_CONCURRENT_INSERT:
+ PFS_engine_table::set_field_varchar_utf8(f, "WRITE CONCURRENT INSERT", 23);
+ break;
+ case PFS_TL_WRITE_LOW_PRIORITY:
+ PFS_engine_table::set_field_varchar_utf8(f, "WRITE LOW PRIORITY", 18);
+ break;
+ case PFS_TL_WRITE:
+ PFS_engine_table::set_field_varchar_utf8(f, "WRITE", 5);
+ break;
+ case PFS_TL_READ_EXTERNAL:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ EXTERNAL", 13);
+ break;
+ case PFS_TL_WRITE_EXTERNAL:
+ PFS_engine_table::set_field_varchar_utf8(f, "WRITE EXTERNAL", 14);
+ break;
+ case PFS_TL_NONE:
+ f->set_null();
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+}
+
+void set_field_mdl_type(Field *f, opaque_mdl_type mdl_type, bool backup)
+{
+ if (backup)
+ {
+ switch (mdl_type)
+ {
+ case MDL_BACKUP_START:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_START"));
+ break;
+ case MDL_BACKUP_FLUSH:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_FLUSH"));
+ break;
+ case MDL_BACKUP_WAIT_FLUSH:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_WAIT_FLUSH"));
+ break;
+ case MDL_BACKUP_WAIT_DDL:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_WAIT_DDL"));
+ break;
+ case MDL_BACKUP_WAIT_COMMIT:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_WAIT_COMMIT"));
+ break;
+ case MDL_BACKUP_FTWRL1:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_FTWRL1"));
+ break;
+ case MDL_BACKUP_FTWRL2:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_FTWRL2"));
+ break;
+ case MDL_BACKUP_DML:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_DML"));
+ break;
+ case MDL_BACKUP_TRANS_DML:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_TRANS_DML"));
+ break;
+ case MDL_BACKUP_SYS_DML:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_SYS_DML"));
+ break;
+ case MDL_BACKUP_DDL:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_DDL"));
+ break;
+ case MDL_BACKUP_BLOCK_DDL:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_BLOCK_DDL"));
+ break;
+ case MDL_BACKUP_ALTER_COPY:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_ALTER_COPY"));
+ break;
+ case MDL_BACKUP_COMMIT:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_COMMIT"));
+ break;
+ case MDL_BACKUP_END:
+ PFS_engine_table::set_field_varchar_utf8(f, STRING_WITH_LEN("BACKUP_END"));
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ else
+ {
+ enum_mdl_type e= (enum_mdl_type) mdl_type;
+ switch (e)
+ {
+ case MDL_INTENTION_EXCLUSIVE:
+ PFS_engine_table::set_field_varchar_utf8(f, "INTENTION_EXCLUSIVE", 19);
+ break;
+ case MDL_SHARED:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED", 6);
+ break;
+ case MDL_SHARED_HIGH_PRIO:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED_HIGH_PRIO", 16);
+ break;
+ case MDL_SHARED_READ:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED_READ", 11);
+ break;
+ case MDL_SHARED_WRITE:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED_WRITE", 12);
+ break;
+ case MDL_SHARED_UPGRADABLE:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED_UPGRADABLE", 17);
+ break;
+ case MDL_SHARED_NO_WRITE:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED_NO_WRITE", 15);
+ break;
+ case MDL_SHARED_NO_READ_WRITE:
+ PFS_engine_table::set_field_varchar_utf8(f, "SHARED_NO_READ_WRITE", 20);
+ break;
+ case MDL_EXCLUSIVE:
+ PFS_engine_table::set_field_varchar_utf8(f, "EXCLUSIVE", 9);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+}
+
+void set_field_mdl_duration(Field *f, opaque_mdl_duration mdl_duration)
+{
+ enum_mdl_duration e= (enum_mdl_duration) mdl_duration;
+ switch (e)
+ {
+ case MDL_STATEMENT:
+ PFS_engine_table::set_field_varchar_utf8(f, "STATEMENT", 9);
+ break;
+ case MDL_TRANSACTION:
+ PFS_engine_table::set_field_varchar_utf8(f, "TRANSACTION", 11);
+ break;
+ case MDL_EXPLICIT:
+ PFS_engine_table::set_field_varchar_utf8(f, "EXPLICIT", 8);
+ break;
+ case MDL_DURATION_END:
+ default:
+ DBUG_ASSERT(false);
+ }
+}
+
+void set_field_mdl_status(Field *f, opaque_mdl_status mdl_status)
+{
+ MDL_ticket::enum_psi_status e= static_cast<MDL_ticket::enum_psi_status>(mdl_status);
+ switch (e)
+ {
+ case MDL_ticket::PENDING:
+ PFS_engine_table::set_field_varchar_utf8(f, "PENDING", 7);
+ break;
+ case MDL_ticket::GRANTED:
+ PFS_engine_table::set_field_varchar_utf8(f, "GRANTED", 7);
+ break;
+ case MDL_ticket::PRE_ACQUIRE_NOTIFY:
+ PFS_engine_table::set_field_varchar_utf8(f, "PRE_ACQUIRE_NOTIFY", 18);
+ break;
+ case MDL_ticket::POST_RELEASE_NOTIFY:
+ PFS_engine_table::set_field_varchar_utf8(f, "POST_RELEASE_NOTIFY", 19);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+}
+
+void PFS_memory_stat_row::set_field(uint index, Field *f)
+{
+ ssize_t val;
+
+ switch (index)
+ {
+ case 0: /* COUNT_ALLOC */
+ PFS_engine_table::set_field_ulonglong(f, m_stat.m_alloc_count);
+ break;
+ case 1: /* COUNT_FREE */
+ PFS_engine_table::set_field_ulonglong(f, m_stat.m_free_count);
+ break;
+ case 2: /* SUM_NUMBER_OF_BYTES_ALLOC */
+ PFS_engine_table::set_field_ulonglong(f, m_stat.m_alloc_size);
+ break;
+ case 3: /* SUM_NUMBER_OF_BYTES_FREE */
+ PFS_engine_table::set_field_ulonglong(f, m_stat.m_free_size);
+ break;
+ case 4: /* LOW_COUNT_USED */
+ val= m_stat.m_alloc_count - m_stat.m_free_count - m_stat.m_free_count_capacity;
+ PFS_engine_table::set_field_longlong(f, val);
+ break;
+ case 5: /* CURRENT_COUNT_USED */
+ val= m_stat.m_alloc_count - m_stat.m_free_count;
+ PFS_engine_table::set_field_longlong(f, val);
+ break;
+ case 6: /* HIGH_COUNT_USED */
+ val= m_stat.m_alloc_count - m_stat.m_free_count + m_stat.m_alloc_count_capacity;
+ PFS_engine_table::set_field_longlong(f, val);
+ break;
+ case 7: /* LOW_NUMBER_OF_BYTES_USED */
+ val= m_stat.m_alloc_size - m_stat.m_free_size - m_stat.m_free_size_capacity;
+ PFS_engine_table::set_field_longlong(f, val);
+ break;
+ case 8: /* CURRENT_NUMBER_OF_BYTES_USED */
+ val= m_stat.m_alloc_size - m_stat.m_free_size;
+ PFS_engine_table::set_field_longlong(f, val);
+ break;
+ case 9: /* HIGH_NUMBER_OF_BYTES_USED */
+ val= m_stat.m_alloc_size - m_stat.m_free_size + m_stat.m_alloc_size_capacity;
+ PFS_engine_table::set_field_longlong(f, val);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ break;
+ }
+}
+
+void set_field_isolation_level(Field *f, enum_isolation_level iso_level)
+{
+ switch (iso_level)
+ {
+ case TRANS_LEVEL_READ_UNCOMMITTED:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ UNCOMMITTED", 16);
+ break;
+ case TRANS_LEVEL_READ_COMMITTED:
+ PFS_engine_table::set_field_varchar_utf8(f, "READ COMMITTED", 14);
+ break;
+ case TRANS_LEVEL_REPEATABLE_READ:
+ PFS_engine_table::set_field_varchar_utf8(f, "REPEATABLE READ", 15);
+ break;
+ case TRANS_LEVEL_SERIALIZABLE:
+ PFS_engine_table::set_field_varchar_utf8(f, "SERIALIZABLE", 12);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+}
+
+void set_field_xa_state(Field *f, enum_xa_transaction_state xa_state)
+{
+ switch (xa_state)
+ {
+ case TRANS_STATE_XA_NOTR:
+ PFS_engine_table::set_field_varchar_utf8(f, "NOTR", 4);
+ break;
+ case TRANS_STATE_XA_ACTIVE:
+ PFS_engine_table::set_field_varchar_utf8(f, "ACTIVE", 6);
+ break;
+ case TRANS_STATE_XA_IDLE:
+ PFS_engine_table::set_field_varchar_utf8(f, "IDLE", 4);
+ break;
+ case TRANS_STATE_XA_PREPARED:
+ PFS_engine_table::set_field_varchar_utf8(f, "PREPARED", 8);
+ break;
+ case TRANS_STATE_XA_ROLLBACK_ONLY:
+ PFS_engine_table::set_field_varchar_utf8(f, "ROLLBACK ONLY", 13);
+ break;
+ case TRANS_STATE_XA_COMMITTED:
+ PFS_engine_table::set_field_varchar_utf8(f, "COMMITTED", 9);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+}
+
+void PFS_variable_name_row::make_row(const char* str, size_t length)
+{
+ DBUG_ASSERT(length <= sizeof(m_str));
+ DBUG_ASSERT(length <= NAME_CHAR_LEN);
+
+ m_length= MY_MIN(static_cast<uint>(length), NAME_CHAR_LEN); /* enforce max name length */
+ if (m_length > 0)
+ memcpy(m_str, str, length);
+ m_str[m_length]= '\0';
+}
+
+void PFS_variable_value_row::make_row(const Status_variable *var)
+{
+ make_row(var->m_charset, var->m_value_str, var->m_value_length);
+}
+
+void PFS_variable_value_row::make_row(const System_variable *var)
+{
+ make_row(var->m_charset, var->m_value_str, var->m_value_length);
+}
+
+void PFS_variable_value_row::make_row(const CHARSET_INFO *cs, const char* str, size_t length)
+{
+ DBUG_ASSERT(cs != NULL);
+ DBUG_ASSERT(length <= sizeof(m_str));
+ if (length > 0)
+ {
+ memcpy(m_str, str, length);
+ }
+ m_length= static_cast<uint>(length);
+ m_charset= cs;
+}
+
+void PFS_variable_value_row::set_field(Field *f)
+{
+ PFS_engine_table::set_field_varchar(f, m_charset, m_str, m_length);
+}
+
+void PFS_user_variable_value_row::clear()
+{
+ my_free(m_value);
+ m_value= NULL;
+ m_value_length= 0;
+}
+
+void PFS_user_variable_value_row::make_row(const char* val, size_t length)
+{
+ if (length > 0)
+ {
+ m_value= (char*) my_malloc(PSI_NOT_INSTRUMENTED, length, MYF(0));
+ m_value_length= length;
+ memcpy(m_value, val, length);
+ }
+ else
+ {
+ m_value= NULL;
+ m_value_length= 0;
}
}
diff --git a/storage/perfschema/table_helper.h b/storage/perfschema/table_helper.h
index 62f94826754..3ce74648360 100644
--- a/storage/perfschema/table_helper.h
+++ b/storage/perfschema/table_helper.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2016, 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, version 2.0,
@@ -31,7 +31,7 @@
#include "pfs_digest.h"
/*
- Write MD5 hash value in a string to be used
+ Write MD5 hash value in a string to be used
as DIGEST for the statement.
*/
#define MD5_HASH_TO_STRING(_hash, _str) \
@@ -47,6 +47,10 @@
struct PFS_host;
struct PFS_user;
struct PFS_account;
+struct PFS_object_name;
+struct PFS_program;
+class System_variable;
+class Status_variable;
/**
@file storage/perfschema/table_helper.h
@@ -69,7 +73,8 @@ struct PFS_instrument_view_constants
static const uint VIEW_TABLE= 5;
static const uint VIEW_SOCKET= 6;
static const uint VIEW_IDLE= 7;
- static const uint LAST_VIEW= 7;
+ static const uint VIEW_METADATA= 8;
+ static const uint LAST_VIEW= 8;
};
/** Namespace, internal views used within object summaries. */
@@ -77,12 +82,8 @@ struct PFS_object_view_constants
{
static const uint FIRST_VIEW= 1;
static const uint VIEW_TABLE= 1;
- static const uint LAST_VIEW= 1;
-
- /* Future use */
- static const uint VIEW_EVENT= 2;
- static const uint VIEW_PROCEDURE= 3;
- static const uint VIEW_FUNCTION= 4;
+ static const uint VIEW_PROGRAM= 2;
+ static const uint LAST_VIEW= 2;
};
/** Row fragment for column HOST. */
@@ -189,8 +190,11 @@ struct PFS_object_row
/** Build a row from a memory buffer. */
int make_row(PFS_table_share *pfs);
+ int make_row(PFS_program *pfs);
+ int make_row(const MDL_key *pfs);
/** Set a table field from the row. */
void set_field(uint index, Field *f);
+ void set_nullable_field(uint index, Field *f);
};
/** Row fragment for columns OBJECT_TYPE, SCHEMA_NAME, OBJECT_NAME, INDEX_NAME. */
@@ -203,7 +207,8 @@ struct PFS_index_row
uint m_index_name_length;
/** Build a row from a memory buffer. */
- int make_row(PFS_table_share *pfs, uint table_index);
+ int make_row(PFS_table_share *pfs, PFS_table_share_index *pfs_index,
+ uint table_index);
/** Set a table field from the row. */
void set_field(uint index, Field *f);
};
@@ -222,6 +227,15 @@ struct PFS_stat_row
/** Column MAX_TIMER_WAIT. */
ulonglong m_max;
+ inline void reset()
+ {
+ m_count= 0;
+ m_sum= 0;
+ m_min= 0;
+ m_avg= 0;
+ m_max= 0;
+ }
+
/** Build a row with timer fields from a memory buffer. */
inline void set(time_normalizer *normalizer, const PFS_single_stat *stat)
{
@@ -427,33 +441,106 @@ struct PFS_statement_stat_row
/** Build a row from a memory buffer. */
inline void set(time_normalizer *normalizer, const PFS_statement_stat *stat)
{
+ if (stat->m_timer1_stat.m_count != 0)
+ {
+ m_timer1_row.set(normalizer, & stat->m_timer1_stat);
+
+ m_error_count= stat->m_error_count;
+ m_warning_count= stat->m_warning_count;
+ m_lock_time= stat->m_lock_time * MICROSEC_TO_PICOSEC;
+ m_rows_affected= stat->m_rows_affected;
+ m_rows_sent= stat->m_rows_sent;
+ m_rows_examined= stat->m_rows_examined;
+ m_created_tmp_disk_tables= stat->m_created_tmp_disk_tables;
+ m_created_tmp_tables= stat->m_created_tmp_tables;
+ m_select_full_join= stat->m_select_full_join;
+ m_select_full_range_join= stat->m_select_full_range_join;
+ m_select_range= stat->m_select_range;
+ m_select_range_check= stat->m_select_range_check;
+ m_select_scan= stat->m_select_scan;
+ m_sort_merge_passes= stat->m_sort_merge_passes;
+ m_sort_range= stat->m_sort_range;
+ m_sort_rows= stat->m_sort_rows;
+ m_sort_scan= stat->m_sort_scan;
+ m_no_index_used= stat->m_no_index_used;
+ m_no_good_index_used= stat->m_no_good_index_used;
+ }
+ else
+ {
+ m_timer1_row.reset();
+
+ m_error_count= 0;
+ m_warning_count= 0;
+ m_lock_time= 0;
+ m_rows_affected= 0;
+ m_rows_sent= 0;
+ m_rows_examined= 0;
+ m_created_tmp_disk_tables= 0;
+ m_created_tmp_tables= 0;
+ m_select_full_join= 0;
+ m_select_full_range_join= 0;
+ m_select_range= 0;
+ m_select_range_check= 0;
+ m_select_scan= 0;
+ m_sort_merge_passes= 0;
+ m_sort_range= 0;
+ m_sort_rows= 0;
+ m_sort_scan= 0;
+ m_no_index_used= 0;
+ m_no_good_index_used= 0;
+ }
+ }
+
+ /** Set a table field from the row. */
+ void set_field(uint index, Field *f);
+};
+
+/** Row fragment for stored program statistics. */
+struct PFS_sp_stat_row
+{
+ PFS_stat_row m_timer1_row;
+
+ /** Build a row from a memory buffer. */
+ inline void set(time_normalizer *normalizer, const PFS_sp_stat *stat)
+ {
m_timer1_row.set(normalizer, & stat->m_timer1_stat);
+ }
- m_error_count= stat->m_error_count;
- m_warning_count= stat->m_warning_count;
- m_lock_time= stat->m_lock_time * MICROSEC_TO_PICOSEC;
- m_rows_affected= stat->m_rows_affected;
- m_rows_sent= stat->m_rows_sent;
- m_rows_examined= stat->m_rows_examined;
- m_created_tmp_disk_tables= stat->m_created_tmp_disk_tables;
- m_created_tmp_tables= stat->m_created_tmp_tables;
- m_select_full_join= stat->m_select_full_join;
- m_select_full_range_join= stat->m_select_full_range_join;
- m_select_range= stat->m_select_range;
- m_select_range_check= stat->m_select_range_check;
- m_select_scan= stat->m_select_scan;
- m_sort_merge_passes= stat->m_sort_merge_passes;
- m_sort_range= stat->m_sort_range;
- m_sort_rows= stat->m_sort_rows;
- m_sort_scan= stat->m_sort_scan;
- m_no_index_used= stat->m_no_index_used;
- m_no_good_index_used= stat->m_no_good_index_used;
+ /** Set a table field from the row. */
+ inline void set_field(uint index, Field *f)
+ {
+ m_timer1_row.set_field(index, f);
+ }
+};
+
+/** Row fragment for transaction statistics columns. */
+struct PFS_transaction_stat_row
+{
+ PFS_stat_row m_timer1_row;
+ PFS_stat_row m_read_write_row;
+ PFS_stat_row m_read_only_row;
+ ulonglong m_savepoint_count;
+ ulonglong m_rollback_to_savepoint_count;
+ ulonglong m_release_savepoint_count;
+
+ /** Build a row from a memory buffer. */
+ inline void set(time_normalizer *normalizer, const PFS_transaction_stat *stat)
+ {
+ /* Combine read write/read only stats */
+ PFS_single_stat all;
+ all.aggregate(&stat->m_read_only_stat);
+ all.aggregate(&stat->m_read_write_stat);
+
+ m_timer1_row.set(normalizer, &all);
+ m_read_write_row.set(normalizer, &stat->m_read_write_stat);
+ m_read_only_row.set(normalizer, &stat->m_read_only_stat);
}
/** Set a table field from the row. */
void set_field(uint index, Field *f);
};
+/** Row fragment for connection statistics. */
struct PFS_connection_stat_row
{
ulonglong m_current_connections;
@@ -470,6 +557,12 @@ struct PFS_connection_stat_row
};
void set_field_object_type(Field *f, enum_object_type object_type);
+void set_field_lock_type(Field *f, PFS_TL_LOCK_TYPE lock_type);
+void set_field_mdl_type(Field *f, opaque_mdl_type mdl_type, bool backup);
+void set_field_mdl_duration(Field *f, opaque_mdl_duration mdl_duration);
+void set_field_mdl_status(Field *f, opaque_mdl_status mdl_status);
+void set_field_isolation_level(Field *f, enum_isolation_level iso_level);
+void set_field_xa_state(Field *f, enum_xa_transaction_state xa_state);
/** Row fragment for socket io statistics columns. */
struct PFS_socket_io_stat_row
@@ -478,7 +571,7 @@ struct PFS_socket_io_stat_row
PFS_byte_stat_row m_write;
PFS_byte_stat_row m_misc;
PFS_byte_stat_row m_all;
-
+
inline void set(time_normalizer *normalizer, const PFS_socket_io_stat *stat)
{
PFS_byte_stat all;
@@ -486,7 +579,7 @@ struct PFS_socket_io_stat_row
m_read.set(normalizer, &stat->m_read);
m_write.set(normalizer, &stat->m_write);
m_misc.set(normalizer, &stat->m_misc);
-
+
/* Combine stats for all operations */
all.aggregate(&stat->m_read);
all.aggregate(&stat->m_write);
@@ -503,7 +596,7 @@ struct PFS_file_io_stat_row
PFS_byte_stat_row m_write;
PFS_byte_stat_row m_misc;
PFS_byte_stat_row m_all;
-
+
inline void set(time_normalizer *normalizer, const PFS_file_io_stat *stat)
{
PFS_byte_stat all;
@@ -511,7 +604,7 @@ struct PFS_file_io_stat_row
m_read.set(normalizer, &stat->m_read);
m_write.set(normalizer, &stat->m_write);
m_misc.set(normalizer, &stat->m_misc);
-
+
/* Combine stats for all operations */
all.aggregate(&stat->m_read);
all.aggregate(&stat->m_write);
@@ -521,6 +614,88 @@ struct PFS_file_io_stat_row
}
};
+/** Row fragment for memory statistics columns. */
+struct PFS_memory_stat_row
+{
+ PFS_memory_stat m_stat;
+
+ /** Build a row from a memory buffer. */
+ inline void set(const PFS_memory_stat *stat)
+ {
+ m_stat= *stat;
+ }
+
+ /** Set a table field from the row. */
+ void set_field(uint index, Field *f);
+};
+
+struct PFS_variable_name_row
+{
+public:
+ PFS_variable_name_row()
+ {
+ m_str[0]= '\0';
+ m_length= 0;
+ }
+
+ void make_row(const char* str, size_t length);
+
+ char m_str[NAME_CHAR_LEN+1];
+ uint m_length;
+};
+
+struct PFS_variable_value_row
+{
+public:
+ /** Set the row from a status variable. */
+ void make_row(const Status_variable *var);
+
+ /** Set the row from a system variable. */
+ void make_row(const System_variable *var);
+
+ /** Set a table field from the row. */
+ void set_field(Field *f);
+
+private:
+ void make_row(const CHARSET_INFO *cs, const char* str, size_t length);
+
+ char m_str[1024];
+ uint m_length;
+ const CHARSET_INFO *m_charset;
+};
+
+struct PFS_user_variable_value_row
+{
+public:
+ PFS_user_variable_value_row()
+ : m_value(NULL), m_value_length(0)
+ {}
+
+ PFS_user_variable_value_row(const PFS_user_variable_value_row& rhs)
+ {
+ make_row(rhs.m_value, rhs.m_value_length);
+ }
+
+ ~PFS_user_variable_value_row()
+ {
+ clear();
+ }
+
+ void make_row(const char* val, size_t length);
+
+ const char *get_value() const
+ { return m_value; }
+
+ size_t get_value_length() const
+ { return m_value_length; }
+
+ void clear();
+
+private:
+ char *m_value;
+ size_t m_value_length;
+};
+
/** @} */
#endif
diff --git a/storage/perfschema/table_host_cache.cc b/storage/perfschema/table_host_cache.cc
index 501894df9b1..e482ead215c 100644
--- a/storage/perfschema/table_host_cache.cc
+++ b/storage/perfschema/table_host_cache.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -26,9 +26,11 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_host_cache.h"
#include "hostname.h"
+#include "field.h"
+#include "sql_class.h"
THR_LOCK table_host_cache::m_table_lock;
@@ -37,11 +39,10 @@ table_host_cache::m_share=
{
{ C_STRING_WITH_LEN("host_cache") },
&pfs_truncatable_acl,
- &table_host_cache::create,
+ table_host_cache::create,
NULL, /* write_row */
table_host_cache::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_host_cache::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE host_cache("
@@ -73,7 +74,8 @@ table_host_cache::m_share=
"FIRST_SEEN TIMESTAMP(0) NOT NULL default 0,"
"LAST_SEEN TIMESTAMP(0) NOT NULL default 0,"
"FIRST_ERROR_SEEN TIMESTAMP(0) null default 0,"
- "LAST_ERROR_SEEN TIMESTAMP(0) null default 0)") }
+ "LAST_ERROR_SEEN TIMESTAMP(0) null default 0)") },
+ false /* perpetual */
};
PFS_engine_table* table_host_cache::create(void)
@@ -100,6 +102,16 @@ table_host_cache::delete_all_rows(void)
return 0;
}
+ha_rows
+table_host_cache::get_row_count(void)
+{
+ ha_rows count;
+ hostname_cache_lock();
+ count= hostname_cache_size();
+ hostname_cache_unlock();
+ return count;
+}
+
table_host_cache::table_host_cache()
: PFS_engine_table(&m_share, &m_pos),
m_all_rows(NULL), m_row_count(0),
diff --git a/storage/perfschema/table_host_cache.h b/storage/perfschema/table_host_cache.h
index 8add0b5049c..57cd0fa02ad 100644
--- a/storage/perfschema/table_host_cache.h
+++ b/storage/perfschema/table_host_cache.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -111,6 +111,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_hosts.cc b/storage/perfschema/table_hosts.cc
index 8bc5310817c..8d8b6201ec8 100644
--- a/storage/perfschema/table_hosts.cc
+++ b/storage/perfschema/table_hosts.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -21,13 +21,16 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_hosts.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
#include "pfs_account.h"
#include "pfs_host.h"
#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_status.h"
+#include "field.h"
THR_LOCK table_hosts::m_table_lock;
@@ -36,17 +39,17 @@ table_hosts::m_share=
{
{ C_STRING_WITH_LEN("hosts") },
&pfs_truncatable_acl,
- &table_hosts::create,
+ table_hosts::create,
NULL, /* write_row */
table_hosts::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ cursor_by_host::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE hosts("
"HOST CHAR(60) collate utf8_bin default null,"
"CURRENT_CONNECTIONS bigint not null,"
- "TOTAL_CONNECTIONS bigint not null)") }
+ "TOTAL_CONNECTIONS bigint not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_hosts::create()
@@ -66,6 +69,15 @@ table_hosts::delete_all_rows(void)
reset_events_statements_by_thread();
reset_events_statements_by_account();
reset_events_statements_by_host();
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ reset_events_transactions_by_host();
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ reset_memory_by_host();
+ reset_status_by_thread();
+ reset_status_by_account();
+ reset_status_by_host();
purge_all_account();
purge_all_host();
return 0;
@@ -78,7 +90,7 @@ table_hosts::table_hosts()
void table_hosts::make_row(PFS_host *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
pfs->m_lock.begin_optimistic_lock(&lock);
@@ -87,7 +99,11 @@ void table_hosts::make_row(PFS_host *pfs)
return;
PFS_connection_stat_visitor visitor;
- PFS_connection_iterator::visit_host(pfs, true, true, & visitor);
+ PFS_connection_iterator::visit_host(pfs,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! pfs->m_lock.end_optimistic_lock(& lock))
return;
diff --git a/storage/perfschema/table_hosts.h b/storage/perfschema/table_hosts.h
index 422b6449b25..61c04d12179 100644
--- a/storage/perfschema/table_hosts.h
+++ b/storage/perfschema/table_hosts.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_md_locks.cc b/storage/perfschema/table_md_locks.cc
new file mode 100644
index 00000000000..9f78750e89b
--- /dev/null
+++ b/storage/perfschema/table_md_locks.cc
@@ -0,0 +1,207 @@
+/* Copyright (c) 2012, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_md_locks.cc
+ Table METADATA_LOCKS (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_md_locks.h"
+#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_metadata_locks::m_table_lock;
+
+PFS_engine_table_share
+table_metadata_locks::m_share=
+{
+ { C_STRING_WITH_LEN("metadata_locks") },
+ &pfs_readonly_acl,
+ table_metadata_locks::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_metadata_locks::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE metadata_locks("
+ "OBJECT_TYPE VARCHAR(64) not null,"
+ "OBJECT_SCHEMA VARCHAR(64),"
+ "OBJECT_NAME VARCHAR(64),"
+ "OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
+ "LOCK_TYPE VARCHAR(32) not null,"
+ "LOCK_DURATION VARCHAR(32) not null,"
+ "LOCK_STATUS VARCHAR(32) not null,"
+ "SOURCE VARCHAR(64),"
+ "OWNER_THREAD_ID BIGINT unsigned,"
+ "OWNER_EVENT_ID BIGINT unsigned)")},
+ false /* perpetual */
+};
+
+PFS_engine_table* table_metadata_locks::create(void)
+{
+ return new table_metadata_locks();
+}
+
+ha_rows
+table_metadata_locks::get_row_count(void)
+{
+ return global_mdl_container.get_row_count();
+}
+
+table_metadata_locks::table_metadata_locks()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_metadata_locks::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+int table_metadata_locks::rnd_next(void)
+{
+ PFS_metadata_lock *pfs;
+
+ m_pos.set_at(&m_next_pos);
+ PFS_mdl_iterator it= global_mdl_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_metadata_locks::rnd_pos(const void *pos)
+{
+ PFS_metadata_lock *pfs;
+
+ set_position(pos);
+
+ pfs= global_mdl_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_metadata_locks::make_row(PFS_metadata_lock *pfs)
+{
+ pfs_optimistic_state lock;
+
+ m_row_exists= false;
+
+ /* Protect this reader against a metadata lock destroy */
+ pfs->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_identity= pfs->m_identity;
+ m_row.m_mdl_type= pfs->m_mdl_type;
+ m_row.m_mdl_duration= pfs->m_mdl_duration;
+ m_row.m_mdl_status= pfs->m_mdl_status;
+
+ /* Disable source file and line to avoid stale __FILE__ pointers. */
+ m_row.m_source_length= 0;
+
+ m_row.m_owner_thread_id= static_cast<ulong>(pfs->m_owner_thread_id);
+ m_row.m_owner_event_id= static_cast<ulong>(pfs->m_owner_event_id);
+
+ if (m_row.m_object.make_row(& pfs->m_mdl_key))
+ return;
+
+ if (pfs->m_lock.end_optimistic_lock(&lock))
+ m_row_exists= true;
+}
+
+int table_metadata_locks::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* OBJECT_TYPE */
+ case 1: /* OBJECT_SCHEMA */
+ case 2: /* OBJECT_NAME */
+ m_row.m_object.set_nullable_field(f->field_index, f);
+ break;
+ case 3: /* OBJECT_INSTANCE */
+ set_field_ulonglong(f, (intptr) m_row.m_identity);
+ break;
+ case 4: /* LOCK_TYPE */
+ set_field_mdl_type(f, m_row.m_mdl_type, m_row.m_object.m_object_type == OBJECT_TYPE_BACKUP);
+ break;
+ case 5: /* LOCK_DURATION */
+ set_field_mdl_duration(f, m_row.m_mdl_duration);
+ break;
+ case 6: /* LOCK_STATUS */
+ set_field_mdl_status(f, m_row.m_mdl_status);
+ break;
+ case 7: /* SOURCE */
+ set_field_varchar_utf8(f, m_row.m_source, m_row.m_source_length);
+ break;
+ case 8: /* OWNER_THREAD_ID */
+ if (m_row.m_owner_thread_id != 0)
+ set_field_ulonglong(f, m_row.m_owner_thread_id);
+ else
+ f->set_null();
+ break;
+ case 9: /* OWNER_EVENT_ID */
+ if (m_row.m_owner_event_id != 0)
+ set_field_ulonglong(f, m_row.m_owner_event_id);
+ else
+ f->set_null();
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_md_locks.h b/storage/perfschema/table_md_locks.h
new file mode 100644
index 00000000000..40b6d2f6efb
--- /dev/null
+++ b/storage/perfschema/table_md_locks.h
@@ -0,0 +1,106 @@
+/* Copyright (c) 2012, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_METADATA_LOCK_H
+#define TABLE_METADATA_LOCK_H
+
+/**
+ @file storage/perfschema/table_md_locks.h
+ Table METADATA_LOCKS (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "table_helper.h"
+
+struct PFS_metadata_lock;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of table PERFORMANCE_SCHEMA.MUTEX_INSTANCES. */
+struct row_metadata_lock
+{
+ /** Column OBJECT_INSTANCE_BEGIN. */
+ const void *m_identity;
+ opaque_mdl_type m_mdl_type;
+ opaque_mdl_duration m_mdl_duration;
+ opaque_mdl_status m_mdl_status;
+ /** Column SOURCE. */
+ char m_source[COL_SOURCE_SIZE];
+ /** Length in bytes of @c m_source. */
+ uint m_source_length;
+ /** Column OWNER_THREAD_ID. */
+ ulong m_owner_thread_id;
+ /** Column OWNER_EVENT_ID. */
+ ulong m_owner_event_id;
+ /** Columns OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME. */
+ PFS_object_row m_object;
+};
+
+/** Table PERFORMANCE_SCHEMA.METADATA_LOCKS. */
+class table_metadata_locks : public PFS_engine_table
+{
+public:
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+private:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_metadata_locks();
+
+public:
+ ~table_metadata_locks()
+ {}
+
+private:
+ void make_row(PFS_metadata_lock *pfs);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_metadata_lock m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_mems_by_account_by_event_name.cc b/storage/perfschema/table_mems_by_account_by_event_name.cc
new file mode 100644
index 00000000000..5c83c225d11
--- /dev/null
+++ b/storage/perfschema/table_mems_by_account_by_event_name.cc
@@ -0,0 +1,221 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_mems_by_account_by_event_name.cc
+ Table MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_mems_by_account_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_mems_by_account_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_mems_by_account_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("memory_summary_by_account_by_event_name") },
+ &pfs_readonly_acl,
+ table_mems_by_account_by_event_name::create,
+ NULL, /* write_row */
+ table_mems_by_account_by_event_name::delete_all_rows,
+ table_mems_by_account_by_event_name::get_row_count,
+ sizeof(pos_mems_by_account_by_event_name),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE memory_summary_by_account_by_event_name("
+ "USER CHAR(32) collate utf8_bin default null,"
+ "HOST CHAR(60) collate utf8_bin default null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_ALLOC BIGINT unsigned not null,"
+ "COUNT_FREE BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
+ "LOW_COUNT_USED BIGINT not null,"
+ "CURRENT_COUNT_USED BIGINT not null,"
+ "HIGH_COUNT_USED BIGINT not null,"
+ "LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "HIGH_NUMBER_OF_BYTES_USED BIGINT not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table* table_mems_by_account_by_event_name::create(void)
+{
+ return new table_mems_by_account_by_event_name();
+}
+
+int
+table_mems_by_account_by_event_name::delete_all_rows(void)
+{
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ return 0;
+}
+
+ha_rows
+table_mems_by_account_by_event_name::get_row_count(void)
+{
+ return global_account_container.get_row_count() * memory_class_max;
+}
+
+table_mems_by_account_by_event_name::table_mems_by_account_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_mems_by_account_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_mems_by_account_by_event_name::rnd_next(void)
+{
+ PFS_account *account;
+ PFS_memory_class *memory_class;
+ bool has_more_account= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_account;
+ m_pos.next_account())
+ {
+ account= global_account_container.get(m_pos.m_index_1, & has_more_account);
+ if (account != NULL)
+ {
+ do
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(account, memory_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ m_pos.next_class();
+ }
+ }
+ while (memory_class != NULL);
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_mems_by_account_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_account *account;
+ PFS_memory_class *memory_class;
+
+ set_position(pos);
+
+ account= global_account_container.get(m_pos.m_index_1);
+ if (account != NULL)
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(account, memory_class);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_mems_by_account_by_event_name
+::make_row(PFS_account *account, PFS_memory_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ account->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_account.make_row(account))
+ return;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_memory_visitor visitor(klass);
+ PFS_connection_iterator::visit_account(account,
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
+
+ if (! account->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(& visitor.m_stat);
+}
+
+int table_mems_by_account_by_event_name::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* USER */
+ case 1: /* HOST */
+ m_row.m_account.set_field(f->field_index, f);
+ break;
+ case 2: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default: /* 3, ... HIGH_NUMBER_OF_BYTES_USED */
+ m_row.m_stat.set_field(f->field_index - 3, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_mems_by_account_by_event_name.h b/storage/perfschema/table_mems_by_account_by_event_name.h
new file mode 100644
index 00000000000..b6151246f34
--- /dev/null
+++ b/storage/perfschema/table_mems_by_account_by_event_name.h
@@ -0,0 +1,129 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME_H
+#define TABLE_MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_mems_by_account_by_event_name.h
+ Table MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_account.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME. */
+struct row_mems_by_account_by_event_name
+{
+ /** Column USER, HOST. */
+ PFS_account_row m_account;
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /** Columns COUNT_ALLOC, ... */
+ PFS_memory_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME.
+ Index 1 on account (0 based)
+ Index 2 on memory class (1 based)
+*/
+struct pos_mems_by_account_by_event_name
+: public PFS_double_index
+{
+ pos_mems_by_account_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_account(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+
+ inline void next_class(void)
+ {
+ m_index_2++;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME. */
+class table_mems_by_account_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+private:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_mems_by_account_by_event_name();
+
+public:
+ ~table_mems_by_account_by_event_name()
+ {}
+
+private:
+ void make_row(PFS_account *account, PFS_memory_class *klass);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_mems_by_account_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_mems_by_account_by_event_name m_pos;
+ /** Next position. */
+ pos_mems_by_account_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_mems_by_host_by_event_name.cc b/storage/perfschema/table_mems_by_host_by_event_name.cc
new file mode 100644
index 00000000000..0921dfa49c8
--- /dev/null
+++ b/storage/perfschema/table_mems_by_host_by_event_name.cc
@@ -0,0 +1,221 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_mems_by_host_by_event_name.cc
+ Table MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_mems_by_host_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_mems_by_host_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_mems_by_host_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("memory_summary_by_host_by_event_name") },
+ &pfs_readonly_acl,
+ table_mems_by_host_by_event_name::create,
+ NULL, /* write_row */
+ table_mems_by_host_by_event_name::delete_all_rows,
+ table_mems_by_host_by_event_name::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE memory_summary_by_host_by_event_name("
+ "HOST CHAR(60) collate utf8_bin default null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_ALLOC BIGINT unsigned not null,"
+ "COUNT_FREE BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
+ "LOW_COUNT_USED BIGINT not null,"
+ "CURRENT_COUNT_USED BIGINT not null,"
+ "HIGH_COUNT_USED BIGINT not null,"
+ "LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "HIGH_NUMBER_OF_BYTES_USED BIGINT not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table* table_mems_by_host_by_event_name::create(void)
+{
+ return new table_mems_by_host_by_event_name();
+}
+
+int
+table_mems_by_host_by_event_name::delete_all_rows(void)
+{
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ reset_memory_by_host();
+ return 0;
+}
+
+ha_rows
+table_mems_by_host_by_event_name::get_row_count(void)
+{
+ return global_host_container.get_row_count() * memory_class_max;
+}
+
+table_mems_by_host_by_event_name::table_mems_by_host_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_mems_by_host_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_mems_by_host_by_event_name::rnd_next(void)
+{
+ PFS_host *host;
+ PFS_memory_class *memory_class;
+ bool has_more_host= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_host;
+ m_pos.next_host())
+ {
+ host= global_host_container.get(m_pos.m_index_1, & has_more_host);
+ if (host != NULL)
+ {
+ do
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(host, memory_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ m_pos.next_class();
+ }
+ }
+ while (memory_class != NULL);
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_mems_by_host_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_host *host;
+ PFS_memory_class *memory_class;
+
+ set_position(pos);
+
+ host= global_host_container.get(m_pos.m_index_1);
+ if (host != NULL)
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(host, memory_class);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_mems_by_host_by_event_name
+::make_row(PFS_host *host, PFS_memory_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ host->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_host.make_row(host))
+ return;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_memory_visitor visitor(klass);
+ PFS_connection_iterator::visit_host(host,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
+
+ if (! host->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(& visitor.m_stat);
+}
+
+int table_mems_by_host_by_event_name::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* HOST */
+ m_row.m_host.set_field(f);
+ break;
+ case 1: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default: /* 2, ... HIGH_NUMBER_OF_BYTES_USED */
+ m_row.m_stat.set_field(f->field_index - 2, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_mems_by_host_by_event_name.h b/storage/perfschema/table_mems_by_host_by_event_name.h
new file mode 100644
index 00000000000..1a55db2c9b3
--- /dev/null
+++ b/storage/perfschema/table_mems_by_host_by_event_name.h
@@ -0,0 +1,129 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME_H
+#define TABLE_MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_mems_by_host_by_event_name.h
+ Table MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_host.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME. */
+struct row_mems_by_host_by_event_name
+{
+ /** Column HOST */
+ PFS_host_row m_host;
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /** Columns COUNT_ALLOC, ... */
+ PFS_memory_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME.
+ Index 1 on host (0 based)
+ Index 2 on memory class (1 based)
+*/
+struct pos_mems_by_host_by_event_name
+: public PFS_double_index
+{
+ pos_mems_by_host_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_host(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+
+ inline void next_class(void)
+ {
+ m_index_2++;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_HOST_BY_EVENT_NAME. */
+class table_mems_by_host_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+private:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_mems_by_host_by_event_name();
+
+public:
+ ~table_mems_by_host_by_event_name()
+ {}
+
+private:
+ void make_row(PFS_host *host, PFS_memory_class *klass);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_mems_by_host_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_mems_by_host_by_event_name m_pos;
+ /** Next position. */
+ pos_mems_by_host_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_mems_by_thread_by_event_name.cc b/storage/perfschema/table_mems_by_thread_by_event_name.cc
new file mode 100644
index 00000000000..9e36cb76dd7
--- /dev/null
+++ b/storage/perfschema/table_mems_by_thread_by_event_name.cc
@@ -0,0 +1,214 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_mems_by_thread_by_event_name.cc
+ Table MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_mems_by_thread_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_mems_by_thread_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_mems_by_thread_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("memory_summary_by_thread_by_event_name") },
+ &pfs_readonly_acl,
+ table_mems_by_thread_by_event_name::create,
+ NULL, /* write_row */
+ table_mems_by_thread_by_event_name::delete_all_rows,
+ table_mems_by_thread_by_event_name::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE memory_summary_by_thread_by_event_name("
+ "THREAD_ID BIGINT unsigned not null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_ALLOC BIGINT unsigned not null,"
+ "COUNT_FREE BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
+ "LOW_COUNT_USED BIGINT not null,"
+ "CURRENT_COUNT_USED BIGINT not null,"
+ "HIGH_COUNT_USED BIGINT not null,"
+ "LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "HIGH_NUMBER_OF_BYTES_USED BIGINT not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table* table_mems_by_thread_by_event_name::create(void)
+{
+ return new table_mems_by_thread_by_event_name();
+}
+
+int
+table_mems_by_thread_by_event_name::delete_all_rows(void)
+{
+ reset_memory_by_thread();
+ return 0;
+}
+
+ha_rows
+table_mems_by_thread_by_event_name::get_row_count(void)
+{
+ return global_thread_container.get_row_count() * memory_class_max;
+}
+
+table_mems_by_thread_by_event_name::table_mems_by_thread_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_mems_by_thread_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_mems_by_thread_by_event_name::rnd_next(void)
+{
+ PFS_thread *thread;
+ PFS_memory_class *memory_class;
+ bool has_more_thread= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next_thread())
+ {
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
+ {
+ do
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(thread, memory_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ m_pos.next_class();
+ }
+ }
+ while (memory_class != NULL);
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_mems_by_thread_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_thread *thread;
+ PFS_memory_class *memory_class;
+
+ set_position(pos);
+
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(thread, memory_class);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_mems_by_thread_by_event_name
+::make_row(PFS_thread *thread, PFS_memory_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_thread_internal_id= thread->m_thread_internal_id;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_memory_visitor visitor(klass);
+ PFS_connection_iterator::visit_thread(thread, & visitor);
+
+ if (! thread->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(& visitor.m_stat);
+}
+
+int table_mems_by_thread_by_event_name::read_row_values(TABLE *table,
+ unsigned char *,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 0);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* THREAD_ID */
+ set_field_ulonglong(f, m_row.m_thread_internal_id);
+ break;
+ case 1: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default: /* 2, ... HIGH_NUMBER_OF_BYTES_USED */
+ m_row.m_stat.set_field(f->field_index - 2, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_mems_by_thread_by_event_name.h b/storage/perfschema/table_mems_by_thread_by_event_name.h
new file mode 100644
index 00000000000..f8608198c2a
--- /dev/null
+++ b/storage/perfschema/table_mems_by_thread_by_event_name.h
@@ -0,0 +1,129 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME_H
+#define TABLE_MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_mems_by_thread_by_event_name.h
+ Table MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME. */
+struct row_mems_by_thread_by_event_name
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /** Columns COUNT_ALLOC, ... */
+ PFS_memory_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME.
+ Index 1 on thread (0 based).
+ Index 2 on memory class (1 based).
+*/
+struct pos_mems_by_thread_by_event_name
+: public PFS_double_index
+{
+ pos_mems_by_thread_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_thread(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+
+ inline void next_class(void)
+ {
+ m_index_2++;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_THREAD_BY_EVENT_NAME. */
+class table_mems_by_thread_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+private:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_mems_by_thread_by_event_name();
+
+public:
+ ~table_mems_by_thread_by_event_name()
+ {}
+
+private:
+ void make_row(PFS_thread *thread, PFS_memory_class *klass);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_mems_by_thread_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_mems_by_thread_by_event_name m_pos;
+ /** Next position. */
+ pos_mems_by_thread_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_mems_by_user_by_event_name.cc b/storage/perfschema/table_mems_by_user_by_event_name.cc
new file mode 100644
index 00000000000..5d5ee89d6bd
--- /dev/null
+++ b/storage/perfschema/table_mems_by_user_by_event_name.cc
@@ -0,0 +1,221 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_mems_by_user_by_event_name.cc
+ Table MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_mems_by_user_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_mems_by_user_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_mems_by_user_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("memory_summary_by_user_by_event_name") },
+ &pfs_readonly_acl,
+ table_mems_by_user_by_event_name::create,
+ NULL, /* write_row */
+ table_mems_by_user_by_event_name::delete_all_rows,
+ table_mems_by_user_by_event_name::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE memory_summary_by_user_by_event_name("
+ "USER CHAR(32) collate utf8_bin default null,"
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_ALLOC BIGINT unsigned not null,"
+ "COUNT_FREE BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
+ "LOW_COUNT_USED BIGINT not null,"
+ "CURRENT_COUNT_USED BIGINT not null,"
+ "HIGH_COUNT_USED BIGINT not null,"
+ "LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "HIGH_NUMBER_OF_BYTES_USED BIGINT not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table* table_mems_by_user_by_event_name::create(void)
+{
+ return new table_mems_by_user_by_event_name();
+}
+
+int
+table_mems_by_user_by_event_name::delete_all_rows(void)
+{
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ reset_memory_by_user();
+ return 0;
+}
+
+ha_rows
+table_mems_by_user_by_event_name::get_row_count(void)
+{
+ return global_user_container.get_row_count() * memory_class_max;
+}
+
+table_mems_by_user_by_event_name::table_mems_by_user_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_mems_by_user_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_mems_by_user_by_event_name::rnd_next(void)
+{
+ PFS_user *user;
+ PFS_memory_class *memory_class;
+ bool has_more_user= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_user;
+ m_pos.next_user())
+ {
+ user= global_user_container.get(m_pos.m_index_1, & has_more_user);
+ if (user != NULL)
+ {
+ do
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(user, memory_class);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ m_pos.next_class();
+ }
+ }
+ while (memory_class != NULL);
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_mems_by_user_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_user *user;
+ PFS_memory_class *memory_class;
+
+ set_position(pos);
+
+ user= global_user_container.get(m_pos.m_index_1);
+ if (user != NULL)
+ {
+ memory_class= find_memory_class(m_pos.m_index_2);
+ if (memory_class != NULL)
+ {
+ if (! memory_class->is_global())
+ {
+ make_row(user, memory_class);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_mems_by_user_by_event_name
+::make_row(PFS_user *user, PFS_memory_class *klass)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ user->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_user.make_row(user))
+ return;
+
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_memory_visitor visitor(klass);
+ PFS_connection_iterator::visit_user(user,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
+
+ if (! user->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+ m_row.m_stat.set(& visitor.m_stat);
+}
+
+int table_mems_by_user_by_event_name::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* USER */
+ m_row.m_user.set_field(f);
+ break;
+ case 1: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default: /* 2, ... HIGH_NUMBER_OF_BYTES_USED */
+ m_row.m_stat.set_field(f->field_index - 2, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_mems_by_user_by_event_name.h b/storage/perfschema/table_mems_by_user_by_event_name.h
new file mode 100644
index 00000000000..2791e1d3587
--- /dev/null
+++ b/storage/perfschema/table_mems_by_user_by_event_name.h
@@ -0,0 +1,129 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME_H
+#define TABLE_MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_mems_by_user_by_event_name.h
+ Table MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_user.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME. */
+struct row_mems_by_user_by_event_name
+{
+ /** Column USER. */
+ PFS_user_row m_user;
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /** Columns COUNT_ALLOC, ... */
+ PFS_memory_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.EVENTS_MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME.
+ Index 1 on user (0 based)
+ Index 2 on memory class (1 based)
+*/
+struct pos_mems_by_user_by_event_name
+: public PFS_double_index
+{
+ pos_mems_by_user_by_event_name()
+ : PFS_double_index(0, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 1;
+ }
+
+ inline void next_user(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+
+ inline void next_class(void)
+ {
+ m_index_2++;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME. */
+class table_mems_by_user_by_event_name : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+private:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_mems_by_user_by_event_name();
+
+public:
+ ~table_mems_by_user_by_event_name()
+ {}
+
+private:
+ void make_row(PFS_user *user, PFS_memory_class *klass);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_mems_by_user_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_mems_by_user_by_event_name m_pos;
+ /** Next position. */
+ pos_mems_by_user_by_event_name m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_mems_global_by_event_name.cc b/storage/perfschema/table_mems_global_by_event_name.cc
new file mode 100644
index 00000000000..93496e38cf4
--- /dev/null
+++ b/storage/perfschema/table_mems_global_by_event_name.cc
@@ -0,0 +1,241 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file storage/perfschema/table_mems_global_by_event_name.cc
+ Table MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_mems_global_by_event_name.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_builtin_memory.h"
+#include "pfs_memory.h"
+#include "field.h"
+
+THR_LOCK table_mems_global_by_event_name::m_table_lock;
+
+PFS_engine_table_share
+table_mems_global_by_event_name::m_share=
+{
+ { C_STRING_WITH_LEN("memory_summary_global_by_event_name") },
+ &pfs_readonly_acl,
+ table_mems_global_by_event_name::create,
+ NULL, /* write_row */
+ table_mems_global_by_event_name::delete_all_rows,
+ table_mems_global_by_event_name::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE memory_summary_global_by_event_name("
+ "EVENT_NAME VARCHAR(128) not null,"
+ "COUNT_ALLOC BIGINT unsigned not null,"
+ "COUNT_FREE BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
+ "SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
+ "LOW_COUNT_USED BIGINT not null,"
+ "CURRENT_COUNT_USED BIGINT not null,"
+ "HIGH_COUNT_USED BIGINT not null,"
+ "LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
+ "HIGH_NUMBER_OF_BYTES_USED BIGINT not null)")},
+ false /* perpetual */
+};
+
+PFS_engine_table* table_mems_global_by_event_name::create(void)
+{
+ return new table_mems_global_by_event_name();
+}
+
+int
+table_mems_global_by_event_name::delete_all_rows(void)
+{
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ reset_memory_by_user();
+ reset_memory_by_host();
+ reset_memory_global();
+ return 0;
+}
+
+ha_rows
+table_mems_global_by_event_name::get_row_count(void)
+{
+ return memory_class_max;
+}
+
+table_mems_global_by_event_name::table_mems_global_by_event_name()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_mems_global_by_event_name::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_mems_global_by_event_name::rnd_next(void)
+{
+ PFS_memory_class *pfs;
+ PFS_builtin_memory_class *pfs_builtin;
+
+ /* Do not advertise hard coded instruments when disabled. */
+ if (! pfs_initialized)
+ return HA_ERR_END_OF_FILE;
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.has_more_view();
+ m_pos.next_view())
+ {
+ switch (m_pos.m_index_1)
+ {
+ case pos_mems_global_by_event_name::VIEW_BUILTIN_MEMORY:
+ pfs_builtin= find_builtin_memory_class(m_pos.m_index_2);
+ if (pfs_builtin != NULL)
+ {
+ make_row(pfs_builtin);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ break;
+ case pos_mems_global_by_event_name::VIEW_MEMORY:
+ pfs= find_memory_class(m_pos.m_index_2);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ break;
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_mems_global_by_event_name::rnd_pos(const void *pos)
+{
+ PFS_builtin_memory_class *pfs_builtin;
+ PFS_memory_class *pfs;
+
+ /* Do not advertise hard coded instruments when disabled. */
+ if (! pfs_initialized)
+ return HA_ERR_END_OF_FILE;
+
+ set_position(pos);
+
+ switch(m_pos.m_index_1)
+ {
+ case pos_mems_global_by_event_name::VIEW_BUILTIN_MEMORY:
+ pfs_builtin= find_builtin_memory_class(m_pos.m_index_2);
+ if (pfs_builtin != NULL)
+ {
+ make_row(pfs_builtin);
+ return 0;
+ }
+ break;
+ case pos_mems_global_by_event_name::VIEW_MEMORY:
+ pfs= find_memory_class(m_pos.m_index_2);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
+ break;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_mems_global_by_event_name::make_row(PFS_memory_class *klass)
+{
+ m_row.m_event_name.make_row(klass);
+
+ PFS_connection_memory_visitor visitor(klass);
+
+ if (klass->is_global())
+ {
+ PFS_connection_iterator::visit_global(false, /* hosts */
+ false, /* users */
+ false, /* accounts */
+ false, /* threads */
+ false, /* THDs */
+ &visitor);
+ }
+ else
+ {
+ PFS_connection_iterator::visit_global(true, /* hosts */
+ false, /* users */
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ &visitor);
+ }
+
+ m_row.m_stat.set(& visitor.m_stat);
+ m_row_exists= true;
+}
+
+void table_mems_global_by_event_name::make_row(PFS_builtin_memory_class *klass)
+{
+ m_row.m_event_name.make_row(& klass->m_class);
+ m_row.m_stat.set(& klass->m_stat);
+ m_row_exists= true;
+}
+
+int table_mems_global_by_event_name::read_row_values(TABLE *table,
+ unsigned char *,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 0);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* EVENT_NAME */
+ m_row.m_event_name.set_field(f);
+ break;
+ default: /* 1, ... HIGH_NUMBER_OF_BYTES_USED */
+ m_row.m_stat.set_field(f->field_index - 1, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_mems_global_by_event_name.h b/storage/perfschema/table_mems_global_by_event_name.h
new file mode 100644
index 00000000000..14a54142f4e
--- /dev/null
+++ b/storage/perfschema/table_mems_global_by_event_name.h
@@ -0,0 +1,132 @@
+/* Copyright (c) 2011, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#ifndef TABLE_MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME_H
+#define TABLE_MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME_H
+
+/**
+ @file storage/perfschema/table_mems_global_by_event_name.h
+ Table MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_builtin_memory.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row of PERFORMANCE_SCHEMA.MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME. */
+struct row_mems_global_by_event_name
+{
+ /** Column EVENT_NAME. */
+ PFS_event_name_row m_event_name;
+ /** Columns COUNT_ALLOC, ... */
+ PFS_memory_stat_row m_stat;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME.
+ Index 1 on view
+ Index 2 on instrument key (1 based)
+*/
+struct pos_mems_global_by_event_name : public PFS_double_index
+{
+ static const uint FIRST_VIEW= 1;
+ static const uint VIEW_BUILTIN_MEMORY= 1;
+ static const uint VIEW_MEMORY= 2;
+ static const uint LAST_VIEW= 2;
+
+ pos_mems_global_by_event_name()
+ : PFS_double_index(FIRST_VIEW, 1)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= FIRST_VIEW;
+ m_index_2= 1;
+ }
+
+ inline bool has_more_view(void)
+ { return (m_index_1 <= LAST_VIEW); }
+
+ inline void next_view(void)
+ {
+ m_index_1++;
+ m_index_2= 1;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.MEMORY_SUMMARY_GLOBAL_BY_EVENT_NAME. */
+class table_mems_global_by_event_name : public PFS_engine_table
+{
+ typedef pos_mems_global_by_event_name pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+private:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_mems_global_by_event_name();
+
+public:
+ ~table_mems_global_by_event_name()
+ {}
+
+private:
+ void make_row(PFS_builtin_memory_class *klass);
+ void make_row(PFS_memory_class *klass);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_mems_global_by_event_name m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_os_global_by_type.cc b/storage/perfschema/table_os_global_by_type.cc
index b549b0c22e7..f693a0f16da 100644
--- a/storage/perfschema/table_os_global_by_type.cc
+++ b/storage/perfschema/table_os_global_by_type.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,12 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_os_global_by_type.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_os_global_by_type::m_table_lock;
@@ -43,8 +45,7 @@ table_os_global_by_type::m_share=
table_os_global_by_type::create,
NULL, /* write_row */
table_os_global_by_type::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_os_global_by_type::get_row_count,
sizeof(pos_os_global_by_type),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE objects_summary_global_by_type("
@@ -55,7 +56,8 @@ table_os_global_by_type::m_share=
"SUM_TIMER_WAIT BIGINT unsigned not null,"
"MIN_TIMER_WAIT BIGINT unsigned not null,"
"AVG_TIMER_WAIT BIGINT unsigned not null,"
- "MAX_TIMER_WAIT BIGINT unsigned not null)") }
+ "MAX_TIMER_WAIT BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -72,6 +74,13 @@ table_os_global_by_type::delete_all_rows(void)
return 0;
}
+ha_rows
+table_os_global_by_type::get_row_count(void)
+{
+ return global_table_share_container.get_row_count() +
+ global_program_container.get_row_count();
+}
+
table_os_global_by_type::table_os_global_by_type()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -85,22 +94,46 @@ void table_os_global_by_type::reset_position(void)
int table_os_global_by_type::rnd_next(void)
{
- PFS_table_share *table_share;
-
for (m_pos.set_at(&m_next_pos);
m_pos.has_more_view();
m_pos.next_view())
{
switch (m_pos.m_index_1) {
case pos_os_global_by_type::VIEW_TABLE:
- for ( ; m_pos.m_index_2 < table_share_max; m_pos.m_index_2++)
{
- table_share= &table_share_array[m_pos.m_index_2];
- if (table_share->m_lock.is_populated())
+ PFS_table_share *table_share;
+ bool has_more_share= true;
+
+ for (;
+ has_more_share;
+ m_pos.m_index_2++)
{
- make_row(table_share);
- m_next_pos.set_after(&m_pos);
- return 0;
+ table_share= global_table_share_container.get(m_pos.m_index_2, & has_more_share);
+ if (table_share != NULL)
+ {
+ make_table_row(table_share);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ break;
+ case pos_os_global_by_type::VIEW_PROGRAM:
+ {
+ PFS_program *pfs_program;
+ bool has_more_program= true;
+
+ for (;
+ has_more_program;
+ m_pos.m_index_2++)
+ {
+ pfs_program= global_program_container.get(m_pos.m_index_2, & has_more_program);
+ if (pfs_program != NULL)
+ {
+ make_program_row(pfs_program);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
}
break;
@@ -115,18 +148,29 @@ int table_os_global_by_type::rnd_next(void)
int
table_os_global_by_type::rnd_pos(const void *pos)
{
- PFS_table_share *table_share;
-
set_position(pos);
switch (m_pos.m_index_1) {
case pos_os_global_by_type::VIEW_TABLE:
- DBUG_ASSERT(m_pos.m_index_2 < table_share_max);
- table_share= &table_share_array[m_pos.m_index_2];
- if (table_share->m_lock.is_populated())
{
- make_row(table_share);
- return 0;
+ PFS_table_share *table_share;
+ table_share= global_table_share_container.get(m_pos.m_index_2);
+ if (table_share != NULL)
+ {
+ make_table_row(table_share);
+ return 0;
+ }
+ }
+ break;
+ case pos_os_global_by_type::VIEW_PROGRAM:
+ {
+ PFS_program *pfs_program;
+ pfs_program= global_program_container.get(m_pos.m_index_2);
+ if (pfs_program != NULL)
+ {
+ make_program_row(pfs_program);
+ return 0;
+ }
}
break;
default:
@@ -136,9 +180,29 @@ table_os_global_by_type::rnd_pos(const void *pos)
return HA_ERR_RECORD_DELETED;
}
-void table_os_global_by_type::make_row(PFS_table_share *share)
+void table_os_global_by_type::make_program_row(PFS_program *pfs_program)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
+ PFS_single_stat cumulated_stat;
+
+ m_row_exists= false;
+
+ pfs_program->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_object.make_row(pfs_program);
+
+ time_normalizer *normalizer= time_normalizer::get(wait_timer);
+ m_row.m_stat.set(normalizer, &pfs_program->m_sp_stat.m_timer1_stat);
+
+ if (! pfs_program->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+void table_os_global_by_type::make_table_row(PFS_table_share *share)
+{
+ pfs_optimistic_state lock;
PFS_single_stat cumulated_stat;
uint safe_key_count;
@@ -146,16 +210,12 @@ void table_os_global_by_type::make_row(PFS_table_share *share)
share->m_lock.begin_optimistic_lock(&lock);
- m_row.m_object_type= share->get_object_type();
- memcpy(m_row.m_schema_name, share->m_schema_name, share->m_schema_name_length);
- m_row.m_schema_name_length= share->m_schema_name_length;
- memcpy(m_row.m_object_name, share->m_table_name, share->m_table_name_length);
- m_row.m_object_name_length= share->m_table_name_length;
+ m_row.m_object.make_row(share);
/* This is a dirty read, some thread can write data while we are reading it */
safe_key_count= sanitize_index_count(share->m_key_count);
- share->m_table_stat.sum(& cumulated_stat, safe_key_count);
+ share->sum(& cumulated_stat, safe_key_count);
if (! share->m_lock.end_optimistic_lock(&lock))
return;
@@ -165,11 +225,12 @@ void table_os_global_by_type::make_row(PFS_table_share *share)
if (share->get_refcount() > 0)
{
/* For all the table handles still opened ... */
- PFS_table *table= table_array;
- PFS_table *table_last= table_array + table_max;
- for ( ; table < table_last ; table++)
+ PFS_table_iterator it= global_table_container.iterate();
+ PFS_table *table= it.scan_next();
+
+ while (table != NULL)
{
- if ((table->m_share == share) && (table->m_lock.is_populated()))
+ if (table->m_share == share)
{
/*
If the opened table handle is for this table share,
@@ -177,6 +238,7 @@ void table_os_global_by_type::make_row(PFS_table_share *share)
*/
table->m_table_stat.sum(& cumulated_stat, safe_key_count);
}
+ table= it.scan_next();
}
}
@@ -205,15 +267,15 @@ int table_os_global_by_type::read_row_values(TABLE *table,
switch(f->field_index)
{
case 0: /* OBJECT_TYPE */
- set_field_object_type(f, m_row.m_object_type);
+ set_field_object_type(f, m_row.m_object.m_object_type);
break;
case 1: /* SCHEMA_NAME */
- set_field_varchar_utf8(f, m_row.m_schema_name,
- m_row.m_schema_name_length);
+ set_field_varchar_utf8(f, m_row.m_object.m_schema_name,
+ m_row.m_object.m_schema_name_length);
break;
case 2: /* OBJECT_NAME */
- set_field_varchar_utf8(f, m_row.m_object_name,
- m_row.m_object_name_length);
+ set_field_varchar_utf8(f, m_row.m_object.m_object_name,
+ m_row.m_object.m_object_name_length);
break;
case 3: /* COUNT */
set_field_ulonglong(f, m_row.m_stat.m_count);
diff --git a/storage/perfschema/table_os_global_by_type.h b/storage/perfschema/table_os_global_by_type.h
index 2b9293ece06..37e6db1ed94 100644
--- a/storage/perfschema/table_os_global_by_type.h
+++ b/storage/perfschema/table_os_global_by_type.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -32,6 +32,7 @@
#include "pfs_engine_table.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
+#include "pfs_program.h"
#include "table_helper.h"
/**
@@ -45,16 +46,9 @@
*/
struct row_os_global_by_type
{
- /** Column OBJECT_TYPE. */
- enum_object_type m_object_type;
- /** Column SCHEMA_NAME. */
- char m_schema_name[NAME_LEN];
- /** Length in bytes of @c m_schema_name. */
- uint m_schema_name_length;
- /** Column OBJECT_NAME. */
- char m_object_name[NAME_LEN];
- /** Length in bytes of @c m_object_name. */
- uint m_object_name_length;
+ /** Column OBJECT_TYPE, SCHEMA_NAME, OBJECT_NAME. */
+ PFS_object_row m_object;
+
/** Columns COUNT_STAR, SUM/MIN/AVG/MAX TIMER_WAIT. */
PFS_stat_row m_stat;
};
@@ -96,6 +90,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -114,7 +109,8 @@ public:
{}
protected:
- void make_row(PFS_table_share *table_share);
+ void make_table_row(PFS_table_share *table_share);
+ void make_program_row(PFS_program *pfs_program);
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_performance_timers.cc b/storage/perfschema/table_performance_timers.cc
index a77f005ab62..1c1d9c5afef 100644
--- a/storage/perfschema/table_performance_timers.cc
+++ b/storage/perfschema/table_performance_timers.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,10 +26,11 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_performance_timers.h"
#include "pfs_timer.h"
#include "pfs_global.h"
+#include "field.h"
THR_LOCK table_performance_timers::m_table_lock;
@@ -38,18 +39,18 @@ table_performance_timers::m_share=
{
{ C_STRING_WITH_LEN("performance_timers") },
&pfs_readonly_acl,
- &table_performance_timers::create,
+ table_performance_timers::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- COUNT_TIMER_NAME, /* records */
+ table_performance_timers::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE performance_timers("
"TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null,"
"TIMER_FREQUENCY BIGINT,"
"TIMER_RESOLUTION BIGINT,"
- "TIMER_OVERHEAD BIGINT)") }
+ "TIMER_OVERHEAD BIGINT)") },
+ false /* perpetual */
};
PFS_engine_table* table_performance_timers::create(void)
@@ -57,6 +58,12 @@ PFS_engine_table* table_performance_timers::create(void)
return new table_performance_timers();
}
+ha_rows
+table_performance_timers::get_row_count(void)
+{
+ return COUNT_TIMER_NAME;
+}
+
table_performance_timers::table_performance_timers()
: PFS_engine_table(&m_share, &m_pos),
m_row(NULL), m_pos(0), m_next_pos(0)
diff --git a/storage/perfschema/table_performance_timers.h b/storage/perfschema/table_performance_timers.h
index 93210ac9882..fe5f9cd5f4a 100644
--- a/storage/perfschema/table_performance_timers.h
+++ b/storage/perfschema/table_performance_timers.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -56,6 +56,7 @@ public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_prepared_stmt_instances.cc b/storage/perfschema/table_prepared_stmt_instances.cc
new file mode 100644
index 00000000000..6e93523deb4
--- /dev/null
+++ b/storage/perfschema/table_prepared_stmt_instances.cc
@@ -0,0 +1,294 @@
+/* Copyright (c) 2014, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/table_prepared_stmt_instances.cc
+ Table PREPARED_STATEMENTS_INSTANCES (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+#include "pfs_instr.h"
+#include "pfs_timer.h"
+#include "pfs_visitor.h"
+#include "pfs_prepared_stmt.h"
+#include "table_prepared_stmt_instances.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_prepared_stmt_instances::m_table_lock;
+
+PFS_engine_table_share
+table_prepared_stmt_instances::m_share=
+{
+ { C_STRING_WITH_LEN("prepared_statements_instances") },
+ &pfs_truncatable_acl,
+ table_prepared_stmt_instances::create,
+ NULL, /* write_row */
+ table_prepared_stmt_instances::delete_all_rows,
+ table_prepared_stmt_instances::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE prepared_statements_instances("
+ "OBJECT_INSTANCE_BEGIN bigint(20) unsigned NOT NULL,"
+ "STATEMENT_ID bigint(20) unsigned NOT NULL,"
+ "STATEMENT_NAME varchar(64) default NULL,"
+ "SQL_TEXT longtext NOT NULL,"
+ "OWNER_THREAD_ID bigint(20) unsigned NOT NULL,"
+ "OWNER_EVENT_ID bigint(20) unsigned NOT NULL,"
+ "OWNER_OBJECT_TYPE enum('EVENT','FUNCTION','PROCEDURE','TABLE','TRIGGER') DEFAULT NULL,"
+ "OWNER_OBJECT_SCHEMA varchar(64) DEFAULT NULL,"
+ "OWNER_OBJECT_NAME varchar(64) DEFAULT NULL,"
+ "TIMER_PREPARE bigint(20) unsigned NOT NULL,"
+ "COUNT_REPREPARE bigint(20) unsigned NOT NULL,"
+ "COUNT_EXECUTE bigint(20) unsigned NOT NULL,"
+ "SUM_TIMER_EXECUTE bigint(20) unsigned NOT NULL,"
+ "MIN_TIMER_EXECUTE bigint(20) unsigned NOT NULL,"
+ "AVG_TIMER_EXECUTE bigint(20) unsigned NOT NULL,"
+ "MAX_TIMER_EXECUTE bigint(20) unsigned NOT NULL,"
+ "SUM_LOCK_TIME bigint(20) unsigned NOT NULL,"
+ "SUM_ERRORS bigint(20) unsigned NOT NULL,"
+ "SUM_WARNINGS bigint(20) unsigned NOT NULL,"
+ "SUM_ROWS_AFFECTED bigint(20) unsigned NOT NULL,"
+ "SUM_ROWS_SENT bigint(20) unsigned NOT NULL,"
+ "SUM_ROWS_EXAMINED bigint(20) unsigned NOT NULL,"
+ "SUM_CREATED_TMP_DISK_TABLES bigint(20) unsigned NOT NULL,"
+ "SUM_CREATED_TMP_TABLES bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_FULL_JOIN bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_FULL_RANGE_JOIN bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_RANGE bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_RANGE_CHECK bigint(20) unsigned NOT NULL,"
+ "SUM_SELECT_SCAN bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_MERGE_PASSES bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_RANGE bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_ROWS bigint(20) unsigned NOT NULL,"
+ "SUM_SORT_SCAN bigint(20) unsigned NOT NULL,"
+ "SUM_NO_INDEX_USED bigint(20) unsigned NOT NULL,"
+ "SUM_NO_GOOD_INDEX_USED bigint(20) unsigned NOT NULL)")},
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_prepared_stmt_instances::create(void)
+{
+ return new table_prepared_stmt_instances();
+}
+
+int
+table_prepared_stmt_instances::delete_all_rows(void)
+{
+ reset_prepared_stmt_instances();
+ return 0;
+}
+
+ha_rows
+table_prepared_stmt_instances::get_row_count(void)
+{
+ return global_prepared_stmt_container.get_row_count();
+}
+
+table_prepared_stmt_instances::table_prepared_stmt_instances()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_prepared_stmt_instances::reset_position(void)
+{
+ m_pos= 0;
+ m_next_pos= 0;
+}
+
+int table_prepared_stmt_instances::rnd_next(void)
+{
+ PFS_prepared_stmt* pfs;
+
+ m_pos.set_at(&m_next_pos);
+ PFS_prepared_stmt_iterator it= global_prepared_stmt_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_prepared_stmt_instances::rnd_pos(const void *pos)
+{
+ PFS_prepared_stmt* pfs;
+
+ set_position(pos);
+
+ pfs= global_prepared_stmt_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+
+void table_prepared_stmt_instances::make_row(PFS_prepared_stmt* prepared_stmt)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ prepared_stmt->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_identity= prepared_stmt->m_identity;
+
+ m_row.m_stmt_id= prepared_stmt->m_stmt_id;
+
+ m_row.m_owner_thread_id= prepared_stmt->m_owner_thread_id;
+ m_row.m_owner_event_id= prepared_stmt->m_owner_event_id;
+
+ m_row.m_stmt_name_length= prepared_stmt->m_stmt_name_length;
+ if(m_row.m_stmt_name_length > 0)
+ memcpy(m_row.m_stmt_name, prepared_stmt->m_stmt_name,
+ m_row.m_stmt_name_length);
+
+ m_row.m_sql_text_length= prepared_stmt->m_sqltext_length;
+ if(m_row.m_sql_text_length > 0)
+ memcpy(m_row.m_sql_text, prepared_stmt->m_sqltext,
+ m_row.m_sql_text_length);
+
+ m_row.m_owner_object_type= prepared_stmt->m_owner_object_type;
+
+ m_row.m_owner_object_name_length= prepared_stmt->m_owner_object_name_length;
+ if(m_row.m_owner_object_name_length > 0)
+ memcpy(m_row.m_owner_object_name, prepared_stmt->m_owner_object_name,
+ m_row.m_owner_object_name_length);
+
+ m_row.m_owner_object_schema_length= prepared_stmt->m_owner_object_schema_length;
+ if(m_row.m_owner_object_schema_length > 0)
+ memcpy(m_row.m_owner_object_schema, prepared_stmt->m_owner_object_schema,
+ m_row.m_owner_object_schema_length);
+
+ time_normalizer *normalizer= time_normalizer::get(statement_timer);
+ /* Get prepared statement prepare stats. */
+ m_row.m_prepare_stat.set(normalizer, & prepared_stmt->m_prepare_stat);
+ /* Get prepared statement reprepare stats. */
+ m_row.m_reprepare_stat.set(normalizer, & prepared_stmt->m_reprepare_stat);
+ /* Get prepared statement execute stats. */
+ m_row.m_execute_stat.set(normalizer, & prepared_stmt->m_execute_stat);
+
+ if (! prepared_stmt->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_prepared_stmt_instances
+::read_row_values(TABLE *table, unsigned char *buf, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /*
+ Set the null bits.
+ */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* OBJECT_INSTANCE_BEGIN */
+ set_field_ulonglong(f, (intptr)m_row.m_identity);
+ break;
+ case 1: /* STATEMENT_ID */
+ set_field_ulonglong(f, m_row.m_stmt_id);
+ break;
+ case 2: /* STATEMENT_NAME */
+ if(m_row.m_stmt_name_length > 0)
+ set_field_varchar_utf8(f, m_row.m_stmt_name,
+ m_row.m_stmt_name_length);
+ else
+ f->set_null();
+ break;
+ case 3: /* SQL_TEXT */
+ if(m_row.m_sql_text_length > 0)
+ set_field_longtext_utf8(f, m_row.m_sql_text,
+ m_row.m_sql_text_length);
+ else
+ f->set_null();
+ break;
+ case 4: /* OWNER_THREAD_ID */
+ set_field_ulonglong(f, m_row.m_owner_thread_id);
+ break;
+ case 5: /* OWNER_EVENT_ID */
+ if(m_row.m_owner_event_id > 0)
+ set_field_ulonglong(f, m_row.m_owner_event_id);
+ else
+ f->set_null();
+ break;
+ case 6: /* OWNER_OBJECT_TYPE */
+ if(m_row.m_owner_object_type != 0)
+ set_field_enum(f, m_row.m_owner_object_type);
+ else
+ f->set_null();
+ break;
+ case 7: /* OWNER_OBJECT_SCHEMA */
+ if(m_row.m_owner_object_schema_length > 0)
+ set_field_varchar_utf8(f, m_row.m_owner_object_schema,
+ m_row.m_owner_object_schema_length);
+ else
+ f->set_null();
+ break;
+ case 8: /* OWNER_OBJECT_NAME */
+ if(m_row.m_owner_object_name_length > 0)
+ set_field_varchar_utf8(f, m_row.m_owner_object_name,
+ m_row.m_owner_object_name_length);
+ else
+ f->set_null();
+ break;
+ case 9: /* TIMER_PREPARE */
+ m_row.m_prepare_stat.set_field(1, f);
+ break;
+ case 10: /* COUNT_REPREPARE */
+ m_row.m_reprepare_stat.set_field(0, f);
+ break;
+ default: /* 14, ... COUNT/SUM/MIN/AVG/MAX */
+ m_row.m_execute_stat.set_field(f->field_index - 11, f);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_prepared_stmt_instances.h b/storage/perfschema/table_prepared_stmt_instances.h
new file mode 100644
index 00000000000..a17184d4312
--- /dev/null
+++ b/storage/perfschema/table_prepared_stmt_instances.h
@@ -0,0 +1,132 @@
+/* Copyright (c) 2014, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_PREPARED_STMT_INSTANCES
+#define TABLE_PREPARED_STMT_INSTANCES
+
+/**
+ @file storage/perfschema/table_prepared_stmt_instances.h
+ Table PREPARED_STATEMENT_INSTANCE(declarations).
+*/
+
+#include "table_helper.h"
+#include "pfs_prepared_stmt.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.PREPARED_STATEMENT_INSTANCES.
+*/
+struct row_prepared_stmt_instances
+{
+ /** Column OBJECT_INSTANCE_BEGIN. */
+ const void *m_identity;
+
+ /** Column STMT_ID. */
+ ulonglong m_stmt_id;
+
+ /** Column STMT_NAME. */
+ char m_stmt_name[COL_INFO_SIZE];
+ int m_stmt_name_length;
+
+ /** Column SQL_TEXT. */
+ char m_sql_text[COL_INFO_SIZE];
+ int m_sql_text_length;
+
+ /** Column OWNER_THREAD_ID. */
+ ulonglong m_owner_thread_id;
+
+ /** Column OWNER_EVENT_ID. */
+ ulonglong m_owner_event_id;
+
+ /** Column OWNER_OBJECT_TYPE. */
+ enum_object_type m_owner_object_type;
+
+ /** Column OWNER_OBJECT_SCHEMA */
+ char m_owner_object_schema[COL_OBJECT_SCHEMA_SIZE];
+ int m_owner_object_schema_length;
+
+ /** Column OWNER_OBJECT_NAME */
+ char m_owner_object_name[COL_OBJECT_NAME_SIZE];
+ int m_owner_object_name_length;
+
+ /** Columns TIMER_PREPARE. */
+ PFS_stat_row m_prepare_stat;
+
+ /** Columns COUNT_REPREPARE. */
+ PFS_stat_row m_reprepare_stat;
+
+ /** Columns COUNT_STAR...SUM_NO_GOOD_INDEX_USED. */
+ PFS_statement_stat_row m_execute_stat;
+};
+
+/** Table PERFORMANCE_SCHEMA.PREPARED_STATEMENT_INSTANCES. */
+class table_prepared_stmt_instances : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_prepared_stmt_instances();
+
+public:
+ ~table_prepared_stmt_instances()
+ {}
+
+protected:
+ void make_row(PFS_prepared_stmt*);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_prepared_stmt_instances m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_applier_configuration.cc b/storage/perfschema/table_replication_applier_configuration.cc
new file mode 100644
index 00000000000..06de6c6e141
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_configuration.cc
@@ -0,0 +1,194 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_applier_configuration.cc
+ Table replication_applier_configuration (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+#include "table_replication_applier_configuration.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "slave.h"
+//#include "rpl_info.h"
+#include "rpl_rli.h"
+#include "rpl_mi.h"
+#include "sql_parse.h"
+//#include "rpl_msr.h" /* Multisource replication */
+
+#ifdef HAVE_REPLICATION
+THR_LOCK table_replication_applier_configuration::m_table_lock;
+
+PFS_engine_table_share
+table_replication_applier_configuration::m_share=
+{
+ { C_STRING_WITH_LEN("replication_applier_configuration") },
+ &pfs_readonly_acl,
+ table_replication_applier_configuration::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_applier_configuration::get_row_count,
+ sizeof(pos_t), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE replication_applier_configuration("
+ "CHANNEL_NAME CHAR(64) collate utf8_general_ci not null,"
+ "DESIRED_DELAY INTEGER not null)") },
+ false /* perpetual */
+};
+
+PFS_engine_table* table_replication_applier_configuration::create(void)
+{
+ return new table_replication_applier_configuration();
+}
+
+table_replication_applier_configuration
+ ::table_replication_applier_configuration()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+table_replication_applier_configuration
+ ::~table_replication_applier_configuration()
+{}
+
+void table_replication_applier_configuration::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+
+ha_rows table_replication_applier_configuration::get_row_count()
+{
+ return master_info_index->master_info_hash.records;
+}
+
+
+int table_replication_applier_configuration::rnd_next(void)
+{
+ Master_info *mi;
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < master_info_index->master_info_hash.records;
+ m_pos.next())
+ {
+ mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index);
+
+ if (mi && mi->host[0])
+ {
+ make_row(mi);
+ m_next_pos.set_after(&m_pos);
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return 0;
+ }
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_applier_configuration::rnd_pos(const void *pos)
+{
+ Master_info *mi;
+ int res= HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ if ((mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index)))
+ {
+ make_row(mi);
+ res= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return res;
+}
+
+void table_replication_applier_configuration::make_row(Master_info *mi)
+{
+ m_row_exists= false;
+
+ DBUG_ASSERT(mi != NULL);
+
+ mysql_mutex_lock(&mi->data_lock);
+ mysql_mutex_lock(&mi->rli.data_lock);
+
+ m_row.channel_name_length= static_cast<uint>(mi->connection_name.length);
+ memcpy(m_row.channel_name, mi->connection_name.str, m_row.channel_name_length);
+ m_row.desired_delay= 0; //mi->rli->get_sql_delay();
+
+ mysql_mutex_unlock(&mi->rli.data_lock);
+ mysql_mutex_unlock(&mi->data_lock);
+
+ m_row_exists= true;
+}
+
+int table_replication_applier_configuration::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /*
+ Note:
+ There are no NULL columns in this table,
+ so there are no null bits reserved for NULL flags per column.
+ There are no VARCHAR columns either, so the record is not
+ in HA_OPTION_PACK_RECORD format as most other performance_schema tables.
+ When HA_OPTION_PACK_RECORD is not set,
+ the table record reserves an extra null byte, see open_binary_frm().
+ */
+
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /**channel_name*/
+ set_field_char_utf8(f, m_row.channel_name, m_row.channel_name_length);
+ break;
+ case 1: /** desired_delay */
+ set_field_ulong(f, static_cast<ulong>(m_row.desired_delay));
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
+#endif
diff --git a/storage/perfschema/table_replication_applier_configuration.h b/storage/perfschema/table_replication_applier_configuration.h
new file mode 100644
index 00000000000..18321ac079e
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_configuration.h
@@ -0,0 +1,107 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_APPLIER_CONFIGURATION_H
+#define TABLE_REPLICATION_APPLIER_CONFIGURATION_H
+
+/**
+ @file storage/perfschema/table_replication_applier_configuration.h
+ Table replication_applier_configuration (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "rpl_mi.h"
+#include "mysql_com.h"
+#include "my_thread.h"
+//#include "rpl_msr.h"
+//#include "rpl_info.h" /*CHANNEL_NAME_LENGTH*/
+
+class Master_info;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/** A row in the table*/
+struct st_row_applier_config {
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ time_t desired_delay;
+ bool desired_delay_is_set;
+};
+
+/** Table PERFORMANCE_SCHEMA.replication_applier_configuration */
+class table_replication_applier_configuration: public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+private:
+ void make_row(Master_info *mi);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** Current row */
+ st_row_applier_config m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_applier_configuration();
+
+public:
+ ~table_replication_applier_configuration();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_applier_status.cc b/storage/perfschema/table_replication_applier_status.cc
new file mode 100644
index 00000000000..7083d3ac3b9
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_status.cc
@@ -0,0 +1,222 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_applier_status.cc
+ Table replication_applier_status (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+
+#ifdef HAVE_REPLICATION
+#include "table_replication_applier_status.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "slave.h"
+//#include "rpl_info.h"
+#include "rpl_rli.h"
+#include "rpl_mi.h"
+#include "sql_parse.h"
+//#include "rpl_msr.h" /*Multi source replication */
+
+THR_LOCK table_replication_applier_status::m_table_lock;
+
+PFS_engine_table_share
+table_replication_applier_status::m_share=
+{
+ { C_STRING_WITH_LEN("replication_applier_status") },
+ &pfs_readonly_acl,
+ table_replication_applier_status::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_applier_status::get_row_count, /* records */
+ sizeof(pos_t), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE replication_applier_status("
+ "CHANNEL_NAME CHAR(64) collate utf8_general_ci not null,"
+ "SERVICE_STATE ENUM('ON','OFF') not null,"
+ "REMAINING_DELAY INTEGER unsigned,"
+ "COUNT_TRANSACTIONS_RETRIES BIGINT unsigned not null)") },
+ false /* perpetual */
+};
+
+
+PFS_engine_table* table_replication_applier_status::create(void)
+{
+ return new table_replication_applier_status();
+}
+
+table_replication_applier_status::table_replication_applier_status()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+table_replication_applier_status::~table_replication_applier_status()
+{}
+
+void table_replication_applier_status::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+ha_rows table_replication_applier_status::get_row_count()
+{
+ return master_info_index->master_info_hash.records;
+}
+
+
+int table_replication_applier_status::rnd_next(void)
+{
+ Master_info *mi;
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < master_info_index->master_info_hash.records;
+ m_pos.next())
+ {
+ mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index);
+
+ if (mi && mi->host[0])
+ {
+ make_row(mi);
+ m_next_pos.set_after(&m_pos);
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return 0;
+ }
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return HA_ERR_END_OF_FILE;
+}
+
+
+int table_replication_applier_status::rnd_pos(const void *pos)
+{
+ Master_info *mi=NULL;
+ int res= HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ if ((mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index)))
+ {
+ make_row(mi);
+ res= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return res;
+}
+
+void table_replication_applier_status::make_row(Master_info *mi)
+{
+ char *slave_sql_running_state= NULL;
+
+ m_row_exists= false;
+
+ DBUG_ASSERT(mi != NULL);
+
+ m_row.channel_name_length= static_cast<uint>(mi->connection_name.length);
+ memcpy(m_row.channel_name, mi->connection_name.str, m_row.channel_name_length);
+
+ //mysql_mutex_lock(&mi->rli->info_thd_lock);
+
+ slave_sql_running_state= const_cast<char *>
+ (mi->rli.sql_driver_thd ?
+ mi->rli.sql_driver_thd->get_proc_info() : "");
+ //mysql_mutex_unlock(&mi->rli->info_thd_lock);
+
+
+ mysql_mutex_lock(&mi->data_lock);
+ mysql_mutex_lock(&mi->rli.data_lock);
+
+ if (mi->rli.slave_running)
+ m_row.service_state= PS_RPL_YES;
+ else
+ m_row.service_state= PS_RPL_NO;
+
+ m_row.remaining_delay= 0;
+ if (slave_sql_running_state == stage_sql_thd_waiting_until_delay.m_name)
+ {
+ time_t t= my_time(0), sql_delay_end= 0; //mi->rli.>get_sql_delay_end();
+ m_row.remaining_delay= (uint)(t < sql_delay_end ?
+ sql_delay_end - t : 0);
+ m_row.remaining_delay_is_set= true;
+ }
+ else
+ m_row.remaining_delay_is_set= false;
+
+ m_row.count_transactions_retries= mi->rli.retried_trans;
+
+ mysql_mutex_unlock(&mi->rli.data_lock);
+ mysql_mutex_unlock(&mi->data_lock);
+
+ m_row_exists= true;
+}
+
+int table_replication_applier_status::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /**channel_name*/
+ set_field_char_utf8(f, m_row.channel_name, m_row.channel_name_length);
+ break;
+ case 1: /* service_state */
+ set_field_enum(f, m_row.service_state);
+ break;
+ case 2: /* remaining_delay */
+ if (m_row.remaining_delay_is_set)
+ set_field_ulong(f, m_row.remaining_delay);
+ else
+ f->set_null();
+ break;
+ case 3: /* total number of times transactions were retried */
+ set_field_ulonglong(f, m_row.count_transactions_retries);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
+#endif
diff --git a/storage/perfschema/table_replication_applier_status.h b/storage/perfschema/table_replication_applier_status.h
new file mode 100644
index 00000000000..95845f38925
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_status.h
@@ -0,0 +1,118 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_APPLIER_STATUS_H
+#define TABLE_REPLICATION_APPLIER_STATUS_H
+
+/**
+ @file storage/perfschema/table_replication_applier_status.h
+ Table replication_applier_status (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "rpl_mi.h"
+#include "mysql_com.h"
+//#include "rpl_msr.h"
+//#include "rpl_info.h" /*CHANNEL_NAME_LENGTH*/
+#include "my_thread.h"
+
+class Master_info;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+#ifndef ENUM_RPL_YES_NO
+#define ENUM_RPL_YES_NO
+/** enum values for Service_State field*/
+enum enum_rpl_yes_no {
+ PS_RPL_YES= 1,
+ PS_RPL_NO
+};
+#endif
+
+/** A row in the table. */
+struct st_row_applier_status {
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ enum_rpl_yes_no service_state;
+ uint remaining_delay;
+ bool remaining_delay_is_set;
+ ulong count_transactions_retries;
+};
+
+/** Table PERFORMANCE_SCHEMA.replication_applier_status */
+class table_replication_applier_status: public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+private:
+ void make_row(Master_info *mi);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** Current row */
+ st_row_applier_status m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_applier_status();
+
+public:
+ ~table_replication_applier_status();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_applier_status_by_coordinator.cc b/storage/perfschema/table_replication_applier_status_by_coordinator.cc
new file mode 100644
index 00000000000..beb8620b240
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_status_by_coordinator.cc
@@ -0,0 +1,249 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_applier_status_by_cordinator.cc
+ Table replication_applier_status_by_coordinator (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+
+#ifdef HAVE_REPLICATION
+#include "table_replication_applier_status_by_coordinator.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "slave.h"
+//#include "rpl_info.h"
+#include "rpl_rli.h"
+#include "rpl_mi.h"
+#include "sql_parse.h"
+//#include "rpl_msr.h" /* Multisource replication */
+
+THR_LOCK table_replication_applier_status_by_coordinator::m_table_lock;
+
+PFS_engine_table_share
+table_replication_applier_status_by_coordinator::m_share=
+{
+ { C_STRING_WITH_LEN("replication_applier_status_by_coordinator") },
+ &pfs_readonly_acl,
+ table_replication_applier_status_by_coordinator::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_applier_status_by_coordinator::get_row_count,
+ sizeof(pos_t), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE replication_applier_status_by_coordinator("
+ "CHANNEL_NAME CHAR(64) collate utf8_general_ci not null,"
+ "THREAD_ID BIGINT UNSIGNED,"
+ "SERVICE_STATE ENUM('ON','OFF') not null,"
+ "LAST_ERROR_NUMBER INTEGER not null,"
+ "LAST_ERROR_MESSAGE VARCHAR(1024) not null,"
+ "LAST_ERROR_TIMESTAMP TIMESTAMP(0) not null)") },
+ false /* perpetual */
+};
+
+PFS_engine_table* table_replication_applier_status_by_coordinator::create(void)
+{
+ return new table_replication_applier_status_by_coordinator();
+}
+
+table_replication_applier_status_by_coordinator
+ ::table_replication_applier_status_by_coordinator()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+table_replication_applier_status_by_coordinator
+ ::~table_replication_applier_status_by_coordinator()
+{}
+
+void table_replication_applier_status_by_coordinator::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+ha_rows table_replication_applier_status_by_coordinator::get_row_count()
+{
+ return master_info_index->master_info_hash.records;
+}
+
+
+int table_replication_applier_status_by_coordinator::rnd_next(void)
+{
+ Master_info *mi;
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < master_info_index->master_info_hash.records;
+ m_pos.next())
+ {
+ mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index);
+
+ /*
+ Construct and display SQL Thread's (Coordinator) information in
+ 'replication_applier_status_by_coordinator' table only in the case of
+ multi threaded slave mode. Code should do nothing in the case of single
+ threaded slave mode. In case of single threaded slave mode SQL Thread's
+ status will be reported as part of
+ 'replication_applier_status_by_worker' table.
+ */
+ if (mi && mi->host[0] && /*mi->rli.get_worker_count() > */ 0)
+ {
+ make_row(mi);
+ m_next_pos.set_after(&m_pos);
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return 0;
+ }
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_applier_status_by_coordinator::rnd_pos(const void *pos)
+{
+ Master_info *mi=NULL;
+ int res= HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ if ((mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index)))
+ {
+ make_row(mi);
+ res= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return res;
+}
+
+void table_replication_applier_status_by_coordinator::make_row(Master_info *mi)
+{
+ m_row_exists= false;
+
+ DBUG_ASSERT(mi != NULL);
+
+ mysql_mutex_lock(&mi->rli.data_lock);
+
+ m_row.channel_name_length= static_cast<uint>(mi->connection_name.length);
+ memcpy(m_row.channel_name, mi->connection_name.str, m_row.channel_name_length);
+
+ if (mi->rli.slave_running)
+ {
+ PSI_thread *psi= thd_get_psi(mi->rli.sql_driver_thd);
+ PFS_thread *pfs= reinterpret_cast<PFS_thread *> (psi);
+ if(pfs)
+ {
+ m_row.thread_id= pfs->m_thread_internal_id;
+ m_row.thread_id_is_null= false;
+ }
+ else
+ m_row.thread_id_is_null= true;
+ }
+ else
+ m_row.thread_id_is_null= true;
+
+ if (mi->rli.slave_running)
+ m_row.service_state= PS_RPL_YES;
+ else
+ m_row.service_state= PS_RPL_NO;
+
+ mysql_mutex_lock(&mi->rli.err_lock);
+
+ m_row.last_error_number= (long int) mi->rli.last_error().number;
+ m_row.last_error_message_length= 0;
+ m_row.last_error_timestamp= 0;
+
+ /** if error, set error message and timestamp */
+ if (m_row.last_error_number)
+ {
+ char *temp_store= (char*) mi->rli.last_error().message;
+ m_row.last_error_message_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.last_error_message, temp_store,
+ m_row.last_error_message_length);
+
+ /** time in millisecond since epoch */
+ m_row.last_error_timestamp= 0;//(ulonglong)mi->rli.last_error().skr*1000000;
+ }
+
+ mysql_mutex_unlock(&mi->rli.err_lock);
+ mysql_mutex_unlock(&mi->rli.data_lock);
+
+ m_row_exists= true;
+}
+
+int table_replication_applier_status_by_coordinator
+ ::read_row_values(TABLE *table, unsigned char *buf,
+ Field **fields, bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* channel_name */
+ set_field_char_utf8(f, m_row.channel_name, m_row.channel_name_length);
+ break;
+ case 1: /*thread_id*/
+ if (!m_row.thread_id_is_null)
+ set_field_ulonglong(f, m_row.thread_id);
+ else
+ f->set_null();
+ break;
+ case 2: /*service_state*/
+ set_field_enum(f, m_row.service_state);
+ break;
+ case 3: /*last_error_number*/
+ set_field_ulong(f, m_row.last_error_number);
+ break;
+ case 4: /*last_error_message*/
+ set_field_varchar_utf8(f, m_row.last_error_message,
+ m_row.last_error_message_length);
+ break;
+ case 5: /*last_error_timestamp*/
+ set_field_timestamp(f, m_row.last_error_timestamp);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
+#endif
diff --git a/storage/perfschema/table_replication_applier_status_by_coordinator.h b/storage/perfschema/table_replication_applier_status_by_coordinator.h
new file mode 100644
index 00000000000..8c1d4c4f029
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_status_by_coordinator.h
@@ -0,0 +1,124 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_APPLIER_STATUS_BY_COORDINATOR_H
+#define TABLE_REPLICATION_APPLIER_STATUS_BY_COORDINATOR_H
+
+/**
+ @file storage/perfschema/table_replication_applier_applier_by_coordinator.h
+ Table replication_applier_status_by_coordinator(declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "rpl_mi.h"
+#include "mysql_com.h"
+//#include "rpl_msr.h"
+//#include "rpl_info.h" /*CHANNEL_NAME_LENGTH*/
+#include "my_thread.h"
+
+class Master_info;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+#ifndef ENUM_RPL_YES_NO
+#define ENUM_RPL_YES_NO
+/** enum values for Service_State of coordinator thread */
+enum enum_rpl_yes_no {
+ PS_RPL_YES= 1, /* Service_State= on */
+ PS_RPL_NO /* Service_State= off */
+};
+#endif
+
+/*
+ A row in coordinator's table. The fields with string values have an
+ additional length field denoted by <field_name>_length.
+*/
+struct st_row_coordinator {
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ ulonglong thread_id;
+ bool thread_id_is_null;
+ enum_rpl_yes_no service_state;
+ uint last_error_number;
+ char last_error_message[MAX_SLAVE_ERRMSG];
+ uint last_error_message_length;
+ ulonglong last_error_timestamp;
+};
+
+/** Table PERFORMANCE_SCHEMA.replication_applier_status_by_coordinator */
+class table_replication_applier_status_by_coordinator: public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+private:
+ void make_row(Master_info *mi);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** Current row */
+ st_row_coordinator m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_applier_status_by_coordinator();
+
+public:
+ ~table_replication_applier_status_by_coordinator();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_applier_status_by_worker.cc b/storage/perfschema/table_replication_applier_status_by_worker.cc
new file mode 100644
index 00000000000..4c7ca612e0b
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_status_by_worker.cc
@@ -0,0 +1,412 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_applier_status_by_worker.cc
+ Table replication_applier_status_by_worker (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+#include "table_replication_applier_status_by_worker.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "slave.h"
+//#include "rpl_info.h"
+#include "rpl_rli.h"
+#include "rpl_mi.h"
+#include "sql_parse.h"
+//#include "rpl_rli_pdb.h"
+//#include "rpl_msr.h" /*Multi source replication */
+
+THR_LOCK table_replication_applier_status_by_worker::m_table_lock;
+
+PFS_engine_table_share
+table_replication_applier_status_by_worker::m_share=
+{
+ { C_STRING_WITH_LEN("replication_applier_status_by_worker") },
+ &pfs_readonly_acl,
+ table_replication_applier_status_by_worker::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_applier_status_by_worker::get_row_count, /*records*/
+ sizeof(pos_t), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE replication_applier_status_by_worker("
+ "CHANNEL_NAME CHAR(64) collate utf8_general_ci not null,"
+ "WORKER_ID BIGINT UNSIGNED not null,"
+ "THREAD_ID BIGINT UNSIGNED,"
+ "SERVICE_STATE ENUM('ON','OFF') not null,"
+ "LAST_SEEN_TRANSACTION CHAR(57) not null,"
+ "LAST_ERROR_NUMBER INTEGER not null,"
+ "LAST_ERROR_MESSAGE VARCHAR(1024) not null,"
+ "LAST_ERROR_TIMESTAMP TIMESTAMP(0) not null)") },
+ false /* perpetual */
+};
+
+PFS_engine_table* table_replication_applier_status_by_worker::create(void)
+{
+ return new table_replication_applier_status_by_worker();
+}
+
+table_replication_applier_status_by_worker
+ ::table_replication_applier_status_by_worker()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+table_replication_applier_status_by_worker
+ ::~table_replication_applier_status_by_worker()
+{}
+
+void table_replication_applier_status_by_worker::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+ha_rows table_replication_applier_status_by_worker::get_row_count()
+{
+ /*
+ Return an estimate, number of master info's multipled by worker threads
+ */
+ return master_info_index->master_info_hash.records*32;
+}
+
+
+int table_replication_applier_status_by_worker::rnd_next(void)
+{
+ Slave_worker *worker;
+ Master_info *mi;
+ size_t wc;
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.has_more_channels(master_info_index->master_info_hash.records);
+ m_pos.next_channel())
+ {
+ mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index_1);
+
+ if (mi && mi->host[0])
+ {
+ wc= mi->rli->get_worker_count();
+
+ if (wc == 0)
+ {
+ /* Single Thread Slave */
+ make_row(mi);
+ m_next_pos.set_channel_after(&m_pos);
+ channel_map.unlock();
+ return 0;
+ }
+
+ for (; m_pos.m_index_2 < wc; m_pos.next_worker())
+ {
+ /* Multi Thread Slave */
+
+ worker = mi->rli->get_worker(m_pos.m_index_2);
+ if (worker)
+ {
+ make_row(worker);
+ m_next_pos.set_after(&m_pos);
+ channel_map.unlock();
+ return 0;
+ }
+ }
+ }
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_applier_status_by_worker::rnd_pos(const void *pos)
+{
+ Slave_worker *worker;
+ Master_info *mi;
+ int res= HA_ERR_RECORD_DELETED;
+ size_t wc;
+
+ set_position(pos);
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index_1);
+
+ if (!mi || !mi->host[0])
+ goto end;
+
+ wc = mi->rli->get_worker_count();
+
+ if (wc == 0)
+ {
+ /* Single Thread Slave */
+ make_row(mi);
+ res=0;
+ }
+ else
+ {
+ /* Multi Thread Slave */
+ if (m_pos.m_index_2 < wc)
+ {
+ worker = mi->rli->get_worker(m_pos.m_index_2);
+ if (worker != NULL)
+ {
+ make_row(worker);
+ res=0;
+ }
+ }
+ }
+
+end:
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return res;
+}
+
+/**
+ Function to display SQL Thread's status as part of
+ 'replication_applier_status_by_worker' in single threaded slave mode.
+
+ @param[in] Master_info
+
+ @retval void
+*/
+void table_replication_applier_status_by_worker::make_row(Master_info *mi)
+{
+ m_row_exists= false;
+
+ m_row.worker_id= 0;
+
+ m_row.thread_id= 0;
+
+ DBUG_ASSERT(mi != NULL);
+ DBUG_ASSERT(mi->rli != NULL);
+
+ mysql_mutex_lock(&mi->rli->data_lock);
+
+ m_row.channel_name_length= strlen(mi->get_channel());
+ memcpy(m_row.channel_name, (char*)mi->get_channel(), m_row.channel_name_length);
+
+ if (mi->rli->slave_running)
+ {
+ PSI_thread *psi= thd_get_psi(mi->rli->info_thd);
+ PFS_thread *pfs= reinterpret_cast<PFS_thread *> (psi);
+ if(pfs)
+ {
+ m_row.thread_id= pfs->m_thread_internal_id;
+ m_row.thread_id_is_null= false;
+ }
+ else
+ m_row.thread_id_is_null= true;
+ }
+ else
+ m_row.thread_id_is_null= true;
+
+ if (mi->rli->slave_running)
+ m_row.service_state= PS_RPL_YES;
+ else
+ m_row.service_state= PS_RPL_NO;
+
+ if (mi->rli->currently_executing_gtid.type == GTID_GROUP)
+ {
+ global_sid_lock->rdlock();
+ m_row.last_seen_transaction_length=
+ mi->rli->currently_executing_gtid.to_string(global_sid_map,
+ m_row.last_seen_transaction);
+ global_sid_lock->unlock();
+ }
+ else if (mi->rli->currently_executing_gtid.type == ANONYMOUS_GROUP)
+ {
+ m_row.last_seen_transaction_length=
+ mi->rli->currently_executing_gtid.to_string((rpl_sid *)NULL,
+ m_row.last_seen_transaction);
+ }
+ else
+ {
+ /*
+ For SQL thread currently_executing_gtid, type is set to
+ AUTOMATIC_GROUP when the SQL thread is not executing any
+ transaction. For this case, the field should be empty.
+ */
+ DBUG_ASSERT(mi->rli->currently_executing_gtid.type == AUTOMATIC_GROUP);
+ m_row.last_seen_transaction_length= 0;
+ memcpy(m_row.last_seen_transaction, "", 1);
+ }
+
+ mysql_mutex_lock(&mi->rli->err_lock);
+
+ m_row.last_error_number= (long int) mi->rli->last_error().number;
+ m_row.last_error_message_length= 0;
+ m_row.last_error_timestamp= 0;
+
+ /** if error, set error message and timestamp */
+ if (m_row.last_error_number)
+ {
+ char *temp_store= (char*) mi->rli->last_error().message;
+ m_row.last_error_message_length= strlen(temp_store);
+ memcpy(m_row.last_error_message, temp_store,
+ m_row.last_error_message_length);
+
+ /** time in millisecond since epoch */
+ m_row.last_error_timestamp= (ulonglong)mi->rli->last_error().skr*1000000;
+ }
+
+ mysql_mutex_unlock(&mi->rli->err_lock);
+ mysql_mutex_unlock(&mi->rli->data_lock);
+ m_row_exists= true;
+}
+
+void table_replication_applier_status_by_worker::make_row(Slave_worker *w)
+{
+ m_row_exists= false;
+
+ m_row.worker_id= w->get_internal_id();
+
+ m_row.thread_id= 0;
+
+ m_row.channel_name_length= strlen(w->get_channel());
+ memcpy(m_row.channel_name, (char*)w->get_channel(), m_row.channel_name_length);
+
+ mysql_mutex_lock(&w->jobs_lock);
+ if (w->running_status == Slave_worker::RUNNING)
+ {
+ PSI_thread *psi= thd_get_psi(w->info_thd);
+ PFS_thread *pfs= reinterpret_cast<PFS_thread *> (psi);
+ if(pfs)
+ {
+ m_row.thread_id= pfs->m_thread_internal_id;
+ m_row.thread_id_is_null= false;
+ }
+ else /* no instrumentation found */
+ m_row.thread_id_is_null= true;
+ }
+ else
+ m_row.thread_id_is_null= true;
+
+ if (w->running_status == Slave_worker::RUNNING)
+ m_row.service_state= PS_RPL_YES;
+ else
+ m_row.service_state= PS_RPL_NO;
+
+ m_row.last_error_number= (unsigned int) w->last_error().number;
+
+ if (w->currently_executing_gtid.type == GTID_GROUP)
+ {
+ global_sid_lock->rdlock();
+ m_row.last_seen_transaction_length=
+ w->currently_executing_gtid.to_string(global_sid_map,
+ m_row.last_seen_transaction);
+ global_sid_lock->unlock();
+ }
+ else if (w->currently_executing_gtid.type == ANONYMOUS_GROUP)
+ {
+ m_row.last_seen_transaction_length=
+ w->currently_executing_gtid.to_string((rpl_sid *)NULL,
+ m_row.last_seen_transaction);
+ }
+ else
+ {
+ /*
+ For worker->currently_executing_gtid, type is set to
+ AUTOMATIC_GROUP when the worker is not executing any
+ transaction. For this case, the field should be empty.
+ */
+ DBUG_ASSERT(w->currently_executing_gtid.type == AUTOMATIC_GROUP);
+ m_row.last_seen_transaction_length= 0;
+ memcpy(m_row.last_seen_transaction, "", 1);
+ }
+
+ m_row.last_error_number= (unsigned int) w->last_error().number;
+ m_row.last_error_message_length= 0;
+ m_row.last_error_timestamp= 0;
+
+ /** if error, set error message and timestamp */
+ if (m_row.last_error_number)
+ {
+ char * temp_store= (char*)w->last_error().message;
+ m_row.last_error_message_length= strlen(temp_store);
+ memcpy(m_row.last_error_message, w->last_error().message,
+ m_row.last_error_message_length);
+
+ /** time in millisecond since epoch */
+ m_row.last_error_timestamp= (ulonglong)w->last_error().skr*1000000;
+ }
+ mysql_mutex_unlock(&w->jobs_lock);
+
+ m_row_exists= true;
+}
+
+int table_replication_applier_status_by_worker
+ ::read_row_values(TABLE *table, unsigned char *buf, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /** channel_name */
+ set_field_char_utf8(f, m_row.channel_name, m_row.channel_name_length);
+ break;
+ case 1: /*worker_id*/
+ set_field_ulonglong(f, m_row.worker_id);
+ break;
+ case 2: /*thread_id*/
+ if(m_row.thread_id_is_null)
+ f->set_null();
+ else
+ set_field_ulonglong(f, m_row.thread_id);
+ break;
+ case 3: /*service_state*/
+ set_field_enum(f, m_row.service_state);
+ break;
+ case 4: /*last_seen_transaction*/
+ set_field_char_utf8(f, m_row.last_seen_transaction, m_row.last_seen_transaction_length);
+ break;
+ case 5: /*last_error_number*/
+ set_field_ulong(f, m_row.last_error_number);
+ break;
+ case 6: /*last_error_message*/
+ set_field_varchar_utf8(f, m_row.last_error_message, m_row.last_error_message_length);
+ break;
+ case 7: /*last_error_timestamp*/
+ set_field_timestamp(f, m_row.last_error_timestamp);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
diff --git a/storage/perfschema/table_replication_applier_status_by_worker.h b/storage/perfschema/table_replication_applier_status_by_worker.h
new file mode 100644
index 00000000000..0a881dae73f
--- /dev/null
+++ b/storage/perfschema/table_replication_applier_status_by_worker.h
@@ -0,0 +1,182 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_APPLIER_STATUS_BY_WORKER_H
+#define TABLE_REPLICATION_APPLIER_STATUS_BY_WORKER_H
+
+/**
+ @file storage/perfschema/table_replication_applier_status_by_worker.h
+ Table replication_applier_status_by_worker (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "rpl_mi.h"
+#include "mysql_com.h"
+//#include "rpl_rli_pdb.h"
+//#include "rpl_msr.h"
+//#include "rpl_info.h" /*CHANNEL_NAME_LENGTH*/
+#include "my_thread.h"
+
+class Slave_worker;
+class Master_info;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+#ifndef ENUM_RPL_YES_NO
+#define ENUM_RPL_YES_NO
+/** enumerated values for service_state of worker thread*/
+enum enum_rpl_yes_no {
+ PS_RPL_YES= 1, /* service_state= on */
+ PS_RPL_NO /* service_state= off */
+};
+#endif
+
+/*
+ A row in worker's table. The fields with string values have an additional
+ length field denoted by <field_name>_length.
+*/
+struct st_row_worker {
+
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ /*
+ worker_id is added to the table because thread is killed at STOP SLAVE
+ but the status needs to show up, so worker_id is used as a permanent
+ identifier.
+ */
+ ulonglong worker_id;
+ ulonglong thread_id;
+ uint thread_id_is_null;
+ enum_rpl_yes_no service_state;
+ char last_seen_transaction[GTID_MAX_STR_LENGTH + 1];
+ uint last_seen_transaction_length;
+ uint last_error_number;
+ char last_error_message[MAX_SLAVE_ERRMSG];
+ uint last_error_message_length;
+ ulonglong last_error_timestamp;
+};
+
+/**
+ Position in table replication_applier_status_by_worker.
+ Index 1 for replication channel.
+ Index 2 for worker:
+ - position [0] is for Single Thread Slave (Master_info)
+ - position [1] .. [N] is for Multi Thread Slave (Slave_worker)
+*/
+struct pos_replication_applier_status_by_worker : public PFS_double_index
+{
+
+ pos_replication_applier_status_by_worker() : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline bool has_more_channels(uint num)
+ { return (m_index_1 < num); }
+
+ inline void next_channel(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+
+ inline void next_worker()
+ {
+ m_index_2++;
+ }
+
+ inline void
+ set_channel_after(const pos_replication_applier_status_by_worker *other)
+ {
+ m_index_1 = other->m_index_1 + 1;
+ m_index_2 = 0;
+ }
+};
+
+
+/** Table PERFORMANCE_SCHEMA.replication_applier_status_by_worker */
+class table_replication_applier_status_by_worker: public PFS_engine_table
+{
+ typedef pos_replication_applier_status_by_worker pos_t;
+
+private:
+ void make_row(Slave_worker *);
+ /*
+ Master_info to construct a row to display SQL Thread's status
+ information in STS mode
+ */
+ void make_row(Master_info *);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** current row*/
+ st_row_worker m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_applier_status_by_worker();
+
+public:
+ ~table_replication_applier_status_by_worker();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_connection_configuration.cc b/storage/perfschema/table_replication_connection_configuration.cc
new file mode 100644
index 00000000000..6d358240332
--- /dev/null
+++ b/storage/perfschema/table_replication_connection_configuration.cc
@@ -0,0 +1,333 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_connection_configuration.cc
+ Table replication_connection_configuration (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+#include "table_replication_connection_configuration.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "slave.h"
+//#include "rpl_info.h"
+#include "rpl_rli.h"
+#include "rpl_mi.h"
+#include "sql_parse.h"
+//#include "rpl_msr.h" /* Multisource replciation */
+
+#ifdef HAVE_REPLICATION
+THR_LOCK table_replication_connection_configuration::m_table_lock;
+
+PFS_engine_table_share
+table_replication_connection_configuration::m_share=
+{
+ { C_STRING_WITH_LEN("replication_connection_configuration") },
+ &pfs_readonly_acl,
+ table_replication_connection_configuration::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_connection_configuration::get_row_count, /* records */
+ sizeof(pos_t), /* ref length */
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE replication_connection_configuration("
+ "CHANNEL_NAME CHAR(64) collate utf8_general_ci not null,"
+ "HOST CHAR(60) collate utf8_bin not null,"
+ "PORT INTEGER not null,"
+ "USER CHAR(32) collate utf8_bin not null,"
+ "NETWORK_INTERFACE CHAR(60) collate utf8_bin not null,"
+ "AUTO_POSITION ENUM('1','0') not null,"
+ "SSL_ALLOWED ENUM('YES','NO','IGNORED') not null,"
+ "SSL_CA_FILE VARCHAR(512) not null,"
+ "SSL_CA_PATH VARCHAR(512) not null,"
+ "SSL_CERTIFICATE VARCHAR(512) not null,"
+ "SSL_CIPHER VARCHAR(512) not null,"
+ "SSL_KEY VARCHAR(512) not null,"
+ "SSL_VERIFY_SERVER_CERTIFICATE ENUM('YES','NO') not null,"
+ "SSL_CRL_FILE VARCHAR(255) not null,"
+ "SSL_CRL_PATH VARCHAR(255) not null,"
+ "CONNECTION_RETRY_INTERVAL INTEGER not null,"
+ "CONNECTION_RETRY_COUNT BIGINT unsigned not null,"
+ "HEARTBEAT_INTERVAL DOUBLE(10,3) unsigned not null COMMENT 'Number of seconds after which a heartbeat will be sent .',"
+ "TLS_VERSION VARCHAR(255) not null)") },
+ false /* perpetual */
+};
+
+
+PFS_engine_table* table_replication_connection_configuration::create(void)
+{
+ return new table_replication_connection_configuration();
+}
+
+table_replication_connection_configuration
+ ::table_replication_connection_configuration()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+table_replication_connection_configuration
+ ::~table_replication_connection_configuration()
+{}
+
+void table_replication_connection_configuration::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+ha_rows table_replication_connection_configuration::get_row_count()
+{
+ /*
+ We actually give the MAX_CHANNELS rather than the current
+ number of channels
+ */
+
+ return master_info_index->master_info_hash.records;
+}
+
+int table_replication_connection_configuration::rnd_next(void)
+{
+ Master_info *mi;
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < master_info_index->master_info_hash.records;
+ m_pos.next())
+ {
+ mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index);
+
+ if (mi && mi->host[0])
+ {
+ make_row(mi);
+ m_next_pos.set_after(&m_pos);
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return 0;
+ }
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_connection_configuration::rnd_pos(const void *pos)
+{
+ Master_info *mi;
+ int res= HA_ERR_RECORD_DELETED;
+
+ mysql_mutex_lock(&LOCK_active_mi);
+
+ set_position(pos);
+
+ if ((mi= (Master_info *)my_hash_element(&master_info_index->master_info_hash, m_pos.m_index)))
+ {
+ make_row(mi);
+ res= 0;
+ }
+
+ mysql_mutex_unlock(&LOCK_active_mi);
+ return res;
+}
+
+void table_replication_connection_configuration::make_row(Master_info *mi)
+{
+ char * temp_store;
+
+ m_row_exists= false;
+
+
+ DBUG_ASSERT(mi != NULL);
+
+ mysql_mutex_lock(&mi->data_lock);
+ mysql_mutex_lock(&mi->rli.data_lock);
+
+ m_row.channel_name_length= static_cast<uint>(mi->connection_name.length);
+ memcpy(m_row.channel_name, mi->connection_name.str, m_row.channel_name_length);
+
+ m_row.host_length= static_cast<uint>(strlen(mi->host));
+ memcpy(m_row.host, mi->host, m_row.host_length);
+
+ m_row.port= (unsigned int) mi->port;
+
+ /* can't the user be NULL? */
+ temp_store= (char*)mi->user;
+ m_row.user_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.user, temp_store, m_row.user_length);
+
+ temp_store= const_cast<char*>(""); //(char*)mi->bind_addr;
+ m_row.network_interface_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.network_interface, temp_store, m_row.network_interface_length);
+
+ if (mi->using_gtid)
+ m_row.auto_position= PS_RPL_YES;
+ else
+ m_row.auto_position= PS_RPL_NO;
+
+#ifdef HAVE_OPENSSL
+ m_row.ssl_allowed= mi->ssl? PS_SSL_ALLOWED_YES:PS_SSL_ALLOWED_NO;
+#else
+ m_row.ssl_allowed= mi->ssl? PS_SSL_ALLOWED_IGNORED:PS_SSL_ALLOWED_NO;
+#endif
+
+ temp_store= (char*)mi->ssl_ca;
+ m_row.ssl_ca_file_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_ca_file, temp_store, m_row.ssl_ca_file_length);
+
+ temp_store= (char*)mi->ssl_capath;
+ m_row.ssl_ca_path_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_ca_path, temp_store, m_row.ssl_ca_path_length);
+
+ temp_store= (char*)mi->ssl_cert;
+ m_row.ssl_certificate_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_certificate, temp_store, m_row.ssl_certificate_length);
+
+ temp_store= (char*)mi->ssl_cipher;
+ m_row.ssl_cipher_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_cipher, temp_store, m_row.ssl_cipher_length);
+
+ temp_store= (char*)mi->ssl_key;
+ m_row.ssl_key_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_key, temp_store, m_row.ssl_key_length);
+
+ if (mi->ssl_verify_server_cert)
+ m_row.ssl_verify_server_certificate= PS_RPL_YES;
+ else
+ m_row.ssl_verify_server_certificate= PS_RPL_NO;
+
+ temp_store= (char*)mi->ssl_crl;
+ m_row.ssl_crl_file_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_crl_file, temp_store, m_row.ssl_crl_file_length);
+
+ temp_store= (char*)mi->ssl_crlpath;
+ m_row.ssl_crl_path_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.ssl_crl_path, temp_store, m_row.ssl_crl_path_length);
+
+ m_row.connection_retry_interval= (unsigned int) mi->connect_retry;
+
+ m_row.connection_retry_count= 0; //(ulong) mi->retry_count;
+
+ m_row.heartbeat_interval= (double)mi->heartbeat_period;
+
+ temp_store= (char*)""; //mi->tls_version;
+ m_row.tls_version_length= static_cast<uint>(strlen(temp_store));
+ memcpy(m_row.tls_version, temp_store, m_row.tls_version_length);
+
+ mysql_mutex_unlock(&mi->rli.data_lock);
+ mysql_mutex_unlock(&mi->data_lock);
+
+ m_row_exists= true;
+}
+
+int table_replication_connection_configuration::read_row_values(TABLE *table,
+ unsigned char *,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 0);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /** channel_name */
+ set_field_char_utf8(f, m_row.channel_name, m_row.channel_name_length);
+ break;
+ case 1: /** host */
+ set_field_char_utf8(f, m_row.host, m_row.host_length);
+ break;
+ case 2: /** port */
+ set_field_ulong(f, m_row.port);
+ break;
+ case 3: /** user */
+ set_field_char_utf8(f, m_row.user, m_row.user_length);
+ break;
+ case 4: /** network_interface */
+ set_field_char_utf8(f, m_row.network_interface,
+ m_row.network_interface_length);
+ break;
+ case 5: /** auto_position */
+ set_field_enum(f, m_row.auto_position);
+ break;
+ case 6: /** ssl_allowed */
+ set_field_enum(f, m_row. ssl_allowed);
+ break;
+ case 7: /**ssl_ca_file */
+ set_field_varchar_utf8(f, m_row.ssl_ca_file,
+ m_row.ssl_ca_file_length);
+ break;
+ case 8: /** ssl_ca_path */
+ set_field_varchar_utf8(f, m_row.ssl_ca_path,
+ m_row.ssl_ca_path_length);
+ break;
+ case 9: /** ssl_certificate */
+ set_field_varchar_utf8(f, m_row.ssl_certificate,
+ m_row.ssl_certificate_length);
+ break;
+ case 10: /** ssl_cipher */
+ set_field_varchar_utf8(f, m_row.ssl_cipher, m_row.ssl_cipher_length);
+ break;
+ case 11: /** ssl_key */
+ set_field_varchar_utf8(f, m_row.ssl_key, m_row.ssl_key_length);
+ break;
+ case 12: /** ssl_verify_server_certificate */
+ set_field_enum(f, m_row.ssl_verify_server_certificate);
+ break;
+ case 13: /** ssl_crl_file */
+ set_field_varchar_utf8(f, m_row.ssl_crl_file,
+ m_row.ssl_crl_file_length);
+ break;
+ case 14: /** ssl_crl_path */
+ set_field_varchar_utf8(f, m_row.ssl_crl_path,
+ m_row.ssl_crl_path_length);
+ break;
+ case 15: /** connection_retry_interval */
+ set_field_ulong(f, m_row.connection_retry_interval);
+ break;
+ case 16: /** connect_retry_count */
+ set_field_ulonglong(f, m_row.connection_retry_count);
+ break;
+ case 17:/** number of seconds after which heartbeat will be sent */
+ set_field_double(f, m_row.heartbeat_interval);
+ break;
+ case 18: /** tls_version */
+ set_field_varchar_utf8(f, m_row.tls_version,
+ m_row.tls_version_length);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
+#endif
diff --git a/storage/perfschema/table_replication_connection_configuration.h b/storage/perfschema/table_replication_connection_configuration.h
new file mode 100644
index 00000000000..d1c8861cf0d
--- /dev/null
+++ b/storage/perfschema/table_replication_connection_configuration.h
@@ -0,0 +1,152 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_CONFIGURATION_H
+#define TABLE_REPLICATION_CONFIGURATION_H
+
+/**
+ @file storage/perfschema/table_replication_connection_configuration.h
+ Table replication_connection_configuration (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "rpl_mi.h"
+#include "mysql_com.h"
+#include "my_thread.h"
+//#include "rpl_msr.h"
+//#include "rpl_info.h" /* CHANNEL_NAME_LENGTH*/
+
+class Master_info;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+#ifndef ENUM_RPL_YES_NO
+#define ENUM_RPL_YES_NO
+enum enum_rpl_yes_no {
+ PS_RPL_YES= 1,
+ PS_RPL_NO
+};
+#endif
+
+/** enum values for SSL_Allowed*/
+enum enum_ssl_allowed {
+ PS_SSL_ALLOWED_YES= 1,
+ PS_SSL_ALLOWED_NO,
+ PS_SSL_ALLOWED_IGNORED
+};
+
+/**
+ A row in the table. The fields with string values have an additional
+ length field denoted by <field_name>_length.
+*/
+struct st_row_connect_config {
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ char host[HOSTNAME_LENGTH];
+ uint host_length;
+ uint port;
+ char user[USERNAME_LENGTH];
+ uint user_length;
+ char network_interface[HOSTNAME_LENGTH];
+ uint network_interface_length;
+ enum_rpl_yes_no auto_position;
+ enum_ssl_allowed ssl_allowed;
+ char ssl_ca_file[FN_REFLEN];
+ uint ssl_ca_file_length;
+ char ssl_ca_path[FN_REFLEN];
+ uint ssl_ca_path_length;
+ char ssl_certificate[FN_REFLEN];
+ uint ssl_certificate_length;
+ char ssl_cipher[FN_REFLEN];
+ uint ssl_cipher_length;
+ char ssl_key[FN_REFLEN];
+ uint ssl_key_length;
+ enum_rpl_yes_no ssl_verify_server_certificate;
+ char ssl_crl_file[FN_REFLEN];
+ uint ssl_crl_file_length;
+ char ssl_crl_path[FN_REFLEN];
+ uint ssl_crl_path_length;
+ uint connection_retry_interval;
+ ulong connection_retry_count;
+ double heartbeat_interval;
+ char tls_version[FN_REFLEN];
+ uint tls_version_length;
+};
+
+/** Table PERFORMANCE_SCHEMA.TABLE_REPLICATION_CONNECTION_CONFIGURATION. */
+class table_replication_connection_configuration: public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+private:
+ void make_row(Master_info *);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current row */
+ st_row_connect_config m_row;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_connection_configuration();
+
+public:
+ ~table_replication_connection_configuration();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_connection_status.cc b/storage/perfschema/table_replication_connection_status.cc
new file mode 100644
index 00000000000..a4230913917
--- /dev/null
+++ b/storage/perfschema/table_replication_connection_status.cc
@@ -0,0 +1,440 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_connection_status.cc
+ Table replication_connection_status (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+#include "table_replication_connection_status.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "slave.h"
+//#include "rpl_info.h"
+#include "rpl_rli.h"
+#include "rpl_mi.h"
+#include "sql_parse.h"
+//#include "rpl_msr.h" /* Multi source replication */
+#include "log.h"
+//#include "rpl_group_replication.h"
+
+/*
+ Callbacks implementation for GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS.
+*/
+static void set_channel_name(void* const context, const char& value,
+ size_t length)
+{
+}
+
+static void set_group_name(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_connect_status* row=
+ static_cast<struct st_row_connect_status*>(context);
+ const size_t max= UUID_LENGTH;
+ length= std::min(length, max);
+
+ row->group_name_is_null= false;
+ memcpy(row->group_name, &value, length);
+}
+
+static void set_source_uuid(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_connect_status* row=
+ static_cast<struct st_row_connect_status*>(context);
+ const size_t max= UUID_LENGTH;
+ length= std::min(length, max);
+
+ row->source_uuid_is_null= false;
+ memcpy(row->source_uuid, &value, length);
+}
+
+static void set_service_state(void* const context, bool value)
+{
+ struct st_row_connect_status* row=
+ static_cast<struct st_row_connect_status*>(context);
+
+ row->service_state= value ? PS_RPL_CONNECT_SERVICE_STATE_YES
+ : PS_RPL_CONNECT_SERVICE_STATE_NO;
+}
+
+
+THR_LOCK table_replication_connection_status::m_table_lock;
+
+
+/* Numbers in varchar count utf8 characters. */
+static const TABLE_FIELD_TYPE field_types[]=
+{
+ {
+ {C_STRING_WITH_LEN("CHANNEL_NAME")},
+ {C_STRING_WITH_LEN("char(64)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("GROUP_NAME")},
+ {C_STRING_WITH_LEN("char(36)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("SOURCE_UUID")},
+ {C_STRING_WITH_LEN("char(36)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("THREAD_ID")},
+ {C_STRING_WITH_LEN("bigint(20)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("SERVICE_STATE")},
+ {C_STRING_WITH_LEN("enum('ON','OFF','CONNECTING')")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("COUNT_RECEIVED_HEARTBEATS")},
+ {C_STRING_WITH_LEN("bigint(20)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("LAST_HEARTBEAT_TIMESTAMP")},
+ {C_STRING_WITH_LEN("timestamp")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("RECEIVED_TRANSACTION_SET")},
+ {C_STRING_WITH_LEN("longtext")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("LAST_ERROR_NUMBER")},
+ {C_STRING_WITH_LEN("int(11)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("LAST_ERROR_MESSAGE")},
+ {C_STRING_WITH_LEN("varchar(1024)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("LAST_ERROR_TIMESTAMP")},
+ {C_STRING_WITH_LEN("timestamp")},
+ {NULL, 0}
+ }
+};
+
+TABLE_FIELD_DEF
+table_replication_connection_status::m_field_def= { 11, field_types };
+
+PFS_engine_table_share
+table_replication_connection_status::m_share=
+{
+ { C_STRING_WITH_LEN("replication_connection_status") },
+ &pfs_readonly_acl,
+ table_replication_connection_status::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_connection_status::get_row_count, /* records */
+ sizeof(pos_t), /* ref length */
+ &m_table_lock,
+ &m_field_def,
+ false, /* checked */
+ false /* perpetual */
+};
+
+PFS_engine_table* table_replication_connection_status::create(void)
+{
+ return new table_replication_connection_status();
+}
+
+table_replication_connection_status::table_replication_connection_status()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{
+}
+
+table_replication_connection_status::~table_replication_connection_status()
+{
+}
+
+void table_replication_connection_status::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+ha_rows table_replication_connection_status::get_row_count()
+{
+ /*A lock is not needed for an estimate */
+ return channel_map.get_max_channels();
+}
+
+
+
+int table_replication_connection_status::rnd_next(void)
+{
+ Master_info *mi= NULL;
+ channel_map.rdlock();
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < channel_map.get_max_channels();
+ m_pos.next())
+ {
+ mi= channel_map.get_mi_at_pos(m_pos.m_index);
+
+ if (mi && mi->host[0])
+ {
+ make_row(mi);
+ m_next_pos.set_after(&m_pos);
+ channel_map.unlock();
+ return 0;
+ }
+ }
+
+ channel_map.unlock();
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_connection_status::rnd_pos(const void *pos)
+{
+ Master_info *mi;
+ int res= HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+
+ channel_map.rdlock();
+
+ if ((mi= channel_map.get_mi_at_pos(m_pos.m_index)))
+ {
+ make_row(mi);
+ res= 0;
+ }
+
+ channel_map.unlock();
+ return res;
+}
+
+void table_replication_connection_status::make_row(Master_info *mi)
+{
+ DBUG_ENTER("table_replication_connection_status::make_row");
+ m_row_exists= false;
+ bool error= false;
+
+ /* Default values */
+ m_row.group_name_is_null= true;
+ m_row.source_uuid_is_null= true;
+ m_row.thread_id_is_null= true;
+ m_row.service_state= PS_RPL_CONNECT_SERVICE_STATE_NO;
+
+ DBUG_ASSERT(mi != NULL);
+ DBUG_ASSERT(mi->rli != NULL);
+
+ mysql_mutex_lock(&mi->data_lock);
+ mysql_mutex_lock(&mi->rli->data_lock);
+
+ m_row.channel_name_length= mi->get_channel() ? strlen(mi->get_channel()):0;
+ memcpy(m_row.channel_name, mi->get_channel(), m_row.channel_name_length);
+
+ if (is_group_replication_plugin_loaded() &&
+ channel_map.is_group_replication_channel_name(mi->get_channel(), true))
+ {
+ /*
+ Group Replication applier channel.
+ Set callbacks on GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS.
+ */
+ const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS callbacks=
+ {
+ &m_row,
+ &set_channel_name,
+ &set_group_name,
+ &set_source_uuid,
+ &set_service_state,
+ };
+
+ // Query plugin and let callbacks do their job.
+ if (get_group_replication_connection_status_info(callbacks))
+ {
+ DBUG_PRINT("info", ("Group Replication stats not available!"));
+ }
+ }
+ else
+ {
+ /* Slave channel. */
+ if (mi->master_uuid[0] != 0)
+ {
+ memcpy(m_row.source_uuid, mi->master_uuid, UUID_LENGTH);
+ m_row.source_uuid_is_null= false;
+ }
+
+ if (mi->slave_running == MYSQL_SLAVE_RUN_CONNECT)
+ m_row.service_state= PS_RPL_CONNECT_SERVICE_STATE_YES;
+ else
+ {
+ if (mi->slave_running == MYSQL_SLAVE_RUN_NOT_CONNECT)
+ m_row.service_state= PS_RPL_CONNECT_SERVICE_STATE_CONNECTING;
+ else
+ m_row.service_state= PS_RPL_CONNECT_SERVICE_STATE_NO;
+ }
+ }
+
+ if (mi->slave_running == MYSQL_SLAVE_RUN_CONNECT)
+ {
+ PSI_thread *psi= thd_get_psi(mi->info_thd);
+ PFS_thread *pfs= reinterpret_cast<PFS_thread *> (psi);
+ if(pfs)
+ {
+ m_row.thread_id= pfs->m_thread_internal_id;
+ m_row.thread_id_is_null= false;
+ }
+ }
+
+ m_row.count_received_heartbeats= mi->received_heartbeats;
+ /*
+ Time in Milliseconds since epoch. active_mi->last_heartbeat contains
+ number of seconds so we multiply by 1000000.
+ */
+ m_row.last_heartbeat_timestamp= (ulonglong)mi->last_heartbeat*1000000;
+
+ {
+ global_sid_lock->wrlock();
+ const Gtid_set* io_gtid_set= mi->rli->get_gtid_set();
+
+ if ((m_row.received_transaction_set_length=
+ io_gtid_set->to_string(&m_row.received_transaction_set)) < 0)
+ {
+ my_free(m_row.received_transaction_set);
+ m_row.received_transaction_set_length= 0;
+ global_sid_lock->unlock();
+ error= true;
+ goto end;
+ }
+ global_sid_lock->unlock();
+ }
+
+ /* Errors */
+ mysql_mutex_lock(&mi->err_lock);
+ mysql_mutex_lock(&mi->rli->err_lock);
+ m_row.last_error_number= (unsigned int) mi->last_error().number;
+ m_row.last_error_message_length= 0;
+ m_row.last_error_timestamp= 0;
+
+ /** If error, set error message and timestamp */
+ if (m_row.last_error_number)
+ {
+ char* temp_store= (char*)mi->last_error().message;
+ m_row.last_error_message_length= strlen(temp_store);
+ memcpy(m_row.last_error_message, temp_store,
+ m_row.last_error_message_length);
+
+ /*
+ Time in millisecond since epoch. active_mi->last_error().skr contains
+ number of seconds so we multiply by 1000000. */
+ m_row.last_error_timestamp= (ulonglong)mi->last_error().skr*1000000;
+ }
+ mysql_mutex_unlock(&mi->rli->err_lock);
+ mysql_mutex_unlock(&mi->err_lock);
+
+end:
+ mysql_mutex_unlock(&mi->rli->data_lock);
+ mysql_mutex_unlock(&mi->data_lock);
+
+ if (!error)
+ m_row_exists= true;
+ DBUG_VOID_RETURN;
+}
+
+int table_replication_connection_status::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /** channel_name*/
+ set_field_char_utf8(f, m_row.channel_name,m_row.channel_name_length);
+ break;
+ case 1: /** group_name */
+ if (m_row.group_name_is_null)
+ f->set_null();
+ else
+ set_field_char_utf8(f, m_row.group_name, UUID_LENGTH);
+ break;
+ case 2: /** source_uuid */
+ if (m_row.source_uuid_is_null)
+ f->set_null();
+ else
+ set_field_char_utf8(f, m_row.source_uuid, UUID_LENGTH);
+ break;
+ case 3: /** thread_id */
+ if(m_row.thread_id_is_null)
+ f->set_null();
+ else
+ set_field_ulonglong(f, m_row.thread_id);
+ break;
+ case 4: /** service_state */
+ set_field_enum(f, m_row.service_state);
+ break;
+ case 5: /** number of heartbeat events received **/
+ set_field_ulonglong(f, m_row.count_received_heartbeats);
+ break;
+ case 6: /** time of receipt of last heartbeat event **/
+ set_field_timestamp(f, m_row.last_heartbeat_timestamp);
+ break;
+ case 7: /** received_transaction_set */
+ set_field_longtext_utf8(f, m_row.received_transaction_set,
+ m_row.received_transaction_set_length);
+ break;
+ case 8: /*last_error_number*/
+ set_field_ulong(f, m_row.last_error_number);
+ break;
+ case 9: /*last_error_message*/
+ set_field_varchar_utf8(f, m_row.last_error_message,
+ m_row.last_error_message_length);
+ break;
+ case 10: /*last_error_timestamp*/
+ set_field_timestamp(f, m_row.last_error_timestamp);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ m_row.cleanup();
+
+ return 0;
+}
diff --git a/storage/perfschema/table_replication_connection_status.h b/storage/perfschema/table_replication_connection_status.h
new file mode 100644
index 00000000000..a1a5eb116bc
--- /dev/null
+++ b/storage/perfschema/table_replication_connection_status.h
@@ -0,0 +1,150 @@
+/*
+ Copyright (c) 2013, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_CONNECTION_STATUS_H
+#define TABLE_REPLICATION_CONNECTION_STATUS_H
+
+/**
+ @file storage/perfschema/table_replication_connection_status.h
+ Table replication_connection_status (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "rpl_mi.h"
+#include "rpl_reporting.h" /* MAX_SLAVE_ERRMSG */
+#include "mysql_com.h"
+//#include "rpl_msr.h"
+//#include "rpl_info.h" /*CHANNEL_NAME_LENGTH */
+#include "my_thread.h"
+
+class Master_info;
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+#ifndef ENUM_RPL_YES_NO
+#define ENUM_RPL_YES_NO
+enum enum_rpl_yes_no {
+ PS_RPL_YES= 1,
+ PS_RPL_NO
+};
+#endif
+
+enum enum_rpl_connect_status_service_state {
+ PS_RPL_CONNECT_SERVICE_STATE_YES= 1,
+ PS_RPL_CONNECT_SERVICE_STATE_NO,
+ PS_RPL_CONNECT_SERVICE_STATE_CONNECTING
+};
+
+/*
+ A row in the table. The fields with string values have an additional
+ length field denoted by <field_name>_length.
+*/
+struct st_row_connect_status {
+ char group_name[NAME_LEN];
+ bool group_name_is_null;
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ char source_uuid[11]; // typeof(server_id) == uint32
+ bool source_uuid_is_null;
+ ulonglong thread_id;
+ bool thread_id_is_null;
+ enum_rpl_connect_status_service_state service_state;
+ ulonglong count_received_heartbeats;
+ ulonglong last_heartbeat_timestamp;
+ char* received_transaction_set;
+ int received_transaction_set_length;
+ uint last_error_number;
+ char last_error_message[MAX_SLAVE_ERRMSG];
+ uint last_error_message_length;
+ ulonglong last_error_timestamp;
+
+ st_row_connect_status() : received_transaction_set(NULL) {}
+
+ void cleanup()
+ {
+ if (received_transaction_set != NULL)
+ {
+ my_free(received_transaction_set);
+ received_transaction_set= NULL;
+ }
+ }
+};
+
+
+/** Table PERFORMANCE_SCHEMA.REPLICATION_CONNECTION_STATUS. */
+class table_replication_connection_status: public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+private:
+ void make_row(Master_info *mi);
+
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current row */
+ st_row_connect_status m_row;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_connection_status();
+
+public:
+ ~table_replication_connection_status();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_replication_group_member_stats.cc b/storage/perfschema/table_replication_group_member_stats.cc
new file mode 100644
index 00000000000..f85a3e3f099
--- /dev/null
+++ b/storage/perfschema/table_replication_group_member_stats.cc
@@ -0,0 +1,372 @@
+/*
+ Copyright (c) 2014, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_group_member_stats.cc
+ Table replication_group_member_stats (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+#include "table_replication_group_member_stats.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "log.h"
+#include "rpl_group_replication.h"
+
+/*
+ Callbacks implementation for GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS.
+*/
+static void set_channel_name(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ const size_t max= CHANNEL_NAME_LENGTH;
+ length= std::min(length, max);
+
+ row->channel_name_length= length;
+ memcpy(row->channel_name, &value, length);
+}
+
+static void set_view_id(void* const context, const char& value, size_t length)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ const size_t max= HOSTNAME_LENGTH;
+ length= std::min(length, max);
+
+ row->view_id_length= length;
+ memcpy(row->view_id, &value, length);
+}
+
+static void set_member_id(void* const context, const char& value, size_t length)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ const size_t max= UUID_LENGTH;
+ length= std::min(length, max);
+
+ row->member_id_length= length;
+ memcpy(row->member_id, &value, length);
+}
+
+static void set_transactions_committed(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+
+ if (row->trx_committed != NULL)
+ my_free(row->trx_committed);
+
+ row->trx_committed_length= length;
+ row->trx_committed= (char*) my_malloc(PSI_NOT_INSTRUMENTED,
+ length,
+ MYF(0));
+ memcpy(row->trx_committed, &value, length);
+}
+
+static void set_last_conflict_free_transaction(void* const context,
+ const char& value, size_t length)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ const size_t max= Gtid::MAX_TEXT_LENGTH+1;
+ length= std::min(length, max);
+
+ row->last_cert_trx_length= length;
+ memcpy(row->last_cert_trx, &value, length);
+}
+
+static void set_transactions_in_queue(void* const context,
+ unsigned long long int value)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ row->trx_in_queue= value;
+}
+
+static void set_transactions_certified(void* const context,
+ unsigned long long int value)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ row->trx_checked= value;
+}
+
+static void set_transactions_conflicts_detected(void* const context,
+ unsigned long long int value)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ row->trx_conflicts= value;
+}
+
+static void set_transactions_rows_in_validation(void* const context,
+ unsigned long long int value)
+{
+ struct st_row_group_member_stats* row=
+ static_cast<struct st_row_group_member_stats*>(context);
+ row->trx_rows_validating= value;
+}
+
+
+THR_LOCK table_replication_group_member_stats::m_table_lock;
+
+static const TABLE_FIELD_TYPE field_types[]=
+{
+ {
+ {C_STRING_WITH_LEN("CHANNEL_NAME")},
+ {C_STRING_WITH_LEN("char(64)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("VIEW_ID")},
+ {C_STRING_WITH_LEN("char(60)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("MEMBER_ID")},
+ {C_STRING_WITH_LEN("char(36)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("COUNT_TRANSACTIONS_IN_QUEUE")},
+ {C_STRING_WITH_LEN("bigint")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("COUNT_TRANSACTIONS_CHECKED")},
+ {C_STRING_WITH_LEN("bigint")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("COUNT_CONFLICTS_DETECTED")},
+ {C_STRING_WITH_LEN("bigint")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("COUNT_TRANSACTIONS_ROWS_VALIDATING")},
+ {C_STRING_WITH_LEN("bigint")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("TRANSACTIONS_COMMITTED_ALL_MEMBERS")},
+ {C_STRING_WITH_LEN("longtext")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("LAST_CONFLICT_FREE_TRANSACTION")},
+ {C_STRING_WITH_LEN("text")},
+ {NULL, 0}
+ }
+};
+
+TABLE_FIELD_DEF
+table_replication_group_member_stats::m_field_def=
+{ 9, field_types };
+
+PFS_engine_table_share
+table_replication_group_member_stats::m_share=
+{
+ { C_STRING_WITH_LEN("replication_group_member_stats") },
+ &pfs_readonly_acl,
+ &table_replication_group_member_stats::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_group_member_stats::get_row_count,
+ sizeof(PFS_simple_index), /* ref length */
+ &m_table_lock,
+ &m_field_def,
+ false, /* checked */
+ false /* perpetual */
+};
+
+PFS_engine_table* table_replication_group_member_stats::create(void)
+{
+ return new table_replication_group_member_stats();
+}
+
+table_replication_group_member_stats::table_replication_group_member_stats()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{
+ m_row.trx_committed= NULL;
+}
+
+table_replication_group_member_stats::~table_replication_group_member_stats()
+{
+ if (m_row.trx_committed != NULL)
+ {
+ my_free(m_row.trx_committed);
+ m_row.trx_committed= NULL;
+ }
+}
+
+void table_replication_group_member_stats::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+ha_rows table_replication_group_member_stats::get_row_count()
+{
+ uint row_count= 0;
+
+ if (is_group_replication_plugin_loaded())
+ row_count= 1;
+
+ return row_count;
+}
+
+int table_replication_group_member_stats::rnd_next(void)
+{
+ if (!is_group_replication_plugin_loaded())
+ return HA_ERR_END_OF_FILE;
+
+ m_pos.set_at(&m_next_pos);
+ if (m_pos.m_index == 0)
+ {
+ make_row();
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_group_member_stats::rnd_pos(const void *pos)
+{
+ if (get_row_count() == 0)
+ return HA_ERR_END_OF_FILE;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index < 1);
+ make_row();
+
+ return 0;
+}
+
+void table_replication_group_member_stats::make_row()
+{
+ DBUG_ENTER("table_replication_group_member_stats::make_row");
+ // Set default values.
+ m_row_exists= false;
+ m_row.channel_name_length= 0;
+ m_row.view_id_length= 0;
+ m_row.member_id_length= 0;
+ m_row.trx_committed_length= 0;
+ m_row.last_cert_trx_length= 0;
+ m_row.trx_in_queue= 0;
+ m_row.trx_checked= 0;
+ m_row.trx_conflicts= 0;
+ m_row.trx_rows_validating= 0;
+
+ // Set callbacks on GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS.
+ const GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS callbacks=
+ {
+ &m_row,
+ &set_channel_name,
+ &set_view_id,
+ &set_member_id,
+ &set_transactions_committed,
+ &set_last_conflict_free_transaction,
+ &set_transactions_in_queue,
+ &set_transactions_certified,
+ &set_transactions_conflicts_detected,
+ &set_transactions_rows_in_validation,
+ };
+
+ // Query plugin and let callbacks do their job.
+ if (get_group_replication_group_member_stats_info(callbacks))
+ {
+ DBUG_PRINT("info", ("Group Replication stats not available!"));
+ }
+ else
+ {
+ m_row_exists= true;
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+
+int table_replication_group_member_stats::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 0);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /** channel_name */
+ set_field_char_utf8(f, m_row.channel_name,
+ m_row.channel_name_length);
+ break;
+ case 1: /** view id */
+ set_field_char_utf8(f, m_row.view_id, m_row.view_id_length);
+ break;
+ case 2: /** member_id */
+ set_field_char_utf8(f, m_row.member_id, m_row.member_id_length);
+ break;
+ case 3: /** transaction_in_queue */
+ set_field_ulonglong(f, m_row.trx_in_queue);
+ break;
+ case 4: /** transactions_certified */
+ set_field_ulonglong(f, m_row.trx_checked);
+ break;
+ case 5: /** negatively_certified_transaction */
+ set_field_ulonglong(f, m_row.trx_conflicts);
+ break;
+ case 6: /** certification_db_size */
+ set_field_ulonglong(f, m_row.trx_rows_validating);
+ break;
+ case 7: /** stable_set */
+ set_field_longtext_utf8(f, m_row.trx_committed,
+ m_row.trx_committed_length);
+ break;
+ case 8: /** last_certified_transaction */
+ set_field_longtext_utf8(f, m_row.last_cert_trx,
+ m_row.last_cert_trx_length);
+
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
diff --git a/storage/perfschema/table_replication_group_member_stats.h b/storage/perfschema/table_replication_group_member_stats.h
new file mode 100644
index 00000000000..f2fcaf553b4
--- /dev/null
+++ b/storage/perfschema/table_replication_group_member_stats.h
@@ -0,0 +1,116 @@
+/*
+ Copyright (c) 2014, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_GROUP_MEMBER_STATS_H
+#define TABLE_REPLICATION_GROUP_MEMBER_STATS_H
+
+/**
+ @file storage/perfschema/table_replication_group_member_stats.h
+ Table replication_group_member_stats (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "mysql_com.h"
+//#include "rpl_info.h"
+//#include "rpl_gtid.h"
+//#include <mysql/plugin_group_replication.h>
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row in node status table. The fields with string values have an additional
+ length field denoted by <field_name>_length.
+*/
+
+struct st_row_group_member_stats {
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ char view_id[HOSTNAME_LENGTH];
+ uint view_id_length;
+ char member_id[11]; // typeof(server_id) == uint32
+ uint member_id_length;
+ ulonglong trx_in_queue;
+ ulonglong trx_checked;
+ ulonglong trx_conflicts;
+ ulonglong trx_rows_validating;
+ char *trx_committed;
+ size_t trx_committed_length;
+ char last_cert_trx[GTID_MAX_STR_LENGTH + 1];
+ int last_cert_trx_length;
+};
+
+/** Table PERFORMANCE_SCHEMA.REPLICATION_GROUP_MEMBER_STATS. */
+class table_replication_group_member_stats: public PFS_engine_table
+{
+private:
+ void make_row();
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current row */
+ st_row_group_member_stats m_row;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_group_member_stats();
+
+public:
+ ~table_replication_group_member_stats();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
+
diff --git a/storage/perfschema/table_replication_group_members.cc b/storage/perfschema/table_replication_group_members.cc
new file mode 100644
index 00000000000..5967b98c7cc
--- /dev/null
+++ b/storage/perfschema/table_replication_group_members.cc
@@ -0,0 +1,281 @@
+/*
+ Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_replication_group_members.cc
+ Table replication_group_members (implementation).
+*/
+
+//#define HAVE_REPLICATION
+
+#include "my_global.h"
+#include "table_replication_group_members.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "log.h"
+//#include "rpl_group_replication.h"
+
+/*
+ Callbacks implementation for GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS.
+*/
+static void set_channel_name(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_group_members* row=
+ static_cast<struct st_row_group_members*>(context);
+ const size_t max= CHANNEL_NAME_LENGTH;
+ length= std::min(length, max);
+
+ row->channel_name_length= length;
+ memcpy(row->channel_name, &value, length);
+}
+
+static void set_member_id(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_group_members* row=
+ static_cast<struct st_row_group_members*>(context);
+ const size_t max= UUID_LENGTH;
+ length= std::min(length, max);
+
+ row->member_id_length= length;
+ memcpy(row->member_id, &value, length);
+}
+
+static void set_member_host(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_group_members* row=
+ static_cast<struct st_row_group_members*>(context);
+ const size_t max= HOSTNAME_LENGTH;
+ length= std::min(length, max);
+
+ row->member_host_length= length;
+ memcpy(row->member_host, &value, length);
+}
+
+static void set_member_port(void* const context, unsigned int value)
+{
+ struct st_row_group_members* row=
+ static_cast<struct st_row_group_members*>(context);
+ row->member_port= value;
+}
+
+static void set_member_state(void* const context, const char& value,
+ size_t length)
+{
+ struct st_row_group_members* row=
+ static_cast<struct st_row_group_members*>(context);
+ const size_t max= NAME_LEN;
+ length= std::min(length, max);
+
+ row->member_state_length= length;
+ memcpy(row->member_state, &value, length);
+}
+
+
+THR_LOCK table_replication_group_members::m_table_lock;
+
+/* Numbers in varchar count utf8 characters. */
+static const TABLE_FIELD_TYPE field_types[]=
+{
+ {
+ {C_STRING_WITH_LEN("CHANNEL_NAME")},
+ {C_STRING_WITH_LEN("char(64)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("MEMBER_ID")},
+ {C_STRING_WITH_LEN("char(36)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("MEMBER_HOST")},
+ {C_STRING_WITH_LEN("char(60)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("MEMBER_PORT")},
+ {C_STRING_WITH_LEN("int(11)")},
+ {NULL, 0}
+ },
+ {
+ {C_STRING_WITH_LEN("MEMBER_STATE")},
+ {C_STRING_WITH_LEN("char(64)")},
+ {NULL, 0}
+ }
+};
+
+TABLE_FIELD_DEF
+table_replication_group_members::m_field_def=
+{ 5, field_types };
+
+PFS_engine_table_share
+table_replication_group_members::m_share=
+{
+ { C_STRING_WITH_LEN("replication_group_members") },
+ &pfs_readonly_acl,
+ &table_replication_group_members::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_replication_group_members::get_row_count,
+ sizeof(PFS_simple_index), /* ref length */
+ &m_table_lock,
+ &m_field_def,
+ false, /* checked */
+ false /* perpetual */
+};
+
+PFS_engine_table* table_replication_group_members::create(void)
+{
+ return new table_replication_group_members();
+}
+
+table_replication_group_members::table_replication_group_members()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+table_replication_group_members::~table_replication_group_members()
+{}
+
+void table_replication_group_members::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+ha_rows table_replication_group_members::get_row_count()
+{
+ return get_group_replication_members_number_info();
+}
+
+int table_replication_group_members::rnd_next(void)
+{
+ if (!is_group_replication_plugin_loaded())
+ return HA_ERR_END_OF_FILE;
+
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < get_row_count();
+ m_pos.next())
+ {
+ make_row(m_pos.m_index);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_replication_group_members::rnd_pos(const void *pos)
+{
+ if (!is_group_replication_plugin_loaded())
+ return HA_ERR_END_OF_FILE;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index < get_row_count());
+ make_row(m_pos.m_index);
+
+ return 0;
+}
+
+void table_replication_group_members::make_row(uint index)
+{
+ DBUG_ENTER("table_replication_group_members::make_row");
+ // Set default values.
+ m_row_exists= false;
+ m_row.channel_name_length= 0;
+ m_row.member_id_length= 0;
+ m_row.member_host_length= 0;
+ m_row.member_port= 0;
+ m_row.member_state_length= 0;
+
+ // Set callbacks on GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS.
+ const GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS callbacks=
+ {
+ &m_row,
+ &set_channel_name,
+ &set_member_id,
+ &set_member_host,
+ &set_member_port,
+ &set_member_state,
+ };
+
+ // Query plugin and let callbacks do their job.
+ if (get_group_replication_group_members_info(index, callbacks))
+ {
+ DBUG_PRINT("info", ("Group Replication stats not available!"));
+ }
+ else
+ {
+ m_row_exists= true;
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+
+int table_replication_group_members::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /** channel_name */
+ set_field_char_utf8(f, m_row.channel_name, m_row.channel_name_length);
+ break;
+ case 1: /** member_id */
+ set_field_char_utf8(f, m_row.member_id, m_row.member_id_length);
+ break;
+ case 2: /** member_host */
+ set_field_char_utf8(f, m_row.member_host, m_row.member_host_length);
+ break;
+ case 3: /** member_port */
+ if (m_row.member_port > 0)
+ set_field_ulong(f, m_row.member_port);
+ else
+ f->set_null();
+ break;
+ case 4: /** member_state */
+ set_field_char_utf8(f, m_row.member_state, m_row.member_state_length);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+ return 0;
+}
diff --git a/storage/perfschema/table_replication_group_members.h b/storage/perfschema/table_replication_group_members.h
new file mode 100644
index 00000000000..8ce875eba3a
--- /dev/null
+++ b/storage/perfschema/table_replication_group_members.h
@@ -0,0 +1,108 @@
+/*
+ Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+
+#ifndef TABLE_REPLICATION_GROUP_MEMBERS_H
+#define TABLE_REPLICATION_GROUP_MEMBERS_H
+
+/**
+ @file storage/perfschema/table_replication_group_members.h
+ Table replication_group_members (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "mysql_com.h"
+//#include "rpl_info.h"
+//#include <mysql/plugin_group_replication.h>
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row in connection nodes table. The fields with string values have an additional
+ length field denoted by <field_name>_length.
+*/
+struct st_row_group_members {
+ char channel_name[CHANNEL_NAME_LENGTH];
+ uint channel_name_length;
+ char member_id[11]; // typeof(server_id) == uint32
+ uint member_id_length;
+ char member_host[HOSTNAME_LENGTH];
+ uint member_host_length;
+ uint member_port;
+ char member_state[NAME_LEN];
+ uint member_state_length;
+};
+
+/** Table PERFORMANCE_SCHEMA.replication_group_members. */
+class table_replication_group_members: public PFS_engine_table
+{
+private:
+ void make_row(uint index);
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current row */
+ st_row_group_members m_row;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+
+protected:
+ /**
+ Read the current row values.
+ @param table Table handle
+ @param buf row buffer
+ @param fields Table fields
+ @param read_all true if all columns are read.
+ */
+
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_replication_group_members();
+
+public:
+ ~table_replication_group_members();
+
+ /** Table share. */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_session_account_connect_attrs.cc b/storage/perfschema/table_session_account_connect_attrs.cc
index fcb4f001ba7..0e8be68d602 100644
--- a/storage/perfschema/table_session_account_connect_attrs.cc
+++ b/storage/perfschema/table_session_account_connect_attrs.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -29,12 +29,11 @@ PFS_engine_table_share
table_session_account_connect_attrs::m_share=
{
{ C_STRING_WITH_LEN("session_account_connect_attrs") },
- &pfs_readonly_acl,
- &table_session_account_connect_attrs::create,
+ &pfs_readonly_world_acl,
+ table_session_account_connect_attrs::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ cursor_by_thread_connect_attr::get_row_count,
sizeof(pos_connect_attr_by_thread_by_attr), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE session_account_connect_attrs("
@@ -42,7 +41,8 @@ table_session_account_connect_attrs::m_share=
"ATTR_NAME VARCHAR(32) NOT NULL,"
"ATTR_VALUE VARCHAR(1024),"
"ORDINAL_POSITION INT"
- ") CHARACTER SET utf8 COLLATE utf8_bin") }
+ ") CHARACTER SET utf8 COLLATE utf8_bin") },
+ false /* perpetual */
};
PFS_engine_table* table_session_account_connect_attrs::create()
diff --git a/storage/perfschema/table_session_account_connect_attrs.h b/storage/perfschema/table_session_account_connect_attrs.h
index 483001fcb91..043f83da184 100644
--- a/storage/perfschema/table_session_account_connect_attrs.h
+++ b/storage/perfschema/table_session_account_connect_attrs.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2012, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_session_connect.cc b/storage/perfschema/table_session_connect.cc
index 0d12ab2562e..09f32feaa4d 100644
--- a/storage/perfschema/table_session_connect.cc
+++ b/storage/perfschema/table_session_connect.cc
@@ -22,13 +22,14 @@
#include <my_global.h>
#include "table_session_connect.h"
+#include "field.h"
table_session_connect::table_session_connect(const PFS_engine_table_share *share)
: cursor_by_thread_connect_attr(share)
{
if (session_connect_attrs_size_per_thread > 0)
{
- m_copy_session_connect_attrs= (char *) my_malloc(/* 5.7: PSI_INSTRUMENT_ME, */
+ m_copy_session_connect_attrs= (char *) my_malloc(PSI_INSTRUMENT_ME,
session_connect_attrs_size_per_thread,
MYF(0));
}
@@ -146,7 +147,7 @@ bool read_nth_attr(const char *connect_attrs,
if (idx == ordinal)
*attr_name_length= copy_length;
-
+
/* read the value */
if (parse_length_encoded_string(&ptr,
attr_value, max_attr_value, &copy_length,
@@ -168,8 +169,8 @@ bool read_nth_attr(const char *connect_attrs,
void table_session_connect::make_row(PFS_thread *pfs, uint ordinal)
{
- pfs_lock lock;
- pfs_lock session_lock;
+ pfs_optimistic_state lock;
+ pfs_optimistic_state session_lock;
PFS_thread_class *safe_class;
const CHARSET_INFO *cs;
diff --git a/storage/perfschema/table_session_connect.h b/storage/perfschema/table_session_connect.h
index ee1019fe7f2..55433e2571a 100644
--- a/storage/perfschema/table_session_connect.h
+++ b/storage/perfschema/table_session_connect.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2012, 2015, 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, version 2.0,
@@ -59,6 +59,7 @@ struct row_session_connect_attrs
ulong m_ordinal_position;
};
+/** Abstract table PERFORMANCE_SCHEMA.SESSION_CONNECT_ATTRS. */
class table_session_connect : public cursor_by_thread_connect_attr
{
protected:
diff --git a/storage/perfschema/table_session_connect_attrs.cc b/storage/perfschema/table_session_connect_attrs.cc
index cb7b64a7fdf..cc3fae46290 100644
--- a/storage/perfschema/table_session_connect_attrs.cc
+++ b/storage/perfschema/table_session_connect_attrs.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -30,11 +30,10 @@ table_session_connect_attrs::m_share=
{
{ C_STRING_WITH_LEN("session_connect_attrs") },
&pfs_readonly_acl,
- &table_session_connect_attrs::create,
+ table_session_connect_attrs::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ cursor_by_thread_connect_attr::get_row_count,
sizeof(pos_connect_attr_by_thread_by_attr), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE session_connect_attrs("
@@ -42,7 +41,8 @@ table_session_connect_attrs::m_share=
"ATTR_NAME VARCHAR(32) NOT NULL,"
"ATTR_VALUE VARCHAR(1024),"
"ORDINAL_POSITION INT"
- ") CHARACTER SET utf8 COLLATE utf8_bin") }
+ ") CHARACTER SET utf8 COLLATE utf8_bin") },
+ false /* perpetual */
};
PFS_engine_table* table_session_connect_attrs::create()
diff --git a/storage/perfschema/table_session_connect_attrs.h b/storage/perfschema/table_session_connect_attrs.h
index 927c3a92af2..09b9d1c49e1 100644
--- a/storage/perfschema/table_session_connect_attrs.h
+++ b/storage/perfschema/table_session_connect_attrs.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2012, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_session_status.cc b/storage/perfschema/table_session_status.cc
new file mode 100644
index 00000000000..acff99caed0
--- /dev/null
+++ b/storage/perfschema/table_session_status.cc
@@ -0,0 +1,185 @@
+/* Copyright (c) 2015, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_session_status.cc
+ Table SESSION_STATUS (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "table_session_status.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+
+THR_LOCK table_session_status::m_table_lock;
+
+PFS_engine_table_share
+table_session_status::m_share=
+{
+ { C_STRING_WITH_LEN("session_status") },
+ &pfs_readonly_world_acl,
+ table_session_status::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_session_status::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE session_status("
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ true /* perpetual */
+};
+
+PFS_engine_table*
+table_session_status::create(void)
+{
+ return new table_session_status();
+}
+
+ha_rows table_session_status::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ ha_rows status_var_count= all_status_vars.elements;
+ mysql_mutex_unlock(&LOCK_status);
+ return status_var_count;
+}
+
+table_session_status::table_session_status()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_status_cache(false), m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_session_status::reset_position(void)
+{
+ m_pos.m_index = 0;
+ m_next_pos.m_index = 0;
+}
+
+int table_session_status::rnd_init(bool scan)
+{
+ /* Build a cache of all status variables for this thread. */
+ m_status_cache.materialize_all(current_thd);
+
+ /* Record the current number of status variables to detect subsequent changes. */
+ ulonglong status_version= m_status_cache.get_status_array_version();
+
+ /*
+ The table context holds the current version of the global status array.
+ If scan == true, then allocate a new context from mem_root and store in TLS.
+ If scan == false, then restore from TLS.
+ */
+ m_context= (table_session_status_context *)current_thd->alloc(sizeof(table_session_status_context));
+ new(m_context) table_session_status_context(status_version, !scan);
+ return 0;
+}
+
+int table_session_status::rnd_next(void)
+{
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < m_status_cache.size();
+ m_pos.next())
+ {
+ if (m_status_cache.is_materialized())
+ {
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index);
+ if (stat_var != NULL)
+ {
+ make_row(stat_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_session_status::rnd_pos(const void *pos)
+{
+ /* If global status array has changed, do nothing. */ // TODO: warning
+ if (!m_context->versions_match())
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index < m_status_cache.size());
+
+ if (m_status_cache.is_materialized())
+ {
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index);
+ if (stat_var != NULL)
+ {
+ make_row(stat_var);
+ return 0;
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_session_status
+::make_row(const Status_variable *status_var)
+{
+ m_row_exists= false;
+ m_row.m_variable_name.make_row(status_var->m_name, status_var->m_name_length);
+ m_row.m_variable_value.make_row(status_var);
+ m_row_exists= true;
+}
+
+int table_session_status
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(!m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 1: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_session_status.h b/storage/perfschema/table_session_status.h
new file mode 100644
index 00000000000..24634fe47b5
--- /dev/null
+++ b/storage/perfschema/table_session_status.h
@@ -0,0 +1,119 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_SESSION_STATUS_H
+#define TABLE_SESSION_STATUS_H
+
+/**
+ @file storage/perfschema/table_session_status.h
+ Table SESSION_STATUS (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.SESSION_STATUS.
+*/
+struct row_session_status
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Store and retrieve table state information for queries that reinstantiate
+ the table object.
+*/
+class table_session_status_context : public PFS_table_context
+{
+public:
+ table_session_status_context(ulonglong current_version, bool restore) :
+ PFS_table_context(current_version, restore, THR_PFS_SS) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.SESSION_STATUS. */
+class table_session_status : public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_session_status();
+
+public:
+ ~table_session_status()
+ {}
+
+protected:
+ void make_row(const Status_variable *status_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD variables. */
+ PFS_status_variable_cache m_status_cache;
+ /** Current row. */
+ row_session_status m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with global status array version. */
+ table_session_status_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_session_variables.cc b/storage/perfschema/table_session_variables.cc
new file mode 100644
index 00000000000..3ed1314535e
--- /dev/null
+++ b/storage/perfschema/table_session_variables.cc
@@ -0,0 +1,187 @@
+/* Copyright (c) 2015, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_session_variables.cc
+ Table SESSION_VARIABLES (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "table_session_variables.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+
+THR_LOCK table_session_variables::m_table_lock;
+
+PFS_engine_table_share
+table_session_variables::m_share=
+{
+ { C_STRING_WITH_LEN("session_variables") },
+ &pfs_readonly_world_acl,
+ table_session_variables::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_session_variables::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE session_variables("
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ true /* perpetual */
+};
+
+PFS_engine_table*
+table_session_variables::create(void)
+{
+ return new table_session_variables();
+}
+
+ha_rows table_session_variables::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_plugin_delete);
+ mysql_prlock_rdlock(&LOCK_system_variables_hash);
+ ha_rows system_var_count= get_system_variable_hash_records();
+ mysql_prlock_unlock(&LOCK_system_variables_hash);
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return system_var_count;
+}
+
+table_session_variables::table_session_variables()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_sysvar_cache(false), m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_session_variables::reset_position(void)
+{
+ m_pos.m_index = 0;
+ m_next_pos.m_index = 0;
+}
+
+int table_session_variables::rnd_init(bool scan)
+{
+ /* Build a cache of system variables for this thread. */
+ m_sysvar_cache.materialize_all(current_thd);
+
+ /* Record the version of the system variable hash. */
+ ulonglong hash_version= m_sysvar_cache.get_sysvar_hash_version();
+
+ /*
+ The table context holds the current version of the system variable hash.
+ If scan == true, then allocate a new context from mem_root and store in TLS.
+ If scan == false, then restore from TLS.
+ */
+ m_context= (table_session_variables_context *)current_thd->alloc(sizeof(table_session_variables_context));
+ new(m_context) table_session_variables_context(hash_version, !scan);
+ return 0;
+}
+
+int table_session_variables::rnd_next(void)
+{
+ for (m_pos.set_at(&m_next_pos);
+ m_pos.m_index < m_sysvar_cache.size();
+ m_pos.next())
+ {
+ if (m_sysvar_cache.is_materialized())
+ {
+ const System_variable *system_var= m_sysvar_cache.get(m_pos.m_index);
+ if (system_var != NULL)
+ {
+ make_row(system_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int table_session_variables::rnd_pos(const void *pos)
+{
+ /* If system variable hash changes, do nothing. */
+ if (!m_context->versions_match())
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index < m_sysvar_cache.size());
+
+ if (m_sysvar_cache.is_materialized())
+ {
+ const System_variable *system_var= m_sysvar_cache.get(m_pos.m_index);
+ if (system_var != NULL)
+ {
+ make_row(system_var);
+ return 0;
+ }
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_session_variables
+::make_row(const System_variable *system_var)
+{
+ m_row_exists= false;
+ if (system_var->is_null() || system_var->is_ignored())
+ return;
+ m_row.m_variable_name.make_row(system_var->m_name, system_var->m_name_length);
+ m_row.m_variable_value.make_row(system_var);
+ m_row_exists= true;
+}
+
+int table_session_variables
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(!m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 1: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_session_variables.h b/storage/perfschema/table_session_variables.h
new file mode 100644
index 00000000000..576bf73edbb
--- /dev/null
+++ b/storage/perfschema/table_session_variables.h
@@ -0,0 +1,117 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_SESSION_VARIABLES_H
+#define TABLE_SESSION_VARIABLES_H
+
+/**
+ @file storage/perfschema/table_session_variables.h
+ Table SESSION_VARIABLES (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ Store and retrieve table state information during queries that reinstantiate
+ the table object.
+*/
+class table_session_variables_context : public PFS_table_context
+{
+public:
+ table_session_variables_context(ulonglong hash_version, bool restore) :
+ PFS_table_context(hash_version, restore, THR_PFS_SV) {}
+};
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.SESSION_VARIABLES.
+*/
+struct row_session_variables
+{
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/** Table PERFORMANCE_SCHEMA.SESSION_VARIABLES. */
+class table_session_variables : public PFS_engine_table
+{
+ typedef PFS_simple_index pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_session_variables();
+
+public:
+ ~table_session_variables()
+ {}
+
+protected:
+ void make_row(const System_variable *system_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD variables. */
+ PFS_system_variable_cache m_sysvar_cache;
+ /** Current row. */
+ row_session_variables m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with system variable hash version. */
+ table_session_variables_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_setup_actors.cc b/storage/perfschema/table_setup_actors.cc
index 007081a83c9..dae9c80e6eb 100644
--- a/storage/perfschema/table_setup_actors.cc
+++ b/storage/perfschema/table_setup_actors.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2016, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "pfs_setup_actor.h"
#include "table_setup_actors.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_setup_actors::m_table_lock;
@@ -45,13 +47,15 @@ table_setup_actors::m_share=
table_setup_actors::write_row,
table_setup_actors::delete_all_rows,
table_setup_actors::get_row_count,
- 1000, /* records */
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE setup_actors("
"HOST CHAR(60) collate utf8_bin default '%' not null,"
- "USER CHAR(16) collate utf8_bin default '%' not null,"
- "ROLE CHAR(16) collate utf8_bin default '%' not null)") }
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default '%' not null,"
+ "ROLE CHAR(16) collate utf8_bin default '%' not null,"
+ "ENABLED ENUM('YES', 'NO') not null default 'YES',"
+ "HISTORY ENUM('YES', 'NO') not null default 'YES')") },
+ false /* perpetual */
};
PFS_engine_table* table_setup_actors::create()
@@ -69,6 +73,10 @@ int table_setup_actors::write_row(TABLE *table, const unsigned char *buf,
String *user= &user_data;
String *host= &host_data;
String *role= &role_data;
+ enum_yes_no enabled_value= ENUM_YES;
+ enum_yes_no history_value= ENUM_YES;
+ bool enabled;
+ bool history;
for (; (f= *fields) ; fields++)
{
@@ -85,16 +93,34 @@ int table_setup_actors::write_row(TABLE *table, const unsigned char *buf,
case 2: /* ROLE */
role= get_field_char_utf8(f, &role_data);
break;
+ case 3: /* ENABLED */
+ enabled_value= (enum_yes_no) get_field_enum(f);
+ break;
+ case 4: /* HISTORY */
+ history_value= (enum_yes_no) get_field_enum(f);
+ break;
default:
DBUG_ASSERT(false);
}
}
}
+ /* Reject illegal enum values in ENABLED */
+ if ((enabled_value != ENUM_YES) && (enabled_value != ENUM_NO))
+ return HA_ERR_NO_REFERENCED_ROW;
+
+ /* Reject illegal enum values in HISTORY */
+ if ((history_value != ENUM_YES) && (history_value != ENUM_NO))
+ return HA_ERR_NO_REFERENCED_ROW;
+
+ /* Reject if any of user/host/role is not provided */
if (user->length() == 0 || host->length() == 0 || role->length() == 0)
return HA_ERR_WRONG_COMMAND;
- return insert_setup_actor(user, host, role);
+ enabled= (enabled_value == ENUM_YES) ? true : false;
+ history= (history_value == ENUM_YES) ? true : false;
+
+ return insert_setup_actor(user, host, role, enabled, history);
}
int table_setup_actors::delete_all_rows(void)
@@ -104,7 +130,7 @@ int table_setup_actors::delete_all_rows(void)
ha_rows table_setup_actors::get_row_count(void)
{
- return setup_actor_count();
+ return global_setup_actor_container.get_row_count();
}
table_setup_actors::table_setup_actors()
@@ -122,17 +148,14 @@ int table_setup_actors::rnd_next()
{
PFS_setup_actor *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < setup_actor_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_setup_actor_iterator it= global_setup_actor_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &setup_actor_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -144,9 +167,8 @@ int table_setup_actors::rnd_pos(const void *pos)
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < setup_actor_max);
- pfs= &setup_actor_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+ pfs= global_setup_actor_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
@@ -157,7 +179,7 @@ int table_setup_actors::rnd_pos(const void *pos)
void table_setup_actors::make_row(PFS_setup_actor *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
@@ -181,6 +203,9 @@ void table_setup_actors::make_row(PFS_setup_actor *pfs)
return;
memcpy(m_row.m_rolename, pfs->m_rolename, m_row.m_rolename_length);
+ m_row.m_enabled_ptr= &pfs->m_enabled;
+ m_row.m_history_ptr= &pfs->m_history;
+
if (pfs->m_lock.end_optimistic_lock(&lock))
m_row_exists= true;
}
@@ -213,6 +238,12 @@ int table_setup_actors::read_row_values(TABLE *table,
case 2: /* ROLE */
set_field_char_utf8(f, m_row.m_rolename, m_row.m_rolename_length);
break;
+ case 3: /* ENABLED */
+ set_field_enum(f, (*m_row.m_enabled_ptr) ? ENUM_YES : ENUM_NO);
+ break;
+ case 4: /* HISTORY */
+ set_field_enum(f, (*m_row.m_history_ptr) ? ENUM_YES : ENUM_NO);
+ break;
default:
DBUG_ASSERT(false);
}
@@ -227,7 +258,9 @@ int table_setup_actors::update_row_values(TABLE *table,
const unsigned char *new_buf,
Field **fields)
{
+ int result;
Field *f;
+ enum_yes_no value;
for (; (f= *fields) ; fields++)
{
@@ -239,6 +272,19 @@ int table_setup_actors::update_row_values(TABLE *table,
case 1: /* USER */
case 2: /* ROLE */
return HA_ERR_WRONG_COMMAND;
+ case 3: /* ENABLED */
+ value= (enum_yes_no) get_field_enum(f);
+ /* Reject illegal enum values in ENABLED */
+ if ((value != ENUM_YES) && (value != ENUM_NO))
+ return HA_ERR_NO_REFERENCED_ROW;
+ *m_row.m_enabled_ptr= (value == ENUM_YES) ? true : false;
+ break;
+ case 4: /* HISTORY */
+ value= (enum_yes_no) get_field_enum(f);
+ /* Reject illegal enum values in HISTORY */
+ if ((value != ENUM_YES) && (value != ENUM_NO))
+ return HA_ERR_NO_REFERENCED_ROW;
+ *m_row.m_history_ptr= (value == ENUM_YES) ? true : false;
break;
default:
DBUG_ASSERT(false);
@@ -246,7 +292,8 @@ int table_setup_actors::update_row_values(TABLE *table,
}
}
- return 0;
+ result= update_setup_actors_derived_flags();
+ return result;
}
int table_setup_actors::delete_row_values(TABLE *table,
diff --git a/storage/perfschema/table_setup_actors.h b/storage/perfschema/table_setup_actors.h
index 6bfc480a9c5..32a603317b9 100644
--- a/storage/perfschema/table_setup_actors.h
+++ b/storage/perfschema/table_setup_actors.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -52,6 +52,10 @@ struct row_setup_actors
char m_rolename[16];
/** Length in bytes of @c m_rolename. */
uint m_rolename_length;
+ /** Column ENABLED. */
+ bool *m_enabled_ptr;
+ /** Column HISTORY. */
+ bool *m_history_ptr;
};
/** Table PERFORMANCE_SCHEMA.SETUP_ACTORS. */
diff --git a/storage/perfschema/table_setup_consumers.cc b/storage/perfschema/table_setup_consumers.cc
index 7355efae45b..1745bf35c56 100644
--- a/storage/perfschema/table_setup_consumers.cc
+++ b/storage/perfschema/table_setup_consumers.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,73 +26,105 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_setup_consumers.h"
#include "pfs_instr.h"
#include "pfs_events_waits.h"
#include "pfs_digest.h"
+#include "field.h"
+
+#define COUNT_SETUP_CONSUMERS 15
-#define COUNT_SETUP_CONSUMERS 12
static row_setup_consumers all_setup_consumers_data[COUNT_SETUP_CONSUMERS]=
{
{
{ C_STRING_WITH_LEN("events_stages_current") },
&flag_events_stages_current,
+ false,
false
},
{
{ C_STRING_WITH_LEN("events_stages_history") },
&flag_events_stages_history,
- false
+ false,
+ true
},
{
{ C_STRING_WITH_LEN("events_stages_history_long") },
&flag_events_stages_history_long,
- false
+ false,
+ true
},
{
{ C_STRING_WITH_LEN("events_statements_current") },
&flag_events_statements_current,
+ false,
false
},
{
{ C_STRING_WITH_LEN("events_statements_history") },
&flag_events_statements_history,
- false
+ false,
+ true
},
{
{ C_STRING_WITH_LEN("events_statements_history_long") },
&flag_events_statements_history_long,
+ false,
+ true
+ },
+ {
+ { C_STRING_WITH_LEN("events_transactions_current") },
+ &flag_events_transactions_current,
+ false,
false
},
{
+ { C_STRING_WITH_LEN("events_transactions_history") },
+ &flag_events_transactions_history,
+ false,
+ true
+ },
+ {
+ { C_STRING_WITH_LEN("events_transactions_history_long") },
+ &flag_events_transactions_history_long,
+ false,
+ true
+ },
+ {
{ C_STRING_WITH_LEN("events_waits_current") },
&flag_events_waits_current,
+ false,
false
},
{
{ C_STRING_WITH_LEN("events_waits_history") },
&flag_events_waits_history,
- false
+ false,
+ true
},
{
{ C_STRING_WITH_LEN("events_waits_history_long") },
&flag_events_waits_history_long,
- false
+ false,
+ true
},
{
{ C_STRING_WITH_LEN("global_instrumentation") },
&flag_global_instrumentation,
+ true,
true
},
{
{ C_STRING_WITH_LEN("thread_instrumentation") },
&flag_thread_instrumentation,
- false
+ false,
+ true
},
{
{ C_STRING_WITH_LEN("statements_digest") },
&flag_statements_digest,
+ false,
false
}
};
@@ -104,16 +136,16 @@ table_setup_consumers::m_share=
{
{ C_STRING_WITH_LEN("setup_consumers") },
&pfs_updatable_acl,
- &table_setup_consumers::create,
+ table_setup_consumers::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- COUNT_SETUP_CONSUMERS, /* records */
+ table_setup_consumers::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE setup_consumers("
"NAME VARCHAR(64) not null,"
- "ENABLED ENUM ('YES', 'NO') not null)") }
+ "ENABLED ENUM ('YES', 'NO') not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_setup_consumers::create(void)
@@ -121,6 +153,12 @@ PFS_engine_table* table_setup_consumers::create(void)
return new table_setup_consumers();
}
+ha_rows
+table_setup_consumers::get_row_count(void)
+{
+ return COUNT_SETUP_CONSUMERS;
+}
+
table_setup_consumers::table_setup_consumers()
: PFS_engine_table(&m_share, &m_pos),
m_row(NULL), m_pos(0), m_next_pos(0)
@@ -225,9 +263,12 @@ int table_setup_consumers::update_row_values(TABLE *table,
}
}
- if (m_row->m_refresh)
+ if (m_row->m_instrument_refresh)
update_instruments_derived_flags();
+ if (m_row->m_thread_refresh)
+ update_thread_derived_flags();
+
return 0;
}
diff --git a/storage/perfschema/table_setup_consumers.h b/storage/perfschema/table_setup_consumers.h
index 90da55920c6..9d601622adf 100644
--- a/storage/perfschema/table_setup_consumers.h
+++ b/storage/perfschema/table_setup_consumers.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -43,8 +43,10 @@ struct row_setup_consumers
LEX_STRING m_name;
/** Column ENABLED. */
bool *m_enabled_ptr;
- /** Hidden column, refresh. */
- bool m_refresh;
+ /** Hidden column, instrument refresh. */
+ bool m_instrument_refresh;
+ /** Hidden column, thread refresh. */
+ bool m_thread_refresh;
};
/** Table PERFORMANCE_SCHEMA.SETUP_CONSUMERS. */
@@ -54,6 +56,7 @@ public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_setup_instruments.cc b/storage/perfschema/table_setup_instruments.cc
index 490226c7c83..69e48b9c2ad 100644
--- a/storage/perfschema/table_setup_instruments.cc
+++ b/storage/perfschema/table_setup_instruments.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,14 +26,16 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
+#include "pfs_builtin_memory.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_setup_instruments.h"
#include "pfs_global.h"
#include "pfs_setup_object.h"
+#include "field.h"
THR_LOCK table_setup_instruments::m_table_lock;
@@ -42,17 +44,17 @@ table_setup_instruments::m_share=
{
{ C_STRING_WITH_LEN("setup_instruments") },
&pfs_updatable_acl,
- &table_setup_instruments::create,
+ table_setup_instruments::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ table_setup_instruments::get_row_count,
sizeof(pos_setup_instruments),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE setup_instruments("
"NAME VARCHAR(128) not null,"
"ENABLED ENUM ('YES', 'NO') not null,"
- "TIMED ENUM ('YES', 'NO') not null)") }
+ "TIMED ENUM ('YES', 'NO') not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_setup_instruments::create(void)
@@ -60,6 +62,16 @@ PFS_engine_table* table_setup_instruments::create(void)
return new table_setup_instruments();
}
+ha_rows
+table_setup_instruments::get_row_count(void)
+{
+ return wait_class_max
+ + stage_class_max
+ + statement_class_max
+ + transaction_class_max
+ + memory_class_max;
+}
+
table_setup_instruments::table_setup_instruments()
: PFS_engine_table(&m_share, &m_pos),
m_pos(), m_next_pos()
@@ -74,6 +86,9 @@ void table_setup_instruments::reset_position(void)
int table_setup_instruments::rnd_next(void)
{
PFS_instr_class *instr_class= NULL;
+ PFS_builtin_memory_class *pfs_builtin;
+ bool update_enabled;
+ bool update_timed;
/* Do not advertise hard coded instruments when disabled. */
if (! pfs_initialized)
@@ -83,6 +98,9 @@ int table_setup_instruments::rnd_next(void)
m_pos.has_more_view();
m_pos.next_view())
{
+ update_enabled= true;
+ update_timed= true;
+
switch (m_pos.m_index_1)
{
case pos_setup_instruments::VIEW_MUTEX:
@@ -109,16 +127,35 @@ int table_setup_instruments::rnd_next(void)
case pos_setup_instruments::VIEW_STATEMENT:
instr_class= find_statement_class(m_pos.m_index_2);
break;
+ case pos_setup_instruments::VIEW_TRANSACTION:
+ instr_class= find_transaction_class(m_pos.m_index_2);
+ break;
case pos_setup_instruments::VIEW_SOCKET:
instr_class= find_socket_class(m_pos.m_index_2);
break;
case pos_setup_instruments::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_2);
break;
+ case pos_setup_instruments::VIEW_BUILTIN_MEMORY:
+ update_enabled= false;
+ update_timed= false;
+ pfs_builtin= find_builtin_memory_class(m_pos.m_index_2);
+ if (pfs_builtin != NULL)
+ instr_class= & pfs_builtin->m_class;
+ else
+ instr_class= NULL;
+ break;
+ case pos_setup_instruments::VIEW_MEMORY:
+ update_timed= false;
+ instr_class= find_memory_class(m_pos.m_index_2);
+ break;
+ case pos_setup_instruments::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_2);
+ break;
}
if (instr_class)
{
- make_row(instr_class);
+ make_row(instr_class, update_enabled, update_timed);
m_next_pos.set_after(&m_pos);
return 0;
}
@@ -130,6 +167,9 @@ int table_setup_instruments::rnd_next(void)
int table_setup_instruments::rnd_pos(const void *pos)
{
PFS_instr_class *instr_class= NULL;
+ PFS_builtin_memory_class *pfs_builtin;
+ bool update_enabled;
+ bool update_timed;
/* Do not advertise hard coded instruments when disabled. */
if (! pfs_initialized)
@@ -137,6 +177,9 @@ int table_setup_instruments::rnd_pos(const void *pos)
set_position(pos);
+ update_enabled= true;
+ update_timed= true;
+
switch (m_pos.m_index_1)
{
case pos_setup_instruments::VIEW_MUTEX:
@@ -163,25 +206,46 @@ int table_setup_instruments::rnd_pos(const void *pos)
case pos_setup_instruments::VIEW_STATEMENT:
instr_class= find_statement_class(m_pos.m_index_2);
break;
+ case pos_setup_instruments::VIEW_TRANSACTION:
+ instr_class= find_transaction_class(m_pos.m_index_2);
+ break;
case pos_setup_instruments::VIEW_SOCKET:
instr_class= find_socket_class(m_pos.m_index_2);
break;
case pos_setup_instruments::VIEW_IDLE:
instr_class= find_idle_class(m_pos.m_index_2);
break;
+ case pos_setup_instruments::VIEW_BUILTIN_MEMORY:
+ update_enabled= false;
+ update_timed= false;
+ pfs_builtin= find_builtin_memory_class(m_pos.m_index_2);
+ if (pfs_builtin != NULL)
+ instr_class= & pfs_builtin->m_class;
+ else
+ instr_class= NULL;
+ break;
+ case pos_setup_instruments::VIEW_MEMORY:
+ update_timed= false;
+ instr_class= find_memory_class(m_pos.m_index_2);
+ break;
+ case pos_setup_instruments::VIEW_METADATA:
+ instr_class= find_metadata_class(m_pos.m_index_2);
+ break;
}
if (instr_class)
{
- make_row(instr_class);
+ make_row(instr_class, update_enabled, update_timed);
return 0;
}
return HA_ERR_RECORD_DELETED;
}
-void table_setup_instruments::make_row(PFS_instr_class *klass)
+void table_setup_instruments::make_row(PFS_instr_class *klass, bool update_enabled, bool update_timed)
{
m_row.m_instr_class= klass;
+ m_row.m_update_enabled= update_enabled;
+ m_row.m_update_timed= update_timed;
}
int table_setup_instruments::read_row_values(TABLE *table,
@@ -239,12 +303,20 @@ int table_setup_instruments::update_row_values(TABLE *table,
case 0: /* NAME */
return HA_ERR_WRONG_COMMAND;
case 1: /* ENABLED */
- value= (enum_yes_no) get_field_enum(f);
- m_row.m_instr_class->m_enabled= (value == ENUM_YES) ? true : false;
+ /* Do not raise error if m_update_enabled is false, silently ignore. */
+ if (m_row.m_update_enabled)
+ {
+ value= (enum_yes_no) get_field_enum(f);
+ m_row.m_instr_class->m_enabled= (value == ENUM_YES) ? true : false;
+ }
break;
case 2: /* TIMED */
- value= (enum_yes_no) get_field_enum(f);
- m_row.m_instr_class->m_timed= (value == ENUM_YES) ? true : false;
+ /* Do not raise error if m_update_timed is false, silently ignore. */
+ if (m_row.m_update_timed)
+ {
+ value= (enum_yes_no) get_field_enum(f);
+ m_row.m_instr_class->m_timed= (value == ENUM_YES) ? true : false;
+ }
break;
default:
DBUG_ASSERT(false);
@@ -274,6 +346,7 @@ int table_setup_instruments::update_row_values(TABLE *table,
break;
case pos_setup_instruments::VIEW_STAGE:
case pos_setup_instruments::VIEW_STATEMENT:
+ case pos_setup_instruments::VIEW_TRANSACTION:
/* No flag to update. */
break;
case pos_setup_instruments::VIEW_SOCKET:
@@ -282,6 +355,13 @@ int table_setup_instruments::update_row_values(TABLE *table,
case pos_setup_instruments::VIEW_IDLE:
/* No flag to update. */
break;
+ case pos_setup_instruments::VIEW_BUILTIN_MEMORY:
+ case pos_setup_instruments::VIEW_MEMORY:
+ /* No flag to update. */
+ break;
+ case pos_setup_instruments::VIEW_METADATA:
+ update_metadata_derived_flags();
+ break;
default:
DBUG_ASSERT(false);
break;
diff --git a/storage/perfschema/table_setup_instruments.h b/storage/perfschema/table_setup_instruments.h
index cd3715cfe55..42aa2dd91d0 100644
--- a/storage/perfschema/table_setup_instruments.h
+++ b/storage/perfschema/table_setup_instruments.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -41,6 +41,10 @@ struct row_setup_instruments
{
/** Columns NAME, ENABLED, TIMED. */
PFS_instr_class *m_instr_class;
+ /** True if column ENABLED can be updated. */
+ bool m_update_enabled;
+ /** True if column TIMED can be updated. */
+ bool m_update_timed;
};
/** Position of a cursor on PERFORMANCE_SCHEMA.SETUP_INSTRUMENTS. */
@@ -55,9 +59,13 @@ struct pos_setup_instruments : public PFS_double_index
static const uint VIEW_TABLE= 6;
static const uint VIEW_STAGE= 7;
static const uint VIEW_STATEMENT= 8;
- static const uint VIEW_SOCKET= 9;
- static const uint VIEW_IDLE= 10;
- static const uint LAST_VIEW= 10;
+ static const uint VIEW_TRANSACTION=9;
+ static const uint VIEW_SOCKET= 10;
+ static const uint VIEW_IDLE= 11;
+ static const uint VIEW_BUILTIN_MEMORY= 12;
+ static const uint VIEW_MEMORY= 13;
+ static const uint VIEW_METADATA= 14;
+ static const uint LAST_VIEW= 14;
pos_setup_instruments()
: PFS_double_index(FIRST_VIEW, 1)
@@ -86,6 +94,7 @@ public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -109,7 +118,7 @@ public:
{}
private:
- void make_row(PFS_instr_class *klass);
+ void make_row(PFS_instr_class *klass, bool update_enabled, bool update_timed);
/** Table share lock. */
static THR_LOCK m_table_lock;
diff --git a/storage/perfschema/table_setup_objects.cc b/storage/perfschema/table_setup_objects.cc
index ce8b7e73927..cccbd64f803 100644
--- a/storage/perfschema/table_setup_objects.cc
+++ b/storage/perfschema/table_setup_objects.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,7 +26,7 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
@@ -34,6 +34,8 @@
#include "table_setup_objects.h"
#include "table_helper.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_setup_objects::m_table_lock;
@@ -46,15 +48,15 @@ table_setup_objects::m_share=
table_setup_objects::write_row,
table_setup_objects::delete_all_rows,
table_setup_objects::get_row_count,
- 1000, /* records */
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE setup_objects("
- "OBJECT_TYPE ENUM ('TABLE') not null default 'TABLE',"
+ "OBJECT_TYPE ENUM ('EVENT','FUNCTION','PROCEDURE','TABLE','TRIGGER') not null default 'TABLE',"
"OBJECT_SCHEMA VARCHAR(64) default '%',"
"OBJECT_NAME VARCHAR(64) not null default '%',"
"ENABLED ENUM ('YES', 'NO') not null default 'YES',"
- "TIMED ENUM ('YES', 'NO') not null default 'YES')") }
+ "TIMED ENUM ('YES', 'NO') not null default 'YES')") },
+ false /* perpetual */
};
int update_derived_flags()
@@ -64,6 +66,7 @@ int update_derived_flags()
return HA_ERR_OUT_OF_MEM;
update_table_share_derived_flags(thread);
+ update_program_share_derived_flags(thread);
update_table_derived_flags();
return 0;
}
@@ -116,7 +119,9 @@ int table_setup_objects::write_row(TABLE *table, const unsigned char *buf,
}
/* Reject illegal enum values in OBJECT_TYPE */
- if (object_type != OBJECT_TYPE_TABLE)
+ if (object_type < FIRST_OBJECT_TYPE ||
+ object_type > LAST_OBJECT_TYPE ||
+ object_type == OBJECT_TYPE_TEMPORARY_TABLE)
return HA_ERR_NO_REFERENCED_ROW;
/* Reject illegal enum values in ENABLED */
@@ -147,7 +152,7 @@ int table_setup_objects::delete_all_rows(void)
ha_rows table_setup_objects::get_row_count(void)
{
- return setup_object_count();
+ return global_setup_object_container.get_row_count();
}
table_setup_objects::table_setup_objects()
@@ -165,17 +170,14 @@ int table_setup_objects::rnd_next(void)
{
PFS_setup_object *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < setup_object_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_setup_object_iterator it= global_setup_object_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &setup_object_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -187,9 +189,8 @@ int table_setup_objects::rnd_pos(const void *pos)
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < setup_object_max);
- pfs= &setup_object_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+ pfs= global_setup_object_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
@@ -200,7 +201,7 @@ int table_setup_objects::rnd_pos(const void *pos)
void table_setup_objects::make_row(PFS_setup_object *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
diff --git a/storage/perfschema/table_setup_objects.h b/storage/perfschema/table_setup_objects.h
index 570acc865ad..abe36f73818 100644
--- a/storage/perfschema/table_setup_objects.h
+++ b/storage/perfschema/table_setup_objects.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_setup_timers.cc b/storage/perfschema/table_setup_timers.cc
index a2d34828f08..d5656ea261e 100644
--- a/storage/perfschema/table_setup_timers.cc
+++ b/storage/perfschema/table_setup_timers.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2017, 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, version 2.0,
@@ -26,12 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_setup_timers.h"
#include "pfs_column_values.h"
#include "pfs_timer.h"
+#include "field.h"
+#include "derror.h" /* ER_THD */
-#define COUNT_SETUP_TIMERS 4
+#define COUNT_SETUP_TIMERS 5
static row_setup_timers all_setup_timers_data[COUNT_SETUP_TIMERS]=
{
@@ -50,6 +52,10 @@ static row_setup_timers all_setup_timers_data[COUNT_SETUP_TIMERS]=
{
{ C_STRING_WITH_LEN("statement") },
&statement_timer
+ },
+ {
+ { C_STRING_WITH_LEN("transaction") },
+ &transaction_timer
}
};
@@ -60,23 +66,36 @@ table_setup_timers::m_share=
{
{ C_STRING_WITH_LEN("setup_timers") },
&pfs_updatable_acl,
- &table_setup_timers::create,
+ table_setup_timers::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- COUNT_SETUP_TIMERS,
+ table_setup_timers::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE setup_timers("
"NAME VARCHAR(64) not null,"
- "TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null)") }
+ "TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_setup_timers::create(void)
{
+ THD *thd = current_thd;
+ push_warning_printf(thd,
+ Sql_condition::WARN_LEVEL_WARN,
+ ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT,
+ ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT),
+ "performance_schema.setup_timers");
+
return new table_setup_timers();
}
+ha_rows
+table_setup_timers::get_row_count(void)
+{
+ return COUNT_SETUP_TIMERS;
+}
+
table_setup_timers::table_setup_timers()
: PFS_engine_table(&m_share, &m_pos),
m_row(NULL), m_pos(0), m_next_pos(0)
diff --git a/storage/perfschema/table_setup_timers.h b/storage/perfschema/table_setup_timers.h
index d591f3e0b67..43100bf3dd0 100644
--- a/storage/perfschema/table_setup_timers.h
+++ b/storage/perfschema/table_setup_timers.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -52,6 +52,7 @@ public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_socket_instances.cc b/storage/perfschema/table_socket_instances.cc
index 920531136d5..24c9b0d02a9 100644
--- a/storage/perfschema/table_socket_instances.cc
+++ b/storage/perfschema/table_socket_instances.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,12 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_socket_instances.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_socket_instances::m_table_lock;
@@ -40,11 +42,10 @@ table_socket_instances::m_share=
{
{ C_STRING_WITH_LEN("socket_instances") },
&pfs_readonly_acl,
- &table_socket_instances::create,
+ table_socket_instances::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ table_socket_instances::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE socket_instances("
@@ -54,7 +55,8 @@ table_socket_instances::m_share=
"SOCKET_ID INTEGER not null,"
"IP VARCHAR(64) not null,"
"PORT INTEGER not null,"
- "STATE ENUM('IDLE','ACTIVE') not null)") }
+ "STATE ENUM('IDLE','ACTIVE') not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_socket_instances::create(void)
@@ -62,6 +64,12 @@ PFS_engine_table* table_socket_instances::create(void)
return new table_socket_instances();
}
+ha_rows
+table_socket_instances::get_row_count(void)
+{
+ return global_socket_container.get_row_count();
+}
+
table_socket_instances::table_socket_instances()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -77,17 +85,14 @@ int table_socket_instances::rnd_next(void)
{
PFS_socket *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < socket_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_socket_iterator it= global_socket_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &socket_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -98,19 +103,20 @@ int table_socket_instances::rnd_pos(const void *pos)
PFS_socket *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < socket_max);
- pfs= &socket_array[m_pos.m_index];
- if (! pfs->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
+ pfs= global_socket_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
- make_row(pfs);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
void table_socket_instances::make_row(PFS_socket *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_socket_class *safe_class;
m_row_exists= false;
diff --git a/storage/perfschema/table_socket_instances.h b/storage/perfschema/table_socket_instances.h
index 41b5ee3fd21..4e32bbdcd00 100644
--- a/storage/perfschema/table_socket_instances.h
+++ b/storage/perfschema/table_socket_instances.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -70,6 +70,7 @@ public:
/** Table share */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_socket_summary_by_event_name.cc b/storage/perfschema/table_socket_summary_by_event_name.cc
index c813d45b732..bdfff75614d 100644
--- a/storage/perfschema/table_socket_summary_by_event_name.cc
+++ b/storage/perfschema/table_socket_summary_by_event_name.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,13 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_socket_summary_by_event_name.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "field.h"
THR_LOCK table_socket_summary_by_event_name::m_table_lock;
@@ -41,11 +42,10 @@ table_socket_summary_by_event_name::m_share=
{
{ C_STRING_WITH_LEN("socket_summary_by_event_name") },
&pfs_readonly_acl,
- &table_socket_summary_by_event_name::create,
+ table_socket_summary_by_event_name::create,
NULL, /* write_row */
table_socket_summary_by_event_name::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_socket_summary_by_event_name::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE socket_summary_by_event_name("
@@ -71,7 +71,8 @@ table_socket_summary_by_event_name::m_share=
"SUM_TIMER_MISC BIGINT unsigned not null,"
"MIN_TIMER_MISC BIGINT unsigned not null,"
"AVG_TIMER_MISC BIGINT unsigned not null,"
- "MAX_TIMER_MISC BIGINT unsigned not null)") }
+ "MAX_TIMER_MISC BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_socket_summary_by_event_name::create(void)
@@ -91,6 +92,12 @@ int table_socket_summary_by_event_name::delete_all_rows(void)
return 0;
}
+ha_rows
+table_socket_summary_by_event_name::get_row_count(void)
+{
+ return socket_class_max;
+}
+
void table_socket_summary_by_event_name::reset_position(void)
{
m_pos.m_index= 1;
@@ -138,7 +145,7 @@ void table_socket_summary_by_event_name::make_row(PFS_socket_class *socket_class
PFS_instance_iterator::visit_socket_instances(socket_class, &visitor);
time_normalizer *normalizer= time_normalizer::get(wait_timer);
-
+
/* Collect timer and byte count stats */
m_row.m_io_stat.set(normalizer, &visitor.m_socket_io_stat);
m_row_exists= true;
diff --git a/storage/perfschema/table_socket_summary_by_event_name.h b/storage/perfschema/table_socket_summary_by_event_name.h
index 4f679d89b09..e25d38b9bfa 100644
--- a/storage/perfschema/table_socket_summary_by_event_name.h
+++ b/storage/perfschema/table_socket_summary_by_event_name.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -60,6 +60,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_socket_summary_by_instance.cc b/storage/perfschema/table_socket_summary_by_instance.cc
index a4b1477aa90..372cde61a87 100644
--- a/storage/perfschema/table_socket_summary_by_instance.cc
+++ b/storage/perfschema/table_socket_summary_by_instance.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -26,12 +26,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_socket_summary_by_instance.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_socket_summary_by_instance::m_table_lock;
@@ -40,11 +42,10 @@ table_socket_summary_by_instance::m_share=
{
{ C_STRING_WITH_LEN("socket_summary_by_instance") },
&pfs_readonly_acl,
- &table_socket_summary_by_instance::create,
+ table_socket_summary_by_instance::create,
NULL, /* write_row */
table_socket_summary_by_instance::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_socket_summary_by_instance::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE socket_summary_by_instance("
@@ -71,7 +72,8 @@ table_socket_summary_by_instance::m_share=
"SUM_TIMER_MISC BIGINT unsigned not null,"
"MIN_TIMER_MISC BIGINT unsigned not null,"
"AVG_TIMER_MISC BIGINT unsigned not null,"
- "MAX_TIMER_MISC BIGINT unsigned not null)") }
+ "MAX_TIMER_MISC BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_socket_summary_by_instance::create(void)
@@ -90,6 +92,12 @@ int table_socket_summary_by_instance::delete_all_rows(void)
return 0;
}
+ha_rows
+table_socket_summary_by_instance::get_row_count(void)
+{
+ return global_socket_container.get_row_count();
+}
+
void table_socket_summary_by_instance::reset_position(void)
{
m_pos.m_index= 0;
@@ -100,17 +108,14 @@ int table_socket_summary_by_instance::rnd_next(void)
{
PFS_socket *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < socket_max;
- m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_socket_iterator it= global_socket_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &socket_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -121,19 +126,20 @@ int table_socket_summary_by_instance::rnd_pos(const void *pos)
PFS_socket *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < socket_max);
- pfs= &socket_array[m_pos.m_index];
- if (! pfs->m_lock.is_populated())
- return HA_ERR_RECORD_DELETED;
+ pfs= global_socket_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
- make_row(pfs);
- return 0;
+ return HA_ERR_RECORD_DELETED;
}
void table_socket_summary_by_instance::make_row(PFS_socket *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_socket_class *safe_class;
m_row_exists= false;
diff --git a/storage/perfschema/table_socket_summary_by_instance.h b/storage/perfschema/table_socket_summary_by_instance.h
index a9eab8d18b6..3f6d1295728 100644
--- a/storage/perfschema/table_socket_summary_by_instance.h
+++ b/storage/perfschema/table_socket_summary_by_instance.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -63,6 +63,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_status_by_account.cc b/storage/perfschema/table_status_by_account.cc
new file mode 100644
index 00000000000..30a1b6db036
--- /dev/null
+++ b/storage/perfschema/table_status_by_account.cc
@@ -0,0 +1,246 @@
+/* Copyright (c) 2015, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_status_by_account.cc
+ Table STATUS_BY_ACCOUNT (implementation).
+*/
+
+#include "my_global.h"
+#include "table_status_by_account.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+#include "pfs_account.h"
+
+THR_LOCK table_status_by_account::m_table_lock;
+
+PFS_engine_table_share
+table_status_by_account::m_share=
+{
+ { C_STRING_WITH_LEN("status_by_account") },
+ &pfs_truncatable_acl,
+ table_status_by_account::create,
+ NULL, /* write_row */
+ table_status_by_account::delete_all_rows,
+ table_status_by_account::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE status_by_account("
+ "USER CHAR(32) collate utf8_bin default null,"
+ "HOST CHAR(60) collate utf8_bin default null,"
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_status_by_account::create(void)
+{
+ return new table_status_by_account();
+}
+
+int table_status_by_account::delete_all_rows(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ reset_status_by_thread();
+ reset_status_by_account();
+ mysql_mutex_unlock(&LOCK_status);
+ return 0;
+}
+
+ha_rows table_status_by_account::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ size_t status_var_count= all_status_vars.elements;
+ mysql_mutex_unlock(&LOCK_status);
+ return (global_account_container.get_row_count() * status_var_count);
+}
+
+table_status_by_account::table_status_by_account()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_status_cache(true), m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_status_by_account::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_status_by_account::rnd_init(bool scan)
+{
+ if (show_compatibility_56)
+ return 0;
+
+ /*
+ Build array of SHOW_VARs from the global status array prior to materializing
+ threads in rnd_next() or rnd_pos().
+ */
+ m_status_cache.initialize_client_session();
+
+ /* Use the current number of status variables to detect changes. */
+ ulonglong status_version= m_status_cache.get_status_array_version();
+
+ /*
+ The table context holds the current version of the global status array
+ and a record of which accounts were materialized. If scan == true, then
+ allocate a new context from mem_root and store in TLS. If scan == false,
+ then restore from TLS.
+ */
+ m_context= (table_status_by_account_context *)current_thd->alloc(sizeof(table_status_by_account_context));
+ new(m_context) table_status_by_account_context(status_version, !scan);
+ return 0;
+}
+
+int table_status_by_account::rnd_next(void)
+{
+ if (show_compatibility_56)
+ return HA_ERR_END_OF_FILE;
+
+ /* If status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ /*
+ For each account, build a cache of status variables using totals from all
+ threads associated with the account.
+ */
+ bool has_more_account= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_account;
+ m_pos.next_account())
+ {
+ PFS_account *pfs_account= global_account_container.get(m_pos.m_index_1, &has_more_account);
+
+ if (m_status_cache.materialize_account(pfs_account) == 0)
+ {
+ /* Mark this account as materialized. */
+ m_context->set_item(m_pos.m_index_1);
+
+ /* Get the next status variable. */
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_account, stat_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_status_by_account::rnd_pos(const void *pos)
+{
+ if (show_compatibility_56)
+ return HA_ERR_RECORD_DELETED;
+
+ /* If status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index_1 < global_account_container.get_row_count());
+
+ PFS_account *pfs_account= global_account_container.get(m_pos.m_index_1);
+
+ /*
+ Only materialize threads that were previously materialized by rnd_next().
+ If a account cannot be rematerialized, then do nothing.
+ */
+ if (m_context->is_item_set(m_pos.m_index_1) &&
+ m_status_cache.materialize_account(pfs_account) == 0)
+ {
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_account, stat_var);
+ return 0;
+ }
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_status_by_account
+::make_row(PFS_account *pfs_account, const Status_variable *status_var)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+ pfs_account->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_account.make_row(pfs_account))
+ return;
+
+ m_row.m_variable_name.make_row(status_var->m_name, status_var->m_name_length);
+ m_row.m_variable_value.make_row(status_var);
+
+ if (!pfs_account->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_status_by_account
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* USER */
+ case 1: /* HOST */
+ m_row.m_account.set_field(f->field_index, f);
+ break;
+ case 2: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 3: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_status_by_account.h b/storage/perfschema/table_status_by_account.h
new file mode 100644
index 00000000000..401a184d8f1
--- /dev/null
+++ b/storage/perfschema/table_status_by_account.h
@@ -0,0 +1,156 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_STATUS_BY_ACCOUNT_H
+#define TABLE_STATUS_BY_ACCOUNT_H
+
+/**
+ @file storage/perfschema/table_status_by_account.h
+ Table STATUS_BY_ACCOUNT (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_account.h"
+#include "pfs_account.h"
+#include "pfs_host.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+#include "pfs_buffer_container.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.STATUS_BY_ACCOUNT.
+*/
+struct row_status_by_account
+{
+ /** Column USER, HOST. */
+ PFS_account_row m_account;
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.STATUS_BY_ACCOUNT.
+ Index 1 on account (0 based)
+ Index 2 on status variable (0 based)
+*/
+struct pos_status_by_account
+: public PFS_double_index
+{
+ pos_status_by_account()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline bool has_more_account(void)
+ { return (m_index_1 < global_account_container.get_row_count()); }
+
+ inline void next_account(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/**
+ Store and retrieve table state information for queries that reinstantiate
+ the table object.
+*/
+class table_status_by_account_context : public PFS_table_context
+{
+public:
+ table_status_by_account_context(ulonglong current_version, bool restore) :
+ PFS_table_context(current_version, global_account_container.get_row_count(), restore, THR_PFS_SBH) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.STATUS_BY_ACCOUNT. */
+class table_status_by_account : public PFS_engine_table
+{
+ typedef pos_status_by_account pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_status_by_account();
+
+public:
+ ~table_status_by_account()
+ {}
+
+protected:
+ int materialize(PFS_thread *pfs_thread);
+ void make_row(PFS_account *pfs_account, const Status_variable *status_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Status variable cache for one account. */
+ PFS_status_variable_cache m_status_cache;
+
+ /** Current row. */
+ row_status_by_account m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with global status array version and map of materialized threads. */
+ table_status_by_account_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_status_by_host.cc b/storage/perfschema/table_status_by_host.cc
new file mode 100644
index 00000000000..cd41fcaa469
--- /dev/null
+++ b/storage/perfschema/table_status_by_host.cc
@@ -0,0 +1,245 @@
+/* Copyright (c) 2015, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_status_by_host.cc
+ Table STATUS_BY_HOST (implementation).
+*/
+
+#include "my_global.h"
+#include "table_status_by_host.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+#include "pfs_account.h"
+
+THR_LOCK table_status_by_host::m_table_lock;
+
+PFS_engine_table_share
+table_status_by_host::m_share=
+{
+ { C_STRING_WITH_LEN("status_by_host") },
+ &pfs_truncatable_acl,
+ table_status_by_host::create,
+ NULL, /* write_row */
+ table_status_by_host::delete_all_rows,
+ table_status_by_host::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE status_by_host("
+ "HOST CHAR(60) collate utf8_bin default null,"
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_status_by_host::create(void)
+{
+ return new table_status_by_host();
+}
+
+int table_status_by_host::delete_all_rows(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ reset_status_by_thread();
+ reset_status_by_account();
+ reset_status_by_host();
+ mysql_mutex_unlock(&LOCK_status);
+ return 0;
+}
+
+ha_rows table_status_by_host::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ size_t status_var_count= all_status_vars.elements;
+ mysql_mutex_unlock(&LOCK_status);
+ return (global_host_container.get_row_count() * status_var_count);
+}
+
+table_status_by_host::table_status_by_host()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_status_cache(true), m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_status_by_host::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_status_by_host::rnd_init(bool scan)
+{
+ if (show_compatibility_56)
+ return 0;
+
+ /*
+ Build array of SHOW_VARs from the global status array prior to materializing
+ threads in rnd_next() or rnd_pos().
+ */
+ m_status_cache.initialize_client_session();
+
+ /* Use the current number of status variables to detect changes. */
+ ulonglong status_version= m_status_cache.get_status_array_version();
+
+ /*
+ The table context holds the current version of the global status array
+ and a record of which hosts were materialized. If scan == true, then
+ allocate a new context from mem_root and store in TLS. If scan == false,
+ then restore from TLS.
+ */
+ m_context= (table_status_by_host_context *)current_thd->alloc(sizeof(table_status_by_host_context));
+ new(m_context) table_status_by_host_context(status_version, !scan);
+ return 0;
+}
+
+int table_status_by_host::rnd_next(void)
+{
+ if (show_compatibility_56)
+ return HA_ERR_END_OF_FILE;
+
+ /* If status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ /*
+ For each user, build a cache of status variables using totals from all
+ threads associated with the host.
+ */
+ bool has_more_host= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_host;
+ m_pos.next_host())
+ {
+ PFS_host *pfs_host= global_host_container.get(m_pos.m_index_1, &has_more_host);
+
+ if (m_status_cache.materialize_host(pfs_host) == 0)
+ {
+ /* Mark this host as materialized. */
+ m_context->set_item(m_pos.m_index_1);
+
+ /* Get the next status variable. */
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_host, stat_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_status_by_host::rnd_pos(const void *pos)
+{
+ if (show_compatibility_56)
+ return 0;
+
+ /* If status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index_1 < global_host_container.get_row_count());
+
+ PFS_host *pfs_host= global_host_container.get(m_pos.m_index_1);
+
+ /*
+ Only materialize threads that were previously materialized by rnd_next().
+ If a host cannot be rematerialized, then do nothing.
+ */
+ if (m_context->is_item_set(m_pos.m_index_1) &&
+ m_status_cache.materialize_host(pfs_host) == 0)
+ {
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_host, stat_var);
+ return 0;
+ }
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_status_by_host
+::make_row(PFS_host *pfs_host, const Status_variable *status_var)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+ pfs_host->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_host.make_row(pfs_host))
+ return;
+
+ m_row.m_variable_name.make_row(status_var->m_name, status_var->m_name_length);
+ m_row.m_variable_value.make_row(status_var);
+
+ if (!pfs_host->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_status_by_host
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* HOST */
+ m_row.m_host.set_field(f);
+ break;
+ case 1: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 2: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_status_by_host.h b/storage/perfschema/table_status_by_host.h
new file mode 100644
index 00000000000..e4c6bf256ef
--- /dev/null
+++ b/storage/perfschema/table_status_by_host.h
@@ -0,0 +1,154 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_STATUS_BY_HOST_H
+#define TABLE_STATUS_BY_HOST_H
+
+/**
+ @file storage/perfschema/table_status_by_host.h
+ Table STATUS_BY_HOST (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_host.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+#include "pfs_buffer_container.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.STATUS_BY_HOST.
+*/
+struct row_status_by_host
+{
+ /** Column HOST */
+ PFS_host_row m_host;
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.STATUS_BY_HOST.
+ Index 1 on host (0 based)
+ Index 2 on status variable (0 based)
+*/
+struct pos_status_by_host
+: public PFS_double_index
+{
+ pos_status_by_host()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline bool has_more_host(void)
+ { return (m_index_1 < global_host_container.get_row_count()); }
+
+ inline void next_host(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/**
+ Store and retrieve table state information for queries that reinstantiate
+ the table object.
+*/
+class table_status_by_host_context : public PFS_table_context
+{
+public:
+ table_status_by_host_context(ulonglong current_version, bool restore) :
+ PFS_table_context(current_version, global_host_container.get_row_count(), restore, THR_PFS_SBH) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.STATUS_BY_HOST. */
+class table_status_by_host : public PFS_engine_table
+{
+ typedef pos_status_by_host pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_status_by_host();
+
+public:
+ ~table_status_by_host()
+ {}
+
+protected:
+ int materialize(PFS_thread *thread);
+ void make_row(PFS_host *pfs_host, const Status_variable *status_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Status variable cache for one host. */
+ PFS_status_variable_cache m_status_cache;
+
+ /** Current row. */
+ row_status_by_host m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with global status array version and map of materialized threads. */
+ table_status_by_host_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_status_by_thread.cc b/storage/perfschema/table_status_by_thread.cc
new file mode 100644
index 00000000000..d9af7e49aa4
--- /dev/null
+++ b/storage/perfschema/table_status_by_thread.cc
@@ -0,0 +1,239 @@
+/* Copyright (c) 2015, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_status_by_thread.cc
+ Table STATUS_BY_THREAD (implementation).
+*/
+
+#include "my_global.h"
+#include "table_status_by_thread.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+
+THR_LOCK table_status_by_thread::m_table_lock;
+
+PFS_engine_table_share
+table_status_by_thread::m_share=
+{
+ { C_STRING_WITH_LEN("status_by_thread") },
+ &pfs_truncatable_acl,
+ table_status_by_thread::create,
+ NULL, /* write_row */
+ table_status_by_thread::delete_all_rows,
+ table_status_by_thread::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE status_by_thread("
+ "THREAD_ID BIGINT unsigned not null,"
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_status_by_thread::create(void)
+{
+ return new table_status_by_thread();
+}
+
+int table_status_by_thread::delete_all_rows(void)
+{
+ /* Lock required to aggregate to global_status_vars. */
+ mysql_mutex_lock(&LOCK_status);
+
+ reset_status_by_thread();
+
+ mysql_mutex_unlock(&LOCK_status);
+ return 0;
+}
+
+ha_rows table_status_by_thread::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ size_t status_var_count= all_status_vars.elements;
+ mysql_mutex_unlock(&LOCK_status);
+ return (global_thread_container.get_row_count() * status_var_count);
+}
+
+table_status_by_thread::table_status_by_thread()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_status_cache(true), m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_status_by_thread::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_status_by_thread::rnd_init(bool scan)
+{
+ if (show_compatibility_56)
+ return 0;
+
+ /*
+ Build array of SHOW_VARs from the global status array prior to materializing
+ threads in rnd_next() or rnd_pos().
+ */
+ m_status_cache.initialize_session();
+
+ /* Record the current number of status variables to detect subsequent changes. */
+ ulonglong status_version= m_status_cache.get_status_array_version();
+
+ /*
+ The table context holds the current version of the global status array
+ and a record of which threads were materialized. If scan == true, then
+ allocate a new context from mem_root and store in TLS. If scan == false,
+ then restore from TLS.
+ */
+ m_context= (table_status_by_thread_context *)current_thd->alloc(sizeof(table_status_by_thread_context));
+ new(m_context) table_status_by_thread_context(status_version, !scan);
+ return 0;
+}
+
+int table_status_by_thread::rnd_next(void)
+{
+ if (show_compatibility_56)
+ return HA_ERR_END_OF_FILE;
+
+ /* If global status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ bool has_more_thread= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next_thread())
+ {
+ PFS_thread *pfs_thread= global_thread_container.get(m_pos.m_index_1, &has_more_thread);
+ if (m_status_cache.materialize_session(pfs_thread) == 0)
+ {
+ /* Mark this thread as materialized. */
+ m_context->set_item(m_pos.m_index_1);
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_thread, stat_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_status_by_thread::rnd_pos(const void *pos)
+{
+ if (show_compatibility_56)
+ return HA_ERR_RECORD_DELETED;
+
+ /* If global status array has changed, do nothing. */
+ if (!m_context->versions_match())
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index_1 < global_thread_container.get_row_count());
+
+ PFS_thread *pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ /*
+ Only materialize threads that were previously materialized by rnd_next().
+ If a thread cannot be rematerialized, then do nothing.
+ */
+ if (m_context->is_item_set(m_pos.m_index_1) &&
+ m_status_cache.materialize_session(pfs_thread) == 0)
+ {
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_thread, stat_var);
+ return 0;
+ }
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_status_by_thread
+::make_row(PFS_thread *thread, const Status_variable *status_var)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+ if (status_var->is_null())
+ return;
+
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_thread_internal_id= thread->m_thread_internal_id;
+ m_row.m_variable_name.make_row(status_var->m_name, status_var->m_name_length);
+ m_row.m_variable_value.make_row(status_var);
+
+ if (!thread->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_status_by_thread
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* THREAD_ID */
+ set_field_ulonglong(f, m_row.m_thread_internal_id);
+ break;
+ case 1: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 2: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_status_by_thread.h b/storage/perfschema/table_status_by_thread.h
new file mode 100644
index 00000000000..f8de21dc41e
--- /dev/null
+++ b/storage/perfschema/table_status_by_thread.h
@@ -0,0 +1,151 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_STATUS_BY_THREAD_H
+#define TABLE_STATUS_BY_THREAD_H
+
+/**
+ @file storage/perfschema/table_status_by_thread.h
+ Table STATUS_BY_THREAD (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+#include "pfs_buffer_container.h"
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.STATUS_BY_THREAD.
+*/
+struct row_status_by_thread
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.STATUS_BY_THREAD.
+ Index 1 on thread (0 based)
+ Index 2 on status variable (0 based)
+*/
+struct pos_status_by_thread
+: public PFS_double_index
+{
+ pos_status_by_thread()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline bool has_more_thread(void)
+ { return (m_index_1 < global_thread_container.get_row_count()); }
+
+ inline void next_thread(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/**
+ Store and retrieve table state information for queries that reinstantiate
+ the table object.
+*/
+class table_status_by_thread_context : public PFS_table_context
+{
+public:
+ table_status_by_thread_context(ulonglong current_version, bool restore) :
+ PFS_table_context(current_version, global_thread_container.get_row_count(), restore, THR_PFS_SBT) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.STATUS_BY_THREAD. */
+class table_status_by_thread : public PFS_engine_table
+{
+ typedef pos_status_by_thread pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_status_by_thread();
+
+public:
+ ~table_status_by_thread()
+ {}
+
+protected:
+ int materialize(PFS_thread *thread);
+ void make_row(PFS_thread *thread, const Status_variable *status_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD variables. */
+ PFS_status_variable_cache m_status_cache;
+ /** Current row. */
+ row_status_by_thread m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with global status array version and map of materialized threads. */
+ table_status_by_thread_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_status_by_user.cc b/storage/perfschema/table_status_by_user.cc
new file mode 100644
index 00000000000..921a72247b6
--- /dev/null
+++ b/storage/perfschema/table_status_by_user.cc
@@ -0,0 +1,246 @@
+/* Copyright (c) 2015, 2016, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_status_by_user.cc
+ Table STATUS_BY_USER (implementation).
+*/
+
+#include "my_global.h"
+#include "table_status_by_user.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+#include "pfs_account.h"
+#include "pfs_visitor.h"
+
+THR_LOCK table_status_by_user::m_table_lock;
+
+PFS_engine_table_share
+table_status_by_user::m_share=
+{
+ { C_STRING_WITH_LEN("status_by_user") },
+ &pfs_truncatable_acl,
+ table_status_by_user::create,
+ NULL, /* write_row */
+ table_status_by_user::delete_all_rows,
+ table_status_by_user::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE status_by_user("
+ "USER CHAR(32) collate utf8_bin default null,"
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_status_by_user::create(void)
+{
+ return new table_status_by_user();
+}
+
+int table_status_by_user::delete_all_rows(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ reset_status_by_thread();
+ reset_status_by_account();
+ reset_status_by_user();
+ mysql_mutex_unlock(&LOCK_status);
+ return 0;
+}
+
+ha_rows table_status_by_user::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_status);
+ size_t status_var_count= all_status_vars.elements;
+ mysql_mutex_unlock(&LOCK_status);
+ return (global_user_container.get_row_count() * status_var_count);
+}
+
+table_status_by_user::table_status_by_user()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_status_cache(true), m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_status_by_user::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_status_by_user::rnd_init(bool scan)
+{
+ if (show_compatibility_56)
+ return 0;
+
+ /*
+ Build array of SHOW_VARs from the global status array prior to materializing
+ threads in rnd_next() or rnd_pos().
+ */
+ m_status_cache.initialize_client_session();
+
+ /* Use the current number of status variables to detect changes. */
+ ulonglong status_version= m_status_cache.get_status_array_version();
+
+ /*
+ The table context holds the current version of the global status array
+ and a record of which users were materialized. If scan == true, then
+ allocate a new context from mem_root and store in TLS. If scan == false,
+ then restore from TLS.
+ */
+ m_context= (table_status_by_user_context *)current_thd->alloc(sizeof(table_status_by_user_context));
+ new(m_context) table_status_by_user_context(status_version, !scan);
+ return 0;
+}
+
+int table_status_by_user::rnd_next(void)
+{
+ if (show_compatibility_56)
+ return HA_ERR_END_OF_FILE;
+
+ /* If status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ /*
+ For each user, build a cache of status variables using totals from all
+ threads associated with the user.
+ */
+ bool has_more_user= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_user;
+ m_pos.next_user())
+ {
+ PFS_user *pfs_user= global_user_container.get(m_pos.m_index_1, &has_more_user);
+
+ if (m_status_cache.materialize_user(pfs_user) == 0)
+ {
+ /* Mark this user as materialized. */
+ m_context->set_item(m_pos.m_index_1);
+
+ /* Get the next status variable. */
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_user, stat_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_status_by_user::rnd_pos(const void *pos)
+{
+ if (show_compatibility_56)
+ return HA_ERR_RECORD_DELETED;
+
+ /* If status array changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index_1 < global_user_container.get_row_count());
+
+ PFS_user *pfs_user= global_user_container.get(m_pos.m_index_1);
+
+ /*
+ Only materialize threads that were previously materialized by rnd_next().
+ If a user cannot be rematerialized, then do nothing.
+ */
+ if (m_context->is_item_set(m_pos.m_index_1) &&
+ m_status_cache.materialize_user(pfs_user) == 0)
+ {
+ const Status_variable *stat_var= m_status_cache.get(m_pos.m_index_2);
+ if (stat_var != NULL)
+ {
+ make_row(pfs_user, stat_var);
+ return 0;
+ }
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_status_by_user
+::make_row(PFS_user *user, const Status_variable *status_var)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+ user->m_lock.begin_optimistic_lock(&lock);
+
+ if (m_row.m_user.make_row(user))
+ return;
+
+ m_row.m_variable_name.make_row(status_var->m_name, status_var->m_name_length);
+ m_row.m_variable_value.make_row(status_var);
+
+ if (!user->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_status_by_user
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* USER */
+ m_row.m_user.set_field(f);
+ break;
+ case 1: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 2: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_status_by_user.h b/storage/perfschema/table_status_by_user.h
new file mode 100644
index 00000000000..6b4a67b4e3f
--- /dev/null
+++ b/storage/perfschema/table_status_by_user.h
@@ -0,0 +1,153 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_STATUS_BY_USER_H
+#define TABLE_STATUS_BY_USER_H
+
+/**
+ @file storage/perfschema/table_status_by_user.h
+ Table STATUS_BY_USER (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "pfs_user.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+#include "pfs_buffer_container.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.STATUS_BY_USER.
+*/
+struct row_status_by_user
+{
+ /** Column USER */
+ PFS_user_row m_user;
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.STATUS_BY_USER.
+ Index 1 on user (0 based)
+ Index 2 on status variable (0 based)
+*/
+struct pos_status_by_user
+: public PFS_double_index
+{
+ pos_status_by_user()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline bool has_more_user(void)
+ { return (m_index_1 < global_user_container.get_row_count()); }
+
+ inline void next_user(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/**
+ Store and retrieve table state information for queries that reinstantiate
+ the table object.
+*/
+class table_status_by_user_context : public PFS_table_context
+{
+public:
+ table_status_by_user_context(ulonglong current_version, bool restore) :
+ PFS_table_context(current_version, global_user_container.get_row_count(), restore, THR_PFS_SBU) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.STATUS_BY_USER. */
+class table_status_by_user : public PFS_engine_table
+{
+ typedef pos_status_by_user pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_status_by_user();
+
+public:
+ ~table_status_by_user() { }
+
+protected:
+ int materialize(PFS_thread *thread);
+ void make_row(PFS_user *user, const Status_variable *status_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Status variable cache for one user. */
+ PFS_status_variable_cache m_status_cache;
+
+ /** Current row. */
+ row_status_by_user m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with global status array version and map of materialized threads. */
+ table_status_by_user_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_sync_instances.cc b/storage/perfschema/table_sync_instances.cc
index f0c7800d24a..5b9f90c1092 100644
--- a/storage/perfschema/table_sync_instances.cc
+++ b/storage/perfschema/table_sync_instances.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -27,12 +27,14 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_sync_instances.h"
#include "pfs_global.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_mutex_instances::m_table_lock;
@@ -41,17 +43,17 @@ table_mutex_instances::m_share=
{
{ C_STRING_WITH_LEN("mutex_instances") },
&pfs_readonly_acl,
- &table_mutex_instances::create,
+ table_mutex_instances::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ table_mutex_instances::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE mutex_instances("
"NAME VARCHAR(128) not null,"
"OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
- "LOCKED_BY_THREAD_ID BIGINT unsigned)") }
+ "LOCKED_BY_THREAD_ID BIGINT unsigned)") },
+ false /* perpetual */
};
PFS_engine_table* table_mutex_instances::create(void)
@@ -59,6 +61,12 @@ PFS_engine_table* table_mutex_instances::create(void)
return new table_mutex_instances();
}
+ha_rows
+table_mutex_instances::get_row_count(void)
+{
+ return global_mutex_container.get_row_count();
+}
+
table_mutex_instances::table_mutex_instances()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -74,15 +82,14 @@ int table_mutex_instances::rnd_next(void)
{
PFS_mutex *pfs;
- for (m_pos.set_at(&m_next_pos); m_pos.m_index < mutex_max; m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_mutex_iterator it= global_mutex_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &mutex_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -93,9 +100,9 @@ int table_mutex_instances::rnd_pos(const void *pos)
PFS_mutex *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < mutex_max);
- pfs= &mutex_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_mutex_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
@@ -106,7 +113,7 @@ int table_mutex_instances::rnd_pos(const void *pos)
void table_mutex_instances::make_row(PFS_mutex *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_mutex_class *safe_class;
m_row_exists= false;
@@ -184,18 +191,18 @@ table_rwlock_instances::m_share=
{
{ C_STRING_WITH_LEN("rwlock_instances") },
&pfs_readonly_acl,
- &table_rwlock_instances::create,
+ table_rwlock_instances::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ table_rwlock_instances::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE rwlock_instances("
"NAME VARCHAR(128) not null,"
"OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
"WRITE_LOCKED_BY_THREAD_ID BIGINT unsigned,"
- "READ_LOCKED_BY_COUNT INTEGER unsigned not null)") }
+ "READ_LOCKED_BY_COUNT INTEGER unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_rwlock_instances::create(void)
@@ -203,6 +210,12 @@ PFS_engine_table* table_rwlock_instances::create(void)
return new table_rwlock_instances();
}
+ha_rows
+table_rwlock_instances::get_row_count(void)
+{
+ return global_rwlock_container.get_row_count();
+}
+
table_rwlock_instances::table_rwlock_instances()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -218,15 +231,14 @@ int table_rwlock_instances::rnd_next(void)
{
PFS_rwlock *pfs;
- for (m_pos.set_at(&m_next_pos); m_pos.m_index < rwlock_max; m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_rwlock_iterator it= global_rwlock_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &rwlock_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -237,9 +249,9 @@ int table_rwlock_instances::rnd_pos(const void *pos)
PFS_rwlock *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < rwlock_max);
- pfs= &rwlock_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_rwlock_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
@@ -250,7 +262,7 @@ int table_rwlock_instances::rnd_pos(const void *pos)
void table_rwlock_instances::make_row(PFS_rwlock *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_rwlock_class *safe_class;
m_row_exists= false;
@@ -335,16 +347,16 @@ table_cond_instances::m_share=
{
{ C_STRING_WITH_LEN("cond_instances") },
&pfs_readonly_acl,
- &table_cond_instances::create,
+ table_cond_instances::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ table_cond_instances::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE cond_instances("
"NAME VARCHAR(128) not null,"
- "OBJECT_INSTANCE_BEGIN BIGINT unsigned not null)") }
+ "OBJECT_INSTANCE_BEGIN BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_cond_instances::create(void)
@@ -352,6 +364,12 @@ PFS_engine_table* table_cond_instances::create(void)
return new table_cond_instances();
}
+ha_rows
+table_cond_instances::get_row_count(void)
+{
+ return global_cond_container.get_row_count();
+}
+
table_cond_instances::table_cond_instances()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -367,15 +385,14 @@ int table_cond_instances::rnd_next(void)
{
PFS_cond *pfs;
- for (m_pos.set_at(&m_next_pos); m_pos.m_index < cond_max; m_pos.next())
+ m_pos.set_at(&m_next_pos);
+ PFS_cond_iterator it= global_cond_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- pfs= &cond_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
- {
- make_row(pfs);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
}
return HA_ERR_END_OF_FILE;
@@ -386,9 +403,9 @@ int table_cond_instances::rnd_pos(const void *pos)
PFS_cond *pfs;
set_position(pos);
- DBUG_ASSERT(m_pos.m_index < cond_max);
- pfs= &cond_array[m_pos.m_index];
- if (pfs->m_lock.is_populated())
+
+ pfs= global_cond_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
make_row(pfs);
return 0;
@@ -399,7 +416,7 @@ int table_cond_instances::rnd_pos(const void *pos)
void table_cond_instances::make_row(PFS_cond *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
PFS_cond_class *safe_class;
m_row_exists= false;
diff --git a/storage/perfschema/table_sync_instances.h b/storage/perfschema/table_sync_instances.h
index 6f7e1bf5523..6cf8f0f3669 100644
--- a/storage/perfschema/table_sync_instances.h
+++ b/storage/perfschema/table_sync_instances.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -62,6 +62,7 @@ public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -119,6 +120,7 @@ public:
/** Table share */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
@@ -170,6 +172,7 @@ public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
+ static ha_rows get_row_count();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
diff --git a/storage/perfschema/table_table_handles.cc b/storage/perfschema/table_table_handles.cc
new file mode 100644
index 00000000000..ab6ed357687
--- /dev/null
+++ b/storage/perfschema/table_table_handles.cc
@@ -0,0 +1,214 @@
+/* Copyright (c) 2012, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/table_table_handles.cc
+ Table TABLE_TABLE_HANDLES (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_table_handles.h"
+#include "pfs_global.h"
+#include "pfs_stat.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
+
+THR_LOCK table_table_handles::m_table_lock;
+
+PFS_engine_table_share
+table_table_handles::m_share=
+{
+ { C_STRING_WITH_LEN("table_handles") },
+ &pfs_readonly_acl,
+ table_table_handles::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_table_handles::get_row_count,
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE table_handles("
+ "OBJECT_TYPE VARCHAR(64) not null,"
+ "OBJECT_SCHEMA VARCHAR(64) not null,"
+ "OBJECT_NAME VARCHAR(64) not null,"
+ "OBJECT_INSTANCE_BEGIN BIGINT unsigned not null,"
+ "OWNER_THREAD_ID BIGINT unsigned,"
+ "OWNER_EVENT_ID BIGINT unsigned,"
+ "INTERNAL_LOCK VARCHAR(64),"
+ "EXTERNAL_LOCK VARCHAR(64))") },
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_table_handles::create(void)
+{
+ return new table_table_handles();
+}
+
+ha_rows
+table_table_handles::get_row_count(void)
+{
+ return global_table_container.get_row_count();
+}
+
+table_table_handles::table_table_handles()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_table_handles::reset_position(void)
+{
+ m_pos.m_index= 0;
+ m_next_pos.m_index= 0;
+}
+
+int table_table_handles::rnd_init(bool scan)
+{
+ return 0;
+}
+
+int table_table_handles::rnd_next(void)
+{
+ PFS_table *pfs;
+
+ m_pos.set_at(&m_next_pos);
+ PFS_table_iterator it= global_table_container.iterate(m_pos.m_index);
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_table_handles::rnd_pos(const void *pos)
+{
+ PFS_table *pfs;
+
+ set_position(pos);
+
+ pfs= global_table_container.get(m_pos.m_index);
+ if (pfs != NULL)
+ {
+ make_row(pfs);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_table_handles::make_row(PFS_table *table)
+{
+ pfs_optimistic_state lock;
+ PFS_table_share *share;
+ PFS_thread *thread;
+
+ m_row_exists= false;
+
+ table->m_lock.begin_optimistic_lock(&lock);
+
+ share= sanitize_table_share(table->m_share);
+ if (share == NULL)
+ return;
+
+ if (m_row.m_object.make_row(share))
+ return;
+
+ m_row.m_identity= table->m_identity;
+
+ thread= sanitize_thread(table->m_thread_owner);
+ if (thread != NULL)
+ {
+ m_row.m_owner_thread_id= thread->m_thread_internal_id;
+ m_row.m_owner_event_id= table->m_owner_event_id;
+ }
+ else
+ {
+ m_row.m_owner_thread_id= 0;
+ m_row.m_owner_event_id= 0;
+ }
+
+ m_row.m_internal_lock= table->m_internal_lock;
+ m_row.m_external_lock= table->m_external_lock;
+
+ if (! table->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_table_handles::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* OBJECT_TYPE */
+ case 1: /* SCHEMA_NAME */
+ case 2: /* OBJECT_NAME */
+ m_row.m_object.set_field(f->field_index, f);
+ break;
+ case 3: /* OBJECT_INSTANCE_BEGIN */
+ set_field_ulonglong(f, (intptr) m_row.m_identity);
+ break;
+ case 4: /* OWNER_THREAD_ID */
+ set_field_ulonglong(f, m_row.m_owner_thread_id);
+ break;
+ case 5: /* OWNER_EVENT_ID */
+ set_field_ulonglong(f, m_row.m_owner_event_id);
+ break;
+ case 6: /* INTERNAL_LOCK */
+ set_field_lock_type(f, m_row.m_internal_lock);
+ break;
+ case 7: /* EXTERNAL_LOCK */
+ set_field_lock_type(f, m_row.m_external_lock);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_table_handles.h b/storage/perfschema/table_table_handles.h
new file mode 100644
index 00000000000..0f1f76f4846
--- /dev/null
+++ b/storage/perfschema/table_table_handles.h
@@ -0,0 +1,108 @@
+/* Copyright (c) 2012, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_TABLE_HANDLES_H
+#define TABLE_TABLE_HANDLES_H
+
+/**
+ @file storage/perfschema/table_table_handles.h
+ Table TABLE_HANDLES (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.TABLE_HANDLES.
+*/
+struct row_table_handles
+{
+ /** Column OBJECT_TYPE, SCHEMA_NAME, OBJECT_NAME. */
+ PFS_object_row m_object;
+ /** Column OBJECT_INSTANCE_BEGIN. */
+ const void *m_identity;
+ /** Column OWNER_THREAD_ID. */
+ ulonglong m_owner_thread_id;
+ /** Column OWNER_EVENT_ID. */
+ ulonglong m_owner_event_id;
+ /** Column INTERNAL_LOCK. */
+ PFS_TL_LOCK_TYPE m_internal_lock;
+ /** Column EXTERNAL_LOCK. */
+ PFS_TL_LOCK_TYPE m_external_lock;
+};
+
+/** Table PERFORMANCE_SCHEMA.TABLE_HANDLES. */
+class table_table_handles : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_table_handles();
+
+public:
+ ~table_table_handles()
+ {}
+
+protected:
+ void make_row(PFS_table *table);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_table_handles m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_threads.cc b/storage/perfschema/table_threads.cc
index b396db1a814..37bb6fd074a 100644
--- a/storage/perfschema/table_threads.cc
+++ b/storage/perfschema/table_threads.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -21,7 +21,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_threads.h"
#include "sql_parse.h"
#include "pfs_instr_class.h"
@@ -34,11 +34,10 @@ table_threads::m_share=
{
{ C_STRING_WITH_LEN("threads") },
&pfs_updatable_acl,
- &table_threads::create,
+ table_threads::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
- NULL, /* get_row_count */
- 1000, /* records */
+ cursor_by_thread::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE threads("
@@ -46,7 +45,7 @@ table_threads::m_share=
"NAME VARCHAR(128) not null,"
"TYPE VARCHAR(10) not null,"
"PROCESSLIST_ID BIGINT unsigned,"
- "PROCESSLIST_USER VARCHAR(16),"
+ "PROCESSLIST_USER VARCHAR(" USERNAME_CHAR_LENGTH_STR "),"
"PROCESSLIST_HOST VARCHAR(60),"
"PROCESSLIST_DB VARCHAR(64),"
"PROCESSLIST_COMMAND VARCHAR(16),"
@@ -55,7 +54,11 @@ table_threads::m_share=
"PROCESSLIST_INFO LONGTEXT,"
"PARENT_THREAD_ID BIGINT unsigned,"
"ROLE VARCHAR(64),"
- "INSTRUMENTED ENUM ('YES', 'NO') not null)") }
+ "INSTRUMENTED ENUM ('YES', 'NO') not null,"
+ "HISTORY ENUM ('YES', 'NO') not null,"
+ "CONNECTION_TYPE VARCHAR(16),"
+ "THREAD_OS_ID BIGINT unsigned)") },
+ false /* perpetual */
};
PFS_engine_table* table_threads::create()
@@ -70,9 +73,9 @@ table_threads::table_threads()
void table_threads::make_row(PFS_thread *pfs)
{
- pfs_lock lock;
- pfs_lock session_lock;
- pfs_lock stmt_lock;
+ pfs_optimistic_state lock;
+ pfs_optimistic_state session_lock;
+ pfs_optimistic_state stmt_lock;
PFS_stage_class *stage_class;
PFS_thread_class *safe_class;
@@ -88,6 +91,7 @@ void table_threads::make_row(PFS_thread *pfs)
m_row.m_thread_internal_id= pfs->m_thread_internal_id;
m_row.m_parent_thread_internal_id= pfs->m_parent_thread_internal_id;
m_row.m_processlist_id= pfs->m_processlist_id;
+ m_row.m_thread_os_id= pfs->m_thread_os_id;
m_row.m_name= safe_class->m_name;
m_row.m_name_length= safe_class->m_name_length;
@@ -165,8 +169,12 @@ void table_threads::make_row(PFS_thread *pfs)
{
m_row.m_processlist_state_length= 0;
}
+ m_row.m_connection_type = pfs->m_connection_type;
- m_row.m_enabled_ptr= &pfs->m_enabled;
+
+ m_row.m_enabled= pfs->m_enabled;
+ m_row.m_history= pfs->m_history;
+ m_row.m_psi= pfs;
if (pfs->m_lock.end_optimistic_lock(& lock))
m_row_exists= true;
@@ -178,6 +186,8 @@ int table_threads::read_row_values(TABLE *table,
bool read_all)
{
Field *f;
+ const char *str= NULL;
+ size_t len= 0;
if (unlikely(! m_row_exists))
return HA_ERR_RECORD_DELETED;
@@ -250,23 +260,16 @@ int table_threads::read_row_values(TABLE *table,
f->set_null();
break;
case 9: /* PROCESSLIST_STATE */
+ /* This column's datatype is declared as varchar(64). Thread's state
+ message cannot be more than 64 characters. Otherwise, we will end up
+ in 'data truncated' warning/error (depends sql_mode setting) when
+ server is updating this column for those threads. To prevent this
+ kind of issue, an assert is added.
+ */
+ DBUG_ASSERT(m_row.m_processlist_state_length <= f->char_length());
if (m_row.m_processlist_state_length > 0)
- {
- /* This column's datatype is declared as varchar(64). But in current
- code, there are few process state messages which are greater than
- 64 characters(Eg:stage_slave_has_read_all_relay_log).
- In those cases, we will end up in 'data truncated'
- warning/error (depends sql_mode setting) when server is updating
- this column for those threads. Since 5.6 is GAed, neither the
- metadata of this column can be changed, nor those state messages.
- So server will silently truncate the state message to 64 characters
- if it is longer. In Upper versions(5.7+), these state messages are
- changed to less than or equal to 64 characters.
- */
set_field_varchar_utf8(f, m_row.m_processlist_state_ptr,
- MY_MIN(m_row.m_processlist_state_length,
- f->char_length()));
- }
+ m_row.m_processlist_state_length);
else
f->set_null();
break;
@@ -287,7 +290,23 @@ int table_threads::read_row_values(TABLE *table,
f->set_null();
break;
case 13: /* INSTRUMENTED */
- set_field_enum(f, (*m_row.m_enabled_ptr) ? ENUM_YES : ENUM_NO);
+ set_field_enum(f, m_row.m_enabled ? ENUM_YES : ENUM_NO);
+ break;
+ case 14: /* HISTORY */
+ set_field_enum(f, m_row.m_history ? ENUM_YES : ENUM_NO);
+ break;
+ case 15: /* CONNECTION_TYPE */
+ str= vio_type_name(m_row.m_connection_type, & len);
+ if (len > 0)
+ set_field_varchar_utf8(f, str, (uint)len);
+ else
+ f->set_null();
+ break;
+ case 16: /* THREAD_OS_ID */
+ if (m_row.m_thread_os_id > 0)
+ set_field_ulonglong(f, m_row.m_thread_os_id);
+ else
+ f->set_null();
break;
default:
DBUG_ASSERT(false);
@@ -327,8 +346,15 @@ int table_threads::update_row_values(TABLE *table,
return HA_ERR_WRONG_COMMAND;
case 13: /* INSTRUMENTED */
value= (enum_yes_no) get_field_enum(f);
- *m_row.m_enabled_ptr= (value == ENUM_YES) ? true : false;
+ m_row.m_psi->set_enabled((value == ENUM_YES) ? true : false);
break;
+ case 14: /* HISTORY */
+ value= (enum_yes_no) get_field_enum(f);
+ m_row.m_psi->set_history((value == ENUM_YES) ? true : false);
+ break;
+ case 15: /* CONNECTION_TYPE */
+ case 16: /* THREAD_OS_ID */
+ return HA_ERR_WRONG_COMMAND;
default:
DBUG_ASSERT(false);
}
diff --git a/storage/perfschema/table_threads.h b/storage/perfschema/table_threads.h
index 841b8102bca..88302ea61de 100644
--- a/storage/perfschema/table_threads.h
+++ b/storage/perfschema/table_threads.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2015, 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, version 2.0,
@@ -70,10 +70,18 @@ struct row_threads
const char* m_processlist_info_ptr;
/** Length in bytes of @c m_processlist_info_ptr. */
uint m_processlist_info_length;
- /** Column INSTRUMENTED. */
- bool *m_enabled_ptr;
+ /** Column INSTRUMENTED (read). */
+ bool m_enabled;
+ /** Column HISTORY (read). */
+ bool m_history;
+ /** INSTRUMENTED and HISTORY (write). */
+ PFS_thread *m_psi;
/** Column PARENT_THREAD_ID. */
ulonglong m_parent_thread_internal_id;
+ /** Column CONNECTION_TYPE. */
+ enum_vio_type m_connection_type;
+ /** Column THREAD_OS_ID. */
+ my_thread_os_id_t m_thread_os_id;
};
/** Table PERFORMANCE_SCHEMA.THREADS. */
diff --git a/storage/perfschema/table_tiws_by_index_usage.cc b/storage/perfschema/table_tiws_by_index_usage.cc
index b49e9280469..a1a7343e65b 100644
--- a/storage/perfschema/table_tiws_by_index_usage.cc
+++ b/storage/perfschema/table_tiws_by_index_usage.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_tiws_by_index_usage.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_tiws_by_index_usage::m_table_lock;
@@ -44,8 +46,7 @@ table_tiws_by_index_usage::m_share=
table_tiws_by_index_usage::create,
NULL, /* write_row */
table_tiws_by_index_usage::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_tiws_by_index_usage::get_row_count,
sizeof(pos_tiws_by_index_usage),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE table_io_waits_summary_by_index_usage("
@@ -87,7 +88,8 @@ table_tiws_by_index_usage::m_share=
"SUM_TIMER_DELETE BIGINT unsigned not null,"
"MIN_TIMER_DELETE BIGINT unsigned not null,"
"AVG_TIMER_DELETE BIGINT unsigned not null,"
- "MAX_TIMER_DELETE BIGINT unsigned not null)") }
+ "MAX_TIMER_DELETE BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -104,6 +106,12 @@ table_tiws_by_index_usage::delete_all_rows(void)
return 0;
}
+ha_rows
+table_tiws_by_index_usage::get_row_count(void)
+{
+ return global_table_share_index_container.get_row_count();
+}
+
table_tiws_by_index_usage::table_tiws_by_index_usage()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
@@ -124,27 +132,31 @@ int table_tiws_by_index_usage::rnd_init(bool scan)
int table_tiws_by_index_usage::rnd_next(void)
{
PFS_table_share *table_share;
+ bool has_more_table= true;
for (m_pos.set_at(&m_next_pos);
- m_pos.has_more_table();
+ has_more_table;
m_pos.next_table())
{
- table_share= &table_share_array[m_pos.m_index_1];
- if (table_share->m_lock.is_populated())
+ table_share= global_table_share_container.get(m_pos.m_index_1, & has_more_table);
+ if (table_share != NULL)
{
- uint safe_key_count= sanitize_index_count(table_share->m_key_count);
- if (m_pos.m_index_2 < safe_key_count)
+ if (table_share->m_enabled)
{
- make_row(table_share, m_pos.m_index_2);
- m_next_pos.set_after(&m_pos);
- return 0;
- }
- if (m_pos.m_index_2 <= MAX_INDEXES)
- {
- m_pos.m_index_2= MAX_INDEXES;
- make_row(table_share, m_pos.m_index_2);
- m_next_pos.set_after(&m_pos);
- return 0;
+ uint safe_key_count= sanitize_index_count(table_share->m_key_count);
+ if (m_pos.m_index_2 < safe_key_count)
+ {
+ make_row(table_share, m_pos.m_index_2);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ if (m_pos.m_index_2 <= MAX_INDEXES)
+ {
+ m_pos.m_index_2= MAX_INDEXES;
+ make_row(table_share, m_pos.m_index_2);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
}
}
@@ -159,40 +171,58 @@ table_tiws_by_index_usage::rnd_pos(const void *pos)
set_position(pos);
- table_share= &table_share_array[m_pos.m_index_1];
- if (table_share->m_lock.is_populated())
+ table_share= global_table_share_container.get(m_pos.m_index_1);
+ if (table_share != NULL)
{
- uint safe_key_count= sanitize_index_count(table_share->m_key_count);
- if (m_pos.m_index_2 < safe_key_count)
- {
- make_row(table_share, m_pos.m_index_2);
- return 0;
- }
- if (m_pos.m_index_2 == MAX_INDEXES)
+ if (table_share->m_enabled)
{
- make_row(table_share, m_pos.m_index_2);
- return 0;
+ uint safe_key_count= sanitize_index_count(table_share->m_key_count);
+ if (m_pos.m_index_2 < safe_key_count)
+ {
+ make_row(table_share, m_pos.m_index_2);
+ return 0;
+ }
+ if (m_pos.m_index_2 == MAX_INDEXES)
+ {
+ make_row(table_share, m_pos.m_index_2);
+ return 0;
+ }
}
}
return HA_ERR_RECORD_DELETED;
}
-void table_tiws_by_index_usage::make_row(PFS_table_share *share, uint index)
+void table_tiws_by_index_usage::make_row(PFS_table_share *pfs_share,
+ uint index)
{
- pfs_lock lock;
+ PFS_table_share_index *pfs_index;
+ pfs_optimistic_state lock;
- m_row_exists= false;
+ DBUG_ASSERT(index <= MAX_INDEXES);
- share->m_lock.begin_optimistic_lock(&lock);
+ m_row_exists= false;
- if (m_row.m_index.make_row(share, index))
- return;
+ pfs_share->m_lock.begin_optimistic_lock(&lock);
PFS_index_io_stat_visitor visitor;
- PFS_object_iterator::visit_table_indexes(share, index, & visitor);
+ PFS_object_iterator::visit_table_indexes(pfs_share, index, & visitor);
+
+ if (! visitor.m_stat.m_has_data)
+ {
+ pfs_index= pfs_share->find_index_stat(index);
+ if (pfs_index == NULL)
+ return;
+ }
+ else
+ {
+ pfs_index= pfs_share->find_index_stat(index);
+ }
+
+ if (m_row.m_index.make_row(pfs_share, pfs_index, index))
+ return;
- if (! share->m_lock.end_optimistic_lock(&lock))
+ if (! pfs_share->m_lock.end_optimistic_lock(&lock))
return;
m_row_exists= true;
diff --git a/storage/perfschema/table_tiws_by_index_usage.h b/storage/perfschema/table_tiws_by_index_usage.h
index a284bc7f0bc..cc6ee5ebfe7 100644
--- a/storage/perfschema/table_tiws_by_index_usage.h
+++ b/storage/perfschema/table_tiws_by_index_usage.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -54,7 +54,7 @@ struct row_tiws_by_index_usage
/**
Position of a cursor on
PERFORMANCE_SCHEMA.TABLE_IO_WAIT_SUMMARY_BY_INDEX.
- Index 1 on table_share_array (0 based)
+ Index 1 on global_table_share_container (0 based)
Index 2 on index (0 based)
*/
struct pos_tiws_by_index_usage : public PFS_double_index
@@ -69,11 +69,6 @@ struct pos_tiws_by_index_usage : public PFS_double_index
m_index_2= 0;
}
- inline bool has_more_table(void)
- {
- return (m_index_1 < table_share_max);
- }
-
inline void next_table(void)
{
m_index_1++;
@@ -89,6 +84,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_tiws_by_table.cc b/storage/perfschema/table_tiws_by_table.cc
index db00fd2409e..abd45a7bf3a 100644
--- a/storage/perfschema/table_tiws_by_table.cc
+++ b/storage/perfschema/table_tiws_by_table.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_tiws_by_table.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_tiws_by_table::m_table_lock;
@@ -44,8 +46,7 @@ table_tiws_by_table::m_share=
table_tiws_by_table::create,
NULL, /* write_row */
table_tiws_by_table::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_tiws_by_table::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE table_io_waits_summary_by_table("
@@ -86,7 +87,8 @@ table_tiws_by_table::m_share=
"SUM_TIMER_DELETE BIGINT unsigned not null,"
"MIN_TIMER_DELETE BIGINT unsigned not null,"
"AVG_TIMER_DELETE BIGINT unsigned not null,"
- "MAX_TIMER_DELETE BIGINT unsigned not null)") }
+ "MAX_TIMER_DELETE BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -103,6 +105,12 @@ table_tiws_by_table::delete_all_rows(void)
return 0;
}
+ha_rows
+table_tiws_by_table::get_row_count(void)
+{
+ return global_table_share_container.get_row_count();
+}
+
table_tiws_by_table::table_tiws_by_table()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -122,20 +130,23 @@ int table_tiws_by_table::rnd_init(bool scan)
int table_tiws_by_table::rnd_next(void)
{
- PFS_table_share *table_share;
+ PFS_table_share *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < table_share_max;
- m_pos.m_index++)
+ m_pos.set_at(&m_next_pos);
+ PFS_table_share_iterator it= global_table_share_container.iterate(m_pos.m_index);
+ do
{
- table_share= &table_share_array[m_pos.m_index];
- if (table_share->m_lock.is_populated())
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- make_row(table_share);
- m_next_pos.set_after(&m_pos);
- return 0;
+ if (pfs->m_enabled)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
- }
+ } while (pfs != NULL);
return HA_ERR_END_OF_FILE;
}
@@ -143,15 +154,18 @@ int table_tiws_by_table::rnd_next(void)
int
table_tiws_by_table::rnd_pos(const void *pos)
{
- PFS_table_share *table_share;
+ PFS_table_share *pfs;
set_position(pos);
- table_share= &table_share_array[m_pos.m_index];
- if (table_share->m_lock.is_populated())
+ pfs= global_table_share_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
- make_row(table_share);
- return 0;
+ if (pfs->m_enabled)
+ {
+ make_row(pfs);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -159,7 +173,7 @@ table_tiws_by_table::rnd_pos(const void *pos)
void table_tiws_by_table::make_row(PFS_table_share *share)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
diff --git a/storage/perfschema/table_tiws_by_table.h b/storage/perfschema/table_tiws_by_table.h
index 7427ca797fa..4100a99156b 100644
--- a/storage/perfschema/table_tiws_by_table.h
+++ b/storage/perfschema/table_tiws_by_table.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -59,6 +59,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_tlws_by_table.cc b/storage/perfschema/table_tlws_by_table.cc
index d802127d10d..8f4bc2aea84 100644
--- a/storage/perfschema/table_tlws_by_table.cc
+++ b/storage/perfschema/table_tlws_by_table.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -26,13 +26,15 @@
*/
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_tlws_by_table.h"
#include "pfs_global.h"
#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+#include "field.h"
THR_LOCK table_tlws_by_table::m_table_lock;
@@ -44,8 +46,7 @@ table_tlws_by_table::m_share=
table_tlws_by_table::create,
NULL, /* write_row */
table_tlws_by_table::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ table_tlws_by_table::get_row_count,
sizeof(PFS_simple_index),
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE table_lock_waits_summary_by_table("
@@ -121,7 +122,8 @@ table_tlws_by_table::m_share=
"SUM_TIMER_WRITE_EXTERNAL BIGINT unsigned not null,"
"MIN_TIMER_WRITE_EXTERNAL BIGINT unsigned not null,"
"AVG_TIMER_WRITE_EXTERNAL BIGINT unsigned not null,"
- "MAX_TIMER_WRITE_EXTERNAL BIGINT unsigned not null)") }
+ "MAX_TIMER_WRITE_EXTERNAL BIGINT unsigned not null)") },
+ false /* perpetual */
};
PFS_engine_table*
@@ -138,6 +140,12 @@ table_tlws_by_table::delete_all_rows(void)
return 0;
}
+ha_rows
+table_tlws_by_table::get_row_count(void)
+{
+ return global_table_share_container.get_row_count();
+}
+
table_tlws_by_table::table_tlws_by_table()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
@@ -157,20 +165,23 @@ int table_tlws_by_table::rnd_init(bool scan)
int table_tlws_by_table::rnd_next(void)
{
- PFS_table_share *table_share;
+ PFS_table_share *pfs;
- for (m_pos.set_at(&m_next_pos);
- m_pos.m_index < table_share_max;
- m_pos.m_index++)
+ m_pos.set_at(&m_next_pos);
+ PFS_table_share_iterator it= global_table_share_container.iterate(m_pos.m_index);
+ do
{
- table_share= &table_share_array[m_pos.m_index];
- if (table_share->m_lock.is_populated())
+ pfs= it.scan_next(& m_pos.m_index);
+ if (pfs != NULL)
{
- make_row(table_share);
- m_next_pos.set_after(&m_pos);
- return 0;
+ if (pfs->m_enabled)
+ {
+ make_row(pfs);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
}
- }
+ } while (pfs != NULL);
return HA_ERR_END_OF_FILE;
}
@@ -178,15 +189,18 @@ int table_tlws_by_table::rnd_next(void)
int
table_tlws_by_table::rnd_pos(const void *pos)
{
- PFS_table_share *table_share;
+ PFS_table_share *pfs;
set_position(pos);
- table_share= &table_share_array[m_pos.m_index];
- if (table_share->m_lock.is_populated())
+ pfs= global_table_share_container.get(m_pos.m_index);
+ if (pfs != NULL)
{
- make_row(table_share);
- return 0;
+ if (pfs->m_enabled)
+ {
+ make_row(pfs);
+ return 0;
+ }
}
return HA_ERR_RECORD_DELETED;
@@ -194,7 +208,7 @@ table_tlws_by_table::rnd_pos(const void *pos)
void table_tlws_by_table::make_row(PFS_table_share *share)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
diff --git a/storage/perfschema/table_tlws_by_table.h b/storage/perfschema/table_tlws_by_table.h
index b5872a07762..7cc4b666908 100644
--- a/storage/perfschema/table_tlws_by_table.h
+++ b/storage/perfschema/table_tlws_by_table.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2015, 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, version 2.0,
@@ -59,6 +59,7 @@ public:
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
+ static ha_rows get_row_count();
virtual int rnd_init(bool scan);
virtual int rnd_next();
diff --git a/storage/perfschema/table_users.cc b/storage/perfschema/table_users.cc
index 883ebd36633..734ff7a4e51 100644
--- a/storage/perfschema/table_users.cc
+++ b/storage/perfschema/table_users.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
@@ -21,13 +21,16 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include "my_global.h"
-#include "my_pthread.h"
+#include "my_thread.h"
#include "table_users.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
#include "pfs_account.h"
#include "pfs_user.h"
#include "pfs_visitor.h"
+#include "pfs_memory.h"
+#include "pfs_status.h"
+#include "field.h"
THR_LOCK table_users::m_table_lock;
@@ -36,17 +39,17 @@ table_users::m_share=
{
{ C_STRING_WITH_LEN("users") },
&pfs_truncatable_acl,
- &table_users::create,
+ table_users::create,
NULL, /* write_row */
table_users::delete_all_rows,
- NULL, /* get_row_count */
- 1000, /* records */
+ cursor_by_user::get_row_count,
sizeof(PFS_simple_index), /* ref length */
&m_table_lock,
{ C_STRING_WITH_LEN("CREATE TABLE users("
- "USER CHAR(16) collate utf8_bin default null,"
+ "USER CHAR(" USERNAME_CHAR_LENGTH_STR ") collate utf8_bin default null,"
"CURRENT_CONNECTIONS bigint not null,"
- "TOTAL_CONNECTIONS bigint not null)") }
+ "TOTAL_CONNECTIONS bigint not null)") },
+ false /* perpetual */
};
PFS_engine_table* table_users::create()
@@ -66,6 +69,15 @@ table_users::delete_all_rows(void)
reset_events_statements_by_thread();
reset_events_statements_by_account();
reset_events_statements_by_user();
+ reset_events_transactions_by_thread();
+ reset_events_transactions_by_account();
+ reset_events_transactions_by_user();
+ reset_memory_by_thread();
+ reset_memory_by_account();
+ reset_memory_by_user();
+ reset_status_by_thread();
+ reset_status_by_account();
+ reset_status_by_user();
purge_all_account();
purge_all_user();
return 0;
@@ -78,7 +90,7 @@ table_users::table_users()
void table_users::make_row(PFS_user *pfs)
{
- pfs_lock lock;
+ pfs_optimistic_state lock;
m_row_exists= false;
pfs->m_lock.begin_optimistic_lock(&lock);
@@ -87,7 +99,11 @@ void table_users::make_row(PFS_user *pfs)
return;
PFS_connection_stat_visitor visitor;
- PFS_connection_iterator::visit_user(pfs, true, true, & visitor);
+ PFS_connection_iterator::visit_user(pfs,
+ true, /* accounts */
+ true, /* threads */
+ false, /* THDs */
+ & visitor);
if (! pfs->m_lock.end_optimistic_lock(& lock))
return;
diff --git a/storage/perfschema/table_users.h b/storage/perfschema/table_users.h
index 912f0f43714..1c3cc647a9d 100644
--- a/storage/perfschema/table_users.h
+++ b/storage/perfschema/table_users.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2011, 2015, 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, version 2.0,
diff --git a/storage/perfschema/table_uvar_by_thread.cc b/storage/perfschema/table_uvar_by_thread.cc
new file mode 100644
index 00000000000..77764c002cc
--- /dev/null
+++ b/storage/perfschema/table_uvar_by_thread.cc
@@ -0,0 +1,329 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_uvar_by_thread.cc
+ Table USER_VARIABLES_BY_THREAD (implementation).
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_uvar_by_thread.h"
+#include "pfs_global.h"
+#include "pfs_visitor.h"
+#include "pfs_buffer_container.h"
+
+/* Iteration on THD from the sql layer. */
+#include "sql_class.h"
+#include "mysqld_thd_manager.h"
+
+class Find_thd_user_var : public Find_THD_Impl
+{
+public:
+ Find_thd_user_var(THD *unsafe_thd)
+ : m_unsafe_thd(unsafe_thd)
+ {}
+
+ virtual bool operator()(THD *thd)
+ {
+ if (thd != m_unsafe_thd)
+ return false;
+
+ if (thd->user_vars.records == 0)
+ return false;
+
+ mysql_mutex_lock(&thd->LOCK_thd_data);
+ return true;
+ }
+
+private:
+ THD *m_unsafe_thd;
+};
+
+void User_variables::materialize(PFS_thread *pfs, THD *thd)
+{
+ reset();
+
+ m_pfs= pfs;
+ m_thread_internal_id= pfs->m_thread_internal_id;
+ m_array.reserve(thd->user_vars.records);
+
+ user_var_entry *sql_uvar;
+
+ uint index= 0;
+ User_variable empty;
+
+ /* Protects thd->user_vars. */
+ mysql_mutex_assert_owner(&thd->LOCK_thd_data);
+
+ for (;;)
+ {
+ sql_uvar= reinterpret_cast<user_var_entry*> (my_hash_element(& thd->user_vars, index));
+ if (sql_uvar == NULL)
+ break;
+
+ /*
+ m_array is a container of objects (not pointers)
+
+ Naive code can:
+ - build locally a new entry
+ - add it to the container
+ but this causes useless object construction, destruction, and deep copies.
+
+ What we do here:
+ - add a dummy (empty) entry
+ - the container does a deep copy on something empty,
+ so that there is nothing to copy.
+ - get a reference to the entry added in the container
+ - complete -- in place -- the entry initialization
+ */
+ m_array.push(empty);
+ User_variable & pfs_uvar= *m_array.back();
+
+ /* Copy VARIABLE_NAME */
+ const char *name= sql_uvar->name.str;
+ size_t name_length= sql_uvar->name.length;
+ DBUG_ASSERT(name_length <= sizeof(pfs_uvar.m_name));
+ pfs_uvar.m_name.make_row(name, name_length);
+
+ /* Copy VARIABLE_VALUE */
+ bool null_value;
+ String *str_value;
+ String str_buffer;
+ uint decimals= 0;
+ str_value= sql_uvar->val_str(& null_value, & str_buffer, decimals);
+ if (str_value != NULL)
+ {
+ pfs_uvar.m_value.make_row(str_value->ptr(), str_value->length());
+ }
+ else
+ {
+ pfs_uvar.m_value.make_row(NULL, 0);
+ }
+
+ index++;
+ }
+}
+
+THR_LOCK table_uvar_by_thread::m_table_lock;
+
+PFS_engine_table_share
+table_uvar_by_thread::m_share=
+{
+ { C_STRING_WITH_LEN("user_variables_by_thread") },
+ &pfs_readonly_acl,
+ table_uvar_by_thread::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_uvar_by_thread::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE user_variables_by_thread("
+ "THREAD_ID BIGINT unsigned not null,"
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE LONGBLOB)") },
+ false /* perpetual */
+};
+
+PFS_engine_table*
+table_uvar_by_thread::create(void)
+{
+ return new table_uvar_by_thread();
+}
+
+ha_rows
+table_uvar_by_thread::get_row_count(void)
+{
+ /*
+ This is an estimate only, not a hard limit.
+ The row count is given as a multiple of thread_max,
+ so that a join between:
+ - table performance_schema.threads
+ - table performance_schema.user_variables_by_thread
+ will still evaluate relative table sizes correctly
+ when deciding a join order.
+ */
+ return global_thread_container.get_row_count() * 10;
+}
+
+table_uvar_by_thread::table_uvar_by_thread()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(), m_next_pos()
+{}
+
+void table_uvar_by_thread::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_uvar_by_thread::rnd_next(void)
+{
+ PFS_thread *thread;
+ bool has_more_thread= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next_thread())
+ {
+ thread= global_thread_container.get(m_pos.m_index_1, & has_more_thread);
+ if (thread != NULL)
+ {
+ if (materialize(thread) == 0)
+ {
+ const User_variable *uvar= m_THD_cache.get(m_pos.m_index_2);
+ if (uvar != NULL)
+ {
+ make_row(thread, uvar);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_uvar_by_thread::rnd_pos(const void *pos)
+{
+ PFS_thread *thread;
+
+ set_position(pos);
+
+ thread= global_thread_container.get(m_pos.m_index_1);
+ if (thread != NULL)
+ {
+ if (materialize(thread) == 0)
+ {
+ const User_variable *uvar= m_THD_cache.get(m_pos.m_index_2);
+ if (uvar != NULL)
+ {
+ make_row(thread, uvar);
+ return 0;
+ }
+ }
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+int table_uvar_by_thread::materialize(PFS_thread *thread)
+{
+ if (m_THD_cache.is_materialized(thread))
+ return 0;
+
+ if (! thread->m_lock.is_populated())
+ return 1;
+
+ THD *unsafe_thd= thread->m_thd;
+ if (unsafe_thd == NULL)
+ return 1;
+
+ Find_thd_user_var finder(unsafe_thd);
+ THD *safe_thd= Global_THD_manager::get_instance()->find_thd(&finder);
+ if (safe_thd == NULL)
+ return 1;
+
+ m_THD_cache.materialize(thread, safe_thd);
+ mysql_mutex_unlock(&safe_thd->LOCK_thd_data);
+ return 0;
+}
+
+void table_uvar_by_thread
+::make_row(PFS_thread *thread, const User_variable *uvar)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_thread_internal_id= thread->m_thread_internal_id;
+
+ /* uvar is materialized, pointing to it directly. */
+ m_row.m_variable_name= & uvar->m_name;
+ m_row.m_variable_value= & uvar->m_value;
+
+ if (! thread->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_uvar_by_thread
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ DBUG_ASSERT(m_row.m_variable_name != NULL);
+ DBUG_ASSERT(m_row.m_variable_value != NULL);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* THREAD_ID */
+ set_field_ulonglong(f, m_row.m_thread_internal_id);
+ break;
+ case 1: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f,
+ m_row.m_variable_name->m_str,
+ m_row.m_variable_name->m_length);
+ break;
+ case 2: /* VARIABLE_VALUE */
+ if (m_row.m_variable_value->get_value_length() > 0)
+ {
+ set_field_blob(f,
+ m_row.m_variable_value->get_value(),
+ static_cast<uint>(m_row.m_variable_value->get_value_length()));
+ }
+ else
+ {
+ f->set_null();
+ }
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_uvar_by_thread.h b/storage/perfschema/table_uvar_by_thread.h
new file mode 100644
index 00000000000..a7334b2bdfe
--- /dev/null
+++ b/storage/perfschema/table_uvar_by_thread.h
@@ -0,0 +1,195 @@
+/* Copyright (c) 2013, 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_UVAR_BY_THREAD_H
+#define TABLE_UVAR_BY_THREAD_H
+
+/**
+ @file storage/perfschema/table_uvar_by_thread.h
+ Table USER_VARIABLES_BY_THREAD (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+struct User_variable
+{
+public:
+ User_variable()
+ {}
+
+ User_variable(const User_variable& uv)
+ : m_name(uv.m_name), m_value(uv.m_value)
+ {}
+
+ ~User_variable()
+ {}
+
+ PFS_variable_name_row m_name;
+ PFS_user_variable_value_row m_value;
+};
+
+class User_variables
+{
+ typedef Dynamic_array<User_variable> User_variable_array;
+
+public:
+ User_variables()
+ : m_pfs(NULL), m_thread_internal_id(0), m_array(PSI_INSTRUMENT_MEM)
+ {
+ }
+
+ void reset()
+ {
+ m_pfs= NULL;
+ m_thread_internal_id= 0;
+ for (uint i=0; i < m_array.elements(); i++)
+ m_array.at(i).~User_variable();
+ m_array.clear();
+ }
+
+ void materialize(PFS_thread *pfs, THD *thd);
+
+ bool is_materialized(PFS_thread *pfs)
+ {
+ DBUG_ASSERT(pfs != NULL);
+ if (m_pfs != pfs)
+ return false;
+ if (m_thread_internal_id != pfs->m_thread_internal_id)
+ return false;
+ return true;
+ }
+
+ const User_variable *get(uint index) const
+ {
+ if (index >= m_array.elements())
+ return NULL;
+
+ const User_variable *p= & m_array.at(index);
+ return p;
+ }
+
+private:
+ PFS_thread *m_pfs;
+ ulonglong m_thread_internal_id;
+ User_variable_array m_array;
+};
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.USER_VARIABLES_BY_THREAD.
+*/
+struct row_uvar_by_thread
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column VARIABLE_NAME. */
+ const PFS_variable_name_row *m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ const PFS_user_variable_value_row *m_variable_value;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.USER_VARIABLES_BY_THREAD.
+ Index 1 on thread (0 based)
+ Index 2 on user variable (0 based)
+*/
+struct pos_uvar_by_thread
+: public PFS_double_index
+{
+ pos_uvar_by_thread()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline void next_thread(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/** Table PERFORMANCE_SCHEMA.USER_VARIABLES_BY_THREAD. */
+class table_uvar_by_thread : public PFS_engine_table
+{
+ typedef pos_uvar_by_thread pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_uvar_by_thread();
+
+public:
+ ~table_uvar_by_thread()
+ { m_THD_cache.reset(); }
+
+protected:
+ int materialize(PFS_thread *thread);
+ void make_row(PFS_thread *thread, const User_variable *uvar);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD user variables. */
+ User_variables m_THD_cache;
+ /** Current row. */
+ row_uvar_by_thread m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/table_variables_by_thread.cc b/storage/perfschema/table_variables_by_thread.cc
new file mode 100644
index 00000000000..b43c6cd88ef
--- /dev/null
+++ b/storage/perfschema/table_variables_by_thread.cc
@@ -0,0 +1,229 @@
+/* Copyright (c) 2015, 2018, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/**
+ @file storage/perfschema/table_variables_by_thread.cc
+ Table VARIABLES_BY_THREAD (implementation).
+*/
+
+#include "my_global.h"
+#include "table_variables_by_thread.h"
+#include "my_thread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "pfs_global.h"
+
+THR_LOCK table_variables_by_thread::m_table_lock;
+
+PFS_engine_table_share
+table_variables_by_thread::m_share=
+{
+ { C_STRING_WITH_LEN("variables_by_thread") },
+ &pfs_readonly_acl,
+ table_variables_by_thread::create,
+ NULL, /* write_row */
+ NULL, /* delete_all_rows */
+ table_variables_by_thread::get_row_count,
+ sizeof(pos_t),
+ &m_table_lock,
+ { C_STRING_WITH_LEN("CREATE TABLE user_variables_by_thread("
+ "THREAD_ID BIGINT unsigned not null,"
+ "VARIABLE_NAME VARCHAR(64) not null,"
+ "VARIABLE_VALUE VARCHAR(1024))") },
+ true /* perpetual */
+};
+
+PFS_engine_table*
+table_variables_by_thread::create(void)
+{
+ return new table_variables_by_thread();
+}
+
+ha_rows table_variables_by_thread::get_row_count(void)
+{
+ mysql_mutex_lock(&LOCK_plugin_delete);
+ mysql_prlock_rdlock(&LOCK_system_variables_hash);
+ ulong system_var_count= get_system_variable_hash_records();
+ mysql_prlock_unlock(&LOCK_system_variables_hash);
+ mysql_mutex_unlock(&LOCK_plugin_delete);
+ return (global_thread_container.get_row_count() * system_var_count);
+}
+
+table_variables_by_thread::table_variables_by_thread()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_sysvar_cache(true), m_row_exists(false), m_pos(), m_next_pos(), m_context(NULL)
+{}
+
+void table_variables_by_thread::reset_position(void)
+{
+ m_pos.reset();
+ m_next_pos.reset();
+}
+
+int table_variables_by_thread::rnd_init(bool scan)
+{
+ /*
+ Build array of SHOW_VARs from system variable hash prior to materializing
+ threads in rnd_next() or rnd_pos().
+ */
+ m_sysvar_cache.initialize_session();
+
+ /* Record the version of the system variable hash. */
+ ulonglong hash_version= m_sysvar_cache.get_sysvar_hash_version();
+
+ /*
+ The table context holds the current version of the system variable hash and
+ a record of which threads were materialized.
+ If scan == true, then allocate a new context from mem_root and store in TLS.
+ If scan == false, then restore from TLS.
+ */
+ m_context= (table_variables_by_thread_context *)current_thd->alloc(sizeof(table_variables_by_thread_context));
+ new(m_context) table_variables_by_thread_context(hash_version, !scan);
+ return 0;
+}
+
+int table_variables_by_thread::rnd_next(void)
+{
+ /* If system variable hash changes, exit with warning. */ // TODO: Issue warning
+ if (!m_context->versions_match())
+ return HA_ERR_END_OF_FILE;
+
+ bool has_more_thread= true;
+
+ for (m_pos.set_at(&m_next_pos);
+ has_more_thread;
+ m_pos.next_thread())
+ {
+ PFS_thread *pfs_thread= global_thread_container.get(m_pos.m_index_1, &has_more_thread);
+
+ /* Materialize all variables for the current thread. Assign a dedicated mem_root. */
+ if (m_sysvar_cache.materialize_session(pfs_thread, true) == 0)
+ {
+ /* Mark this thread as materialized. */
+ m_context->set_item(m_pos.m_index_1);
+
+ const System_variable *system_var= m_sysvar_cache.get(m_pos.m_index_2);
+ if (system_var != NULL)
+ {
+ make_row(pfs_thread, system_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ }
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_variables_by_thread::rnd_pos(const void *pos)
+{
+ /* If system variable hash changes, do nothing. */
+ if (!m_context->versions_match())
+ return HA_ERR_RECORD_DELETED;
+
+ set_position(pos);
+ DBUG_ASSERT(m_pos.m_index_1 < global_thread_container.get_row_count());
+
+ PFS_thread *pfs_thread= global_thread_container.get(m_pos.m_index_1);
+ /*
+ Only materialize threads that were previously materialized by rnd_next().
+ If a thread cannot be rematerialized, then do nothing.
+ Only materialize the requested system variable to avoid repeated
+ materialization of each thread, such as with ORDER BY variable_name.
+ */
+ if (m_context->is_item_set(m_pos.m_index_1) &&
+ /* Materialize only the requested variable. */
+ m_sysvar_cache.materialize_session(pfs_thread, m_pos.m_index_2) == 0)
+ {
+ /* Get the first (and only) element from the cache. */
+ const System_variable *system_var= m_sysvar_cache.get();
+ if (system_var != NULL)
+ {
+ make_row(pfs_thread, system_var);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+ }
+ return HA_ERR_RECORD_DELETED;
+}
+
+void table_variables_by_thread
+::make_row(PFS_thread *thread, const System_variable *system_var)
+{
+ pfs_optimistic_state lock;
+ m_row_exists= false;
+ if (system_var->is_null() || system_var->is_ignored())
+ return;
+
+ /* Protect this reader against a thread termination */
+ thread->m_lock.begin_optimistic_lock(&lock);
+
+ m_row.m_thread_internal_id= thread->m_thread_internal_id;
+ m_row.m_variable_name.make_row(system_var->m_name, system_var->m_name_length);
+ m_row.m_variable_value.make_row(system_var);
+
+ if (!thread->m_lock.end_optimistic_lock(&lock))
+ return;
+
+ m_row_exists= true;
+}
+
+int table_variables_by_thread
+::read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 1);
+ buf[0]= 0;
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ case 0: /* THREAD_ID */
+ set_field_ulonglong(f, m_row.m_thread_internal_id);
+ break;
+ case 1: /* VARIABLE_NAME */
+ set_field_varchar_utf8(f, m_row.m_variable_name.m_str, m_row.m_variable_name.m_length);
+ break;
+ case 2: /* VARIABLE_VALUE */
+ m_row.m_variable_value.set_field(f);
+ break;
+ default:
+ DBUG_ASSERT(false);
+ }
+ }
+ }
+
+ return 0;
+}
+
diff --git a/storage/perfschema/table_variables_by_thread.h b/storage/perfschema/table_variables_by_thread.h
new file mode 100644
index 00000000000..d628707f9b4
--- /dev/null
+++ b/storage/perfschema/table_variables_by_thread.h
@@ -0,0 +1,151 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef TABLE_VARIABLES_BY_THREAD_H
+#define TABLE_VARIABLES_BY_THREAD_H
+
+/**
+ @file storage/perfschema/table_variables_by_thread.h
+ Table VARIABLES_BY_THREAD (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+#include "pfs_instr_class.h"
+#include "pfs_instr.h"
+#include "table_helper.h"
+#include "pfs_variable.h"
+#include "pfs_buffer_container.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.VARIABLES_BY_THREAD.
+*/
+struct row_variables_by_thread
+{
+ /** Column THREAD_ID. */
+ ulonglong m_thread_internal_id;
+ /** Column VARIABLE_NAME. */
+ PFS_variable_name_row m_variable_name;
+ /** Column VARIABLE_VALUE. */
+ PFS_variable_value_row m_variable_value;
+};
+
+/**
+ Position of a cursor on
+ PERFORMANCE_SCHEMA.VARIABLES_BY_THREAD.
+ Index 1 on thread (0 based)
+ Index 2 on system variable (0 based)
+*/
+struct pos_variables_by_thread
+: public PFS_double_index
+{
+ pos_variables_by_thread()
+ : PFS_double_index(0, 0)
+ {}
+
+ inline void reset(void)
+ {
+ m_index_1= 0;
+ m_index_2= 0;
+ }
+
+ inline bool has_more_thread(void)
+ { return (m_index_1 < global_thread_container.get_row_count()); }
+
+ inline void next_thread(void)
+ {
+ m_index_1++;
+ m_index_2= 0;
+ }
+};
+
+/**
+ Store and retrieve table state information during queries that reinstantiate
+ the table object.
+*/
+class table_variables_by_thread_context : public PFS_table_context
+{
+public:
+ table_variables_by_thread_context(ulonglong hash_version, bool restore) :
+ PFS_table_context(hash_version, global_thread_container.get_row_count(), restore, THR_PFS_VBT) { }
+};
+
+/** Table PERFORMANCE_SCHEMA.VARIABLES_BY_THREAD. */
+class table_variables_by_thread : public PFS_engine_table
+{
+ typedef pos_variables_by_thread pos_t;
+
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static ha_rows get_row_count();
+
+ virtual int rnd_init(bool scan);
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+ table_variables_by_thread();
+
+public:
+ ~table_variables_by_thread()
+ {}
+
+protected:
+ int materialize(PFS_thread *thread);
+ void make_row(PFS_thread *thread, const System_variable *system_var);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current THD variables. */
+ PFS_system_variable_cache m_sysvar_cache;
+ /** Current row. */
+ row_variables_by_thread m_row;
+ /** True if the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ pos_t m_pos;
+ /** Next position. */
+ pos_t m_next_pos;
+
+ /** Table context with system variable hash version and map of materialized threads. */
+ table_variables_by_thread_context *m_context;
+};
+
+/** @} */
+#endif
diff --git a/storage/perfschema/unittest/CMakeLists.txt b/storage/perfschema/unittest/CMakeLists.txt
index 7b8c906a4e6..1bba2673a1a 100644
--- a/storage/perfschema/unittest/CMakeLists.txt
+++ b/storage/perfschema/unittest/CMakeLists.txt
@@ -35,5 +35,6 @@ ADD_CONVENIENCE_LIBRARY(pfs_server_stubs pfs_server_stubs.cc)
ADD_DEPENDENCIES(pfs_server_stubs GenError)
MY_ADD_TESTS(pfs_instr_class pfs_instr_class-oom pfs_instr pfs_instr-oom
- pfs_account-oom pfs_host-oom pfs_timer pfs_user-oom pfs pfs_misc
+ pfs_account-oom pfs_host-oom pfs_timer pfs_user-oom pfs_noop pfs
+ pfs_misc
EXT "cc" LINK_LIBRARIES perfschema mysys pfs_server_stubs)
diff --git a/storage/perfschema/unittest/pfs-t.cc b/storage/perfschema/unittest/pfs-t.cc
index f5f38367691..43d9d8d233d 100644
--- a/storage/perfschema/unittest/pfs-t.cc
+++ b/storage/perfschema/unittest/pfs-t.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2008, 2017, 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, version 2.0,
@@ -21,11 +21,12 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_server.h>
#include <pfs_instr_class.h>
#include <pfs_instr.h>
#include <pfs_global.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
#include <string.h>
@@ -33,6 +34,7 @@
#include "stub_print_error.h"
#include "stub_pfs_defaults.h"
+#include "stub_global_status_var.h"
void unload_performance_schema();
@@ -48,30 +50,30 @@ void setup_thread(PSI_thread *t, bool enabled)
PFS_file* lookup_file_by_name(const char* name)
{
- uint i;
PFS_file *pfs;
size_t len= strlen(name);
size_t dirlen;
const char *filename;
- size_t filename_length;;
+ size_t filename_length;
- for (i= 0; i < file_max; i++)
+ PFS_file_iterator it= global_file_container.iterate();
+ pfs= it.scan_next();
+
+ while (pfs != NULL)
{
- pfs= & file_array[i];
- if (pfs->m_lock.is_populated())
- {
- /*
- When a file "foo" is instrumented, the name is normalized
- to "/path/to/current/directory/foo", so we remove the
- directory name here to find it back.
- */
- dirlen= dirname_length(pfs->m_filename);
- filename= pfs->m_filename + dirlen;
- filename_length= pfs->m_filename_length - dirlen;
- if ((len == filename_length) &&
- (strncmp(name, filename, filename_length) == 0))
- return pfs;
- }
+ /*
+ When a file "foo" is instrumented, the name is normalized
+ to "/path/to/current/directory/foo", so we remove the
+ directory name here to find it back.
+ */
+ dirlen= dirname_length(pfs->m_filename);
+ filename= pfs->m_filename + dirlen;
+ filename_length= pfs->m_filename_length - dirlen;
+ if ((len == filename_length) &&
+ (strncmp(name, filename, filename_length) == 0))
+ return pfs;
+
+ pfs= it.scan_next();
}
return NULL;
@@ -118,10 +120,24 @@ void test_bootstrap()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
+ param.m_program_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 0;
+ param.m_metadata_lock_sizing= 0;
param.m_max_digest_length= 0;
+ param.m_max_sql_text_length= 0;
+
+ param.m_hints.m_table_definition_cache = 100;
+ param.m_hints.m_table_open_cache = 100;
+ param.m_hints.m_max_connections = 100;
+ param.m_hints.m_open_files_limit = 100;
+ param.m_hints.m_max_prepared_stmt_count= 100;
+ pre_initialize_performance_schema();
boot= initialize_performance_schema(& param);
ok(boot != NULL, "boot");
ok(boot->get_interface != NULL, "boot->get_interface");
@@ -143,7 +159,7 @@ void test_bootstrap()
*/
PSI * load_perfschema()
{
- void *psi;
+ PSI *psi;
PSI_bootstrap *boot;
PFS_global_param param;
@@ -177,13 +193,27 @@ PSI * load_perfschema()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
+ param.m_program_sizing= 0;
+ param.m_statement_stack_sizing= 10;
+ param.m_memory_class_sizing= 10;
+ param.m_metadata_lock_sizing= 10;
param.m_max_digest_length= 0;
+ param.m_max_sql_text_length= 1000;
+
+ param.m_hints.m_table_definition_cache = 100;
+ param.m_hints.m_table_open_cache = 100;
+ param.m_hints.m_max_connections = 100;
+ param.m_hints.m_open_files_limit = 100;
+ param.m_hints.m_max_prepared_stmt_count= 100;
+ pre_initialize_performance_schema();
/* test_bootstrap() covered this, assuming it just works */
boot= initialize_performance_schema(& param);
- psi= boot->get_interface(PSI_VERSION_1);
+ psi= (PSI *)boot->get_interface(PSI_VERSION_1);
/* Reset every consumer to a known state */
flag_global_instrumentation= true;
@@ -335,6 +365,20 @@ void test_bad_registration()
ok(dummy_rwlock_key == 0, "zero key");
dummy_rwlock_key= 9999;
+ PSI_rwlock_info bad_rwlock_2_sx[]=
+ {
+ { & dummy_rwlock_key,
+ /* 109 chars name */
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "123456789",
+ PSI_RWLOCK_FLAG_SX}
+ };
+
+ psi->register_rwlock("Y", bad_rwlock_2_sx, 1);
+ ok(dummy_rwlock_key == 0, "zero key SX");
+
+ dummy_rwlock_key= 9999;
PSI_rwlock_info bad_rwlock_3[]=
{
{ & dummy_rwlock_key,
@@ -351,6 +395,23 @@ void test_bad_registration()
psi->register_rwlock("X", bad_rwlock_3, 1);
ok(dummy_rwlock_key == 2, "assigned key");
+ dummy_rwlock_key= 9999;
+ PSI_rwlock_info bad_rwlock_3_sx[]=
+ {
+ { & dummy_rwlock_key,
+ /* 108 chars name */
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "12345678",
+ PSI_RWLOCK_FLAG_SX}
+ };
+
+ psi->register_rwlock("YY", bad_rwlock_3_sx, 1);
+ ok(dummy_rwlock_key == 0, "zero key SX");
+
+ psi->register_rwlock("Y", bad_rwlock_3_sx, 1);
+ ok(dummy_rwlock_key == 3, "assigned key SX");
+
/*
Test that length('wait/synch/cond/' (16) + category + '/' (1)) < 32
--> category can be up to 14 chars for a cond.
@@ -698,23 +759,27 @@ void test_init_disabled()
socket_class_A= find_socket_class(socket_key_A);
ok(socket_class_A != NULL, "socket class A");
- /* Pretend thread T-1 is running, and disabled, with thread_instrumentation */
+ /*
+ Pretend thread T-1 is running, and disabled, with thread_instrumentation.
+ Disabled instruments are still created so they can be enabled later.
+ */
+
/* ------------------------------------------------------------------------ */
psi->set_thread(thread_1);
setup_thread(thread_1, false);
- /* disabled M-A + disabled T-1: no instrumentation */
+ /* disabled M-A + disabled T-1: instrumentation */
mutex_class_A->m_enabled= false;
mutex_A1= psi->init_mutex(mutex_key_A, NULL);
- ok(mutex_A1 == NULL, "mutex_A1 not instrumented");
+ ok(mutex_A1 != NULL, "mutex_A1 disabled, instrumented");
/* enabled M-A + disabled T-1: instrumentation (for later) */
mutex_class_A->m_enabled= true;
mutex_A1= psi->init_mutex(mutex_key_A, NULL);
- ok(mutex_A1 != NULL, "mutex_A1 instrumented");
+ ok(mutex_A1 != NULL, "mutex_A1 enabled, instrumented");
/* broken key + disabled T-1: no instrumentation */
@@ -728,13 +793,13 @@ void test_init_disabled()
rwlock_class_A->m_enabled= false;
rwlock_A1= psi->init_rwlock(rwlock_key_A, NULL);
- ok(rwlock_A1 == NULL, "rwlock_A1 not instrumented");
+ ok(rwlock_A1 != NULL, "rwlock_A1 disabled, instrumented");
/* enabled RW-A + disabled T-1: instrumentation (for later) */
rwlock_class_A->m_enabled= true;
rwlock_A1= psi->init_rwlock(rwlock_key_A, NULL);
- ok(rwlock_A1 != NULL, "rwlock_A1 instrumented");
+ ok(rwlock_A1 != NULL, "rwlock_A1 enabled, instrumented");
/* broken key + disabled T-1: no instrumentation */
@@ -748,13 +813,13 @@ void test_init_disabled()
cond_class_A->m_enabled= false;
cond_A1= psi->init_cond(cond_key_A, NULL);
- ok(cond_A1 == NULL, "cond_A1 not instrumented");
+ ok(cond_A1 != NULL, "cond_A1 disabled, instrumented");
/* enabled C-A + disabled T-1: instrumentation (for later) */
cond_class_A->m_enabled= true;
cond_A1= psi->init_cond(cond_key_A, NULL);
- ok(cond_A1 != NULL, "cond_A1 instrumented");
+ ok(cond_A1 != NULL, "cond_A1 enabled, instrumented");
/* broken key + disabled T-1: no instrumentation */
@@ -783,22 +848,22 @@ void test_init_disabled()
file_class_A->m_enabled= true;
psi->create_file(0, "foo", (File) 12);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
psi->create_file(99, "foo", (File) 12);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
/* disabled S-A + disabled T-1: no instrumentation */
socket_class_A->m_enabled= false;
socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0);
- ok(socket_A1 == NULL, "socket_A1 not instrumented");
+ ok(socket_A1 != NULL, "socket_A1 disabled, instrumented");
/* enabled S-A + disabled T-1: instrumentation (for later) */
socket_class_A->m_enabled= true;
socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0);
- ok(socket_A1 != NULL, "socket_A1 instrumented");
+ ok(socket_A1 != NULL, "socket_A1 enabled, instrumented");
/* broken key + disabled T-1: no instrumentation */
@@ -807,7 +872,7 @@ void test_init_disabled()
ok(socket_A1 == NULL, "socket key 0 not instrumented");
socket_A1= psi->init_socket(99, NULL, NULL, 0);
ok(socket_A1 == NULL, "broken socket key not instrumented");
-
+
/* Pretend thread T-1 is enabled */
/* ----------------------------- */
@@ -817,85 +882,85 @@ void test_init_disabled()
mutex_class_A->m_enabled= false;
mutex_A1= psi->init_mutex(mutex_key_A, NULL);
- ok(mutex_A1 == NULL, "not instrumented");
+ ok(mutex_A1 != NULL, "mutex_A1 disabled, instrumented");
/* enabled M-A + enabled T-1: instrumentation */
mutex_class_A->m_enabled= true;
mutex_A1= psi->init_mutex(mutex_key_A, NULL);
- ok(mutex_A1 != NULL, "instrumented");
+ ok(mutex_A1 != NULL, "mutex_A1 enabled, instrumented");
psi->destroy_mutex(mutex_A1);
/* broken key + enabled T-1: no instrumentation */
mutex_class_A->m_enabled= true;
mutex_A1= psi->init_mutex(0, NULL);
- ok(mutex_A1 == NULL, "not instrumented");
+ ok(mutex_A1 == NULL, "mutex_A1 not instrumented");
mutex_A1= psi->init_mutex(99, NULL);
- ok(mutex_A1 == NULL, "not instrumented");
+ ok(mutex_A1 == NULL, "mutex_A1 not instrumented");
/* disabled RW-A + enabled T-1: no instrumentation */
rwlock_class_A->m_enabled= false;
rwlock_A1= psi->init_rwlock(rwlock_key_A, NULL);
- ok(rwlock_A1 == NULL, "not instrumented");
+ ok(rwlock_A1 != NULL, "rwlock_A1 disabled, instrumented");
/* enabled RW-A + enabled T-1: instrumentation */
rwlock_class_A->m_enabled= true;
rwlock_A1= psi->init_rwlock(rwlock_key_A, NULL);
- ok(rwlock_A1 != NULL, "instrumented");
+ ok(rwlock_A1 != NULL, "rwlock_A1 enabled, instrumented");
psi->destroy_rwlock(rwlock_A1);
/* broken key + enabled T-1: no instrumentation */
rwlock_class_A->m_enabled= true;
rwlock_A1= psi->init_rwlock(0, NULL);
- ok(rwlock_A1 == NULL, "not instrumented");
+ ok(rwlock_A1 == NULL, "rwlock_A1 not instrumented");
rwlock_A1= psi->init_rwlock(99, NULL);
- ok(rwlock_A1 == NULL, "not instrumented");
+ ok(rwlock_A1 == NULL, "rwlock_A1 not instrumented");
/* disabled C-A + enabled T-1: no instrumentation */
cond_class_A->m_enabled= false;
cond_A1= psi->init_cond(cond_key_A, NULL);
- ok(cond_A1 == NULL, "not instrumented");
+ ok(cond_A1 != NULL, "cond_A1 disabled, instrumented");
/* enabled C-A + enabled T-1: instrumentation */
cond_class_A->m_enabled= true;
cond_A1= psi->init_cond(cond_key_A, NULL);
- ok(cond_A1 != NULL, "instrumented");
+ ok(cond_A1 != NULL, "cond_A1 enabled, instrumented");
psi->destroy_cond(cond_A1);
/* broken key + enabled T-1: no instrumentation */
cond_class_A->m_enabled= true;
cond_A1= psi->init_cond(0, NULL);
- ok(cond_A1 == NULL, "not instrumented");
+ ok(cond_A1 == NULL, "cond_A1 not instrumented");
cond_A1= psi->init_cond(99, NULL);
- ok(cond_A1 == NULL, "not instrumented");
+ ok(cond_A1 == NULL, "cond_A1 not instrumented");
/* disabled F-A + enabled T-1: no instrumentation */
file_class_A->m_enabled= false;
psi->create_file(file_key_A, "foo", (File) 12);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
/* enabled F-A + open failed + enabled T-1: no instrumentation */
file_class_A->m_enabled= true;
psi->create_file(file_key_A, "foo", (File) -1);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
/* enabled F-A + out-of-descriptors + enabled T-1: no instrumentation */
file_class_A->m_enabled= true;
psi->create_file(file_key_A, "foo", (File) 65000);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
ok(file_handle_lost == 1, "lost a file handle");
file_handle_lost= 0;
@@ -920,22 +985,22 @@ void test_init_disabled()
/* disabled S-A + enabled T-1: no instrumentation */
socket_class_A->m_enabled= false;
- ok(socket_A1 == NULL, "not instrumented");
+ ok(socket_A1 == NULL, "socket_A1 not instrumented");
/* enabled S-A + enabled T-1: instrumentation */
socket_class_A->m_enabled= true;
socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0);
- ok(socket_A1 != NULL, "instrumented");
+ ok(socket_A1 != NULL, "socket_A1 instrumented");
psi->destroy_socket(socket_A1);
/* broken key + enabled T-1: no instrumentation */
socket_class_A->m_enabled= true;
socket_A1= psi->init_socket(0, NULL, NULL, 0);
- ok(socket_A1 == NULL, "not instrumented");
+ ok(socket_A1 == NULL, "socket_A1 not instrumented");
socket_A1= psi->init_socket(99, NULL, NULL, 0);
- ok(socket_A1 == NULL, "not instrumented");
+ ok(socket_A1 == NULL, "socket_A1 not instrumented");
/* Pretend the running thread is not instrumented */
/* ---------------------------------------------- */
@@ -946,13 +1011,13 @@ void test_init_disabled()
mutex_class_A->m_enabled= false;
mutex_A1= psi->init_mutex(mutex_key_A, NULL);
- ok(mutex_A1 == NULL, "mutex_A1 not instrumented");
+ ok(mutex_A1 != NULL, "mutex_A1 disabled, instrumented");
/* enabled M-A + unknown thread: instrumentation (for later) */
mutex_class_A->m_enabled= true;
mutex_A1= psi->init_mutex(mutex_key_A, NULL);
- ok(mutex_A1 != NULL, "mutex_A1 instrumented");
+ ok(mutex_A1 != NULL, "mutex_A1 enabled, instrumented");
/* broken key + unknown thread: no instrumentation */
@@ -966,13 +1031,13 @@ void test_init_disabled()
rwlock_class_A->m_enabled= false;
rwlock_A1= psi->init_rwlock(rwlock_key_A, NULL);
- ok(rwlock_A1 == NULL, "rwlock_A1 not instrumented");
+ ok(rwlock_A1 != NULL, "rwlock_A1 disabled, instrumented");
/* enabled RW-A + unknown thread: instrumentation (for later) */
rwlock_class_A->m_enabled= true;
rwlock_A1= psi->init_rwlock(rwlock_key_A, NULL);
- ok(rwlock_A1 != NULL, "rwlock_A1 instrumented");
+ ok(rwlock_A1 != NULL, "rwlock_A1 enabled, instrumented");
/* broken key + unknown thread: no instrumentation */
@@ -986,13 +1051,13 @@ void test_init_disabled()
cond_class_A->m_enabled= false;
cond_A1= psi->init_cond(cond_key_A, NULL);
- ok(cond_A1 == NULL, "cond_A1 not instrumented");
+ ok(cond_A1 != NULL, "cond_A1 disabled, instrumented");
/* enabled C-A + unknown thread: instrumentation (for later) */
cond_class_A->m_enabled= true;
cond_A1= psi->init_cond(cond_key_A, NULL);
- ok(cond_A1 != NULL, "cond_A1 instrumented");
+ ok(cond_A1 != NULL, "cond_A1 enabled, instrumented");
/* broken key + unknown thread: no instrumentation */
@@ -1007,14 +1072,14 @@ void test_init_disabled()
file_class_A->m_enabled= false;
psi->create_file(file_key_A, "foo", (File) 12);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
/* enabled F-A + unknown thread: no instrumentation */
file_class_A->m_enabled= true;
psi->create_file(file_key_A, "foo", (File) 12);
file_A1= lookup_file_by_name("foo");
- ok(file_A1 == NULL, "not instrumented");
+ ok(file_A1 == NULL, "file_A1 not instrumented");
/* broken key + unknown thread: no instrumentation */
@@ -1030,13 +1095,13 @@ void test_init_disabled()
socket_class_A->m_enabled= false;
socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0);
- ok(socket_A1 == NULL, "socket_A1 not instrumented");
+ ok(socket_A1 != NULL, "socket_A1 disabled, instrumented");
/* enabled S-A + unknown thread: instrumentation (for later) */
socket_class_A->m_enabled= true;
socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0);
- ok(socket_A1 != NULL, "socket_A1 instrumented");
+ ok(socket_A1 != NULL, "socket_A1 enabled, instrumented");
/* broken key + unknown thread: no instrumentation */
@@ -1521,7 +1586,7 @@ void test_event_name_index()
memset(& param, 0xFF, sizeof(param));
param.m_enabled= true;
- /* NOTE: Need to add 3 to each index: table io, table lock, idle */
+ /* NOTE: Need to add 4 to each index: table io, table lock, idle, metadata lock */
/* Per mutex info waits should be at [0..9] */
param.m_mutex_class_sizing= 10;
@@ -1546,9 +1611,16 @@ void test_event_name_index()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
+ param.m_program_sizing= 0;
+ param.m_statement_stack_sizing= 10;
+ param.m_memory_class_sizing= 12;
+ param.m_metadata_lock_sizing= 10;
param.m_max_digest_length= 0;
+ param.m_max_sql_text_length= 1000;
param.m_mutex_sizing= 0;
param.m_rwlock_sizing= 0;
@@ -1563,6 +1635,13 @@ void test_event_name_index()
param.m_setup_actor_sizing= 0;
param.m_setup_object_sizing= 0;
+ param.m_hints.m_table_definition_cache = 100;
+ param.m_hints.m_table_open_cache = 100;
+ param.m_hints.m_max_connections = 100;
+ param.m_hints.m_open_files_limit = 100;
+ param.m_hints.m_max_prepared_stmt_count= 100;
+
+ pre_initialize_performance_schema();
boot= initialize_performance_schema(& param);
ok(boot != NULL, "bootstrap");
psi= (PSI*) boot->get_interface(PSI_VERSION_1);
@@ -1580,10 +1659,10 @@ void test_event_name_index()
psi->register_mutex("X", dummy_mutexes, 2);
mutex_class= find_mutex_class(dummy_mutex_key_1);
ok(mutex_class != NULL, "mutex class 1");
- ok(mutex_class->m_event_name_index == 3, "index 3");
+ ok(mutex_class->m_event_name_index == 4, "index 4");
mutex_class= find_mutex_class(dummy_mutex_key_2);
ok(mutex_class != NULL, "mutex class 2");
- ok(mutex_class->m_event_name_index == 4, "index 4");
+ ok(mutex_class->m_event_name_index == 5, "index 5");
PFS_rwlock_class *rwlock_class;
PSI_rwlock_key dummy_rwlock_key_1;
@@ -1597,10 +1676,10 @@ void test_event_name_index()
psi->register_rwlock("X", dummy_rwlocks, 2);
rwlock_class= find_rwlock_class(dummy_rwlock_key_1);
ok(rwlock_class != NULL, "rwlock class 1");
- ok(rwlock_class->m_event_name_index == 13, "index 13");
+ ok(rwlock_class->m_event_name_index == 14, "index 14");
rwlock_class= find_rwlock_class(dummy_rwlock_key_2);
ok(rwlock_class != NULL, "rwlock class 2");
- ok(rwlock_class->m_event_name_index == 14, "index 14");
+ ok(rwlock_class->m_event_name_index == 15, "index 15");
PFS_cond_class *cond_class;
PSI_cond_key dummy_cond_key_1;
@@ -1614,10 +1693,10 @@ void test_event_name_index()
psi->register_cond("X", dummy_conds, 2);
cond_class= find_cond_class(dummy_cond_key_1);
ok(cond_class != NULL, "cond class 1");
- ok(cond_class->m_event_name_index == 33, "index 33");
+ ok(cond_class->m_event_name_index == 34, "index 34");
cond_class= find_cond_class(dummy_cond_key_2);
ok(cond_class != NULL, "cond class 2");
- ok(cond_class->m_event_name_index == 34, "index 34");
+ ok(cond_class->m_event_name_index == 35, "index 35");
PFS_file_class *file_class;
PSI_file_key dummy_file_key_1;
@@ -1631,10 +1710,10 @@ void test_event_name_index()
psi->register_file("X", dummy_files, 2);
file_class= find_file_class(dummy_file_key_1);
ok(file_class != NULL, "file class 1");
- ok(file_class->m_event_name_index == 73, "index 73");
+ ok(file_class->m_event_name_index == 74, "index 74");
file_class= find_file_class(dummy_file_key_2);
ok(file_class != NULL, "file class 2");
- ok(file_class->m_event_name_index == 74, "index 74");
+ ok(file_class->m_event_name_index == 75, "index 75");
PFS_socket_class *socket_class;
PSI_socket_key dummy_socket_key_1;
@@ -1648,14 +1727,162 @@ void test_event_name_index()
psi->register_socket("X", dummy_sockets, 2);
socket_class= find_socket_class(dummy_socket_key_1);
ok(socket_class != NULL, "socket class 1");
- ok(socket_class->m_event_name_index == 153, "index 153");
+ ok(socket_class->m_event_name_index == 154, "index 154");
socket_class= find_socket_class(dummy_socket_key_2);
ok(socket_class != NULL, "socket class 2");
- ok(socket_class->m_event_name_index == 154, "index 154");
+ ok(socket_class->m_event_name_index == 155, "index 155");
ok(global_table_io_class.m_event_name_index == 0, "index 0");
ok(global_table_lock_class.m_event_name_index == 1, "index 1");
- ok(wait_class_max= 313, "313 event names"); // 3 global classes
+ ok(wait_class_max= 314, "314 event names"); // 4 global classes
+
+ shutdown_performance_schema();
+}
+
+void test_memory_instruments()
+{
+ PSI *psi;
+ PSI_thread *owner;
+
+ diag("test_memory_instruments");
+
+ psi= load_perfschema();
+
+ PSI_memory_key memory_key_A;
+ PSI_memory_info all_memory[]=
+ {
+ { & memory_key_A, "M-A", 0}
+ };
+
+ PSI_thread_key thread_key_1;
+ PSI_thread_info all_thread[]=
+ {
+ { & thread_key_1, "T-1", 0}
+ };
+
+ psi->register_memory("test", all_memory, 1);
+ psi->register_thread("test", all_thread, 1);
+
+ PFS_memory_class *memory_class_A;
+ PSI_thread *thread_1;
+ PSI_memory_key key;
+
+ /* Preparation */
+
+ thread_1= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread_1 != NULL, "T-1");
+ psi->set_thread_id(thread_1, 1);
+
+ memory_class_A= find_memory_class(memory_key_A);
+ ok(memory_class_A != NULL, "memory info A");
+
+ /* Pretend thread T-1 is running, and enabled */
+ /* ------------------------------------------ */
+
+ psi->set_thread(thread_1);
+ setup_thread(thread_1, true);
+
+ /* Enable all instruments */
+
+ memory_class_A->m_enabled= true;
+
+ /* for coverage, need to print stats collected. */
+
+ key= psi->memory_alloc(memory_key_A, 100, & owner);
+ ok(key == memory_key_A, "alloc memory info A");
+ key= psi->memory_realloc(memory_key_A, 100, 200, & owner);
+ ok(key == memory_key_A, "realloc memory info A");
+ key= psi->memory_realloc(memory_key_A, 200, 300, & owner);
+ ok(key == memory_key_A, "realloc up memory info A");
+ key= psi->memory_realloc(memory_key_A, 300, 50, & owner);
+ ok(key == memory_key_A, "realloc down memory info A");
+ psi->memory_free(memory_key_A, 50, owner);
+
+ /* Use global instrumentation only */
+ /* ------------------------------- */
+
+ flag_thread_instrumentation= false;
+
+ key= psi->memory_alloc(memory_key_A, 100, & owner);
+ ok(key == memory_key_A, "alloc memory info A");
+ key= psi->memory_realloc(memory_key_A, 100, 200, & owner);
+ ok(key == memory_key_A, "realloc memory info A");
+ key= psi->memory_realloc(memory_key_A, 200, 300, & owner);
+ ok(key == memory_key_A, "realloc up memory info A");
+ key= psi->memory_realloc(memory_key_A, 300, 50, & owner);
+ ok(key == memory_key_A, "realloc down memory info A");
+ psi->memory_free(memory_key_A, 50, owner);
+
+ /* Garbage, for robustness */
+ /* ----------------------- */
+
+ key= psi->memory_alloc(9999, 100, & owner);
+ ok(key == PSI_NOT_INSTRUMENTED, "alloc with unknown key");
+ key= psi->memory_realloc(PSI_NOT_INSTRUMENTED, 100, 200, & owner);
+ ok(key == PSI_NOT_INSTRUMENTED, "realloc with unknown key");
+ psi->memory_free(PSI_NOT_INSTRUMENTED, 200, owner);
+
+ shutdown_performance_schema();
+}
+
+void test_leaks()
+{
+ PSI_bootstrap *boot;
+ PFS_global_param param;
+
+ /* Allocate everything, to make sure cleanup does not forget anything. */
+
+ memset(& param, 0xFF, sizeof(param));
+ param.m_enabled= true;
+ param.m_mutex_class_sizing= 10;
+ param.m_rwlock_class_sizing= 10;
+ param.m_cond_class_sizing= 10;
+ param.m_thread_class_sizing= 10;
+ param.m_table_share_sizing= 10;
+ param.m_file_class_sizing= 10;
+ param.m_socket_class_sizing= 10;
+ param.m_mutex_sizing= 1000;
+ param.m_rwlock_sizing= 1000;
+ param.m_cond_sizing= 1000;
+ param.m_thread_sizing= 1000;
+ param.m_table_sizing= 1000;
+ param.m_file_sizing= 1000;
+ param.m_file_handle_sizing= 1000;
+ param.m_socket_sizing= 1000;
+ param.m_events_waits_history_sizing= 10;
+ param.m_events_waits_history_long_sizing= 1000;
+ param.m_setup_actor_sizing= 1000;
+ param.m_setup_object_sizing= 1000;
+ param.m_host_sizing= 1000;
+ param.m_user_sizing= 1000;
+ param.m_account_sizing= 1000;
+ param.m_stage_class_sizing= 10;
+ param.m_events_stages_history_sizing= 10;
+ param.m_events_stages_history_long_sizing= 1000;
+ param.m_statement_class_sizing= 10;
+ param.m_events_statements_history_sizing= 10;
+ param.m_events_statements_history_long_sizing= 1000;
+ param.m_session_connect_attrs_sizing= 1000;
+ param.m_memory_class_sizing= 10;
+ param.m_metadata_lock_sizing= 1000;
+ param.m_digest_sizing= 1000;
+ param.m_program_sizing= 1000;
+ param.m_statement_stack_sizing= 10;
+ param.m_max_digest_length= 1000;
+ param.m_max_sql_text_length= 1000;
+
+ param.m_hints.m_table_definition_cache = 100;
+ param.m_hints.m_table_open_cache = 100;
+ param.m_hints.m_max_connections = 100;
+ param.m_hints.m_open_files_limit = 100;
+ param.m_hints.m_max_prepared_stmt_count= 100;
+
+ pre_initialize_performance_schema();
+ boot= initialize_performance_schema(& param);
+ ok(boot != NULL, "bootstrap");
+ shutdown_performance_schema();
+
+ /* Leaks will be reported with valgrind */
}
void do_all_tests()
@@ -1668,11 +1895,13 @@ void do_all_tests()
test_locker_disabled();
test_file_instrumentation_leak();
test_event_name_index();
+ test_memory_instruments();
+ test_leaks();
}
int main(int argc, char **argv)
{
- plan(216);
+ plan(232);
MY_INIT(argv[0]);
do_all_tests();
my_end(0);
diff --git a/storage/perfschema/unittest/pfs_account-oom-t.cc b/storage/perfschema/unittest/pfs_account-oom-t.cc
index 1ca66445e0c..185b0a6594c 100644
--- a/storage/perfschema/unittest/pfs_account-oom-t.cc
+++ b/storage/perfschema/unittest/pfs_account-oom-t.cc
@@ -21,87 +21,142 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_instr.h>
#include <pfs_stat.h>
#include <pfs_global.h>
+#include <pfs_defaults.h>
+#include <pfs_user.h>
+#include <pfs_host.h>
#include <pfs_account.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
#include "stub_pfs_global.h"
+#include "stub_global_status_var.h"
#include <string.h> /* memset */
-void test_oom()
-{
- int rc;
- PFS_global_param param;
-
- memset(& param, 0xFF, sizeof(param));
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 10;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 1000;
- param.m_stage_class_sizing= 50;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 50;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- /* Setup */
+PFS_thread pfs_thread;
+void initialize_performance_schema_helper(PFS_global_param *param)
+{
stub_alloc_always_fails= false;
stub_alloc_fails_after_count= 1000;
- init_event_name_sizing(& param);
- rc= init_stage_class(param.m_stage_class_sizing);
- ok(rc == 0, "init stage class");
- rc= init_statement_class(param.m_statement_class_sizing);
- ok(rc == 0, "init statement class");
+ param->m_enabled= true;
+ param->m_thread_class_sizing= 10;
+ param->m_thread_sizing= 1000;
+ param->m_account_sizing= 1000;
+ transaction_class_max= 0;
+
+ pfs_thread.m_account_hash_pins= NULL;
+
+ init_event_name_sizing(param);
+ init_sync_class(param->m_mutex_class_sizing, param->m_rwlock_class_sizing, param->m_cond_class_sizing);
+ init_thread_class(param->m_thread_class_sizing);
+ init_table_share(param->m_table_share_sizing);
+ init_table_share_lock_stat(param->m_table_lock_stat_sizing);
+ init_table_share_index_stat(param->m_index_stat_sizing);
+ init_file_class(param->m_file_class_sizing);
+ init_stage_class(param->m_stage_class_sizing);
+ init_statement_class(param->m_statement_class_sizing);
+ init_socket_class(param->m_socket_class_sizing);
+ init_memory_class(param->m_memory_class_sizing);
+ init_instruments(param);
+ init_events_waits_history_long(param->m_events_waits_history_long_sizing);
+ init_events_stages_history_long(param->m_events_stages_history_long_sizing);
+ init_events_statements_history_long(param->m_events_statements_history_long_sizing);
+ init_events_transactions_history_long(param->m_events_transactions_history_long_sizing);
+ init_file_hash(param);
+ init_table_share_hash(param);
+ init_setup_actor(param);
+ init_setup_actor_hash(param);
+ init_setup_object(param);
+ init_setup_object_hash(param);
+ init_host(param);
+ init_host_hash(param);
+ init_user(param);
+ init_user_hash(param);
+ init_account(param);
+ init_account_hash(param);
+ init_digest(param);
+ init_digest_hash(param);
+ init_program(param);
+ init_program_hash(param);
+ init_prepared_stmt(param);
+ pfs_initialized= true;
+}
+
+void test_oom()
+{
+ PFS_global_param param;
+ PFS_account *pfs_account;
+ const char *username= "username";
+ const char *hostname= "hostname";
- /* Tests */
+ uint user_len= (uint)strlen(username);
+ uint host_len= (uint)strlen(hostname);
+ /* Account. */
+ memset(&param, 0, sizeof(param));
+ initialize_performance_schema_helper(&param);
stub_alloc_fails_after_count= 1;
- rc= init_account(& param);
- ok(rc == 1, "oom (account)");
- cleanup_account();
-
+ pfs_account= find_or_create_account(&pfs_thread, username, user_len, hostname, host_len);
+ ok(pfs_account == NULL, "oom (account)");
+ ok(global_account_container.m_lost == 1, "lost (account)");
+ shutdown_performance_schema();
+
+ /* Account waits. */
+ memset(&param, 0, sizeof(param));
+ param.m_mutex_class_sizing= 10;
+ initialize_performance_schema_helper(&param);
stub_alloc_fails_after_count= 2;
- rc= init_account(& param);
- ok(rc == 1, "oom (account waits)");
- cleanup_account();
+ pfs_account= find_or_create_account(&pfs_thread, username, user_len, hostname, host_len);
+ ok(pfs_account == NULL, "oom (account waits)");
+ ok(global_account_container.m_lost == 1, "lost (account waits)");
+ shutdown_performance_schema();
- stub_alloc_fails_after_count= 3;
- rc= init_account(& param);
- ok(rc == 1, "oom (account stages)");
- cleanup_account();
- stub_alloc_fails_after_count= 4;
- rc= init_account(& param);
- ok(rc == 1, "oom (account statements)");
- cleanup_account();
-
- cleanup_statement_class();
- cleanup_stage_class();
+ /* Account stages. */
+ memset(&param, 0, sizeof(param));
+ param.m_stage_class_sizing= 10;
+ initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ pfs_account= find_or_create_account(&pfs_thread, username, user_len, hostname, host_len);
+ ok(pfs_account == NULL, "oom (account stages)");
+ ok(global_account_container.m_lost == 1, "lost (account stages)");
+ shutdown_performance_schema();
+
+ /* Account statements. */
+ memset(&param, 0, sizeof(param));
+ param.m_statement_class_sizing= 10;
+ initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ pfs_account= find_or_create_account(&pfs_thread, username, user_len, hostname, host_len);
+ ok(pfs_account == NULL, "oom (account statements)");
+ ok(global_account_container.m_lost == 1, "lost (account statements)");
+ shutdown_performance_schema();
+
+ /* Account transactions. */
+ memset(&param, 0, sizeof(param));
+ initialize_performance_schema_helper(&param);
+ transaction_class_max= 1;
+ stub_alloc_fails_after_count= 3;
+ pfs_account= find_or_create_account(&pfs_thread, username, user_len, hostname, host_len);
+ ok(pfs_account == NULL, "oom (account transactions)");
+ ok(global_account_container.m_lost == 1, "lost (account transactions)");
+ shutdown_performance_schema();
+
+ /* Account memory. */
+ memset(&param, 0, sizeof(param));
+ param.m_memory_class_sizing= 10;
+ initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ pfs_account= find_or_create_account(&pfs_thread, username, user_len, hostname, host_len);
+ ok(pfs_account == NULL, "oom (account memory)");
+ ok(global_account_container.m_lost == 1, "lost (account memory)");
+ shutdown_performance_schema();
}
void do_all_tests()
@@ -111,10 +166,9 @@ void do_all_tests()
int main(int, char **)
{
- plan(6);
+ plan(12);
MY_INIT("pfs_account-oom-t");
do_all_tests();
my_end(0);
return (exit_status());
}
-
diff --git a/storage/perfschema/unittest/pfs_connect_attr-t.cc b/storage/perfschema/unittest/pfs_connect_attr-t.cc
index 06b0f8ad014..b57ead3ec26 100644
--- a/storage/perfschema/unittest/pfs_connect_attr-t.cc
+++ b/storage/perfschema/unittest/pfs_connect_attr-t.cc
@@ -21,7 +21,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_server.h>
#include <pfs_instr_class.h>
#include <pfs_instr.h>
@@ -258,7 +258,7 @@ void test_utf8_parser_bad_encoding()
ptr= packet;
*ptr++= strlen(attr);
memcpy(ptr, attr, strlen(attr));
- ptr[0]= 0xFA; // invalid UTF-8 char
+ ptr[0]= (char)0xFA; // invalid UTF-8 char
ptr+= strlen(attr);
*ptr++= strlen(val);
memcpy(ptr, val, strlen(val));
diff --git a/storage/perfschema/unittest/pfs_host-oom-t.cc b/storage/perfschema/unittest/pfs_host-oom-t.cc
index 14af1af0352..e97a1170eb2 100644
--- a/storage/perfschema/unittest/pfs_host-oom-t.cc
+++ b/storage/perfschema/unittest/pfs_host-oom-t.cc
@@ -21,21 +21,26 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_instr.h>
#include <pfs_stat.h>
#include <pfs_global.h>
#include <pfs_host.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
#include "stub_pfs_global.h"
+#include "stub_global_status_var.h"
#include <string.h> /* memset */
+extern struct PSI_bootstrap PFS_bootstrap;
+
void test_oom()
{
- int rc;
+ PSI *psi;
PFS_global_param param;
+ PSI_bootstrap *boot;
memset(& param, 0xFF, sizeof(param));
param.m_enabled= true;
@@ -45,6 +50,7 @@ void test_oom()
param.m_thread_class_sizing= 10;
param.m_table_share_sizing= 0;
param.m_file_class_sizing= 0;
+ param.m_socket_class_sizing= 0;
param.m_mutex_sizing= 0;
param.m_rwlock_sizing= 0;
param.m_cond_sizing= 0;
@@ -52,12 +58,13 @@ void test_oom()
param.m_table_sizing= 0;
param.m_file_sizing= 0;
param.m_file_handle_sizing= 0;
+ param.m_socket_sizing= 0;
param.m_events_waits_history_sizing= 10;
param.m_events_waits_history_long_sizing= 0;
param.m_setup_actor_sizing= 0;
param.m_setup_object_sizing= 0;
- param.m_host_sizing= 1000;
param.m_user_sizing= 0;
+ param.m_host_sizing= 1000;
param.m_account_sizing= 0;
param.m_stage_class_sizing= 50;
param.m_events_stages_history_sizing= 0;
@@ -65,43 +72,64 @@ void test_oom()
param.m_statement_class_sizing= 50;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
+ param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
+ param.m_program_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 10;
+ param.m_metadata_lock_sizing= 0;
+ param.m_max_digest_length= 0;
+ param.m_max_sql_text_length= 0;
/* Setup */
stub_alloc_always_fails= false;
stub_alloc_fails_after_count= 1000;
- init_event_name_sizing(& param);
- rc= init_stage_class(param.m_stage_class_sizing);
- ok(rc == 0, "init stage class");
- rc= init_statement_class(param.m_statement_class_sizing);
- ok(rc == 0, "init statement class");
+ pre_initialize_performance_schema();
+ boot= initialize_performance_schema(&param);
+ psi= (PSI *)boot->get_interface(PSI_VERSION_1);
+
+ PSI_thread_key thread_key_1;
+ PSI_thread_info all_thread[]=
+ {
+ {&thread_key_1, "T-1", 0}
+ };
+ psi->register_thread("test", all_thread, 1);
+
+ PSI_thread *thread_1= psi->new_thread(thread_key_1, NULL, 0);
+ psi->set_thread(thread_1);
/* Tests */
- stub_alloc_fails_after_count= 1;
- rc= init_host(& param);
- ok(rc == 1, "oom (host)");
- cleanup_host();
+ int first_fail= 1;
+ stub_alloc_fails_after_count= first_fail;
+ psi->set_thread_account("", 0, "host1", 5);
+ ok(global_host_container.m_lost == 1, "oom (host)");
+
+ stub_alloc_fails_after_count= first_fail + 1;
+ psi->set_thread_account("", 0, "host2", 5);
+ ok(global_host_container.m_lost == 2, "oom (host waits)");
+
+ stub_alloc_fails_after_count= first_fail + 2;
+ psi->set_thread_account("", 0, "host3", 5);
+ ok(global_host_container.m_lost == 3, "oom (host stages)");
- stub_alloc_fails_after_count= 2;
- rc= init_host(& param);
- ok(rc == 1, "oom (host waits)");
- cleanup_host();
+ stub_alloc_fails_after_count= first_fail + 3;
+ psi->set_thread_account("", 0, "host4", 5);
+ ok(global_host_container.m_lost == 4, "oom (host statements)");
- stub_alloc_fails_after_count= 3;
- rc= init_host(& param);
- ok(rc == 1, "oom (host stages)");
- cleanup_host();
+ stub_alloc_fails_after_count= first_fail + 4;
+ psi->set_thread_account("", 0, "host5", 5);
+ ok(global_host_container.m_lost == 5, "oom (host transactions)");
- stub_alloc_fails_after_count= 4;
- rc= init_host(& param);
- ok(rc == 1, "oom (host statements)");
- cleanup_host();
+ stub_alloc_fails_after_count= first_fail + 5;
+ psi->set_thread_account("", 0, "host6", 5);
+ ok(global_host_container.m_lost == 6, "oom (host memory)");
- cleanup_statement_class();
- cleanup_stage_class();
+ shutdown_performance_schema();
}
void do_all_tests()
diff --git a/storage/perfschema/unittest/pfs_instr-oom-t.cc b/storage/perfschema/unittest/pfs_instr-oom-t.cc
index 231fd1e100b..9472d8aa001 100644
--- a/storage/perfschema/unittest/pfs_instr-oom-t.cc
+++ b/storage/perfschema/unittest/pfs_instr-oom-t.cc
@@ -18,46 +18,139 @@
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, Fifth Floor, Boston, MA 02110-1335 USA */
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_instr.h>
#include <pfs_stat.h>
#include <pfs_global.h>
+#include <pfs_user.h>
+#include <pfs_host.h>
+#include <pfs_account.h>
#include <pfs_instr_class.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
#include "stub_pfs_global.h"
+#include "stub_global_status_var.h"
#include <string.h> /* memset */
+extern struct PSI_bootstrap PFS_bootstrap;
+
+PSI_thread_key thread_key_1;
+PSI_thread_info all_thread[]=
+{
+ {&thread_key_1, "T-1", 0}
+};
+
+/** Simulate initialize_performance_schema(). */
+
+PSI * initialize_performance_schema_helper(PFS_global_param *param)
+{
+ PSI *psi;
+
+ stub_alloc_always_fails= false;
+ stub_alloc_fails_after_count= 1000;
+
+ param->m_enabled= true;
+ param->m_thread_class_sizing= 10;
+ param->m_thread_sizing= 1000;
+
+ pre_initialize_performance_schema();
+
+ init_event_name_sizing(param);
+ init_sync_class(param->m_mutex_class_sizing, param->m_rwlock_class_sizing, param->m_cond_class_sizing);
+ init_thread_class(param->m_thread_class_sizing);
+ init_table_share(param->m_table_share_sizing);
+ init_table_share_lock_stat(param->m_table_lock_stat_sizing);
+ init_table_share_index_stat(param->m_index_stat_sizing);
+ init_file_class(param->m_file_class_sizing);
+ init_stage_class(param->m_stage_class_sizing);
+ init_statement_class(param->m_statement_class_sizing);
+ init_socket_class(param->m_socket_class_sizing);
+ init_memory_class(param->m_memory_class_sizing);
+ init_instruments(param);
+ init_events_waits_history_long(param->m_events_waits_history_long_sizing);
+ init_events_stages_history_long(param->m_events_stages_history_long_sizing);
+ init_events_statements_history_long(param->m_events_statements_history_long_sizing);
+ init_events_transactions_history_long(param->m_events_transactions_history_long_sizing);
+ init_file_hash(param);
+ init_table_share_hash(param);
+ init_setup_actor(param);
+ init_setup_actor_hash(param);
+ init_setup_object(param);
+ init_setup_object_hash(param);
+ init_host(param);
+ init_host_hash(param);
+ init_user(param);
+ init_user_hash(param);
+ init_account(param);
+ init_account_hash(param);
+ init_digest(param);
+ init_digest_hash(param);
+ init_program(param);
+ init_program_hash(param);
+ init_prepared_stmt(param);
+ pfs_initialized= true;
+
+ PSI_bootstrap *boot= &PFS_bootstrap;
+ psi= (PSI *)boot->get_interface(PSI_VERSION_1);
+ psi->register_thread("test", all_thread, 1);
+ return (psi);
+}
+
void test_oom()
{
int rc;
+ PSI *psi;
PFS_global_param param;
- stub_alloc_always_fails= true;
+ stub_alloc_always_fails= false;
+ stub_alloc_fails_after_count= 1000;
+
+ PFS_mutex_class dummy_mutex_class;
+ PFS_rwlock_class dummy_rwlock_class;
+ PFS_cond_class dummy_cond_class;
+ PFS_thread_class dummy_thread_class;
+ PFS_file_class dummy_file_class;
+ PFS_socket_class dummy_socket_class;
+ PFS_table_share dummy_table_share;
+ PFS_mutex *mutex_1;
+ PFS_mutex *mutex_2;
+ PFS_rwlock *rwlock_1;
+ PFS_rwlock *rwlock_2;
+ PFS_cond *cond_1;
+ PFS_cond *cond_2;
+ PFS_thread *thread_1;
+ PFS_thread *thread_2;
+ PFS_file *file_1;
+ PFS_file *file_2;
+ PFS_socket *socket_1;
+ PFS_socket *socket_2;
+ PFS_table *table_1;
+ PFS_table *table_2;
memset(& param, 0xFF, sizeof(param));
param.m_enabled= true;
- param.m_mutex_class_sizing= 10;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 1000;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
+ param.m_mutex_class_sizing= 1;
+ param.m_rwlock_class_sizing= 1;
+ param.m_cond_class_sizing= 1;
+ param.m_thread_class_sizing= 1;
+ param.m_table_share_sizing= 1;
+ param.m_file_class_sizing= 1;
+ param.m_socket_class_sizing= 1;
+ param.m_mutex_sizing= 1;
+ param.m_rwlock_sizing= 1;
+ param.m_cond_sizing= 1;
+ param.m_thread_sizing= 1;
+ param.m_table_sizing= 1;
+ param.m_file_sizing= 1;
+ param.m_file_handle_sizing= 100;
+ param.m_socket_sizing= 2;
+ param.m_events_waits_history_sizing= 10;
+ param.m_events_waits_history_long_sizing= 10000;
param.m_setup_actor_sizing= 0;
param.m_setup_object_sizing= 0;
param.m_host_sizing= 0;
@@ -69,614 +162,285 @@ void test_oom()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
+ param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
-
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (mutex)");
+ param.m_program_sizing= 0;
+ param.m_prepared_stmt_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 1;
+ param.m_metadata_lock_sizing= 0;
+ param.m_max_digest_length= 0;
+ param.m_max_sql_text_length= 0;
+
+ init_event_name_sizing(&param);
+ rc= init_instruments(&param);
+ ok(rc == 0, "instances init");
+
+ dummy_mutex_class.m_event_name_index= 0;
+ dummy_mutex_class.m_flags= 0;
+ dummy_mutex_class.m_enabled= true;
+ dummy_mutex_class.m_volatility= PSI_VOLATILITY_UNKNOWN;
+ dummy_rwlock_class.m_event_name_index= 1;
+ dummy_rwlock_class.m_flags= 0;
+ dummy_rwlock_class.m_enabled= true;
+ dummy_rwlock_class.m_volatility= PSI_VOLATILITY_UNKNOWN;
+ dummy_cond_class.m_event_name_index= 2;
+ dummy_cond_class.m_flags= 0;
+ dummy_cond_class.m_enabled= true;
+ dummy_cond_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_file_class.m_event_name_index= 3;
+ dummy_file_class.m_flags= 0;
+ dummy_file_class.m_enabled= true;
+ dummy_file_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_socket_class.m_event_name_index= 4;
+ dummy_socket_class.m_flags= 0;
+ dummy_socket_class.m_enabled= true;
+ dummy_socket_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_table_share.m_enabled= true;
+ dummy_table_share.m_timed= true;
+
+ /* Create mutex. */
+ stub_alloc_always_fails= false;
+ mutex_1= create_mutex(&dummy_mutex_class, NULL);
+ ok(mutex_1 != NULL, "create mutex");
+ destroy_mutex(mutex_1);
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 10;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 1000;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (rwlock)");
+ stub_alloc_always_fails= true;
+ mutex_2= create_mutex(&dummy_mutex_class, NULL);
+ ok(mutex_2 == NULL, "oom (create mutex)");
+
+ /* Create rwlock. */
+ stub_alloc_always_fails = false;
+ rc = init_instruments(&param);
+ ok(rc == 0, "instances init");
+ rwlock_1= create_rwlock(&dummy_rwlock_class, NULL);
+ ok(rwlock_1 != NULL, "create rwlock");
+ destroy_rwlock(rwlock_1);
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 10;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 1000;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (cond)");
+ stub_alloc_always_fails= true;
+ rwlock_2= create_rwlock(&dummy_rwlock_class, NULL);
+ ok(rwlock_2 == NULL, "oom (create rwlock)");
+
+ /* Create cond. */
+ stub_alloc_always_fails = false;
+ rc = init_instruments(&param);
+ ok(rc == 0, "instances init");
+ cond_1= create_cond(&dummy_cond_class, NULL);
+ ok(cond_1 != NULL, "create cond");
+ destroy_cond(cond_1);
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 10;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 1000;
- param.m_file_handle_sizing= 1000;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
+ stub_alloc_always_fails= true;
+ cond_2= create_cond(&dummy_cond_class, NULL);
+ ok(cond_2 == NULL, "oom (create cond)");
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (file)");
- cleanup_instruments();
+ /* Create file. */
+ PFS_thread fake_thread;
+ rc = init_instruments(&param);
+ fake_thread.m_filename_hash_pins= NULL;
+ init_file_hash(&param);
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 1000;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
+ stub_alloc_always_fails = true;
+ file_2 = find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
+ ok(file_2 == NULL, "oom (create file)");
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (file handle)");
+ stub_alloc_always_fails= false;
+ file_1= find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
+ ok(file_1 != NULL, "create file");
+ release_file(file_1);
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 10;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 1000;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (table)");
+ /* Create socket. */
+ stub_alloc_always_fails = false;
+ rc = init_instruments(&param);
+ ok(rc == 0, "instances init");
+ socket_1= create_socket(&dummy_socket_class, NULL, NULL, 0);
+ ok(socket_1 != NULL, "create socket");
+ destroy_socket(socket_1);
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
+ stub_alloc_always_fails= true;
+ socket_2= create_socket(&dummy_socket_class, NULL, NULL, 0);
+ ok(socket_2 == NULL, "oom (create socket)");
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (thread)");
+ /* Create table. */
+ stub_alloc_always_fails= false;
+ rc = init_instruments(&param);
+ table_1= create_table(&dummy_table_share, &fake_thread, NULL);
+ ok(table_1 != NULL, "create table");
+ destroy_table(table_1);
cleanup_instruments();
+ stub_alloc_always_fails= true;
+ table_2= create_table(&dummy_table_share, &fake_thread, NULL);
+ ok(table_2 == NULL, "oom (create table)");
+
+ /* Create thread. */
stub_alloc_always_fails= false;
+ rc = init_instruments(&param);
+ thread_1= create_thread(&dummy_thread_class, NULL, 0);
+ ok(thread_1 != NULL, "create thread");
+ destroy_thread(thread_1);
+ cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 10;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
+ stub_alloc_always_fails= true;
+ thread_2= create_thread(&dummy_thread_class, NULL, 0);
+ ok(thread_2 == NULL, "oom (create thread)");
- stub_alloc_fails_after_count= 2;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (thread waits history sizing)");
- cleanup_instruments();
+ PSI_thread *thread;
- param.m_enabled= true;
+ /* Per thread wait. */
+ memset(&param, 0, sizeof(param));
param.m_mutex_class_sizing= 50;
param.m_rwlock_class_sizing= 50;
param.m_cond_class_sizing= 50;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
param.m_file_class_sizing= 50;
param.m_socket_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
+ psi= initialize_performance_schema_helper(&param);
stub_alloc_fails_after_count= 2;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (per thread wait)");
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (per thread wait)");
cleanup_sync_class();
cleanup_thread_class();
cleanup_file_class();
cleanup_instruments();
+ /* Thread waits history sizing. */
+ memset(&param, 0, sizeof(param));
param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_socket_class_sizing= 10;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_socket_sizing= 1000;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
-
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (socket)");
+ param.m_events_waits_history_sizing= 10;
+ psi= initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (thread waits history sizing)");
+ cleanup_thread_class();
cleanup_instruments();
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
+ /* Per thread stages. */
+ memset(&param, 0, sizeof(param));
+ param.m_stage_class_sizing= 50;
+ psi= initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (per thread stages)");
- stub_alloc_fails_after_count= 1;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (per thread waits)");
+ cleanup_stage_class();
+ cleanup_thread_class();
cleanup_instruments();
+ cleanup_stage_class();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
+ /* Thread stages history sizing. */
+ memset(&param, 0, sizeof(param));
param.m_events_stages_history_sizing= 10;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
+ psi= initialize_performance_schema_helper(&param);
stub_alloc_fails_after_count= 3;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (thread stages history sizing)");
-
- cleanup_thread_class();
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (thread stages history sizing)");
+
cleanup_instruments();
+ cleanup_thread_class();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
+ /* Per thread statements. */
+ memset(&param, 0, sizeof(param));
param.m_stage_class_sizing= 50;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
+ psi= initialize_performance_schema_helper(&param);
+ init_statement_class(param.m_statement_class_sizing);
+ stub_alloc_fails_after_count= 3;
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (per thread statements)");
- stub_alloc_fails_after_count= 2;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (per thread stages)");
-
cleanup_stage_class();
+ cleanup_statement_class();
cleanup_thread_class();
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
+ /* Thread statements history sizing. */
+ memset(&param, 0, sizeof(param));
param.m_events_statements_history_sizing= 10;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- stub_alloc_fails_after_count= 2;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (thread statements history sizing)");
-
+ psi= initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (thread statements history sizing)");
+
cleanup_thread_class();
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 0;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 10;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 1000;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 50;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- stub_alloc_fails_after_count= 2;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (per thread statements)");
+ /* Per thread transactions. */
+ memset(&param, 0, sizeof(param));
+ psi= initialize_performance_schema_helper(&param);
+ transaction_class_max= 1; // set by register_global_classes();
+ stub_alloc_fails_after_count= 3;
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (per thread transactions)");
+ transaction_class_max= 0;
- cleanup_statement_class();
cleanup_thread_class();
cleanup_instruments();
- param.m_enabled= true;
- param.m_mutex_class_sizing= 10;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
-
- stub_alloc_fails_after_count= 1;
- init_event_name_sizing(& param);
- rc= init_instruments(& param);
- ok(rc == 1, "oom (global waits)");
+ /* Thread transactions history sizing. */
+ memset(&param, 0, sizeof(param));
+ param.m_events_transactions_history_sizing= 10;
+ psi= initialize_performance_schema_helper(&param);
+ stub_alloc_fails_after_count= 3;
+ thread= psi->new_thread(thread_key_1, NULL, 0);
+ ok(thread == NULL, "oom (thread transactions history sizing)");
- cleanup_sync_class();
+ cleanup_thread_class();
cleanup_instruments();
+ /* Global stages. */
+ memset(&param, 0, sizeof(param));
param.m_enabled= true;
param.m_mutex_class_sizing= 10;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
param.m_stage_class_sizing= 20;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
- param.m_statement_class_sizing= 0;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
- stub_alloc_fails_after_count= 3;
- init_event_name_sizing(& param);
+ stub_alloc_fails_after_count= 2;
+ init_event_name_sizing(&param);
rc= init_stage_class(param.m_stage_class_sizing);
ok(rc == 0, "init stage class");
rc= init_instruments(& param);
ok(rc == 1, "oom (global stages)");
- cleanup_sync_class();
cleanup_stage_class();
cleanup_instruments();
+ /* Global statements. */
+ memset(&param, 0, sizeof(param));
param.m_enabled= true;
param.m_mutex_class_sizing= 10;
- param.m_rwlock_class_sizing= 0;
- param.m_cond_class_sizing= 0;
- param.m_thread_class_sizing= 0;
- param.m_table_share_sizing= 0;
- param.m_file_class_sizing= 0;
- param.m_mutex_sizing= 0;
- param.m_rwlock_sizing= 0;
- param.m_cond_sizing= 0;
- param.m_thread_sizing= 0;
- param.m_table_sizing= 0;
- param.m_file_sizing= 0;
- param.m_file_handle_sizing= 0;
- param.m_events_waits_history_sizing= 0;
- param.m_events_waits_history_long_sizing= 0;
- param.m_setup_actor_sizing= 0;
- param.m_setup_object_sizing= 0;
- param.m_host_sizing= 0;
- param.m_user_sizing= 0;
- param.m_account_sizing= 0;
- param.m_stage_class_sizing= 0;
- param.m_events_stages_history_sizing= 0;
- param.m_events_stages_history_long_sizing= 0;
param.m_statement_class_sizing= 20;
- param.m_events_statements_history_sizing= 0;
- param.m_events_statements_history_long_sizing= 0;
- param.m_session_connect_attrs_sizing= 0;
- stub_alloc_fails_after_count= 3;
- init_event_name_sizing(& param);
+ stub_alloc_fails_after_count= 2;
+ init_event_name_sizing(&param);
rc= init_statement_class(param.m_statement_class_sizing);
ok(rc == 0, "init statement class");
- rc= init_instruments(& param);
+ rc= init_instruments(&param);
ok(rc == 1, "oom (global statements)");
- cleanup_sync_class();
cleanup_statement_class();
cleanup_instruments();
+
+ /* Global memory. */
+ memset(&param, 0, sizeof(param));
+ param.m_enabled= true;
+ param.m_mutex_class_sizing= 10;
+ param.m_memory_class_sizing= 20;
+
+ stub_alloc_fails_after_count= 2;
+ init_event_name_sizing(&param);
+ rc= init_memory_class(param.m_memory_class_sizing);
+ ok(rc == 0, "init memory class");
+ rc= init_instruments(& param);
+ ok(rc == 1, "oom (global memory)");
+
+ cleanup_memory_class();
+ cleanup_instruments();
}
void do_all_tests()
@@ -686,10 +450,10 @@ void do_all_tests()
int main(int argc, char **argv)
{
- plan(20);
+ plan(32);
MY_INIT(argv[0]);
do_all_tests();
my_end(0);
- return (exit_status());
+ return exit_status();
}
diff --git a/storage/perfschema/unittest/pfs_instr-t.cc b/storage/perfschema/unittest/pfs_instr-t.cc
index c9f4bac1171..d4401ab7ea2 100644
--- a/storage/perfschema/unittest/pfs_instr-t.cc
+++ b/storage/perfschema/unittest/pfs_instr-t.cc
@@ -21,13 +21,16 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_instr.h>
#include <pfs_stat.h>
#include <pfs_global.h>
#include <pfs_instr_class.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
+#include "stub_global_status_var.h"
+
#include <memory.h>
PFS_global_param param;
@@ -66,9 +69,15 @@ void test_no_instruments()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
- param.m_max_digest_length= 0;
+ param.m_program_sizing= 0;
+ param.m_prepared_stmt_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 0;
+ param.m_metadata_lock_sizing= 0;
init_event_name_sizing(& param);
rc= init_instruments(& param);
@@ -95,6 +104,27 @@ void test_no_instances()
PFS_socket *socket;
PFS_table *table;
+ dummy_mutex_class.m_event_name_index = 0;
+ dummy_mutex_class.m_flags = 0;
+ dummy_mutex_class.m_enabled = true;
+ dummy_mutex_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_rwlock_class.m_event_name_index = 1;
+ dummy_rwlock_class.m_flags = 0;
+ dummy_rwlock_class.m_enabled = true;
+ dummy_rwlock_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_cond_class.m_event_name_index = 2;
+ dummy_cond_class.m_flags = 0;
+ dummy_cond_class.m_enabled = true;
+ dummy_cond_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_file_class.m_event_name_index = 3;
+ dummy_file_class.m_flags = 0;
+ dummy_file_class.m_enabled = true;
+ dummy_file_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+ dummy_socket_class.m_event_name_index = 4;
+ dummy_socket_class.m_flags = 0;
+ dummy_socket_class.m_enabled = true;
+ dummy_socket_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+
memset(& param, 0xFF, sizeof(param));
param.m_enabled= true;
param.m_mutex_class_sizing= 1;
@@ -125,9 +155,15 @@ void test_no_instances()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
- param.m_max_digest_length= 0;
+ param.m_program_sizing= 0;
+ param.m_prepared_stmt_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 1;
+ param.m_metadata_lock_sizing= 0;
init_event_name_sizing(& param);
rc= init_instruments(& param);
@@ -135,50 +171,50 @@ void test_no_instances()
mutex= create_mutex(& dummy_mutex_class, NULL);
ok(mutex == NULL, "no mutex");
- ok(mutex_lost == 1, "lost 1");
+ ok(global_mutex_container.get_lost_counter() == 1, "lost 1");
mutex= create_mutex(& dummy_mutex_class, NULL);
ok(mutex == NULL, "no mutex");
- ok(mutex_lost == 2, "lost 2");
+ ok(global_mutex_container.get_lost_counter() == 2, "lost 2");
rwlock= create_rwlock(& dummy_rwlock_class, NULL);
ok(rwlock == NULL, "no rwlock");
- ok(rwlock_lost == 1, "lost 1");
+ ok(global_rwlock_container.m_lost == 1, "lost 1");
rwlock= create_rwlock(& dummy_rwlock_class, NULL);
ok(rwlock == NULL, "no rwlock");
- ok(rwlock_lost == 2, "lost 2");
+ ok(global_rwlock_container.m_lost == 2, "lost 2");
cond= create_cond(& dummy_cond_class, NULL);
ok(cond == NULL, "no cond");
- ok(cond_lost == 1, "lost 1");
+ ok(global_cond_container.m_lost == 1, "lost 1");
cond= create_cond(& dummy_cond_class, NULL);
ok(cond == NULL, "no cond");
- ok(cond_lost == 2, "lost 2");
+ ok(global_cond_container.m_lost == 2, "lost 2");
thread= create_thread(& dummy_thread_class, NULL, 0);
ok(thread == NULL, "no thread");
- ok(thread_lost == 1, "lost 1");
+ ok(global_thread_container.m_lost == 1, "lost 1");
thread= create_thread(& dummy_thread_class, NULL, 0);
ok(thread == NULL, "no thread");
- ok(thread_lost == 2, "lost 2");
+ ok(global_thread_container.m_lost == 2, "lost 2");
PFS_thread fake_thread;
fake_thread.m_filename_hash_pins= NULL;
file= find_or_create_file(& fake_thread, & dummy_file_class, "dummy", 5, true);
ok(file == NULL, "no file");
- ok(file_lost == 1, "lost 1");
+ ok(global_file_container.m_lost == 1, "lost 1");
file= find_or_create_file(& fake_thread, & dummy_file_class, "dummy", 5, true);
ok(file == NULL, "no file");
- ok(file_lost == 2, "lost 2");
+ ok(global_file_container.m_lost == 2, "lost 2");
- init_file_hash();
+ init_file_hash(& param);
file= find_or_create_file(& fake_thread, & dummy_file_class, "dummy", 5, true);
ok(file == NULL, "no file");
- ok(file_lost == 3, "lost 3");
+ ok(global_file_container.m_lost == 3, "lost 3");
file= find_or_create_file(& fake_thread, & dummy_file_class, "dummy", 5, true);
ok(file == NULL, "no file");
- ok(file_lost == 4, "lost 4");
+ ok(global_file_container.m_lost == 4, "lost 4");
char long_file_name[10000];
int size= sizeof(long_file_name);
@@ -186,21 +222,21 @@ void test_no_instances()
file= find_or_create_file(& fake_thread, & dummy_file_class, long_file_name, size, true);
ok(file == NULL, "no file");
- ok(file_lost == 5, "lost 5");
+ ok(global_file_container.m_lost == 5, "lost 5");
table= create_table(& dummy_table_share, & fake_thread, NULL);
ok(table == NULL, "no table");
- ok(table_lost == 1, "lost 1");
+ ok(global_table_container.m_lost == 1, "lost 1");
table= create_table(& dummy_table_share, & fake_thread, NULL);
ok(table == NULL, "no table");
- ok(table_lost == 2, "lost 2");
+ ok(global_table_container.m_lost == 2, "lost 2");
socket= create_socket(& dummy_socket_class, NULL, NULL, 0);
ok(socket == NULL, "no socket");
- ok(socket_lost == 1, "lost 1");
+ ok(global_socket_container.m_lost == 1, "lost 1");
socket= create_socket(& dummy_socket_class, NULL, NULL, 0);
ok(socket == NULL, "no socket");
- ok(socket_lost == 2, "lost 2");
+ ok(global_socket_container.m_lost == 2, "lost 2");
/* No result to test, just make sure it does not crash */
reset_events_waits_by_instance();
@@ -265,139 +301,163 @@ void test_with_instances()
param.m_statement_class_sizing= 0;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
param.m_digest_sizing= 0;
param.m_session_connect_attrs_sizing= 0;
- param.m_max_digest_length= 0;
+ param.m_program_sizing= 0;
+ param.m_prepared_stmt_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 1;
+ param.m_metadata_lock_sizing= 0;
init_event_name_sizing(& param);
rc= init_instruments(& param);
ok(rc == 0, "instances init");
dummy_mutex_class.m_event_name_index= 0;
+ dummy_mutex_class.m_flags= 0;
+ dummy_mutex_class.m_enabled= true;
+ dummy_mutex_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
dummy_rwlock_class.m_event_name_index= 1;
+ dummy_rwlock_class.m_flags= 0;
+ dummy_rwlock_class.m_enabled= true;
+ dummy_rwlock_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
dummy_cond_class.m_event_name_index= 2;
+ dummy_cond_class.m_flags= 0;
+ dummy_cond_class.m_enabled= true;
+ dummy_cond_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
dummy_file_class.m_event_name_index= 3;
+ dummy_file_class.m_flags= 0;
+ dummy_file_class.m_enabled= true;
+ dummy_file_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
dummy_socket_class.m_event_name_index= 4;
+ dummy_socket_class.m_flags= 0;
+ dummy_socket_class.m_enabled= true;
+ dummy_socket_class.m_volatility = PSI_VOLATILITY_UNKNOWN;
+
+ dummy_table_share.m_enabled= true;
+ dummy_table_share.m_timed= true;
mutex_1= create_mutex(& dummy_mutex_class, NULL);
ok(mutex_1 != NULL, "mutex");
- ok(mutex_lost == 0, "not lost");
+ ok(global_mutex_container.get_lost_counter() == 0, "not lost");
mutex_2= create_mutex(& dummy_mutex_class, NULL);
ok(mutex_2 != NULL, "mutex");
- ok(mutex_lost == 0, "not lost");
+ ok(global_mutex_container.get_lost_counter() == 0, "not lost");
mutex_2= create_mutex(& dummy_mutex_class, NULL);
ok(mutex_2 == NULL, "no mutex");
- ok(mutex_lost == 1, "lost 1");
+ ok(global_mutex_container.get_lost_counter() == 1, "lost 1");
destroy_mutex(mutex_1);
mutex_2= create_mutex(& dummy_mutex_class, NULL);
ok(mutex_2 != NULL, "mutex");
- ok(mutex_lost == 1, "no new loss");
+ ok(global_mutex_container.get_lost_counter() == 1, "no new loss");
rwlock_1= create_rwlock(& dummy_rwlock_class, NULL);
ok(rwlock_1 != NULL, "rwlock");
- ok(rwlock_lost == 0, "not lost");
+ ok(global_rwlock_container.m_lost == 0, "not lost");
rwlock_2= create_rwlock(& dummy_rwlock_class, NULL);
ok(rwlock_2 != NULL, "rwlock");
- ok(rwlock_lost == 0, "not lost");
+ ok(global_rwlock_container.m_lost == 0, "not lost");
rwlock_2= create_rwlock(& dummy_rwlock_class, NULL);
ok(rwlock_2 == NULL, "no rwlock");
- ok(rwlock_lost == 1, "lost 1");
+ ok(global_rwlock_container.m_lost == 1, "lost 1");
destroy_rwlock(rwlock_1);
rwlock_2= create_rwlock(& dummy_rwlock_class, NULL);
ok(rwlock_2 != NULL, "rwlock");
- ok(rwlock_lost == 1, "no new loss");
+ ok(global_rwlock_container.m_lost == 1, "no new loss");
cond_1= create_cond(& dummy_cond_class, NULL);
ok(cond_1 != NULL, "cond");
- ok(cond_lost == 0, "not lost");
+ ok(global_cond_container.m_lost == 0, "not lost");
cond_2= create_cond(& dummy_cond_class, NULL);
ok(cond_2 != NULL, "cond");
- ok(cond_lost == 0, "not lost");
+ ok(global_cond_container.m_lost == 0, "not lost");
cond_2= create_cond(& dummy_cond_class, NULL);
ok(cond_2 == NULL, "no cond");
- ok(cond_lost == 1, "lost 1");
+ ok(global_cond_container.m_lost == 1, "lost 1");
destroy_cond(cond_1);
cond_2= create_cond(& dummy_cond_class, NULL);
ok(cond_2 != NULL, "cond");
- ok(cond_lost == 1, "no new loss");
+ ok(global_cond_container.m_lost == 1, "no new loss");
thread_1= create_thread(& dummy_thread_class, NULL, 0);
ok(thread_1 != NULL, "thread");
- ok(thread_lost == 0, "not lost");
+ ok(global_thread_container.m_lost == 0, "not lost");
thread_2= create_thread(& dummy_thread_class, NULL, 0);
ok(thread_2 != NULL, "thread");
- ok(thread_lost == 0, "not lost");
+ ok(global_thread_container.m_lost == 0, "not lost");
thread_2= create_thread(& dummy_thread_class, NULL, 0);
ok(thread_2 == NULL, "no thread");
- ok(thread_lost == 1, "lost 1");
+ ok(global_thread_container.m_lost == 1, "lost 1");
destroy_thread(thread_1);
thread_2= create_thread(& dummy_thread_class, NULL, 0);
ok(thread_2 != NULL, "thread");
- ok(thread_lost == 1, "no new loss");
+ ok(global_thread_container.m_lost == 1, "no new loss");
PFS_thread fake_thread;
fake_thread.m_filename_hash_pins= NULL;
file_1= find_or_create_file(& fake_thread, & dummy_file_class, "dummy", 5, true);
ok(file_1 == NULL, "no file");
- ok(file_lost == 1, "lost 1");
+ ok(global_file_container.m_lost == 1, "lost 1");
file_1= find_or_create_file(& fake_thread, & dummy_file_class, "dummy", 5, true);
ok(file_1 == NULL, "no file");
- ok(file_lost == 2, "lost 2");
+ ok(global_file_container.m_lost == 2, "lost 2");
- init_file_hash();
- file_lost= 0;
+ init_file_hash(& param);
+ global_file_container.m_lost= 0;
file_1= find_or_create_file(& fake_thread, & dummy_file_class, "dummy_A", 7, true);
ok(file_1 != NULL, "file");
ok(file_1->m_file_stat.m_open_count == 1, "open count 1");
- ok(file_lost == 0, "not lost");
+ ok(global_file_container.m_lost == 0, "not lost");
file_2= find_or_create_file(& fake_thread, & dummy_file_class, "dummy_A", 7, true);
ok(file_1 == file_2, "same file");
ok(file_1->m_file_stat.m_open_count == 2, "open count 2");
- ok(file_lost == 0, "not lost");
+ ok(global_file_container.m_lost == 0, "not lost");
release_file(file_2);
ok(file_1->m_file_stat.m_open_count == 1, "open count 1");
file_2= find_or_create_file(& fake_thread, & dummy_file_class, "dummy_B", 7, true);
ok(file_2 != NULL, "file");
- ok(file_lost == 0, "not lost");
+ ok(global_file_container.m_lost == 0, "not lost");
file_2= find_or_create_file(& fake_thread, & dummy_file_class, "dummy_C", 7, true);
ok(file_2 == NULL, "no file");
- ok(file_lost == 1, "lost");
+ ok(global_file_container.m_lost == 1, "lost");
release_file(file_1);
/* the file still exists, not destroyed */
ok(file_1->m_file_stat.m_open_count == 0, "open count 0");
file_2= find_or_create_file(& fake_thread, & dummy_file_class, "dummy_D", 7, true);
ok(file_2 == NULL, "no file");
- ok(file_lost == 2, "lost");
+ ok(global_file_container.m_lost == 2, "lost");
socket_1= create_socket(& dummy_socket_class, NULL, NULL, 0);
ok(socket_1 != NULL, "socket");
- ok(socket_lost == 0, "not lost");
+ ok(global_socket_container.m_lost == 0, "not lost");
socket_2= create_socket(& dummy_socket_class, NULL, NULL, 0);
ok(socket_2 != NULL, "socket");
- ok(socket_lost == 0, "not lost");
+ ok(global_socket_container.m_lost == 0, "not lost");
socket_2= create_socket(& dummy_socket_class, NULL, NULL, 0);
ok(socket_2 == NULL, "no socket");
- ok(socket_lost == 1, "lost 1");
+ ok(global_socket_container.m_lost == 1, "lost 1");
destroy_socket(socket_1);
socket_2= create_socket(& dummy_socket_class, NULL, NULL, 0);
ok(socket_2 != NULL, "socket");
- ok(socket_lost == 1, "no new loss");
+ ok(global_socket_container.m_lost == 1, "no new loss");
table_1= create_table(& dummy_table_share, & fake_thread, NULL);
ok(table_1 != NULL, "table");
- ok(table_lost == 0, "not lost");
+ ok(global_table_container.m_lost == 0, "not lost");
table_2= create_table(& dummy_table_share, & fake_thread, NULL);
ok(table_2 != NULL, "table");
- ok(table_lost == 0, "not lost");
+ ok(global_table_container.m_lost == 0, "not lost");
table_2= create_table(& dummy_table_share, & fake_thread, NULL);
ok(table_2 == NULL, "no table");
- ok(table_lost == 1, "lost 1");
+ ok(global_table_container.m_lost == 1, "lost 1");
destroy_table(table_1);
table_2= create_table(& dummy_table_share, & fake_thread, NULL);
ok(table_2 != NULL, "table");
- ok(table_lost == 1, "no new loss");
+ ok(global_table_container.m_lost == 1, "no new loss");
//TODO: test that cleanup works
reset_events_waits_by_instance();
@@ -409,6 +469,9 @@ void test_with_instances()
void do_all_tests()
{
+ flag_global_instrumentation= true;
+ flag_thread_instrumentation= true;
+
test_no_instruments();
test_no_instances();
test_with_instances();
diff --git a/storage/perfschema/unittest/pfs_instr_class-oom-t.cc b/storage/perfschema/unittest/pfs_instr_class-oom-t.cc
index 7eb21a33bd7..0f9d6ef07d5 100644
--- a/storage/perfschema/unittest/pfs_instr_class-oom-t.cc
+++ b/storage/perfschema/unittest/pfs_instr_class-oom-t.cc
@@ -21,16 +21,24 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_instr_class.h>
+#include <pfs_instr.h>
#include <pfs_global.h>
#include <tap.h>
+#include <sql_class.h>
+#include <pfs_buffer_container.h>
#include "stub_pfs_global.h"
+#include "stub_global_status_var.h"
void test_oom()
{
int rc;
+ PFS_global_param param;
+ TABLE_SHARE table_share;
+ PFS_thread pfs_thread;
+ PFS_table_share *pfs_table_share;
rc= init_sync_class(1000, 0, 0);
ok(rc == 1, "oom (mutex)");
@@ -42,14 +50,14 @@ void test_oom()
ok(rc == 1, "oom (thread)");
rc= init_file_class(1000);
ok(rc == 1, "oom (file)");
- rc= init_table_share(1000);
- ok(rc == 1, "oom (cond)");
rc= init_socket_class(1000);
ok(rc == 1, "oom (socket)");
rc= init_stage_class(1000);
ok(rc == 1, "oom (stage)");
rc= init_statement_class(1000);
ok(rc == 1, "oom (statement)");
+ rc= init_memory_class(1000);
+ ok(rc == 1, "oom (memory)");
cleanup_sync_class();
cleanup_thread_class();
@@ -58,6 +66,36 @@ void test_oom()
cleanup_socket_class();
cleanup_stage_class();
cleanup_statement_class();
+ cleanup_memory_class();
+
+ /* Table share classes. */
+ memset(&param, 0, sizeof(param));
+ param.m_enabled= true;
+ param.m_table_share_sizing= 100;
+ param.m_setup_object_sizing= 100;
+
+ pfs_thread.m_table_share_hash_pins= NULL;
+ pfs_thread.m_setup_object_hash_pins= NULL;
+
+ char db_name[]= "schema 1";
+ char table_name[]= "table 1";
+ table_share.db.str= db_name;
+ table_share.db.length= strlen(db_name);
+ table_share.table_name.str= table_name;
+ table_share.table_name.length= strlen(table_name);
+
+ init_table_share(param.m_table_share_sizing);
+ init_table_share_hash(&param);
+ init_setup_object_hash(&param);
+
+ stub_alloc_always_fails= false;
+ pfs_table_share= find_or_create_table_share(&pfs_thread, false, &table_share);
+ ok(pfs_table_share == NULL, "oom (pfs table share)");
+ ok(global_table_share_container.m_lost == 1, "oom (table share)");
+
+ cleanup_table_share();
+ cleanup_table_share_hash();
+ cleanup_setup_object_hash();
}
void do_all_tests()
@@ -67,7 +105,7 @@ void do_all_tests()
int main(int argc, char **argv)
{
- plan(9);
+ plan(11);
MY_INIT(argv[0]);
do_all_tests();
my_end(0);
diff --git a/storage/perfschema/unittest/pfs_instr_class-t.cc b/storage/perfschema/unittest/pfs_instr_class-t.cc
index f1e246dc387..3dfd725cb91 100644
--- a/storage/perfschema/unittest/pfs_instr_class-t.cc
+++ b/storage/perfschema/unittest/pfs_instr_class-t.cc
@@ -21,13 +21,15 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <string.h> // strncpy
#include <pfs_instr_class.h>
#include <pfs_instr.h>
#include <pfs_global.h>
#include <tap.h>
+#include "stub_global_status_var.h"
+
void test_no_registration()
{
int rc;
@@ -35,12 +37,14 @@ void test_no_registration()
PFS_thread_key thread_key;
PFS_file_key file_key;
PFS_socket_key socket_key;
+ PFS_memory_key memory_key;
PFS_mutex_class *mutex;
PFS_rwlock_class *rwlock;
PFS_cond_class *cond;
PFS_thread_class *thread;
PFS_file_class *file;
PFS_socket_class *socket;
+ PFS_memory_class *memory;
/* PFS_table_share *table; */
rc= init_sync_class(0, 0, 0);
@@ -53,6 +57,8 @@ void test_no_registration()
ok(rc == 0, "zero init (socket)");
rc= init_table_share(0);
ok(rc == 0, "zero init (table)");
+ rc= init_memory_class(0);
+ ok(rc == 0, "zero init (memory)");
key= register_mutex_class("FOO", 3, 0);
ok(key == 0, "no mutex registered");
@@ -96,6 +102,13 @@ void test_no_registration()
socket_key= register_socket_class("FOO", 3, 0);
ok(socket_key == 0, "no socket registered");
+ memory_key= register_memory_class("FOO", 3, 0);
+ ok(memory_key == 0, "no memory registered");
+ memory_key= register_memory_class("BAR", 3, 0);
+ ok(memory_key == 0, "no memory registered");
+ memory_key= register_memory_class("FOO", 3, 0);
+ ok(memory_key == 0, "no memory registered");
+
#ifdef LATER
PFS_thread fake_thread;
fake_thread.m_table_share_hash_pins= NULL;
@@ -150,11 +163,19 @@ void test_no_registration()
socket= find_socket_class(9999);
ok(socket == NULL, "no socket key 9999");
+ memory= find_memory_class(0);
+ ok(memory == NULL, "no memory key 0");
+ memory= find_memory_class(1);
+ ok(memory == NULL, "no memory key 1");
+ memory= find_memory_class(9999);
+ ok(memory == NULL, "no memory key 9999");
+
cleanup_sync_class();
cleanup_thread_class();
cleanup_file_class();
cleanup_socket_class();
cleanup_table_share();
+ cleanup_memory_class();
}
void test_mutex_registration()
@@ -480,6 +501,53 @@ void test_table_registration()
#endif
}
+void test_memory_registration()
+{
+ int rc;
+ PFS_memory_key key;
+ PFS_memory_class *memory;
+
+ rc= init_memory_class(5);
+ ok(rc == 0, "room for 5 memory");
+
+ key= register_memory_class("FOO", 3, 0);
+ ok(key == 1, "foo registered");
+ key= register_memory_class("BAR", 3, 0);
+ ok(key == 2, "bar registered");
+ key= register_memory_class("FOO", 3, 0);
+ ok(key == 1, "foo re registered");
+ key= register_memory_class("Memory-3", 8, 0);
+ ok(key == 3, "Memory-3 registered");
+ key= register_memory_class("Memory-4", 8, 0);
+ ok(key == 4, "Memory-4 registered");
+ key= register_memory_class("Memory-5", 8, 0);
+ ok(key == 5, "Memory-5 registered");
+ ok(memory_class_lost == 0, "lost nothing");
+ key= register_memory_class("Memory-6", 8, 0);
+ ok(key == 0, "Memory-6 not registered");
+ ok(memory_class_lost == 1, "lost 1 memory");
+ key= register_memory_class("Memory-7", 8, 0);
+ ok(key == 0, "Memory-7 not registered");
+ ok(memory_class_lost == 2, "lost 2 memory");
+ key= register_memory_class("Memory-3", 8, 0);
+ ok(key == 3, "Memory-3 re registered");
+ ok(memory_class_lost == 2, "lost 2 memory");
+ key= register_memory_class("Memory-5", 8, 0);
+ ok(key == 5, "Memory-5 re registered");
+ ok(memory_class_lost == 2, "lost 2 memory");
+
+ memory= find_memory_class(0);
+ ok(memory == NULL, "no key 0");
+ memory= find_memory_class(3);
+ ok(memory != NULL, "found key 3");
+ ok(strncmp(memory->m_name, "Memory-3", 8) == 0, "key 3 is Memory-3");
+ ok(memory->m_name_length == 8, "name length 3");
+ memory= find_memory_class(9999);
+ ok(memory == NULL, "no key 9999");
+
+ cleanup_memory_class();
+}
+
#ifdef LATER
void set_wait_stat(PFS_instr_class *klass)
{
@@ -668,12 +736,13 @@ void do_all_tests()
test_file_registration();
test_socket_registration();
test_table_registration();
+ test_memory_registration();
test_instruments_reset();
}
int main(int argc, char **argv)
{
- plan(181);
+ plan(209);
MY_INIT(argv[0]);
do_all_tests();
my_end(0);
diff --git a/storage/perfschema/unittest/pfs_misc-t.cc b/storage/perfschema/unittest/pfs_misc-t.cc
index 7d274c0820d..d82178000c2 100644
--- a/storage/perfschema/unittest/pfs_misc-t.cc
+++ b/storage/perfschema/unittest/pfs_misc-t.cc
@@ -21,22 +21,26 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
+#include <my_thread.h>
#include <pfs_instr.h>
#include <pfs_stat.h>
#include <pfs_global.h>
#include <pfs_instr_class.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
+#include "stub_global_status_var.h"
+
#include <memory.h>
void test_digest_length_overflow()
{
if (sizeof(size_t) != 4)
{
- skip(2, "digest length overflow requires a 32-bit environment");
+ skip(3, "digest length overflow requires a 32-bit environment");
return;
}
-
+
PFS_global_param param;
memset(&param, 0, sizeof(param));
param.m_enabled= true;
@@ -45,19 +49,32 @@ void test_digest_length_overflow()
parameters. The Performance Schema should detect the overflow, free
allocated memory and abort initialization with a warning.
*/
-
+
/* Max digest length, events_statements_history_long. */
param.m_events_statements_history_long_sizing= 10000;
param.m_digest_sizing= 1000;
param.m_max_digest_length= (1024 * 1024);
+ param.m_max_sql_text_length= 0;
pfs_max_digest_length= param.m_max_digest_length;
+ pfs_max_sqltext= param.m_max_sql_text_length;
int rc = init_events_statements_history_long(param.m_events_statements_history_long_sizing);
ok(rc == 1, "digest length overflow (init_events_statements_history_long");
+ /* Max sql text length, events_statements_history_long. */
+ param.m_max_sql_text_length= (1024 * 1024);
+ param.m_max_digest_length= 0;
+ pfs_max_digest_length= param.m_max_digest_length;
+ pfs_max_sqltext= param.m_max_sql_text_length;
+
+ rc = init_events_statements_history_long(param.m_events_statements_history_long_sizing);
+ ok(rc == 1, "sql text length overflow (init_events_statements_history_long");
+
/* Max digest length, events_statements_summary_by_digest. */
param.m_max_digest_length= (1024 * 1024);
param.m_digest_sizing= 10000;
+ pfs_max_digest_length= param.m_max_digest_length;
+ pfs_max_sqltext= param.m_max_sql_text_length;
rc = init_digest(&param);
ok(rc == 1, "digest length overflow (init_digest)");
@@ -70,10 +87,9 @@ void do_all_tests()
int main(int, char **)
{
- plan(2);
+ plan(3);
MY_INIT("pfs_misc-t");
do_all_tests();
my_end(0);
return (exit_status());
}
-
diff --git a/storage/perfschema/unittest/pfs_noop-t.cc b/storage/perfschema/unittest/pfs_noop-t.cc
new file mode 100644
index 00000000000..2756680dc22
--- /dev/null
+++ b/storage/perfschema/unittest/pfs_noop-t.cc
@@ -0,0 +1,242 @@
+/* Copyright (c) 2013, 2017, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include <my_global.h>
+#include <my_thread.h>
+#include <pfs_server.h>
+#include <pfs_instr_class.h>
+#include <pfs_instr.h>
+#include <pfs_global.h>
+#include <tap.h>
+
+#include <string.h>
+#include <memory.h>
+
+#include "stub_print_error.h"
+#include "stub_pfs_defaults.h"
+
+void test_noop()
+{
+ PSI_mutex *mutex;
+ PSI_rwlock *rwlock;
+ PSI_cond *cond;
+ PSI_socket *socket;
+ PSI_table_share *table_share;
+ PSI_table *table;
+ PSI_file *file;
+ PSI_thread *thread;
+ PSI_file_locker *file_locker;
+ PSI_idle_locker *idle_locker;
+ PSI_mutex_locker *mutex_locker;
+ PSI_rwlock_locker *rwlock_locker;
+ PSI_cond_locker *cond_locker;
+ PSI_table_locker *table_locker;
+ PSI_statement_locker *statement_locker;
+ PSI_transaction_locker *transaction_locker;
+ PSI_socket_locker *socket_locker;
+ PSI_digest_locker *digest_locker;
+ PSI_sp_locker *sp_locker;
+ PSI_sp_share *sp_share;
+ PSI_memory_key memory_key;
+ PSI_metadata_lock *metadata_lock;
+ PSI_metadata_locker *metadata_locker;
+ PSI_thread *owner;
+
+ diag("test_noop");
+
+ PSI_server->register_mutex(NULL, NULL, 0);
+ PSI_server->register_rwlock(NULL, NULL, 0);
+ PSI_server->register_cond(NULL, NULL, 0);
+ PSI_server->register_thread(NULL, NULL, 0);
+ PSI_server->register_file(NULL, NULL, 0);
+ PSI_server->register_stage(NULL, NULL, 0);
+ PSI_server->register_statement(NULL, NULL, 0);
+ PSI_server->register_socket(NULL, NULL, 0);
+
+ ok(true, "register");
+ mutex= PSI_server->init_mutex(1, NULL);
+ ok(mutex == NULL, "no mutex");
+ PSI_server->destroy_mutex(NULL);
+ rwlock= PSI_server->init_rwlock(1, NULL);
+ ok(rwlock == NULL, "no rwlock");
+ PSI_server->destroy_rwlock(NULL);
+ cond= PSI_server->init_cond(1, NULL);
+ ok(cond == NULL, "no cond");
+ PSI_server->destroy_cond(NULL);
+ socket= PSI_server->init_socket(1, NULL, NULL, 0);
+ ok(socket == NULL, "no socket");
+ PSI_server->destroy_socket(NULL);
+ table_share= PSI_server->get_table_share(false, NULL);
+ ok(table_share == NULL, "no table_share");
+ PSI_server->release_table_share(NULL);
+ PSI_server->drop_table_share(false, NULL, 0, NULL, 0);
+ table= PSI_server->open_table(NULL, NULL);
+ ok(table == NULL, "no table");
+ PSI_server->unbind_table(NULL);
+ table= PSI_server->rebind_table(NULL, NULL, NULL);
+ ok(table == NULL, "no table");
+ PSI_server->close_table(NULL, NULL);
+ PSI_server->create_file(1, NULL, 2);
+ /* TODO: spawn thread */
+ thread= PSI_server->new_thread(1, NULL, 2);
+ ok(thread == NULL, "no thread");
+ PSI_server->set_thread_id(NULL, 1);
+ thread= PSI_server->get_thread();
+ ok(thread == NULL, "no thread");
+ PSI_server->set_thread_user(NULL, 0);
+ PSI_server->set_thread_account(NULL, 0, NULL, 0);
+ PSI_server->set_thread_db(NULL, 0);
+ PSI_server->set_thread_command(1);
+ PSI_server->set_thread_start_time(1);
+ PSI_server->set_thread_state(NULL);
+ PSI_server->set_thread_info(NULL, 0);
+ PSI_server->set_thread(NULL);
+ PSI_server->delete_current_thread();
+ PSI_server->delete_thread(NULL);
+ file_locker= PSI_server->get_thread_file_name_locker(NULL, 1, PSI_FILE_OPEN, NULL, NULL);
+ ok(file_locker == NULL, "no file_locker");
+ file_locker= PSI_server->get_thread_file_stream_locker(NULL, NULL, PSI_FILE_OPEN);
+ ok(file_locker == NULL, "no file_locker");
+ file_locker= PSI_server->get_thread_file_descriptor_locker(NULL, 0, PSI_FILE_OPEN);
+ ok(file_locker == NULL, "no file_locker");
+ PSI_server->unlock_mutex(NULL);
+ PSI_server->unlock_rwlock(NULL);
+ PSI_server->signal_cond(NULL);
+ PSI_server->broadcast_cond(NULL);
+ idle_locker= PSI_server->start_idle_wait(NULL, NULL, 0);
+ ok(idle_locker == NULL, "no idle_locker");
+ PSI_server->end_idle_wait(NULL);
+ mutex_locker= PSI_server->start_mutex_wait(NULL, NULL, PSI_MUTEX_LOCK, NULL, 0);
+ ok(mutex_locker == NULL, "no mutex_locker");
+ PSI_server->end_mutex_wait(NULL, 0);
+ rwlock_locker= PSI_server->start_rwlock_rdwait(NULL, NULL, PSI_RWLOCK_READLOCK, NULL, 0);
+ ok(rwlock_locker == NULL, "no rwlock_locker");
+ PSI_server->end_rwlock_rdwait(NULL, 0);
+ rwlock_locker= PSI_server->start_rwlock_wrwait(NULL, NULL, PSI_RWLOCK_WRITELOCK, NULL, 0);
+ ok(rwlock_locker == NULL, "no rwlock_locker");
+ PSI_server->end_rwlock_wrwait(NULL, 0);
+ cond_locker= PSI_server->start_cond_wait(NULL, NULL, NULL, PSI_COND_WAIT, NULL, 0);
+ ok(cond_locker == NULL, "no cond_locker");
+ PSI_server->end_cond_wait(NULL, 0);
+ table_locker= PSI_server->start_table_io_wait(NULL, NULL, PSI_TABLE_FETCH_ROW, 0, NULL, 0);
+ ok(table_locker == NULL, "no table_locker");
+ PSI_server->end_table_io_wait(NULL, 0);
+ table_locker= PSI_server->start_table_lock_wait(NULL, NULL, PSI_TABLE_LOCK, 0, NULL, 0);
+ ok(table_locker == NULL, "no table_locker");
+ PSI_server->end_table_lock_wait(NULL);
+ PSI_server->start_file_open_wait(NULL, NULL, 0);
+ file= PSI_server->end_file_open_wait(NULL, NULL);
+ ok(file == NULL, "no file");
+ PSI_server->end_file_open_wait_and_bind_to_descriptor(NULL, 0);
+ PSI_server->start_file_wait(NULL, 0, NULL, 0);
+ PSI_server->end_file_wait(NULL, 0);
+ PSI_server->start_file_close_wait(NULL, NULL, 0);
+ PSI_server->end_file_close_wait(NULL, 0);
+ PSI_server->end_file_rename_wait(NULL, NULL, NULL, 0);
+ PSI_server->start_stage(1, NULL, 0);
+
+ PSI_stage_progress *progress;
+ progress= PSI_server->get_current_stage_progress();
+ ok(progress == NULL, "no progress");
+
+ PSI_server->end_stage();
+ statement_locker= PSI_server->get_thread_statement_locker(NULL, 1, NULL, NULL);
+ ok(statement_locker == NULL, "no statement_locker");
+ statement_locker= PSI_server->refine_statement(NULL, 1);
+ ok(statement_locker == NULL, "no statement_locker");
+ PSI_server->start_statement(NULL, NULL, 0, NULL, 0);
+ PSI_server->set_statement_text(NULL, NULL, 0);
+ PSI_server->set_statement_lock_time(NULL, 0);
+ PSI_server->set_statement_rows_sent(NULL, 0);
+ PSI_server->set_statement_rows_examined(NULL, 0);
+ PSI_server->inc_statement_created_tmp_disk_tables(NULL, 0);
+ PSI_server->inc_statement_created_tmp_tables(NULL, 0);
+ PSI_server->inc_statement_select_full_join(NULL, 0);
+ PSI_server->inc_statement_select_full_range_join(NULL, 0);
+ PSI_server->inc_statement_select_range(NULL, 0);
+ PSI_server->inc_statement_select_range_check(NULL, 0);
+ PSI_server->inc_statement_select_scan(NULL, 0);
+ PSI_server->inc_statement_sort_merge_passes(NULL, 0);
+ PSI_server->inc_statement_sort_range(NULL, 0);
+ PSI_server->inc_statement_sort_rows(NULL, 0);
+ PSI_server->inc_statement_sort_scan(NULL, 0);
+ PSI_server->set_statement_no_index_used(NULL);
+ PSI_server->set_statement_no_good_index_used(NULL);
+ PSI_server->end_statement(NULL, NULL);
+ socket_locker= PSI_server->start_socket_wait(NULL, NULL, PSI_SOCKET_SEND, 1, NULL, 0);
+ ok(socket_locker == NULL, "no socket_locker");
+ PSI_server->end_socket_wait(NULL, 0);
+ PSI_server->set_socket_state(NULL, PSI_SOCKET_STATE_IDLE);
+ PSI_server->set_socket_info(NULL, NULL, NULL, 0);
+ PSI_server->set_socket_thread_owner(NULL);
+ digest_locker= PSI_server->digest_start(NULL);
+ ok(digest_locker == NULL, "no digest_locker");
+ PSI_server->digest_end(NULL, NULL);
+ sp_locker= PSI_server->start_sp(NULL, NULL);
+ ok(sp_locker == NULL, "no sp_locker");
+ PSI_server->end_sp(NULL);
+ PSI_server->drop_sp(0, NULL, 0, NULL, 0);
+ sp_share= PSI_server->get_sp_share(0, NULL, 0, NULL, 0);
+ ok(sp_share == NULL, "no sp_share");
+ PSI_server->release_sp_share(NULL);
+ PSI_server->register_memory(NULL, NULL, 0);
+ memory_key= PSI_server->memory_alloc(0, 0, & owner);
+ ok(memory_key == PSI_NOT_INSTRUMENTED, "no memory_key");
+ memory_key= PSI_server->memory_realloc(0, 0, 0, & owner);
+ ok(memory_key == PSI_NOT_INSTRUMENTED, "no memory_key");
+ PSI_server->memory_free(0, 0, NULL);
+ PSI_server->unlock_table(NULL);
+ metadata_lock= PSI_server->create_metadata_lock(NULL, NULL, 1, 2, 3, NULL, 0);
+ ok(metadata_lock == NULL, "no metadata_lock");
+ PSI_server->set_metadata_lock_status(NULL, 0);
+ PSI_server->destroy_metadata_lock(NULL);
+ metadata_locker= PSI_server->start_metadata_wait(NULL, NULL, NULL, 0);
+ ok(metadata_locker == NULL, "no metadata_locker");
+ PSI_server->end_metadata_wait(NULL, 0);
+
+ transaction_locker= PSI_server->get_thread_transaction_locker(NULL, NULL, 0, 1, false, 1);
+ ok(transaction_locker == NULL, "no transaction_locker");
+ PSI_server->start_transaction(NULL, NULL, 0);
+ PSI_server->end_transaction(NULL, true);
+
+ PSI_server->set_transaction_gtid(NULL, NULL, NULL);
+ PSI_server->set_transaction_trxid(NULL, NULL);
+ PSI_server->set_transaction_xa_state(NULL, 1);
+ PSI_server->set_transaction_xid(NULL, NULL, 1);
+ PSI_server->inc_transaction_release_savepoint(NULL, 1);
+ PSI_server->inc_transaction_rollback_to_savepoint(NULL, 1);
+ PSI_server->inc_transaction_savepoints(NULL, 1);
+
+ PSI_server->set_thread_THD(NULL, NULL);
+
+ ok(true, "all noop api called");
+}
+
+int main(int, char **)
+{
+ plan(34);
+
+ MY_INIT("pfs_noop-t");
+ test_noop();
+ return (exit_status());
+}
+
diff --git a/storage/perfschema/unittest/pfs_server_stubs.cc b/storage/perfschema/unittest/pfs_server_stubs.cc
index 0cabce37e51..5a855b2c147 100644
--- a/storage/perfschema/unittest/pfs_server_stubs.cc
+++ b/storage/perfschema/unittest/pfs_server_stubs.cc
@@ -1,4 +1,5 @@
-/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2010, 2017, 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, version 2.0,
@@ -29,6 +30,7 @@
#include "sql_class.h"
#include "sql_show.h"
+struct system_status_var global_status_var;
struct sql_digest_storage;
uint lower_case_table_names= 0;
@@ -39,6 +41,15 @@ void compute_digest_md5(const sql_digest_storage *, unsigned char *)
{
}
+void reset_status_vars()
+{
+}
+
+void sql_print_warning(const char *format, ...)
+{
+ /* Do not pollute the unit test output with annoying messages. */
+}
+
class sys_var { public: enum where { AUTO }; };
void set_sys_var_value_origin(void *ptr, enum sys_var::where here)
{
diff --git a/storage/perfschema/unittest/pfs_timer-t.cc b/storage/perfschema/unittest/pfs_timer-t.cc
index 139454b8649..6c852242537 100644
--- a/storage/perfschema/unittest/pfs_timer-t.cc
+++ b/storage/perfschema/unittest/pfs_timer-t.cc
@@ -22,7 +22,6 @@
#include <my_global.h>
#include <my_pthread.h>
-#include <pfs_atomic.h>
#include <pfs_timer.h>
#include "my_sys.h"
#include <tap.h>
diff --git a/storage/perfschema/unittest/pfs_user-oom-t.cc b/storage/perfschema/unittest/pfs_user-oom-t.cc
index ca451f3e457..864275b765e 100644
--- a/storage/perfschema/unittest/pfs_user-oom-t.cc
+++ b/storage/perfschema/unittest/pfs_user-oom-t.cc
@@ -21,21 +21,24 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#include <my_global.h>
-#include <my_pthread.h>
+#include <my_thread.h>
#include <pfs_instr.h>
#include <pfs_stat.h>
#include <pfs_global.h>
#include <pfs_user.h>
+#include <pfs_buffer_container.h>
#include <tap.h>
#include "stub_pfs_global.h"
+#include "stub_global_status_var.h"
#include <string.h> /* memset */
void test_oom()
{
- int rc;
+ PSI *psi;
PFS_global_param param;
+ PSI_bootstrap *boot;
memset(& param, 0xFF, sizeof(param));
param.m_enabled= true;
@@ -45,6 +48,7 @@ void test_oom()
param.m_thread_class_sizing= 10;
param.m_table_share_sizing= 0;
param.m_file_class_sizing= 0;
+ param.m_socket_class_sizing= 0;
param.m_mutex_sizing= 0;
param.m_rwlock_sizing= 0;
param.m_cond_sizing= 0;
@@ -52,6 +56,7 @@ void test_oom()
param.m_table_sizing= 0;
param.m_file_sizing= 0;
param.m_file_handle_sizing= 0;
+ param.m_socket_sizing= 0;
param.m_events_waits_history_sizing= 10;
param.m_events_waits_history_long_sizing= 0;
param.m_setup_actor_sizing= 0;
@@ -65,42 +70,64 @@ void test_oom()
param.m_statement_class_sizing= 50;
param.m_events_statements_history_sizing= 0;
param.m_events_statements_history_long_sizing= 0;
+ param.m_events_transactions_history_sizing= 0;
+ param.m_events_transactions_history_long_sizing= 0;
+ param.m_digest_sizing= 0;
+ param.m_session_connect_attrs_sizing= 0;
+ param.m_program_sizing= 0;
+ param.m_statement_stack_sizing= 0;
+ param.m_memory_class_sizing= 10;
+ param.m_metadata_lock_sizing= 0;
+ param.m_max_digest_length= 0;
+ param.m_max_sql_text_length= 0;
/* Setup */
stub_alloc_always_fails= false;
stub_alloc_fails_after_count= 1000;
- init_event_name_sizing(& param);
- rc= init_stage_class(param.m_stage_class_sizing);
- ok(rc == 0, "init stage class");
- rc= init_statement_class(param.m_statement_class_sizing);
- ok(rc == 0, "init statement class");
+ pre_initialize_performance_schema();
+ boot= initialize_performance_schema(&param);
+ psi= (PSI *)boot->get_interface(PSI_VERSION_1);
+
+ PSI_thread_key thread_key_1;
+ PSI_thread_info all_thread[]=
+ {
+ {&thread_key_1, "T-1", 0}
+ };
+ psi->register_thread("test", all_thread, 1);
+
+ PSI_thread *thread_1= psi->new_thread(thread_key_1, NULL, 0);
+ psi->set_thread(thread_1);
/* Tests */
- stub_alloc_fails_after_count= 1;
- rc= init_user(& param);
- ok(rc == 1, "oom (user)");
- cleanup_user();
+ int first_fail= 1;
+ stub_alloc_fails_after_count= first_fail;
+ psi->set_thread_account("user1", 5, "", 0);
+ ok(global_user_container.m_lost == 1, "oom (user)");
+
+ stub_alloc_fails_after_count= first_fail + 1;
+ psi->set_thread_account("user2", 5, "", 0);
+ ok(global_user_container.m_lost == 2, "oom (user waits)");
+
+ stub_alloc_fails_after_count= first_fail + 2;
+ psi->set_thread_account("user3", 5, "", 0);
+ ok(global_user_container.m_lost == 3, "oom (user stages)");
- stub_alloc_fails_after_count= 2;
- rc= init_user(& param);
- ok(rc == 1, "oom (user waits)");
- cleanup_user();
+ stub_alloc_fails_after_count= first_fail + 3;
+ psi->set_thread_account("user4", 5, "", 0);
+ ok(global_user_container.m_lost == 4, "oom (user statements)");
- stub_alloc_fails_after_count= 3;
- rc= init_user(& param);
- ok(rc == 1, "oom (user stages)");
- cleanup_user();
+ stub_alloc_fails_after_count= first_fail + 4;
+ psi->set_thread_account("user5", 5, "", 0);
+ ok(global_user_container.m_lost == 5, "oom (user transactions)");
- stub_alloc_fails_after_count= 4;
- rc= init_user(& param);
- ok(rc == 1, "oom (user statements)");
- cleanup_user();
+ stub_alloc_fails_after_count= first_fail + 5;
+ psi->set_thread_account("user6", 5, "", 0);
+ ok(global_user_container.m_lost == 6, "oom (user memory)");
- cleanup_statement_class();
- cleanup_stage_class();
+ shutdown_performance_schema();
}
void do_all_tests()
diff --git a/storage/perfschema/unittest/stub_global_status_var.h b/storage/perfschema/unittest/stub_global_status_var.h
new file mode 100644
index 00000000000..c870b863331
--- /dev/null
+++ b/storage/perfschema/unittest/stub_global_status_var.h
@@ -0,0 +1,31 @@
+/* Copyright (c) 2015, 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, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include <my_global.h>
+#include <my_sys.h>
+#include <pfs_global.h>
+#include <string.h>
+
+
+void add_to_status(STATUS_VAR *to_var, STATUS_VAR *from_var)
+{
+}
diff --git a/storage/perfschema/unittest/stub_pfs_global.h b/storage/perfschema/unittest/stub_pfs_global.h
index 8a1f9216ba2..23b731cb8b2 100644
--- a/storage/perfschema/unittest/stub_pfs_global.h
+++ b/storage/perfschema/unittest/stub_pfs_global.h
@@ -26,11 +26,13 @@
#include <string.h>
bool pfs_initialized= false;
+size_t pfs_allocated_memory_size= 0;
+size_t pfs_allocated_memory_count= 0;
bool stub_alloc_always_fails= true;
int stub_alloc_fails_after_count= 0;
-void *pfs_malloc(size_t size, myf)
+void *pfs_malloc(PFS_builtin_memory_class *klass, size_t size, myf)
{
/*
Catch non initialized sizing parameter in the unit tests.
@@ -49,19 +51,27 @@ void *pfs_malloc(size_t size, myf)
return ptr;
}
-void pfs_free(void *ptr)
+void pfs_free(PFS_builtin_memory_class *, size_t, void *ptr)
{
if (ptr != NULL)
free(ptr);
}
-void *pfs_malloc_array(size_t n, size_t size, myf flags)
+void *pfs_malloc_array(PFS_builtin_memory_class *klass, size_t n, size_t size, myf flags)
{
size_t array_size= n * size;
/* Check for overflow before allocating. */
if (is_overflow(array_size, n, size))
return NULL;
- return pfs_malloc(array_size, flags);
+ return pfs_malloc(klass, array_size, flags);
+}
+
+void pfs_free_array(PFS_builtin_memory_class *klass, size_t n, size_t size, void *ptr)
+{
+ if (ptr == NULL)
+ return;
+ size_t array_size= n * size;
+ return pfs_free(klass, array_size, ptr);
}
bool is_overflow(size_t product, size_t n1, size_t n2)
@@ -76,3 +86,4 @@ void pfs_print_error(const char *format, ...)
{
}
+
diff --git a/storage/perfschema/unittest/stub_print_error.h b/storage/perfschema/unittest/stub_print_error.h
index 2cd2ad5b03c..8d87fbe5923 100644
--- a/storage/perfschema/unittest/stub_print_error.h
+++ b/storage/perfschema/unittest/stub_print_error.h
@@ -26,7 +26,7 @@
bool pfs_initialized= false;
-void *pfs_malloc(size_t size, myf flags)
+void *pfs_malloc(PFS_builtin_memory_class *klass, size_t size, myf flags)
{
void *ptr= malloc(size);
if (ptr && (flags & MY_ZEROFILL))
@@ -34,19 +34,27 @@ void *pfs_malloc(size_t size, myf flags)
return ptr;
}
-void pfs_free(void *ptr)
+void pfs_free(PFS_builtin_memory_class *, size_t, void *ptr)
{
if (ptr != NULL)
free(ptr);
}
-void *pfs_malloc_array(size_t n, size_t size, myf flags)
+void *pfs_malloc_array(PFS_builtin_memory_class *klass, size_t n, size_t size, myf flags)
{
size_t array_size= n * size;
/* Check for overflow before allocating. */
if (is_overflow(array_size, n, size))
return NULL;
- return pfs_malloc(array_size, flags);
+ return pfs_malloc(klass, array_size, flags);
+}
+
+void pfs_free_array(PFS_builtin_memory_class *klass, size_t n, size_t size, void *ptr)
+{
+ if (ptr == NULL)
+ return;
+ size_t array_size= n * size;
+ return pfs_free(klass, array_size, ptr);
}
bool is_overflow(size_t product, size_t n1, size_t n2)
diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc
index 8488f9ee963..3b2314d3f42 100644
--- a/storage/rocksdb/ha_rocksdb.cc
+++ b/storage/rocksdb/ha_rocksdb.cc
@@ -4788,10 +4788,10 @@ static inline void rocksdb_register_tx(handlerton *const hton, THD *const thd,
Rdb_transaction *const tx) {
DBUG_ASSERT(tx != nullptr);
- trans_register_ha(thd, FALSE, rocksdb_hton);
+ trans_register_ha(thd, FALSE, rocksdb_hton, 0);
if (my_core::thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) {
tx->start_stmt();
- trans_register_ha(thd, TRUE, rocksdb_hton);
+ trans_register_ha(thd, TRUE, rocksdb_hton, 0);
}
}
@@ -5970,6 +5970,7 @@ Rdb_table_handler *Rdb_open_tables_map::get_table_handler(
// Since we did not find it in the hash map, attempt to create and add it
// to the hash map.
if (!(table_handler = reinterpret_cast<Rdb_table_handler *>(my_multi_malloc(
+ PSI_INSTRUMENT_ME,
MYF(MY_WME | MY_ZEROFILL), &table_handler, sizeof(*table_handler),
&tmp_name, table_name_str.length() + 1, NullS)))) {
// Allocating a new Rdb_table_handler and a new table name failed.
@@ -6550,11 +6551,11 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg,
// move this into get_table_handler() ??
m_pk_descr->setup(table_arg, tbl_def_arg);
- m_pk_tuple = reinterpret_cast<uchar *>(my_malloc(key_len, MYF(0)));
+ m_pk_tuple = reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, key_len, MYF(0)));
pack_key_len = m_pk_descr->max_storage_fmt_length();
m_pk_packed_tuple =
- reinterpret_cast<uchar *>(my_malloc(pack_key_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, pack_key_len, MYF(0)));
/* Sometimes, we may use m_sk_packed_tuple for storing packed PK */
max_packed_sk_len = pack_key_len;
@@ -6572,20 +6573,20 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg,
}
m_sk_packed_tuple =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_sk_match_prefix_buf =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_sk_packed_tuple_old =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_end_key_packed_tuple =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_pack_buffer =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_scan_it_lower_bound =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_scan_it_upper_bound =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
/*
If inplace alter is happening, allocate special buffers for unique
@@ -6593,9 +6594,9 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg,
*/
if (alloc_alter_buffers) {
m_dup_sk_packed_tuple =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
m_dup_sk_packed_tuple_old =
- reinterpret_cast<uchar *>(my_malloc(max_packed_sk_len, MYF(0)));
+ reinterpret_cast<uchar *>(my_malloc(PSI_INSTRUMENT_ME, max_packed_sk_len, MYF(0)));
}
if (m_pk_tuple == nullptr || m_pk_packed_tuple == nullptr ||
@@ -8344,11 +8345,9 @@ int ha_rocksdb::read_range_first(const key_range *const start_key,
#endif
increment_statistics(&SSV::ha_read_key_count);
- MYSQL_TABLE_IO_WAIT(m_psi, PSI_TABLE_FETCH_ROW, active_index, 0, {
- result =
- index_read_map_impl(table->record[0], start_key->key,
- start_key->keypart_map, start_key->flag, end_key);
- })
+ result =
+ index_read_map_impl(table->record[0], start_key->key,
+ start_key->keypart_map, start_key->flag, end_key);
}
if (result) {
DBUG_RETURN((result == HA_ERR_KEY_NOT_FOUND) ? HA_ERR_END_OF_FILE : result);
@@ -14131,7 +14130,7 @@ void rocksdb_set_collation_exception_list(THD *const thd,
rdb_set_collation_exception_list(val == nullptr ? "" : val);
//psergey-todo: what is the purpose of the below??
- const char *val_copy= val? my_strdup(val, MYF(0)): nullptr;
+ const char *val_copy= val? my_strdup(PSI_INSTRUMENT_ME, val, MYF(0)): nullptr;
my_free(*static_cast<char**>(var_ptr));
*static_cast<const char**>(var_ptr) = val_copy;
}
@@ -14344,7 +14343,7 @@ static int rocksdb_validate_update_cf_options(
// This can cause invalid memory access after validation is finished.
// To avoid this kind case, let's alway duplicate the str if str is not
// nullptr
- *(const char **)save = (str == nullptr) ? nullptr : my_strdup(str, MYF(0));
+ *(const char **)save = (str == nullptr) ? nullptr : my_strdup(PSI_INSTRUMENT_ME, str, MYF(0));
if (str == nullptr) {
return HA_EXIT_SUCCESS;
diff --git a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result
index 6fef17d7a16..2bf7d381ce8 100644
--- a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result
+++ b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result
@@ -180,7 +180,7 @@ log_checkpoints recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0
log_lsn_last_flush recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value LSN of Last flush
log_lsn_last_checkpoint recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value LSN at last checkpoint
log_lsn_current recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Current LSN value
-log_lsn_checkpoint_age recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Current LSN value minus LSN at last checkpoint
+log_lsn_checkpoint_age recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Current LSN value minus LSN at last checkpoint
log_lsn_buf_pool_oldest recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value The oldest modified block LSN in the buffer pool
log_max_modified_age_async recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Maximum LSN difference; when exceeded, start asynchronous preflush
log_max_modified_age_sync recovery 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Maximum LSN difference; when exceeded, start synchronous preflush
diff --git a/storage/rocksdb/rdb_converter.cc b/storage/rocksdb/rdb_converter.cc
index 677ff106753..e799d67f813 100644
--- a/storage/rocksdb/rdb_converter.cc
+++ b/storage/rocksdb/rdb_converter.cc
@@ -436,7 +436,7 @@ void Rdb_converter::setup_field_encoders() {
uchar cur_null_mask = 0x1;
m_encoder_arr = static_cast<Rdb_field_encoder *>(
- my_malloc(m_table->s->fields * sizeof(Rdb_field_encoder), MYF(0)));
+ my_malloc(PSI_INSTRUMENT_ME, m_table->s->fields * sizeof(Rdb_field_encoder), MYF(0)));
if (m_encoder_arr == nullptr) {
return;
}
diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc
index 00e6b95a748..a7b44ff85ab 100644
--- a/storage/rocksdb/rdb_datadic.cc
+++ b/storage/rocksdb/rdb_datadic.cc
@@ -368,14 +368,14 @@ Rdb_key_def::Rdb_key_def(const Rdb_key_def &k)
m_total_index_flags_length == 0);
if (k.m_pack_info) {
const size_t size = sizeof(Rdb_field_packing) * k.m_key_parts;
- void *pack_info= my_malloc(size, MYF(0));
+ void *pack_info= my_malloc(PSI_INSTRUMENT_ME, size, MYF(0));
memcpy(pack_info, k.m_pack_info, size);
m_pack_info = reinterpret_cast<Rdb_field_packing *>(pack_info);
}
if (k.m_pk_part_no) {
const size_t size = sizeof(uint) * m_key_parts;
- m_pk_part_no = reinterpret_cast<uint *>(my_malloc(size, MYF(0)));
+ m_pk_part_no = reinterpret_cast<uint *>(my_malloc(PSI_INSTRUMENT_ME, size, MYF(0)));
memcpy(m_pk_part_no, k.m_pk_part_no, size);
}
}
@@ -449,14 +449,14 @@ void Rdb_key_def::setup(const TABLE *const tbl,
if (secondary_key) {
m_pk_part_no = reinterpret_cast<uint *>(
- my_malloc(sizeof(uint) * m_key_parts, MYF(0)));
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(uint) * m_key_parts, MYF(0)));
} else {
m_pk_part_no = nullptr;
}
const size_t size = sizeof(Rdb_field_packing) * m_key_parts;
m_pack_info =
- reinterpret_cast<Rdb_field_packing *>(my_malloc(size, MYF(0)));
+ reinterpret_cast<Rdb_field_packing *>(my_malloc(PSI_INSTRUMENT_ME, size, MYF(0)));
/*
Guaranteed not to error here as checks have been made already during
@@ -3121,7 +3121,7 @@ static const Rdb_collation_codec *rdb_init_collation_mapping(
for (uint idx = 0; idx < p.second.size(); idx++) {
uchar src = p.second[idx];
uchar bits =
- my_bit_log2(my_round_up_to_next_power(p.second.size()));
+ my_bit_log2_uint32(my_round_up_to_next_power(p.second.size()));
cur->m_enc_idx[src] = idx;
cur->m_enc_size[src] = bits;
cur->m_dec_size[dst] = bits;
diff --git a/storage/sphinx/ha_sphinx.cc b/storage/sphinx/ha_sphinx.cc
index 2688b54725c..29ac8318700 100644
--- a/storage/sphinx/ha_sphinx.cc
+++ b/storage/sphinx/ha_sphinx.cc
@@ -596,6 +596,7 @@ private:
struct Override_t
{
+ Override_t() : m_dIds(PSI_INSTRUMENT_MEM), m_dValues(PSI_INSTRUMENT_MEM) {}
union Value_t
{
uint32 m_uValue;
@@ -737,8 +738,9 @@ static int sphinx_init_func ( void * p )
{
sphinx_init = 1;
void ( pthread_mutex_init ( &sphinx_mutex, MY_MUTEX_INIT_FAST ) );
- sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0,
- sphinx_get_key, 0, 0 );
+ sphinx_hash_init ( PSI_NOT_INSTRUMENTED, &sphinx_open_tables,
+ system_charset_info, 32, 0, 0,
+ sphinx_get_key, 0, 0 );
#if MYSQL_VERSION_ID > 50100
handlerton * hton = (handlerton*) p;
@@ -1303,6 +1305,7 @@ CSphSEQuery::CSphSEQuery ( const char * sQuery, int iLength, const char * sIndex
, m_fGeoLongitude ( 0.0f )
, m_sComment ( (char*) "" )
, m_sSelect ( (char*) "*" )
+ , m_dOverrides (PSI_INSTRUMENT_MEM)
, m_pBuf ( NULL )
, m_pCur ( NULL )
diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc
index 1cec6c894c2..694f612ff63 100644
--- a/storage/spider/ha_spider.cc
+++ b/storage/spider/ha_spider.cc
@@ -13594,7 +13594,7 @@ void ha_spider::set_error_mode()
case SQLCOM_SHOW_ENGINE_STATUS:
case SQLCOM_SHOW_ENGINE_MUTEX:
case SQLCOM_SHOW_PROCESSLIST:
- case SQLCOM_SHOW_MASTER_STAT:
+ case SQLCOM_SHOW_BINLOG_STAT:
case SQLCOM_SHOW_SLAVE_STAT:
case SQLCOM_SHOW_GRANTS:
case SQLCOM_SHOW_CREATE:
diff --git a/storage/spider/hs_client/config.cpp b/storage/spider/hs_client/config.cpp
index 97d479220e0..0003c3fd645 100644
--- a/storage/spider/hs_client/config.cpp
+++ b/storage/spider/hs_client/config.cpp
@@ -35,8 +35,8 @@ conf_get_key(
config::config()
{
- if (my_hash_init(&conf_hash, &my_charset_bin, 32, 0, 0,
- (my_hash_get_key) conf_get_key, 0, 0))
+ if (my_hash_init(PSI_INSTRUMENT_ME, &conf_hash, &my_charset_bin, 32, 0, 0,
+ (my_hash_get_key) conf_get_key, 0, 0))
init = FALSE;
else
init = TRUE;
diff --git a/storage/spider/hs_client/hs_compat.h b/storage/spider/hs_client/hs_compat.h
index 8505d7978b7..fb9b02ad4f0 100644
--- a/storage/spider/hs_client/hs_compat.h
+++ b/storage/spider/hs_client/hs_compat.h
@@ -16,7 +16,12 @@
#ifndef HS_COMPAT_H
#define HS_COMPAT_H
-#if defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100213
+#if defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100500
+#define SPD_INIT_DYNAMIC_ARRAY2(A, B, C, D, E, F) \
+ my_init_dynamic_array2(PSI_INSTRUMENT_ME, A, B, C, D, E, F)
+#define SPD_INIT_ALLOC_ROOT(A, B, C, D) \
+ init_alloc_root(PSI_INSTRUMENT_ME, A, B, C, D)
+#elif defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100213
#define SPD_INIT_DYNAMIC_ARRAY2(A, B, C, D, E, F) \
my_init_dynamic_array2(A, B, C, D, E, F)
#define SPD_INIT_ALLOC_ROOT(A, B, C, D) \
diff --git a/storage/spider/spd_conn.cc b/storage/spider/spd_conn.cc
index 3ef8d4e0725..fe0ddd1d736 100644
--- a/storage/spider/spd_conn.cc
+++ b/storage/spider/spd_conn.cc
@@ -4534,7 +4534,8 @@ SPIDER_IP_PORT_CONN* spider_create_ipport_conn(SPIDER_CONN *conn)
DBUG_ENTER("spider_create_ipport_conn");
if (conn)
{
- SPIDER_IP_PORT_CONN *ret = (SPIDER_IP_PORT_CONN *) my_malloc(sizeof(*ret), MY_ZEROFILL | MY_WME);
+ SPIDER_IP_PORT_CONN *ret = (SPIDER_IP_PORT_CONN *)
+ my_malloc(PSI_INSTRUMENT_ME, sizeof(*ret), MY_ZEROFILL | MY_WME);
if (!ret)
{
goto err_return_direct;
@@ -4568,8 +4569,8 @@ SPIDER_IP_PORT_CONN* spider_create_ipport_conn(SPIDER_CONN *conn)
goto err_malloc_key;
}
- ret->key = (char *) my_malloc(ret->key_len + conn->tgt_host_length + 1,
- MY_ZEROFILL | MY_WME);
+ ret->key = (char *) my_malloc(PSI_INSTRUMENT_ME, ret->key_len +
+ conn->tgt_host_length + 1, MY_ZEROFILL | MY_WME);
if (!ret->key) {
pthread_cond_destroy(&ret->cond);
pthread_mutex_destroy(&ret->mutex);
diff --git a/storage/spider/spd_copy_tables.cc b/storage/spider/spd_copy_tables.cc
index 1a472e2c12b..19023a00da3 100644
--- a/storage/spider/spd_copy_tables.cc
+++ b/storage/spider/spd_copy_tables.cc
@@ -997,7 +997,7 @@ long long spider_copy_tables_body(
#if MYSQL_VERSION_ID < 50500
if (open_and_lock_tables(thd, table_list))
#else
- table_list->mdl_request.init(
+ MDL_REQUEST_INIT(&table_list->mdl_request,
MDL_key::TABLE,
SPIDER_TABLE_LIST_db_str(table_list),
SPIDER_TABLE_LIST_table_name_str(table_list),
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index ef405c68410..10f3cbd09b9 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -1866,7 +1866,7 @@ int spider_db_mbase::init()
DBUG_ENTER("spider_db_mbase::init");
DBUG_PRINT("info",("spider this=%p", this));
if (
- my_hash_init(&lock_table_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
+ my_hash_init(PSI_INSTRUMENT_ME, &lock_table_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_link_get_key, 0, 0)
) {
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
diff --git a/storage/spider/spd_direct_sql.cc b/storage/spider/spd_direct_sql.cc
index 7bf0b91a4a7..406d189fcc9 100644
--- a/storage/spider/spd_direct_sql.cc
+++ b/storage/spider/spd_direct_sql.cc
@@ -1751,7 +1751,7 @@ long long spider_direct_sql_body(
SPIDER_TABLE_LIST_table_name_length(&table_list),
SPIDER_TABLE_LIST_table_name_str(&table_list), TL_WRITE);
#endif
- tables->mdl_request.init(MDL_key::TABLE,
+ MDL_REQUEST_INIT(&tables->mdl_request, MDL_key::TABLE,
SPIDER_TABLE_LIST_db_str(&table_list),
SPIDER_TABLE_LIST_table_name_str(&table_list),
MDL_SHARED_WRITE, MDL_TRANSACTION);
diff --git a/storage/spider/spd_malloc.cc b/storage/spider/spd_malloc.cc
index 40b37ff4377..9f4203ae33d 100644
--- a/storage/spider/spd_malloc.cc
+++ b/storage/spider/spd_malloc.cc
@@ -203,7 +203,7 @@ void *spider_alloc_mem(
uchar *ptr;
DBUG_ENTER("spider_alloc_mem");
size += ALIGN_SIZE(sizeof(uint)) + ALIGN_SIZE(sizeof(uint));
- if (!(ptr = (uchar *) my_malloc(size, my_flags)))
+ if (!(ptr = (uchar *) my_malloc(PSI_INSTRUMENT_ME, size, my_flags)))
DBUG_RETURN(NULL);
spider_alloc_mem_calc(trx, id, func_name, file_name, line_no, size);
@@ -233,7 +233,7 @@ void *spider_bulk_alloc_mem(
total_size += ALIGN_SIZE(va_arg(args, uint));
va_end(args);
- if (!(top_ptr = (uchar *) my_malloc(total_size, my_flags)))
+ if (!(top_ptr = (uchar *) my_malloc(PSI_INSTRUMENT_ME, total_size, my_flags)))
DBUG_RETURN(NULL);
spider_alloc_mem_calc(trx, id, func_name, file_name, line_no, total_size);
diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc
index ee41d39df0f..b5aa1a0a93d 100644
--- a/storage/spider/spd_table.cc
+++ b/storage/spider/spd_table.cc
@@ -6138,7 +6138,7 @@ SPIDER_PARTITION_SHARE *spider_get_pt_share(
}
if(
- my_hash_init(&partition_share->pt_handler_hash, spd_charset_utf8mb3_bin,
+ my_hash_init(PSI_INSTRUMENT_ME, &partition_share->pt_handler_hash, spd_charset_utf8mb3_bin,
32, 0, 0, (my_hash_get_key) spider_pt_handler_share_get_key, 0, 0)
) {
*error_num = HA_ERR_OUT_OF_MEM;
@@ -7184,7 +7184,7 @@ int spider_db_init(
#endif
goto error_mem_calc_mutex_init;
- if (my_hash_init(&spider_open_tables, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_open_tables, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_tbl_get_key, 0, 0))
goto error_open_tables_hash_init;
@@ -7193,7 +7193,7 @@ int spider_db_init(
spider_open_tables,
spider_open_tables.array.max_element *
spider_open_tables.array.size_of_element);
- if (my_hash_init(&spider_init_error_tables, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_init_error_tables, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_tbl_get_key, 0, 0))
goto error_init_error_tables_hash_init;
@@ -7203,7 +7203,7 @@ int spider_db_init(
spider_init_error_tables.array.max_element *
spider_init_error_tables.array.size_of_element);
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (my_hash_init(&spider_open_pt_share, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_open_pt_share, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_pt_share_get_key, 0, 0))
goto error_open_pt_share_hash_init;
@@ -7213,10 +7213,9 @@ int spider_db_init(
spider_open_pt_share.array.max_element *
spider_open_pt_share.array.size_of_element);
#endif
- if (my_hash_init(&spider_lgtm_tblhnd_share_hash, spd_charset_utf8mb3_bin,
- 32, 0, 0,
- (my_hash_get_key) spider_lgtm_tblhnd_share_hash_get_key,
- 0, 0))
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_lgtm_tblhnd_share_hash,
+ spd_charset_utf8mb3_bin, 32, 0, 0,
+ (my_hash_get_key) spider_lgtm_tblhnd_share_hash_get_key, 0, 0))
goto error_lgtm_tblhnd_share_hash_init;
spider_alloc_calc_mem_init(spider_lgtm_tblhnd_share_hash, 245);
@@ -7224,11 +7223,11 @@ int spider_db_init(
spider_lgtm_tblhnd_share_hash,
spider_lgtm_tblhnd_share_hash.array.max_element *
spider_lgtm_tblhnd_share_hash.array.size_of_element);
- if (my_hash_init(&spider_open_connections, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_open_connections, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_conn_get_key, 0, 0))
goto error_open_connections_hash_init;
- if (my_hash_init(&spider_ipport_conns, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_ipport_conns, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_ipport_conn_get_key,
spider_free_ipport_conn, 0))
goto error_ipport_conn__hash_init;
@@ -7239,7 +7238,7 @@ int spider_db_init(
spider_open_connections.array.max_element *
spider_open_connections.array.size_of_element);
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
- if (my_hash_init(&spider_hs_r_conn_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_hs_r_conn_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_conn_get_key, 0, 0))
goto error_hs_r_conn_hash_init;
@@ -7248,7 +7247,7 @@ int spider_db_init(
spider_hs_r_conn_hash,
spider_hs_r_conn_hash.array.max_element *
spider_hs_r_conn_hash.array.size_of_element);
- if (my_hash_init(&spider_hs_w_conn_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_hs_w_conn_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_conn_get_key, 0, 0))
goto error_hs_w_conn_hash_init;
@@ -7258,7 +7257,7 @@ int spider_db_init(
spider_hs_w_conn_hash.array.max_element *
spider_hs_w_conn_hash.array.size_of_element);
#endif
- if (my_hash_init(&spider_allocated_thds, spd_charset_utf8mb3_bin, 32, 0, 0,
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_allocated_thds, spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_allocated_thds_get_key, 0, 0))
goto error_allocated_thds_hash_init;
@@ -7319,7 +7318,7 @@ int spider_db_init(
roop_count < (int) spider_param_udf_table_mon_mutex_count();
roop_count++)
{
- if (my_hash_init(&spider_udf_table_mon_list_hash[roop_count],
+ if (my_hash_init(PSI_INSTRUMENT_ME, &spider_udf_table_mon_list_hash[roop_count],
spd_charset_utf8mb3_bin, 32, 0, 0,
(my_hash_get_key) spider_udf_tbl_mon_list_key, 0, 0))
goto error_init_udf_table_mon_list_hash;
diff --git a/storage/spider/spd_trx.cc b/storage/spider/spd_trx.cc
index ad2a35aac15..8062ea68646 100644
--- a/storage/spider/spd_trx.cc
+++ b/storage/spider/spd_trx.cc
@@ -1237,8 +1237,9 @@ SPIDER_TRX *spider_get_trx(
}
if (
- my_hash_init(&trx->trx_conn_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
- (my_hash_get_key) spider_conn_get_key, 0, 0)
+ my_hash_init(PSI_INSTRUMENT_ME, &trx->trx_conn_hash,
+ spd_charset_utf8mb3_bin, 32, 0, 0, (my_hash_get_key)
+ spider_conn_get_key, 0, 0)
)
goto error_init_hash;
spider_alloc_calc_mem_init(trx->trx_conn_hash, 151);
@@ -1249,8 +1250,9 @@ SPIDER_TRX *spider_get_trx(
trx->trx_conn_hash.array.size_of_element);
if (
- my_hash_init(&trx->trx_another_conn_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
- (my_hash_get_key) spider_conn_get_key, 0, 0)
+ my_hash_init(PSI_INSTRUMENT_ME, &trx->trx_another_conn_hash,
+ spd_charset_utf8mb3_bin, 32, 0, 0, (my_hash_get_key)
+ spider_conn_get_key, 0, 0)
)
goto error_init_another_hash;
spider_alloc_calc_mem_init(trx->trx_another_conn_hash, 152);
@@ -1313,8 +1315,9 @@ SPIDER_TRX *spider_get_trx(
#endif
if (
- my_hash_init(&trx->trx_alter_table_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
- (my_hash_get_key) spider_alter_tbl_get_key, 0, 0)
+ my_hash_init(PSI_INSTRUMENT_ME, &trx->trx_alter_table_hash,
+ spd_charset_utf8mb3_bin, 32, 0, 0, (my_hash_get_key)
+ spider_alter_tbl_get_key, 0, 0)
)
goto error_init_alter_hash;
spider_alloc_calc_mem_init(trx->trx_alter_table_hash, 157);
@@ -1325,8 +1328,9 @@ SPIDER_TRX *spider_get_trx(
trx->trx_alter_table_hash.array.size_of_element);
if (
- my_hash_init(&trx->trx_ha_hash, spd_charset_utf8mb3_bin, 32, 0, 0,
- (my_hash_get_key) spider_trx_ha_get_key, 0, 0)
+ my_hash_init(PSI_INSTRUMENT_ME, &trx->trx_ha_hash,
+ spd_charset_utf8mb3_bin, 32, 0, 0, (my_hash_get_key)
+ spider_trx_ha_get_key, 0, 0)
)
goto error_init_trx_ha_hash;
spider_alloc_calc_mem_init(trx->trx_ha_hash, 158);
@@ -1990,9 +1994,9 @@ int spider_internal_start_trx(
trx->trx_consistent_snapshot ? "TRUE" : "FALSE"));
if (!trx->trx_consistent_snapshot)
{
- trans_register_ha(thd, FALSE, spider_hton_ptr);
+ trans_register_ha(thd, FALSE, spider_hton_ptr, 0);
if (thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
- trans_register_ha(thd, TRUE, spider_hton_ptr);
+ trans_register_ha(thd, TRUE, spider_hton_ptr, 0);
}
trx->trx_start = TRUE;
trx->trx_xa_prepared = FALSE;
@@ -3335,8 +3339,8 @@ int spider_start_consistent_snapshot(
trx->trx_consistent_snapshot = TRUE;
trx->use_consistent_snapshot = TRUE;
trx->internal_xa_snapshot = spider_param_internal_xa_snapshot(trx->thd);
- trans_register_ha(trx->thd, FALSE, spider_hton_ptr);
- trans_register_ha(trx->thd, TRUE, spider_hton_ptr);
+ trans_register_ha(trx->thd, FALSE, spider_hton_ptr, 0);
+ trans_register_ha(trx->thd, TRUE, spider_hton_ptr, 0);
if (spider_param_use_all_conns_snapshot(trx->thd))
{
trx->internal_xa = FALSE;
diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c
index a046bf352c4..6a351c05823 100644
--- a/strings/ctype-tis620.c
+++ b/strings/ctype-tis620.c
@@ -524,7 +524,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
tc1= buf;
if ((len1 + len2 +2) > (int) sizeof(buf))
- tc1= (uchar*) my_malloc(len1+len2+2, MYF(MY_FAE));
+ tc1= (uchar*) my_malloc(PSI_INSTRUMENT_ME, len1+len2+2, MYF(MY_FAE));
tc2= tc1 + len1+1;
memcpy((char*) tc1, (char*) s1, len1);
tc1[len1]= 0; /* if length(s1)> len1, need to put 'end of string' */
@@ -550,7 +550,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
a= buf;
if ((a_length + b_length +2) > (int) sizeof(buf))
- alloced= a= (uchar*) my_malloc(a_length+b_length+2, MYF(MY_FAE));
+ alloced= a= (uchar*) my_malloc(PSI_INSTRUMENT_ME, a_length+b_length+2, MYF(MY_FAE));
b= a + a_length+1;
memcpy((char*) a, (char*) a0, a_length);
diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c
index add0bd422e8..cf4a7eedabf 100644
--- a/strings/my_vsnprintf.c
+++ b/strings/my_vsnprintf.c
@@ -759,7 +759,7 @@ int my_vfprintf(FILE *stream, const char* format, va_list args)
if (new_len < cur_len)
return 0; /* Overflow */
cur_len= new_len;
- p= my_malloc(cur_len, MYF(MY_FAE));
+ p= my_malloc(PSI_INSTRUMENT_ME, cur_len, MYF(MY_FAE));
if (!p)
return 0;
}
diff --git a/strings/xml.c b/strings/xml.c
index 0178ea2574e..d16df34bf30 100644
--- a/strings/xml.c
+++ b/strings/xml.c
@@ -232,12 +232,12 @@ static int my_xml_attr_ensure_space(MY_XML_PARSER *st, size_t len)
if (!st->attr.buffer)
{
- st->attr.buffer= (char *) my_malloc(st->attr.buffer_size, MYF(0));
+ st->attr.buffer= (char *) my_malloc(PSI_INSTRUMENT_ME, st->attr.buffer_size, MYF(0));
if (st->attr.buffer)
memcpy(st->attr.buffer, st->attr.static_buffer, ofs + 1 /*term. zero */);
}
else
- st->attr.buffer= (char *) my_realloc(st->attr.buffer,
+ st->attr.buffer= (char *) my_realloc(PSI_INSTRUMENT_ME, st->attr.buffer,
st->attr.buffer_size, MYF(0));
st->attr.start= st->attr.buffer;
st->attr.end= st->attr.start + ofs;
diff --git a/tests/async_queries.c b/tests/async_queries.c
index 60b58685daa..e1b7061eaa9 100644
--- a/tests/async_queries.c
+++ b/tests/async_queries.c
@@ -314,8 +314,8 @@ add_query(const char *q)
char *q2;
size_t len;
- e= my_malloc(sizeof(*e), MYF(0));
- q2= my_strdup(q, MYF(0));
+ e= my_malloc(PSI_NOT_INSTRUMENTED, sizeof(*e), MYF(0));
+ q2= my_strdup(PSI_NOT_INSTRUMENTED, q, MYF(0));
if (!e || !q2)
fatal(NULL, "Out of memory");
@@ -394,7 +394,7 @@ main(int argc, char *argv[])
add_query(*argv++);
}
- sds= my_malloc(opt_connections * sizeof(*sds), MYF(0));
+ sds= my_malloc(PSI_NOT_INSTRUMENTED, opt_connections * sizeof(*sds), MYF(0));
if (!sds)
fatal(NULL, "Out of memory");
diff --git a/tests/mysql_client_fw.c b/tests/mysql_client_fw.c
index cfcb6690f4a..aea0562672c 100644
--- a/tests/mysql_client_fw.c
+++ b/tests/mysql_client_fw.c
@@ -1288,7 +1288,7 @@ get_one_option(const struct my_option *opt, char *argument,
{
char *start=argument;
my_free(opt_password);
- opt_password= my_strdup(argument, MYF(MY_FAE));
+ opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
if (*start)
start[1]=0;
@@ -1319,7 +1319,7 @@ get_one_option(const struct my_option *opt, char *argument,
}
if (embedded_server_arg_count == MAX_SERVER_ARGS-1 ||
!(embedded_server_args[embedded_server_arg_count++]=
- my_strdup(argument, MYF(MY_FAE))))
+ my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE))))
{
DIE("Can't use server argument");
}
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 16bfa72985f..ce3deb7882d 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -19033,7 +19033,7 @@ static void test_bug56976()
rc= mysql_stmt_bind_param(stmt, bind);
check_execute(stmt, rc);
- long_buffer= (char*) my_malloc(packet_len, MYF(0));
+ long_buffer= (char*) my_malloc(PSI_NOT_INSTRUMENTED, packet_len, MYF(0));
DIE_UNLESS(long_buffer);
memset(long_buffer, 'a', packet_len);
@@ -19779,7 +19779,7 @@ static void test_big_packet()
myheader("test_big_packet");
- query= (char*) my_malloc(big_packet+1024, MYF(MY_WME));
+ query= (char*) my_malloc(PSI_NOT_INSTRUMENTED, big_packet+1024, MYF(MY_WME));
DIE_UNLESS(query);
if (!(mysql_local= mysql_client_init(NULL)))
diff --git a/unittest/mysys/my_malloc-t.c b/unittest/mysys/my_malloc-t.c
index d20ef052380..0ee6b2b9191 100644
--- a/unittest/mysys/my_malloc-t.c
+++ b/unittest/mysys/my_malloc-t.c
@@ -24,13 +24,13 @@ int main(int argc __attribute__((unused)),char *argv[])
plan(4);
- p= my_malloc(0, MYF(0));
+ p= my_malloc(PSI_NOT_INSTRUMENTED, 0, MYF(0));
ok(p != NULL, "Zero-sized block allocation.");
- p= my_realloc(p, 32, MYF(0));
+ p= my_realloc(PSI_NOT_INSTRUMENTED, p, 32, MYF(0));
ok(p != NULL, "Reallocated zero-sized block.");
- p= my_realloc(p, 16, MYF(0));
+ p= my_realloc(PSI_NOT_INSTRUMENTED, p, 16, MYF(0));
ok(p != NULL, "Trimmed block.");
my_free(p);
diff --git a/vio/vio.c b/vio/vio.c
index 3f92c1e6853..cabed39d94f 100644
--- a/vio/vio.c
+++ b/vio/vio.c
@@ -24,6 +24,28 @@
#include "vio_priv.h"
#include "ssl_compat.h"
+PSI_memory_key key_memory_vio_ssl_fd;
+PSI_memory_key key_memory_vio;
+PSI_memory_key key_memory_vio_read_buffer;
+
+#ifdef HAVE_PSI_INTERFACE
+static PSI_memory_info all_vio_memory[]=
+{
+ {&key_memory_vio_ssl_fd, "ssl_fd", 0},
+ {&key_memory_vio, "vio", 0},
+ {&key_memory_vio_read_buffer, "read_buffer", 0},
+};
+
+void init_vio_psi_keys()
+{
+ const char* category= "vio";
+ int count;
+
+ count= array_elements(all_vio_memory);
+ mysql_memory_register(category, all_vio_memory, count);
+}
+#endif
+
#ifdef _WIN32
/**
@@ -80,7 +102,8 @@ static void vio_init(Vio *vio, enum enum_vio_type type,
vio->localhost= flags & VIO_LOCALHOST;
vio->read_timeout= vio->write_timeout= -1;
if ((flags & VIO_BUFFERED_READ) &&
- !(vio->read_buffer= (char*)my_malloc(VIO_READ_BUFFER_SIZE, MYF(MY_WME))))
+ !(vio->read_buffer= (char*)my_malloc(key_memory_vio_read_buffer,
+ VIO_READ_BUFFER_SIZE, MYF(MY_WME))))
flags&= ~VIO_BUFFERED_READ;
#ifdef _WIN32
if (type == VIO_TYPE_NAMEDPIPE)
@@ -217,7 +240,7 @@ Vio *mysql_socket_vio_new(MYSQL_SOCKET mysql_socket, enum enum_vio_type type, ui
my_socket sd= mysql_socket_getfd(mysql_socket);
DBUG_ENTER("mysql_socket_vio_new");
DBUG_PRINT("enter", ("sd: %d", (int)sd));
- if ((vio = (Vio*) my_malloc(sizeof(*vio),MYF(MY_WME))))
+ if ((vio = (Vio*) my_malloc(key_memory_vio, sizeof(*vio), MYF(MY_WME))))
{
vio_init(vio, type, sd, flags);
vio->desc= (vio->type == VIO_TYPE_SOCKET ? "socket" : "TCP/IP");
@@ -247,7 +270,7 @@ Vio *vio_new_win32pipe(HANDLE hPipe)
{
Vio *vio;
DBUG_ENTER("vio_new_handle");
- if ((vio = (Vio*) my_malloc(sizeof(Vio),MYF(MY_WME))))
+ if ((vio = (Vio*) my_malloc(PSI_INSTRUMENT_ME, sizeof(Vio),MYF(MY_WME))))
{
vio_init(vio, VIO_TYPE_NAMEDPIPE, 0, VIO_LOCALHOST);
vio->desc= "named pipe";
diff --git a/vio/vio_priv.h b/vio/vio_priv.h
index 9b68624a811..8dc38ab31e8 100644
--- a/vio/vio_priv.h
+++ b/vio/vio_priv.h
@@ -26,6 +26,10 @@
#include <m_string.h>
#include <violite.h>
+extern PSI_memory_key key_memory_vio;
+extern PSI_memory_key key_memory_vio_read_buffer;
+extern PSI_memory_key key_memory_vio_ssl_fd;
+
#ifdef _WIN32
size_t vio_read_pipe(Vio *vio, uchar * buf, size_t size);
size_t vio_write_pipe(Vio *vio, const uchar * buf, size_t size);
diff --git a/vio/viosocket.c b/vio/viosocket.c
index 9ef703dee8d..c4d55901a16 100644
--- a/vio/viosocket.c
+++ b/vio/viosocket.c
@@ -645,6 +645,26 @@ enum enum_vio_type vio_type(Vio* vio)
return vio->type;
}
+static const LEX_CSTRING vio_type_names[] =
+{
+ { STRING_WITH_LEN("Error") }, // cannot happen
+ { STRING_WITH_LEN("TCP/IP") },
+ { STRING_WITH_LEN("Socket") },
+ { STRING_WITH_LEN("Named Pipe") },
+ { STRING_WITH_LEN("SSL/TLS") },
+ { STRING_WITH_LEN("Shared Memory") }
+};
+
+const char *vio_type_name(enum enum_vio_type vio_type, size_t *len)
+{
+ int index= vio_type >= FIRST_VIO_TYPE && vio_type <= LAST_VIO_TYPE
+ ? vio_type : 0;
+
+ *len= vio_type_names[index].length;
+ return vio_type_names[index].str;
+}
+
+
my_socket vio_fd(Vio* vio)
{
return mysql_socket_getfd(vio->mysql_socket);
diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c
index edd40c2d60c..3783331e7df 100644
--- a/vio/viosslfactories.c
+++ b/vio/viosslfactories.c
@@ -246,7 +246,8 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
check_ssl_init();
if (!(ssl_fd= ((struct st_VioSSLFd*)
- my_malloc(sizeof(struct st_VioSSLFd),MYF(0)))))
+ my_malloc(key_memory_vio_ssl_fd,
+ sizeof(struct st_VioSSLFd), MYF(0)))))
goto err0;
if (!(ssl_fd->ssl_context= SSL_CTX_new(is_client_method ?
SSLv23_client_method() :